Senzorul ultrasonic HC-SR04

    Pentru masurarea unor distante relativ scurte putem folosi un senzor ultrasonic HC-SR04. Acest senzor poate masura o distanta cuprinsa intre 2cm si 400cm, modulul se alimenteaza cu o tensiune de 5V, curentul maxim de lucru este de 15mA, unghiul de masurare al modulului este de maxim 30°, rezolutia este de 3mm iar frecventa de lucru este de 40kHz.
    Modulul are 4 pini, 2 de alimentare, al treilea este pinul trig si al patrulea este pinul echo.
    Modulul este cel din poza de mai jos:

    Spatele modului este cel de mai jos:

    Schema acestui modul este cea de mai jos:

    Masurarea distantei se face cu ajutorul undelor ultrasonice. Formula de masurare a distantei este simpla si este cea de mai jos:
D = (Vs*T)/2
unde D este distanta, Vs este viteza sunetului iar T este timpul.   
    Viteza sunetului este de 340m/s sau 0,034cm/µs. Vom folosi ultima valoare.
    Timpul este exprimat in microsecunde (µs).
    Distanta este exprimata in centimetri.
    Un exemplu de calcul:
Daca unde sonora se intoarce la senzor dupa 500 de microsecunde vom folosi urmatoarea formula pentru a detecta distanta pana la obiect:
D = (0,034 * 500) / 2
D = 17/2
D = 8,5 cm

    Pentru a folosi aceste informatii vom incepe sa scriem codul sursa, afisarea rezultatului se va face pe un display LCD cin interfata I2C. Afisajul este conectat excat ca in acest articol.
    Pentru inceput vom aloca 2 porturi digitale celor 2 pini: trig si echo. Vom aloca pinul digital 10 pentru trig si pinul digital 11 pentru echo. Codul este cel de mai jos:

int trig = 10;
int echo = 11;

    Dupa vom mai seta 2 variabile de tip long. Prima variabila este pentru durata scursa in microsecunde dintre emisia pulsului si receptia lui. A doua variabila este pentru distanta pe care o vom calcula.

long durata, distanta;

    In functia setup() vom defini care port va fi setat ca si intrare si care port va fi setat ca si iesire. Codul pe care-l vom utiliza este cel de mai jos:

pinMode(trig, OUTPUT);
pinMode(echo, INPUT);

    Apoi pentru a nu exista nici o problema vom seta iesire portului trig ca si LOW pentru a nu se emite nici un fel de puls:

digitalWrite(trig, LOW);

    In functia loop() vom detecta distanta pana la diferite obiecte. Pentru acest lucru vom trece iesirea portului trig in HIGH, vom seta o intarziere de 10 microsecunde apoi acest port va fi trecut din nou in stare LOW.

digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);

    Urmatoarea linie de cod este cea in care vom masura durata pana la aparitia ecoului undei emise mai devreme. Acest lucru putem sa-l facem cu urmatoarea linie de cod:

durata = pulseIn(echo, HIGH);

    Cunoscand durata vom calcula si distanta in centimetri pana la obiect:

distanta = durata * 0.034 / 2;

    Sketchul in forma finala este cel de mai jos:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int trig = 10;
int echo = 11;
long durata, distanta;

void setup() {
  lcd.begin();
  lcd.print("Modul HC-SR04");
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  digitalWrite(trig, LOW);
  delay(1000);
  lcd.clear();
}

void loop() {
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  durata = pulseIn(echo, HIGH);
  distanta = durata * 0.034 / 2;
  lcd.setCursor(0, 0);
  lcd.print("Distanta: ");
  lcd.setCursor(0, 1);
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print(distanta);
  lcd.print(" cm");  
  delay(300);                                                          
}

    Poze cu montajul in funtiune sunt mai jos:

Nu sunt comentarii in “Senzorul ultrasonic HC-SR04”

Lasa un comentariu

Raspuns lui Some User

Autentificare