Il sensore di distanza ad ultrasuoni è costituito da due cilindri: il primo invia onde sonore che, rimbalzando su un oggetto, ritornano indietro e vengono intercettate dal cilindro di ricezione.
Il sensore HC-SR04 è in grado di lavorare su distanze che vanno da pochi centimetri a qualche metro (da 2cm a 4m);
Misurando il tempo che intercorre tra l'invio di un impulso sonoro e la sua ricezione a seguito del suo rimbalzo su un oggetto, è possibile risalire alla distanza dell'oggetto in questione.
Nell'ambiente simulato Tinkercard, il sensore ad ultrasuoni è leggermente diverso e dispone di soli 3 pin. Il circuito in ambiente simulato è quindi leggermente diverso.
Calcolo della distanza a partire dal tempo impiegato dall'impulso per rimbalzare ed essere intercettato.
La velocità del suono nell'aria dipende dalla temperatura.
Prendendo a riferimento il valore approssimativo di 300 m/s si ha:
velocità in m/s: 300/1
velocità in cm/s: 30000/1
velocità in cm/us: 30000/1000000 (con us si sono indicati i microsecondi)
Distanza in cm: semi-durata in us*velocità in cm/us
Distanza in cm: (durata in us/2) * 30000/1000000
Distanza in cm: (durata in us/2) * 3/100
float durata, distanza;
long TIMER;
int lampeggiante;
int timer(long *t, long millisecondi)
{
long x;
x=millis();
if (!*t){
*t=x;
return 0;
}
else if (x-*t > millisecondi) {
*t=millis();
return 1;
}
else
return 0;
}
void setup()
{
pinMode(10, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, INPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(7, HIGH);
delay(2);
digitalWrite(7, LOW);
durata = pulseIn(6, HIGH);
//suono nell'aria a 20 °C: 343 m/s
// u = microsecondi (10-6)
//distanza = (durata in us)/2 * vel (cm/us)
// vel m/s 300/1 cm/s 30000/1 cm/us 30000/1000000
//distanza in cm = (durata in us / 2) * 30000/1000000
distanza = (durata /2) * 3/100;
Serial.print("Durata in microsecondi: ");
Serial.print(durata);
Serial.print(" ");
Serial.print("Distanza in cm: ");
Serial.println(distanza);
if (distanza>0 && distanza<20){
if (timer(&TIMER, 200)){
if (lampeggiante==1){
digitalWrite(10, LOW);
lampeggiante=0;
}
else{
digitalWrite(10, HIGH);
lampeggiante=1;
}
}
}
else if (distanza>=20 && distanza<50){
if (timer(&TIMER, 400)){
if (lampeggiante==1){
digitalWrite(10, LOW);
lampeggiante=0;
}
else{
digitalWrite(10, HIGH);
lampeggiante=1;
}
}
}
else if (distanza>=50 && distanza<100){
if (timer(&TIMER, 800)){
if (lampeggiante==1){
digitalWrite(10, LOW);
lampeggiante=0;
}
else{
digitalWrite(10, HIGH);
lampeggiante=1;
}
}
}
else {
digitalWrite(10, LOW);
lampeggiante=0;
}
}
Sito: 7ecnologie
Sezione: 17. Robotica e domotica
Capitolo: 01. Elementi di Elettronica
Paragrafo: 03. Progetti
Sottoparagrafo: 09. Sensore di distanza
Indice dei capitoli: 00. Risorse - 01. Elementi di Elettronica - 02. Arduino - 98. Esercizi
Indice dei paragrafi: 01. Ambiente di sviluppo - 02. Elementi di programmazione - 03. Progetti - 04. Tutorial
Indice dei sottoparagrafi: 01. Led lampeggiante - 02. Pulsante di accensione led - 03. Pilotare un transistor - 04. Pilotare un relè - 05. Uso del fotoaccoppiatore - 06. Pilotare un Display a led - 07. Interruttore crepuscolare - 08. Gli infrarossi - 09. Sensore di distanza