I sensori ad ultrasuoni o di prossimità, come l’HC-SR04, permettono di rilevare oggetti nelle immediate vicinanze (wikipedia). Questa è un’informazione da avere in robot a guida automatica per evitare, ad esempio, di sbattere contro ostacoli. Questo tipo di sensore HC-SR04, è a bassa potenza (adatti per dispositivi alimentati a batteria), economico, facili da interfacciare con la scheda Arduino e sono popolari tra gli hobbisti.
Caratteristiche del sensore HC-SR04
La parte principale del sensore ultrasuoni HC-SR04 è costituito da due trasduttori ad ultrasuoni . Uno che funziona da trasmettitore che converte il segnale elettrico in impulsi sonori a 40 KHz, l’altro da ricevitore. Se li riceve produce un impulso in uscita la cui ampiezza può essere utilizzata per determinare la distanza percorsa dall’impulso.
Il sensore è piccolo, facile da usare in qualsiasi progetto di robotica e offre un eccellente portata che va dai 2 cm ai 400 cm con una precisione di 3 mm. Poiché funziona a 5 Volt, può essere agganciato direttamente ad un Arduino o qualsiasi altro microcontrollore a 5V.
Di seguito le specifiche complete:
Tensione di esercizio | DC 5V |
Corrente di funzionamento | 15 mA |
Frequenza operativa | 40 KHz |
Portata massima | 4 m |
Distanza minima | 2 cm |
Precisione | 3 mm |
Angolo di misurazione | 15 gradi |
Segnale di ingresso trigger | Impulso TTL 10µS |
Dimensione | 45 x 20 x 15 mm |
Il sensore presenta 4 pin per il collegamento:
- VCC è l’alimentazione del sensore ad ultrasuoni HC-SR04 che colleghiamo al pin 5V di Arduino.
- Trigger è il pin che viene utilizzato per attivare gli impulsi
Eco produce un impulso quando viene ricevuto il segnale riflesso. La durata dell’impulso è proporzionale al tempo che impiegato per il rilevamento del segnale inviato.
GND collegato con la massa della scheda Arduino.
Come funziona il sensore ad ultrasuoni?
Tutto inizia, quando un impulso di almeno 10 µS (10 microsecondi) viene applicato al pin Trigger. In risposta a ciò, il sensore genera otto impulsi a 40 KHz. Questo pattern a 8 impulsi rende unica la “firma” del dispositivo, consentendo al ricevitore di differenziare il pattern trasmesso dal rumore ambientale.
Gli otto impulsi ad ultrasuoni viaggiano nell’aria allontanandosi dal trasmettitore. Nel frattempo il pin Echo va allo stato ALTO per formare lil segnale eco.
Nel caso in cui quegli impulsi non vengono riflessi, il segnale dell’eco scadrà dopo 38 mS (38 millisecondi) e tornerà basso. Pertanto, un impulso di 38 mS non indica alcun ostacolo all’interno della portata del sensore.
Se questi impulsi vengono riflessi, il pin Echo si abbassa non appena viene ricevuto il segnale. Questo produce un impulso la cui ampiezza varia tra i 150 µS e 25 mS, a seconda del tempo impiegato per la ricezione del segnale.
L’ampiezza dell’impulso ricevuto viene quindi utilizzata per calcolare la distanza dall’oggetto riflesso. Questo può essere ricavato usando una semplice equazione distanza-velocità-tempo.
Facciamo un esempio per renderlo più chiaro. Supponiamo di avere un oggetto davanti al sensore a una distanza sconosciuta e di aver ricevuto un impulso di larghezza 500 µS sul pin Echo. Ora calcoliamo quanto dista l’oggetto dal sensore. Useremo l’equazione seguente.
Distanza = velocità x tempo
Qui abbiamo il valore di Time cioè 500 µs e conosciamo la velocità del suono 340 m/s. Dobbiamo convertire la velocità del suono in cm/µs per calcolare la distanza in centimetri.
Distanza = 0,034 cm/µs x 500 µs
Ma non è tutto, infatti l’impulso indica il tempo impiegato per essere inviato e riflesso, quindi per ottenere la vera distanza dall’oggetto, bisogna dividere il risultato per 2
Distanza = (0,034 cm/µs x 500 µs) / 2
Distanza = 8,5 cm
Collegamento del sensore HC-SR04 ad Arduino Uno
Il collegamento del sensore ad ultrasuoni HC-SR04 alla scheda Arduino è abbastanza semplice. Colleghiamo il pin VCC al pin 5V di Arduino e il pin GND al pin Ground di Arduino. I pin Trigger e Echo li colleghiamo rispettivamente a D12 e D13.
//HC RS04 Sensore ultrasuoni
const int triggerPort = 12;
const int echoPort = 13;
void setup() {
pinMode(triggerPort, OUTPUT);
pinMode(echoPort, INPUT);
Serial.begin(9600);
Serial.print( "Sensore Ultrasuoni: ");
}
void loop() {
digitalWrite( triggerPort, LOW ); //porta bassa l'uscita del trigger
digitalWrite( triggerPort, HIGH ); //invia un impulso di 10microsec su trigger
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
long durata = pulseIn( echoPort, HIGH );
long distanza = 0.034 * durata / 2; //calcolo della distanza
//Stampo la distanza su monitor seriale
//dopo 38ms è fuori dalla portata del sensore
Serial.print("Distance in cm: ");
if ( durata > 38000 ) {
Serial.println("Fuori portata ");
}
else {
Serial.print(distanza);
}
//Aspetta 1 secondo per la prossima misura
delay(1000);
}
Effetto della temperatura sulla misurazione della distanza
Sebbene l’uso mostrato dell’HC-SR04 sia ragionevolmente sufficiente per la maggior parte dei progetti, come per il rilevamento di intrusi o degli allarmi di prossimità; a volte è necessario conoscere la distanza in maniera più accurata in un ambiente dove la temperatura può variare di molto. In questo caso, la velocità del suono nell’aria varia con la temperatura, la pressione e l’umidità dell’aria.
Poiché la distanza nei nostri calcoli dipende direttamente dalla velocità del suono e quest’ultima dipende dalla temperatura, potrebbe influenzare le nostre letture. Dunque se nel nostro sistema abbiamo un sensore di temperatura (°C) e l’umidità, possiamo considerare la seguente formula:
Velocità del suono m/s = 331,4 + (0,606 * Temp) + (0,0124 * Umidità)