Eccoci di nuovo a parlare di sensori, oggi è la volta dell’HC-SR04, un sensore ad ultrasuoni che serve per misurare la distanza degli oggetti molto utilizzato per costruire i vostri prototipi con Arduino o Nodemcu. Questo sensore alimentabile a 5V/3.3V puo’ essere utilizzato nelle situazioni più disparate come musurare il livello dell’acqua in una tanica, l’apertura della basculante del box, la presenza di un automezzo nella propria rimessa.
Come funziona il sensore HC-SR04
Il funziomamento di questo sensore è molto semplice: il sensore ha due elementi circolari posti sulla basetta: il primo elemento detto trigger emette un ultrasuono che rimalzando su una superfice rimbalza e viene letto dal secondo elmento detto echo. Misurando il tempo di andata e ritorno del segnale e dividendolo per due si riesce ad ottenere la distanza dell’oggetto con un margine di precisione abbastanza elevato, nell’ordine di un centimetro. Il sistema funziona anche in presenza di oggetti posti fino ad angoli di 30 gradi cosa che lo rende ancora più interessante.
Il divario di distanze che possono essere monitorate da questo sensore va da due centrimetri a quattro metri.
Per quanto riguarda l’alimentazione l’HC-SR04 va alimentato a 5V, la tensione classica di Arudino. Facendo dei test ho verificato il funzionamento anche con schede a 3,3V come il caso della NodeMcu che solitamente utilizzo per i miei prototipi. Nel caso della Node Mcu è bene inserire nel circuito un resistore da 1K onde evitare di rovinare il circuito.

Esempio pratico di utilizzo: Monitorare il livello dell’acqua tramite il cellulare con Blynk
Fatte tutte le introduzioni del caso vediamo ora un esempio pratico di utilizzo con relativo codice.
Nel caso qui riportato il mio obiettivo era misurare l’altezza dell’acqua presente in una tanica e visualizzare tale livello su un cellulare in modo da essere sempre informato sulla quantità d’acqua presente nel contenitore.
Per fare questo ho utilizzato Blynk che mi permette di creare interfacce utenti molto belle, di semplice utilizzo nonchè evitarmi l’incombenza di mostrare le informazioni sul cellulare.
Lato Blynk quindi ho creato un nuovo progetto dove non ho fatto altro che agganciare ad un virtual pin (V5) la lettura del livello dell’acqua che poi ho mostrato attraverso il widget Level H selezionabile dal widget box di Blynk (costo 200)
Ecco i dettagli della configurazione sull’App del telefono:

Completata la parte di applicazione vediamo ora il codice da implementare all’interno della scheda nodemcu attraverso l’Arduino IDE. Chiaramente i parametri X,Y,Z vanno sostituiti con i vostri:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = “XXXXX”;
char ssid[] = “YYYYYY”;
char pass[] = “ZZZZZ”;
int rangeMin = 0;
int rangeMax = 25;
// Define HC-SR04 pin numbers
const int echoPin = D6;
const int trigPin = D7;
// Define variables
long duration;
int distance;
int saveDis = 0;
SimpleTimer timer;
//Trigger a HIGH pulse for 2 or more microseconds
//Give a short LOW pulse before sending a HIGH one
void sensorFire() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
saveDis = distance;
distance = duration * 0.034 / 2;
}
void sensorRead() {
sensorFire();
Blynk.virtualWrite(V5, distance);
}
void setup() {
Blynk.begin(auth, ssid, pass);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
timer.setInterval(1000L, sensorRead);
}
void loop() {
Blynk.run();
timer.run();
}
Ecco infine il risultato finale a livello di interfaccia utente:
