Arduino – Senzorul ultrasonic HC-SR04

Senzorul HC-R04 poate determina ( sau măsura ) distanța față de un obiect situat între 2cm – 500cm cu o acuratețe de 0,3cm. Acesta trimite unde ultrasonice cu frecvența în jur de 40kHz, apoi așteaptă și ascultă ecoul primit, calculând timpul luat până când unda ecou a ajuns înapoi. Se poate trimite semnale de 20 de ori pe secundă.
Senzorul are 4 pini pe care îi vom utiliza :
- Vcc – alimentare
- Trig – inițierea semnalului
- Echo – recepție răspuns ecou
- GND – masă
Specificațiile tehnice ale senzorului :
- Tensiune alimentare – 5V dc
- Curent maxim – 15mA
- Frecvență – 40kHz
- Semnal ieșire – 0 – 5V ( maxim când obstacolul este aproape )
- Unghi de detecție – 15 grde
- Distanța măsurată – 2cm – 500cm
- Durată impuls Trigger – 10 us
Mod de lucru :
- Aplicăm o stare de 1 logic pe pinul Trigger timp de 10us iar senzorul va trimite 8 cicluri de unde ultrasonice la o frecvență de 40kHz.
- Senzorul așteaptă răspuns, ecoul.
- Distanța se va calcula folosindu-ne de durata între cele două evenimente : distanța = \( \frac{t}{58} \) cm sau distanta = \( \frac{t}{148} \) inch, sau distanta = (cât timp Echo este 1 logic x viteza sunetului ) / 2 .
În figura următoare vă prezint diagrama de funcționare :

Pentru distanța minimă de 2cm durata va fi circa 116us, iar pentru distanța maximă de ≈500cm durata va fi de 23,2ms iar dacă distanța este prea mare durata va fi 38ms.
În continuare vă prezint schema și partea software pentru a măsura o distanța de la senzor până la un obiect sau obstacol.
Scema :

Partea software :
#define trigPin 10
#define echoPin 12
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
// delayMicroseconds(1000);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
if (distance >= 200 || distance <= 0){
Serial.println(„Out of range”);
}
else Serial.println(distance);
delay(1000);
}
După cum observați distanța măsurată de afișează la terminalul serial. Pentru a vedea sau a accesa terminalul faceți următorii pași : meniul ”Tools” și apoi click pe ”Serial Monitor”, iar în acest moment vă va apărea pe ecran distanța măsurată în cm.

În continuare vă prezint schema și partea software pentru a măsura o distanța de la senzor până la un obiect sau obstacol iar afișarea se va face pe un ecran 7-segmente TM1637.
Schema:

Partea software:
#include <TM1637Display.h>
#define trigPin 10
#define echoPin 12
const int CLK=3; //Declaram pinul la care este conectat pinul CLK al afisajului
const int DIO=2;
TM1637Display afisaj(CLK, DIO);
void setup()
{
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
afisaj.setBrightness(0x0a); //setam luminozitatea la maxim
}
void loop()
{
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
if (distance >= 200 || distance <= 0){
Serial.println(„Out of range”);
}
else {
Serial.println(distance);
afisaj.showNumberDec(distance);
}
delay(1500);
}


