Il sensore HC-SR04 è un sensore in grado di rilevare la distanza di un oggetto tra circa 2 cm a 4 m. La precisione è di circa 1 cm.

Per fare una misura di distanza è necessario inviare nel piedino denominato "Trig" un impulso della durata di 10 microsecondi.

Il modulo a questo punto genera automaticamente un treno di 8 impulsi a 40 KHz. Contemporaneamente il piedino echo viene portato a 5 V e tornerà  a 0 V solo quando il treno di impulsi, incontrando un ostacolo, verrà rimbalzato indietro.

La distanza dell'ostacolo è quindi legata alla larghezza dell'impulso sul piedino echo.

La velocità del suono è di 331,5 m/s a 0 °C e di 343,4 m/s a 20 °C ed in generale varia secondo la relazione

v = 331.4 + 0.62 T 

con T temperatura misurata in °C.

Assumendo di lavorare alla temperatura di 20°C la velocità del suono sarà di circa

v = 343 m/s = 343 * 102 cm/s = 343 * 10-4 cm/microsecondo 

Poiché

velocità = spazio / tempo

lo spazio percorso sarà

spazio = velocità * tempo

da cui

spazio = 0.0343 * t

se il tempo è espresso in microsecondi.

Per calcolare lo spazio percorso, bisogna tener conto che il suono percorre due volte la distanza da misurare (giunge sull’oggetto e ritorna indietro al sensore) quindi il valore di tempo misurato dev’essere diviso per 2.

La distanza dell'oggetto in centimetri è quindi

distanza = (0.0343 * t)/2 = tempo / 58.31

OSSERVAZIONE: il ciclo di misurazione deve essere di almeno 60 ms per evitare che il nuovo segnale di trigger generi un falso eco.

Per testare il modulo HC-SR04 è possibile utilizzare varie librerie distriduite con l'IDE di Arduino. Per installarle è sufficiente andare in Sketch > #Include Libreria > Gestione librerie... successivamente nel campo di ricerca digitare HC-04 e nell'elenco selezionare una delle possibili scelte. Successivamente andare su File > esempi e cercare gli esempi relativi alla libreria importata.

 È possibile tuttavia fare una lettura senza installare librerie, usando la funzione Arduino pulseIn() che legge un impulso (HIGH o LOW) su un pin. Ad esempio, se il valore è HIGH, pulseIn() attende che il pin passi da LOW a HIGH, avvia il cronometraggio, quindi attende che il pin diventi LOW e interrompe il cronometraggio. Restituisce la lunghezza dell'impulso in microsecondi oppure rinuncia e restituisce 0 (zero) se non è stato ricevuto alcun impulso completo entro il timeout. La temporizzazione funziona correttamente su impulsi da 10 microsecondi a 3 minuti di durata.

Qui in seguito è riportato un esempio di utilizzo:

lo sketch da caricare è:

#define trigger 8 
#define echo 7

int tempoVolo;
float distanza;

void setup(){
Serial.begin(9600);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
}

void loop(){
digitalWrite(trigger,LOW);
delayMicroseconds(5);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW); // Creazione del segnale di trigger
tempoVolo = pulseIn(echo,HIGH); // Lettura del tempo di volo
distanza = (float)tempoVolo/58.31; // Calcolo della distanza in centimetri
Serial.print ("Distanza = ");
Serial.print (distanza);
Serial.println (" [cm]");
delay (200);
}
Ultime modifiche: mercoledì, 10 gennaio 2024, 19:01