top of page
Writer's picturechiperaris

Folosirea senzorului ultrasonic de distanta HC-SR04 cu Arduino

Ce este senzorul HC-SR04 si la ce se foloseste?


HC-SR04 este un senzor ultrasonic ieftin (doar 5 lei pe Optimus Digital),folosit in general pentru masurarea distantei cu o precizie incredibila pentru pretul sau mic (doar cativa cm la distante de cativa metri):

Cum functioneaza senzorul HC-SR04?


HC-SR04 functioneaza asemanator unui sonar;senzorul emite un puls de ultrasunete (sunete cu o frecventa prea mare pentru a fi auzite de urechea umana).Atunci cand pulsul intalneste un obstacol,el este reflectat inapoi la senzor ca un ecou (echo). Cu cat distanta intre obstacol si senzor este mai mare,cu atat ultrasunetele se vor intoarce mai greu.

Acest proces este controlat de 2 pini:TRIG si ECHO.Atunci cand este trimis semnal HIGH timp de 10 ms prin pinul TRIG,senzorul trimite 8 pulsuri de ultrasunete (frecventa de 40 kHZ) folosind cele 2 "boxe" de pe suprafata. Pulsurile (trigger) calatoresc prin aer cu viteza sunetului ( aproximativ 343 m/s) si sunt reflectate de obiecte,sosind inapoi la senzor intr-un timp t.

Ecoul este detectat si procesat de receptor (obiectul argintiu din fata),iar rezultatul va fi trimis la pinul ECHO. Pinul ECHO va returna diferenta de timp intre emiterea ultrasunetelor si detectarea ecoului (2t,deoarece pulsul se deplaseaza dus-intors).

Distanta dintre senzor si obiect poate fi calculata cu formula:d=2t (valoarea returnata de pinul ECHO)/2 (timpul necesar pulsului ultrasonic sa parcurga o data distanta dintre senzor si obiect) x 0.0343 (viteza sunetului in cm/ms):

Senzorul poate masura distante cuprinse 2 cm si 4 m,cu o acuratete de 0,3 cm si cu un unghi de detectie de 15 grade.


Montajul


Senzorul HC-SR04 are patru pini:VCC (se conecteaza la 5V),GND (se conecteaza la GND),TRIG si ECHO (se conecteaza la orice pini digitali;eu am folosit pinii 12 si 11):



Programul


Programul se bazeaza pe masurarea "lungimii" semnalului HIGH citit de la pinul ECHO,folosind functia pulseIn (pulseIn(nume pin,tip de semnal)):


int Trig=12; // creare variabila intreaga "Trig" egala cu pinul 12 int Echo=11; // creare variabila intreaga "Echo" egala cu pinul 11 long durata,distanta; // creare variabile lungi "durata" si "distanta" void setup() { Serial.begin (9600); // initializare comunicare seriala la viteza de 9600 baud pinMode(Trig, OUTPUT); // initializare pin Trig pentru emisie pinMode(Echo, INPUT); // initializare pin Echo pentru citire } void loop() { digitalWrite(Trig, LOW); // trimite semnal LOW prin pinul Trig delayMicroseconds(5); // asteapta 5 ms digitalWrite(Trig, HIGH); // trimite semnal HIGH prin pinul Trig delayMicroseconds(10); // asteapta 10 ms digitalWrite(Trig, LOW); // trimite semnal LOW prin pinul Trig durata = pulseIn(Echo, HIGH); /* variabila "durata" este egala cu lungimea pulsului citit prin pinul Echo */ distanta = (durata/2)*0.0343; // variabila "distanta" este calculata prin formula Serial.print("Distanta:"); // afiseaza pe monitorul serial textul dintre paranteze Serial.print(distanta); // afiseaza pe monitorul serial valoarea variabilei "distanta" Serial.print(" cm "); // afiseaza pe monitorul serial textul dintre paranteze Serial.println(); // treci pe o linie noua delay(2000); // asteapta 2 secunde }


Program pentru folosirea senzorului HC-SR04 in combinatie cu un ecran LCD:


#include <LiquidCrystal.h> // include biblioteca LiquidCrystal.h LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initializeaza pinii 12(RS),11(RW) si 5,4,3,2(D4-D7) int Trig = 12; // creare variabila intreaga "Trig" egala cu pinul 12 int Echo = 10; // creare variabila intreaga "Echo" egala cu pinul 11 long durata,distanta; // creare variabile lungi "durata" si "distanta"

void setup() { lcd.begin(16,2); // initializeaza ecranul cu 16 coloane si 2 randuri pinMode(Trig,OUTPUT); // initializare pin Trig pentru emisie pinMode(Echo,INPUT); // initializare pin Echo pentru citire } void loop() { digitalWrite(Trig, LOW); // trimite semnal LOW prin pinul Trig delayMicroseconds(5); // asteapta 5 ms digitalWrite(Trig, HIGH); // trimite semnal HIGH prin pinul Trig delayMicroseconds(10); // asteapta 10 ms digitalWrite(Trig, LOW); // trimite semnal LOW prin pinul Trig durata = pulseIn(Echo, HIGH); /* variabila "durata" este egala cu lungimea pulsului citit prin pinul Echo */ distanta= durata*0.0343/2; // variabila "distanta" este calculata prin formula lcd.setCursor(0,0); // seteaza cursorul pe coloana 0 randul 0 lcd.print("Distanta este de "); // afiseaza pe monitorul serial textul dintre paranteze

lcd set Cursor(1,4) // seteaza cursorul pe coloana 4 randul 1 lcd.print(distanta); // afiseaza pe monitorul serial valoarea variabilei "distanta" lcd.print(" cm"); // afiseaza pe monitorul serial textul dintre paranteze delay(100); // asteapta 100 ms }

Pentru orice nelamuriri,adresati intrebari la sectiunea de comentarii!

13 views0 comments

Recent Posts

See All

Comentários


bottom of page