Vizualizări: 164 Autor: Grace Data publicării: 2021-07-26 Origine: Site
The Senzorul ultrasonic HC-SR04 este unul dintre cele mai populare module de măsurare a distanței pentru proiectele Arduino. Este utilizat pe scară largă în roboții de evitare a obstacolelor, senzori de parcare, detectarea nivelului, coșurile de gunoi inteligente, contoarele de distanță și alte aplicații de detectare fără contact.
Modulul emite unde ultrasonice de 40 kHz printr-un transmițător. Când unda sonoră întâlnește un obiect, aceasta se reflectă înapoi la receptor. Măsurând timpul de eco și folosind viteza sunetului, Arduino poate calcula distanța dintre senzor și obiect.
| Parametru | Valoare |
| Tensiunea de lucru tipică | 5V DC |
| Curent de lucru static | Mai puțin de 5mA pe unele versiuni de module |
| Frecvența de operare | Undă ultrasonică de 40 kHz |
| Distanța de detectare | Interval comun: 2 cm până la 400 cm; unele versiuni ajustate în funcție de câștig pot suporta o rază mai lungă. |
| Unghiul de detectare | De obicei, la 15 grade; unele versiuni cu câștig mai mare pot ajunge la aproximativ 30 de grade. |
| Precizie | Până la aproximativ 0,3 cm în condiții de testare adecvate |
| Zona oarbă | Aproximativ 2 cm distanta minima de masurare |
Modulul ultrasonic HC-SR04 are patru pini: VCC, TRIG, ECHO și GND. Arduino trimite un impuls scurt de declanșare la pinul TRIG, apoi citește impulsul de întoarcere de la pinul ECHO.
| Pin HC-SR04 | Conexiune Arduino | Funcţie |
| VCC | 5V | Alimentare pentru modulul cu ultrasunete. |
| TRIG | Pinul digital 9 | Intrarea declanșatorului. Arduino aplică un puls de 10 us pentru a începe să se găsească. |
| ECOU | Pinul digital 10 | Ieșire ecou. Arduino citește lățimea impulsului pentru a calcula distanța. |
| GND | GND | Conexiune la pământ. |
HC-SR04 funcționează prin măsurarea timpului de zbor. Arduino trimite un semnal de declanșare la nivel înalt de cel puțin 10 microsecunde către pinul TRIG. Modulul trimite apoi automat opt impulsuri ultrasonice de 40 kHz și așteaptă ecoul reflectat.
Când este detectat semnalul ultrasonic reflectat, pinul ECHO emite un impuls de nivel înalt. Durata acestui impuls este timpul de călătorie dus-întors a undei ultrasonice.
Distanță = Timp la nivel înalt ecou × Viteza sunetului / 2
În codul Arduino, formula simplificată comună este:
Distanța în cm = durata × 0,0343 / 2
Procesul de sincronizare este simplu: Arduino menține TRIG-ul scăzut pentru scurt timp, trimite un impuls ridicat de 10 us, apoi readuce TRIG-ul la nivel scăzut. HC-SR04 trimite o explozie ultrasonică și setează ECHO la un nivel ridicat până când semnalul reflectat revine sau măsurarea expiră.
Pentru a evita citirile instabile, lăsați o scurtă întârziere între măsurători. Un ciclu de măsurare de aproximativ 60 ms este folosit în mod obișnuit, astfel încât ecoul ultrasonic anterior are timp să dispară înainte de următorul declanșare.
Funcția Arduino pulseIn() este utilizată pentru a măsura cât de mult timp un pin digital rămâne HIGH sau LOW. Pentru HC-SR04, Arduino folosește pulseIn(echoPin, HIGH) pentru a citi lățimea impulsului de nivel înalt de la pinul ECHO.
| Sintaxă | Sens |
| pulseIn(pin, valoare) | Citește durata unui impuls HIGH sau LOW. |
| pulseIn(pin, valoare, timeout) | Citește pulsul cu o valoare de timeout în microsecunde. |
Se recomandă utilizarea unui timeout. Dacă nu este returnat niciun ecou, funcția poate opri așteptarea și poate returna 0 în loc să blocheze programul pentru prea mult timp.
Cablajul este simplu. Conectați VCC la 5V, GND la GND, TRIG la un pin de ieșire digitală Arduino și ECHO la un pin de intrare digitală Arduino. Următorul exemplu folosește Arduino Uno, TRIG pe pinul 9 și ECHO pe pinul 10.
Următorul program tipic Arduino trimite un impuls de declanșare de 10 us, citește lățimea impulsului ECHO, calculează distanța în centimetri și tipărește rezultatul în monitorul serial.
const int trigPin = 9; const int echoPin = 10; durată lungă; distanță de plutireCm; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); delayMicrosecunde(2); digitalWrite(trigPin, HIGH); delayMicrosecunde(10); digitalWrite(trigPin, LOW); durata = pulseIn(echoPin, HIGH, 30000); if (durata == 0) { Serial.println('În afara intervalului'); } else { distantaCm = durata * 0,0343 / 2; Serial.print('Distanța: '); Serial.print(distantaCm); Serial.println(' cm'); } întârziere(60); }
Dacă vedeți valori de distanță în monitorul serial, senzorul ultrasonic HC-SR04 și cablajul Arduino funcționează corect. Puteți utiliza apoi datele de distanță pentru detectarea obstacolelor, controlul mișcării robotului, uși automate, mementouri de parcare sau proiecte de nivel de lichid.
Păstrați obiectul măsurat în intervalul de distanță recomandat și în afara zonei oarbe de 2 cm.
Utilizați o suprafață țintă plană și solidă pentru o mai bună reflexie ultrasonică.
Evitați măsurarea materialelor moi, înclinate, poroase sau fonoabsorbante.
Utilizați o sursă de alimentare stabilă de 5 V și mențineți cablajul scurt și sigur.
Adăugați un timeout la pulseIn() pentru a preveni blocarea îndelungată atunci când nu se întoarce niciun ecou.
Mediu sau median-filtru mai multe citiri pentru a reduce zgomotul.
Pentru o precizie mai mare, compensați temperatura deoarece viteza sunetului se modifică odată cu temperatura aerului.
| Aplicație | Cum se utilizează HC-SR04 |
| Robot de evitare a obstacolelor | Detectează obiectele din apropiere și ajută robotul să schimbe direcția. |
| Senzor de parcare | Măsoară distanța dintre vehicul și un obstacol. |
| Detectarea nivelului lichidului | Măsoară distanța de la senzor la suprafața lichidului fără contact. |
| Coș de gunoi inteligent | Detectează o mână sau un obiect din apropiere și declanșează deschiderea automată a capacului. |
Pentru a utiliza un senzor ultrasonic HC-SR04 cu Arduino, conectați VCC la 5V, GND la GND, TRIG la un pin de ieșire digitală și ECHO la un pin de intrare digitală. Trimiteți un impuls de declanșare de 10 us, citiți durata ecoului cu pulseIn() și calculați distanța cu formula timpului de zbor.
HC-SR04 este ieftin, ușor de utilizat și potrivit pentru multe proiecte de măsurare a distanței Arduino. Pentru cele mai bune rezultate, acordați atenție suprafeței țintă, unghiului de măsurare, zonei oarbe, puterii stabile, manevrării timpului de expirare și efectelor temperaturii.
Arduino trimite un impuls de 10us la pinul TRIG. HC-SR04 emite opt impulsuri ultrasonice de 40 kHz și setează pinul ECHO la un nivel ridicat până când sunetul reflectat revine. Arduino măsoară acest timp de puls și calculează distanța.
Formula este distanța = durata × viteza sunetului / 2. În centimetri, o formulă comună Arduino este distanțaCm = durata × 0,0343 / 2, unde durata este măsurată în microsecunde.
Timpul de eco măsurat este timpul dus-întors de la senzor la obiect și înapoi la senzor. Împărțirea cu 2 oferă distanța unidirecțională dintre senzor și obiect.
Puteți folosi majoritatea pinilor digitali Arduino. În multe exemple, TRIG este conectat la pinul digital 9 și ECHO este conectat la pinul digital 10. Codul trebuie să se potrivească cu pinii utilizați în cablarea dvs.
Cauzele obișnuite includ cablare slăbită, alimentare instabilă de 5 V, numere greșite ale PIN-ului TRIG sau ECHO, niciun obiect în rază, suprafețe țintă înclinate, materiale moi, capete de senzori blocate sau lipsa unui timeout în funcția pulseIn().
Zona oarbă este distanța minimă în care modulul nu poate măsura în mod fiabil. Pentru HC-SR04, zona oarbă este de obicei de aproximativ 2 cm. Obiectele mai aproape de aceasta pot produce citiri instabile.
Da, HC-SR04 poate fi folosit pentru proiecte simple de nivel al apei, fără contact, dacă senzorul este protejat de umiditate și montat deasupra suprafeței lichidului. Pentru rezervoarele umede, exterioare sau industriale, se recomandă un senzor ultrasonic rezistent la apă.
Folosiți o sursă de alimentare stabilă, mențineți senzorul perpendicular pe țintă, evitați suprafețele moi sau înclinate, adăugați pulseIn timeout, luați mai multe citiri, utilizați filtrarea mediană și lăsați aproximativ 60 ms între măsurători.