Bekeken: 164 Auteur: Grace Publicatietijd: 26-07-2021 Herkomst: Locatie
De De ultrasone sensor HC-SR04 is een van de meest populaire afstandsmeetmodules voor Arduino-projecten. Het wordt veel gebruikt in obstakelvermijdingsrobots, parkeersensoren, niveaudetectie, slimme vuilnisbakken, afstandsmeters en andere contactloze detectietoepassingen.
De module zendt ultrasone golven van 40 kHz uit via een zender. Wanneer de geluidsgolf een voorwerp ontmoet, wordt deze teruggekaatst naar de ontvanger. Door de echotijd te meten en de geluidssnelheid te gebruiken, kan Arduino de afstand tussen de sensor en het object berekenen.
| Parameter | Waarde |
| Typische werkspanning | 5 V gelijkstroom |
| Statische werkstroom | Minder dan 5 mA op sommige moduleversies |
| Bedrijfsfrequentie | 40 kHz ultrasone golf |
| Detectie afstand | Gemeenschappelijk bereik: 2 cm tot 400 cm; sommige versies met aangepaste versterking ondersteunen mogelijk een groter bereik. |
| Detectiehoek | Meestal binnen 15 graden; sommige versies met een hogere versterking kunnen ongeveer 30 graden bereiken. |
| Precisie | Tot ongeveer 0,3 cm onder geschikte testomstandigheden |
| Blinde zone | Minimale meetafstand van ongeveer 2 cm |
De HC-SR04 ultrasone module heeft vier pinnen: VCC, TRIG, ECHO en GND. Arduino stuurt een korte triggerpuls naar de TRIG-pin en leest vervolgens de retourpuls van de ECHO-pin.
| HC-SR04-pen | Arduino-verbinding | Functie |
| VCC | 5V | Voeding voor de ultrasone module. |
| TRIG | Digitale pin 9 | Trigger-ingang. Arduino past een 10us-puls toe om te beginnen met bereik. |
| ECHO | Digitale pin 10 | Echo-uitvoer. Arduino leest de pulsbreedte om de afstand te berekenen. |
| GND | GND | Aardaansluiting. |
De HC-SR04 werkt via time-of-flight-meting. Arduino stuurt een triggersignaal op hoog niveau van minimaal 10 microseconden naar de TRIG-pin. De module verzendt vervolgens automatisch acht ultrasone pulsen van 40 kHz en wacht op de gereflecteerde echo.
Wanneer het gereflecteerde ultrasone signaal wordt gedetecteerd, geeft de ECHO-pin een puls van hoog niveau af. De duur van deze puls is de heen- en terugreistijd van de ultrasone golf.
Afstand = Echo-tijd op hoog niveau × Geluidssnelheid / 2
In Arduino-code is de gebruikelijke vereenvoudigde formule:
Afstand in cm = duur × 0,0343 / 2
Het timingproces is eenvoudig: Arduino houdt TRIG kort laag, stuurt een 10us hoge puls en zet TRIG vervolgens terug naar laag. De HC-SR04 verzendt een ultrasone burst en stelt ECHO hoog in totdat het gereflecteerde signaal terugkeert of de meting afloopt.
Om onstabiele metingen te voorkomen, moet u een korte vertraging tussen de metingen aanhouden. Meestal wordt een meetcyclus van ongeveer 60 ms gebruikt, zodat de vorige ultrasone echo de tijd heeft om te verdwijnen vóór de volgende trigger.
De Arduino pulseIn()- functie wordt gebruikt om te meten hoe lang een digitale pin HOOG of LAAG blijft. Voor HC-SR04 gebruikt Arduino pulseIn (echoPin, HIGH) om de pulsbreedte op hoog niveau van de ECHO-pin te lezen.
| Syntaxis | Betekenis |
| pulseIn(pin, waarde) | Leest de duur van een HOGE of LAGE puls af. |
| pulseIn(pin, waarde, time-out) | Leest de puls met een time-outwaarde in microseconden. |
Het gebruik van een time-out wordt aanbevolen. Als er geen echo wordt geretourneerd, kan de functie stoppen met wachten en 0 retourneren in plaats van het programma te lang te blokkeren.
De bedrading is eenvoudig. Sluit VCC aan op 5V, GND op GND, TRIG op een Arduino digitale uitgangspin en ECHO op een Arduino digitale ingangspin. In het volgende voorbeeld wordt Arduino Uno, TRIG op pin 9 en ECHO op pin 10 gebruikt.
Het volgende typische Arduino-programma verzendt een triggerpuls van 10us, leest de ECHO-pulsbreedte, berekent de afstand in centimeters en drukt het resultaat af op de seriële monitor.
const int trigPin = 9; const int echoPin = 10; lange duur; zweefafstandCm; ongeldige setup() { pinMode(trigPin, OUTPUT); pinModus(echoPin, INPUT); Serieel.begin(9600); } void loop() { digitalWrite(trigPin, LAAG); vertragingMicroseconden(2); digitalWrite(trigPin, HOOG); vertragingMicroseconden(10); digitalWrite(trigPin, LAAG); duur = pulseIn(echoPin, HOOG, 30000); if (duur == 0) { Serial.println('Buiten bereik'); } anders { afstandCm = duur * 0,0343 / 2; Serieel.print('Afstand: '); Serieel.print(afstandCm); Serieel.println(' cm'); } vertraging(60); }
Als u afstandswaarden ziet in de seriële monitor, werken de HC-SR04 ultrasone sensor en de Arduino-bedrading correct. Vervolgens kunt u de afstandsgegevens gebruiken voor obstakeldetectie, robotbewegingscontrole, automatische deuren, parkeerherinneringen of vloeistofniveauprojecten.
Houd het gemeten object binnen het aanbevolen afstandsbereik en buiten de blinde zone van 2 cm.
Gebruik een vlak en stevig doeloppervlak voor betere ultrasone reflectie.
Vermijd het meten van zachte, schuine, poreuze of geluidsabsorberende materialen.
Gebruik een stabiele 5V-voeding en houd de bedrading kort en veilig.
Voeg een time-out toe aan pulseIn() om langdurige blokkering te voorkomen wanneer er geen echo terugkeert.
Gemiddelde of mediaan-filter verschillende metingen om ruis te verminderen.
Voor een grotere nauwkeurigheid compenseer je de temperatuur omdat de geluidssnelheid verandert met de luchttemperatuur.
| Sollicitatie | Hoe HC-SR04 wordt gebruikt |
| Obstakelvermijdingsrobot | Detecteert objecten in de buurt en helpt de robot van richting te veranderen. |
| Parkeersensor | Meet de afstand tussen het voertuig en een obstakel. |
| Detectie van vloeistofniveau | Meet contactloos de afstand van de sensor tot het vloeistofoppervlak. |
| Slimme prullenbak | Detecteert een hand of voorwerp in de buurt en activeert de automatische opening van het deksel. |
Om een HC-SR04 ultrasone sensor met Arduino te gebruiken, sluit u VCC aan op 5V, GND op GND, TRIG op een digitale uitgangspin en ECHO op een digitale ingangspin. Stuur een triggerpuls van 10us, lees de echoduur af met pulseIn() en bereken de afstand met de time-of-flight-formule.
De HC-SR04 is goedkoop, gemakkelijk te gebruiken en geschikt voor veel Arduino-afstandsmeetprojecten. Voor de beste resultaten moet u letten op het doeloppervlak, de meethoek, de blinde zone, stabiel vermogen, time-outhantering en temperatuureffecten.
Arduino stuurt een 10us-puls naar de TRIG-pin. De HC-SR04 zendt acht ultrasone pulsen van 40 kHz uit en zet de ECHO-pin hoog totdat het gereflecteerde geluid terugkeert. Arduino meet deze pulstijd en berekent de afstand.
De formule is afstand = duur × geluidssnelheid / 2. In centimeters is een gebruikelijke Arduino-formule afstandCm = duur × 0,0343 / 2, waarbij de duur wordt gemeten in microseconden.
De gemeten echotijd is de retourtijd van de sensor naar het object en terug naar de sensor. Delen door 2 geeft de eenrichtingsafstand tussen de sensor en het object.
U kunt de meeste Arduino digitale pinnen gebruiken. In veel voorbeelden is TRIG aangesloten op digitale pin 9 en ECHO op digitale pin 10. De code moet overeenkomen met de pinnen die in uw bedrading worden gebruikt.
Veel voorkomende oorzaken zijn losse bedrading, onstabiele 5V-voeding, verkeerde TRIG- of ECHO-pinnummers, geen object binnen bereik, schuine doeloppervlakken, zachte materialen, geblokkeerde sensorkoppen of geen time-out in de pulseIn()-functie.
De blinde zone is de minimale afstand waarop de module niet betrouwbaar kan meten. Voor HC-SR04 is de blinde zone gewoonlijk ongeveer 2 cm. Voorwerpen dichterbij dan dit kunnen onstabiele metingen opleveren.
Ja, HC-SR04 kan worden gebruikt voor eenvoudige contactloze waterpeilprojecten als de sensor beschermd is tegen vocht en boven het vloeistofoppervlak is gemonteerd. Voor vochtige, buiten- of industriële tanks wordt een waterdichte ultrasone sensor aanbevolen.
Gebruik een stabiele voeding, houd de sensor loodrecht op het doel, vermijd zachte of schuine oppervlakken, voeg pulseIn time-out toe, voer meerdere metingen uit, gebruik mediaanfiltering en laat ongeveer 60 ms tussen de metingen.