Salta al contenuto

Sensore ultrasuoni e Arduino

Nella moderna ricerca tecnologica in campo militare sono in sviluppo numerosi dispositivi che sfruttano gli ultrasuoni (Ultrasonic and Sonic Weapons o USW) per ferire avversari o danneggiare apparecchiature nemiche. Nel campo civile è possibile acquistare numerosi sensori ultrasuoni a costi relativamente bassi (anche a qualche euro) da poter utilizzare in varie applicazioni. Di seguito sarà riportata una breve trattazione sui fondamenti dell’acustica ambientale e un’applicazione pratica, tramite Arduino, di un sensore ultrasuoni.

Sensore ultrasuoni HC SR04. È il più economico sensore disponibile in rete (costa pochi euro) e programmabile tramite Arduino.
Sensore ultrasuoni HC SR04. È il più economico sensore disponibile in rete (costa pochi euro) e programmabile tramite Arduino.

Fondamenti di Acustica Ambientale

Il concetto di suono è qualcosa che erroneamente viene immaginato come trasferimento di un insieme di particelle che si sposta nell’ambiente e che colpisce il nostro udito.
In realtà il suono è causato dall’oscillazione infinitesima degli atomi presenti nel fluido o nel materiale che ci circonda ed è quindi la sensazione della vibrazione. L’oscillazione quindi provoca la propagazione di onde di pressione nell’ambiente circostante. Insomma, in parole semplici, quando parliamo stiamo modificando la pressione del fluido che ci circonda (l’aria, ma potrebbe essere anche l’acqua o un muro di cemento).
Possiamo quindi definire il suono come una variazione di pressione da un punto P(0) di riferimento:

pressione-sonora-tempo
Sulla x (asse delle ascisse) abbiamo il tempo, sulla y (asse delle ordinate) abbiamo il livello di pressione. Il grafico mostra un suono variabile nel tempo. Con RMS si intende Root-Mean-Square, ossia la media dei valori del suono in un preciso intervallo di tempo.

La seguente trattazione contiene concetti fisici e nozioni matematiche. Si è cercato di evitare trattazioni lunghe e complesse, riportando solo il necessario alla comprensione.

Una sorgente acustica (come uno speaker o la nostra stessa voce) è caratterizzata da un livello di potenza sonora definito come:

livello-di-potenza-acustica-militarypediaIn cui Lw è il livello di potenza sonora, P e P(0) sono rispettivamente pressione del fluido e pressione di riferimento, ρ e ρ(0) la densità del fluido e la densità di riferimento, c e c(0) la velocità di propagazione nel fluido e la velocità di propagazione di riferimento mentre S è la superficie di propagazione (abbiamo considerato il caso di un fluido ma l’equazione rimane la stessa anche per i materiali).
Senza scendere in una trattazione fisica, possiamo notare come la propagazione dipenda da molti fattori come pressione, densità, superficie e velocità di propagazione.
Nella pratica è più utile considerare il livello di pressione (presente nell’equazione appena riportata), rigirando la relazione:
livello-di-pressione-acustica-militarypediaIl primo membro dell’equazione è proprio il livello di pressione che, a data frequenza ƒ, genera un suono; il livello di pressione sonora e di potenza sonora si misurano in dB o decibel (grandezza adimensionale). Per concludere la trattazione ed arrivare al succo della questione, dobbiamo introdurre l’ultima grandezza, ossia la frequenza.
La frequenza ƒ è la grandezza fisica che indica “quante forme d’onda si ripetono in un secondo” e si misura in Hz (Hertz) o in cicli/secondo. Non è necessario scendere in dettaglio per ciascuno di queste grandezze, l’importante è sapere a cosa si riferiscono successivamente.

Curve isofoniche
Nel grafico sono riportate le curve isofoniche che rappresentano uno stesso suono ma generato a pressione e frequenza diversa. Nella realtà l’udito percepirà per ogni punto della curva (in media) un suono diverso in modo soggettivo. Il livello di pressione dell’udibile va da 0 a 160 dB (soglia del dolore).

L’orecchio umano percepisce tutte le onde sonore che vanno da (circa) 20 a 20.000 Hz (o 20 MHz) ma ciò dipende da individuo ad individuo: per esempio gli uomini tendono a percepire suoni che vanno da 16 a 16.000 Hz mentre le donne arrivano in alcuni casi anche a 26.000 Hz. L’intervallo che va da 20 a 20.000 Hz è definito banda udibile mentre l’intervallo a frequenze minori di 20 è definito Infrasuoni, quello superiore a 20.000 MHz Ultrasuoni. L’essere umano, in generale, non è in grado di percepire infrasuoni o ultrasuoni ma altri esseri viventi sono in grado di farlo: i cani percepiscono gli infrasuoni mentre i pipistrelli trasmettono con gli ultrasuoni.
Curiosità: ma nello spazio si può percepire un suono? No! Perché? Non essendo presente un fluido o un materiale in cui avviene la propagazione dell’onda (quindi il cambiamento della pressione da punto a punto nello spazio) non è possibile in alcun modo trasmettere un’onda sonora dell’udibile. Quindi nei film come Star Trek o Star Wars i rumori prodotti dalle navicelle spaziali sono del tutto irrealistici! Non bisogna però pensare che non ci sia per nulla la propagazione del suono: il “vuoto” spaziale non è poi così vuoto in quanto sono comunque presenti atomi ma non a densità così elevata da costituire un fluido come l’aria o l’acqua. Le onde sonore si possono si propagare ma a frequenze basse, impercettibili per l’orecchio umano.

diagramma-ultrasuoni-infrasuoni-udibile
Grafico di wikipedia che riporta le differenti bande di frequenza

Applicazione del Sensore Ultrasuoni HC SR04 tramite Arduino

Cosa si può fare con un sensore ultrasuoni? Per esempio un bel sistema di allarme!
Il sensore HC SR04 è un dispositivo elettronico costituto da varie componenti; le due componenti principali sono l’emettitore e il ricevitore: il sensore genera un impulso sonoro propagato dall’emettitore mentre il ricevitore “attende” l’onda riflessa. Le onde sonore hanno la capacità di “rimbalzare” (come avviene con le onde elettromagnetiche nei radar) cambiando così direzione e verso; un esempio comune è quello riportato di seguito. Se le onde sonore non avessero questa capacità di rimbalzare, avremmo difficoltà nel percepire la nostra stessa voce.

Riflessione di un'onda sonora.
Riflessione di un’onda sonora.

Il nostro sensore funziona nel fluido atmosferico, pertanto conoscendo la velocità di propagazione del suono nell’aria possiamo risalire facilmente alla distanza di propagazione di un’onda senza dover utilizzare le equazioni sopra riportate (non dobbiamo calcolare il livello di pressione o la potenza sonora, ma la distanza che intercorre tra il rimbalzo dell’onda su un ostacolo e il ricevitore)

    \[v = 343,3 m/s\]

A questo punto non ci rimane altro che ricordare la semplice equazione della velocità, ossia:

    \[v= \frac{dx}{dvt}\]

o più semplicemente:

    \[v= \frac{\Delta x}{\Delta t}\]

Noi abbiamo già la velocità (quella della propagazione di un’onda sonora), il tempo lo possiamo calcolare facendolo scorrere dall’istante in cui aziono il dispositivo, pertanto posso ottenere facilmente lo spazio; quindi l’equazione definitiva sarà:

    \[\Delta x= v \Delta t\]

Ora che concettualmente ho ottenuto l’equazione da inserire nel codice per il funzionamento con Arduino, devo fare un’ultima considerazione: è vero che lo spazio è dato dalla relazione qui sopra riportata ma il tempo va diviso in 2 in quanto nella variabile “tempo” è presente sia il tempo trascorso della propagazione tra emettitore-oggetto e quello della propagazione dell’onda di rimbalzo tra oggetto-ricevitore. Quindi, in pratica, la relazione di sopra va divisa per 2 (io non voglio calcolare la distanza tra sensore-oggetto per due volte ma solo una volta):

    \[\Delta x= 0.5 v \Delta t\]

Per non appesantire ulteriormente la trattazione, si riporta di seguito il codice utilizzato per il piccolo progetto che ho creato.

//Programma di calcolo distanza (in cm) tramite Sensore Ultrasuoni HC SR04
int led = 2; //Configuro il led sul Pin 2
int buzzer = 4; //Configuro il Buzzer sul Pin 4
int triggerPort = 8; //Configuro il trasmettitore sul Pin 8
int echoPort = 7; //Configuro il ricevitore sul Pin 7

//Inizializzo il Sensore
void setup()
{

pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
pinMode(buzzer,OUTPUT);
pinMode(led, OUTPUT);
Serial.begin( 9600 );
Serial.println( "Avvio Sensore Ultrasuoni HC SR04: ");

}

//Avvio il loop che mi permetterà di calcolare la distanza tra un ostacolo e il ricevitore/trasmettitore
void loop()
{
digitalWrite(triggerPort, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPort, LOW);

long tempo = pulseIn(echoPort, HIGH);
long distanza = 0.034 * tempo / 2; // Ho dovuto fare una conversione in centimetri e in microsecondi rispettivamente per distanza e tempo

Serial.print("durata: ");
Serial.print(tempo);
Serial.print(" [microsecondi] , ");
Serial.print("distanza: ");

//dopo 38ms è fuori dalla portata del sensore
if(distanza < 100)
{
tone(buzzer,1000,1000);
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
Serial.print(distanza);
Serial.print(" [cm] ");
Serial.println("  ----------> INTRUSO!!!");
}
else
{
Serial.print(distanza);
Serial.println(" [cm] ");
}

// Attendo 250 ms prima della prossima lettura
delay(250);
}

 

Schermata di Arduino IDE e relativa console. Ogni volta che sono passato davanti al sensore ha rilevato "l'intrusione" e ha stampato a schermo l'evento.
Schermata di Arduino IDE e relativa console. Ogni volta che sono passato davanti al sensore ha rilevato “l’intrusione” e ha stampato a schermo l’evento.

Fonti e Immagini:
Fondamenti di Acustica ripresi dal corso di Sicurezza del Lavoro e Difesa Ambientale – Dipartimento di Ingegneria Meccanica Roma Tre