Mesura de distàncies en Física amb una placa amb esp32

En l’anterior entrada en la que explicava com fer mesures de distància amb un sensor ultrasònic i Arduino UNO, vaig fer referència a la utilització d’una altra placa diferent a Arduino on connectar sensors. Aquesta placa porta un microprocesador esp32 (i no ATmega), que és més potent i té incorporades les connexions per via Wifi i Bluetooth, el que permet obtenir les dades dels sensors connectats a la placa en un dispositiu mòbil a distància, per exemple en un telèfon intel·ligent.

Hi ha una versió de Arduino que incorpora Wifi, però és molt més cara que les plaques que incorporen el xip esp32. També és possible connectar un mòdul Bluetooth a un Arduino UNO, però complica les connexions i resulta que el preu d’una placa amb esp32 com la Wemos D1 R32 surt igual que el d’un Arduino UNO clònic (a partir de 4 € en Aliexpress, Ebay, etc.) i funciona en el mateix entorn IDE de l’Arduino. Així que en aquesta entrada parlaré sobre aquesta placa Wemos i com mesurar distàncies amb el sensor d’ultrasons HC-SR04 i recollir els valors en un telèfon mòbil.

La placa Wemos D1 R32

La placa Wemos D1 R32 incorpora un processador esp32 amb WiFi i Bluetooth i és compatible amb els Sketchs i els Shields d’Arduino. És a dir, té tota la potencia i característiques del processador esp32, però manté les mides i la compatibilitat amb Arduino, de manera que es poden utilitzar els sensors i els projectes (sketchs, codi) que es fan servir per Arduino, i també les plaques complementàries (Shields) que encaixen en la placa Arduino UNO ja que encaixen en la Wemos D1 R32.

Tingueu en compte que si teniu Shields/plaques complementàries que utilitzen l’entrada analògica és possible que en algun cas no funcionin correctament, ja que les entrades de l’esp32 només suporten fins a 3,2 V, mentre que la placa Arduino UNO suporta en les 6 entrades analògiques fins a 5V.

Igualment és possible que s’hagi de modificar alguna línea de codi d’algun projecte per a tenir en compte que el microprocessador esp32 funciona a 3,3 V.

Aquesta placa té, però, una característica molt interessant i és que disposa de dos pins que subministren 5 V (igual que l’Arduino UNO) quan la majoria de les plaques que munten un esp32 només tenen la possibilitat de connexió a 3,3 V. En aquest cas que ens ocupa aquesta característica és fonamental, ja que el sensor infrasònic HC-SR04 necessita per al seu funcionament estar connectat a 5 V.

 

Malgrat que l’IDE d’Arduino és compatible amb l’esp32, se li ha de dir quina placa és la que es connecta i carregar els controladors necessaris, que no hi són per defecte en el programa. Per incorporar la placa Wemos D1 R32 a l’IDE es pot descarregar l’arxiu de suport per Arduino (core) de github clicant en Clone o download i després instalr-lo, o bé, com explica Juan Antonio Villalpando, anar a l’IDE de Arduino i en Archivo/Preferencias, a la pestanya d’Ajustes s’enganxa la direcció https://dl.espressif.com/dl/package_esp32_index.json en el Gestor de URLs Adicionales de Tarjetas.

Després a Herramientas/Placa/Gestor de tarjetas apareixerà esp32 by Espressif Systems. Es pitja en More info y després en el botó Instalar. Trigarà una mica mentre indica Descargardo definiciones de tarjetas.

Quan s’hagi descarregat se busca la placa en Herramientas/Placa, es selecciona DOIT ESP32 DEVKIT V1 i ja està preparat l’IDE per a funcionar amb la tarja Wemos D1 R32. També funciona la placa si es selecciona el mòdul ESP 32 Dev.

El sensor de distància per ultrasons HC-SR04

Encara que hi ha altres sensors de distància més precisos, com el sensor VL53L0X per llum làser infraroja, el sensor ultrasònic HC-SR04 és prou bo i senzill de fer anar, així que torno a utilizar-lo per a mesurar distàncies amb aquesta nova placa.

Com explicava en Mesura de distàncies en Física amb Arduino, les principals característiques de funcionament del sensor son:

    • Tensió d’alimentació: 5 Vcc
    • Freqüència de treball: 40 KHz
    • Distància màxima: 4 m
    • Distancia mínima: 2 cm
    • Angle de treball òptim: <15º
    • Duració mínima del pols de disparo (nivell TTL): 10 μS.
    • Duració del pols eco de sortida (nivell TTL): 100-25000 μS.
    • Temps mínim de espera entre una mesura i l’inici d’una altra 20 mS.
    • Pins de connexió: VCC (5 Vcc), Trig (Tret de l’ultrasò), Echo (Recepció de l’ultrasò) i GND (terra).

El sensor mesura el temps en microsegons entre l’enviament i la recepció d’un pols sonor (temps entre Trig i Echo). Per tant, podem obtenir la distància a partir del temps entre l’emissió i recepció del pols mitjançant la següent equació:

Que es calcula a partir de que la velocitat del so en condicions de temperatura 20 ºC, 50% d’humitat, a pressió atmosfèrica normal és 343 m/s. Si es transformen les unitats de la velocitat del so, resulta:

És a dir, el so triga 29,15 microsegons a recórrer un centímetre. Si es divideix el temps també per dos és perquè el temps mesurat és el que triga el pols a anar i tornar, de manera que la distància recorreguda pel pols és el doble de la que es vol trobar. A l’hora d’introduir aquesta equació en l’sketsh (projecte) d’Arduino s’ha d’indicar el valor 58.3 amb separació decimal punt, i no coma.

La connexió dels elements

El sensor d’ultrasons té quatre pins de connexió. Dos per subministrar-li corrent, el marcat amb VCC que s’ha de connectar a 5 V (a 3,3 no funciona) i el GNG que es connecta a terra, i altres dos per enviar l’ordre per al tret (Trig) i per a recollir la senyal de l’eco (Echo), que els he connectat a les entrades/sortides digitals 26 i 25, respectivament (que correspondrien als pins digitals 3 i 2 de la placa Arduino).

El projecte (sketch)

Com volem aprofitar que el microprocesador esp32 té connexió bluetooth i visualitzar i recollir les dades de distància tant a l’ordinador gràcies al cable USB, com en un dispositiu mòbil per bluetooth, s’ha d’incorporar al codi del projecte una llibreria que gestioni el port sèrie bluetooth, com és BluetoothSerial.h, que la podeu descarregar d’aquí (BluetoothSerial.zip) i instal·lar-la a l’IDE d’Arduino en Programa/Incluir libreria/Añadir biblioteca .ZIP.

El projecte el podeu descarregar (Medir_distancias_BT_WemosD1R32.ino) o copiar i pegar el codi de sota en l’IDE d’Arduino.

Codi del projecte

//Medidas de distancia por ecos de ultrasonido con Wemos D1 R32
//Se ha de seleccionar la placa DOIT ESP32 DEVKIT V1
//Obtención de los valores por el puerto serie del ordenador y por BT (BlueTooth)
//Los datos se pueden visualizar en el monitor serie del IDE de Arduino 
//y con el programa para ordenador RealTerm, https://sourceforge.net/projects/realterm/
//Los datos también se pueden visualizar en el teléfono móvil o la tableta 
//gracias a la app Serial Bluetooth Terminal para Android
//https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=ca
// o a la app HM10 Bluetooth Serial Lite para iOS
//https://apps.apple.com/us/app/hm10-bluetooth-serial-lite/id1030454675

//Sensor ultrasónico (HCSR04)
//Conexiones: GND a Gnd, Vcc a +5V, Echo a pin 25, Trig a pin 26


#include "BluetoothSerial.h" //Se carga la libreria del Bluetooth
BluetoothSerial SerialBT;

const int EchoPin = 25;
const int TriggerPin = 26;
float cm; //Se definen los cm como número con decimales
float tiempo; // Se define el tiempo como numero con decimales
float tiempoSegundos; // Se define el tiempo en segundos como número con decimales
 
void setup() 
{
Serial.begin(9600);
SerialBT.begin("Wemos1"); //Se inicia el Bluetooth con el nombre Wemos1
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
  tiempo = millis(); //mide el tiempo en milisegundos desde que se pone en marcha la placa
}
 
void loop() 
{
digitalWrite(TriggerPin, LOW);  //para generar un pulso limpio ponemos a LOW 2us     
delayMicroseconds(2);
digitalWrite(TriggerPin, HIGH); //Genera un pulso ultrasónico...
delayMicroseconds(10); //...que dura 10 micro segundos
digitalWrite(TriggerPin, LOW);

cm = pulseIn(EchoPin, HIGH) / 58.3; //Se mide el tiempo en microsegundos que tarda el eco y se transforma en distancia en cm

tiempo = millis(); //Actualiza el tiempo actual
tiempoSegundos = tiempo/1000; //cambia los milisegundos a segundos

//Ver tiempo y distancia por el monitor serie
Serial.print(tiempoSegundos,3); //Escribe el tiempo en segundos con tres decimales
Serial.print("; ");
//Serial.print("s"); //Añade s, de segundos, al valor numérico. Mejor no ponerlo si se quieren tratar después los datos
Serial.print(cm,2); //Escribe la distancia en cm con dos decimales
Serial.println();
//Serial.print("cm"); //Añade cm al valor numérico. Mejor no ponerlo si se quieren tratar después los datos

//ver tiempo y distancia por Bluetooth en el móvil
SerialBT.print(tiempoSegundos,3); //Escribe el tiempo en segundos con tres decimales
SerialBT.print("; ");
SerialBT.print(cm,2); //Escribe la distancia en cm con dos decimales
SerialBT.println();

delay(100); //Tiempo de espera entre medidas, en milisegundos
}

La mesura de distàncies

Una vegada carregat el projecte en la placa Wemos ja estem en disposició de realitzar mesures de distància i temps. Podem recollir els valors a l’ordinador mitjançant un monitor sèrie com Realterm si la placa continua connectada, o en el telèfon mòbil amb una aplicació de monotor sèrie com és Serial Bluetooth Terminal per Android o HM10 Bluetooth Serial Lite per iOS, encara que la placa no estigui connectada a l’ordinador, si més no amb un carregador de mòbil (PowerBank) i un cable micro USB, com es veu a la fotografia de sota.

Com resulta que el temps comença a comptar en el moment en el que s’encén la placa, si es vol reiniciar la mesura de temps no hi ha més que prémer el botó de reset que es troba al costat de l’endoll USB de la placa.

Per a recollir les dades en el telèfon s’ha d’engegar el bluetooth i buscar dispositius com quan es vol connectar el telèfon a un altaveu inalàmbric, buscar dispositius i, quan aparegui Wemos1 (si aquest és el nom que li hem donat en el codi del projecte), vincular-lo.

Una vegada vinculada la placa al telèfon, s’obre l’app Serial Bluetooth Terminal i es busca el dispositiu en l’apartat Devices en les opcions (tres ratlletes a dalt, a l’esquerra de la pantalla). L’app es connectarà al dispositiu i començarà a rebre dades.

Quan es tinguin suficients valors no n’hi ha més que desconnectar el dispositiu pitjant en la icona dels dos endolls connectats i s’aturarà la recepció de dades. Les dades es poden guardar en la carpeta que es decideixi en Configuració i/o enviar a altres dispositius pel seu tractament.


 

Hi ha un comentari

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out /  Canvia )

Google photo

Esteu comentant fent servir el compte Google. Log Out /  Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out /  Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out /  Canvia )

S'està connectant a %s

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.