Visninger: 164 Forfatter: Grace Udgivelsestid: 26-07-2021 Oprindelse: websted
De HC-SR04 ultralydssensor er et af de mest populære afstandsmålingsmoduler til Arduino-projekter. Det bruges i vid udstrækning i robotter til undgåelse af forhindringer, parkeringssensorer, niveaudetektion, smarte skraldespande, afstandsmålere og andre berøringsfri registreringsapplikationer.
Modulet udsender 40kHz ultralydsbølger gennem en sender. Når lydbølgen møder et objekt, reflekteres den tilbage til modtageren. Ved at måle ekkotiden og bruge lydens hastighed kan Arduino beregne afstanden mellem sensoren og objektet.
| Parameter | Værdi |
| Typisk arbejdsspænding | 5V DC |
| Statisk arbejdsstrøm | Mindre end 5mA på nogle modulversioner |
| Driftsfrekvens | 40kHz ultralydsbølge |
| Detektionsafstand | Fælles rækkevidde: 2cm til 400cm; nogle forstærkningsjusterede versioner understøtter muligvis længere rækkevidde. |
| Detektionsvinkel | Normalt inden for 15 grader; nogle versioner med højere forstærkning kan nå omkring 30 grader. |
| Præcision | Op til ca. 0,3 cm under passende testforhold |
| Blind zone | Cirka 2 cm minimum måleafstand |
HC-SR04 ultralydsmodulet har fire ben: VCC, TRIG, ECHO og GND. Arduino sender en kort triggerimpuls til TRIG-pinden og læser derefter returimpulsen fra ECHO-pinden.
| HC-SR04 Pin | Arduino forbindelse | Fungere |
| VCC | 5V | Strømforsyning til ultralydsmodulet. |
| TRIG | Digital pin 9 | Trigger input. Arduino anvender en 10us-puls for at begynde at måle. |
| EKKO | Digital pin 10 | Ekko output. Arduino aflæser pulsbredde for at beregne afstand. |
| GND | GND | Jordforbindelse. |
HC-SR04 fungerer ved måling af flyvetid. Arduino sender et højniveau triggersignal på mindst 10 mikrosekunder til TRIG-stiften. Modulet sender derefter automatisk otte 40kHz ultralydsimpulser og venter på det reflekterede ekko.
Når det reflekterede ultralydssignal detekteres, udsender ECHO-stiften en højniveauimpuls. Varigheden af denne puls er ultralydsbølgens tur-retur-rejsetid.
Afstand = Ekko på højt niveau × lydens hastighed / 2
I Arduino-kode er den almindelige forenklede formel:
Afstand i cm = varighed × 0,0343 / 2
Timingprocessen er enkel: Arduino holder TRIG lavt kort, sender en 10us høj puls og returnerer derefter TRIG til lav. HC-SR04 sender et ultralydsburst og indstiller ECHO højt, indtil det reflekterede signal vender tilbage, eller målingen timeout.
For at undgå ustabile aflæsninger, lad en kort forsinkelse mellem målingerne. En målecyklus på omkring 60 ms er almindeligvis brugt, så det forrige ultralydsekko når at forsvinde før den næste trigger.
Arduino pulseIn() -funktionen bruges til at måle, hvor længe en digital pin forbliver HØJ eller LAV. Til HC-SR04 bruger Arduino pulseIn(echoPin, HIGH) til at aflæse pulsbredden på højt niveau fra ECHO-stiften.
| Syntaks | Mening |
| pulseIn(pin, værdi) | Aflæser varigheden af en HØJ eller LAV puls. |
| pulseIn(pin, værdi, timeout) | Læser pulsen med en timeoutværdi i mikrosekunder. |
Det anbefales at bruge en timeout. Hvis der ikke returneres et ekko, kan funktionen stoppe med at vente og returnere 0 i stedet for at blokere programmet for længe.
Ledningen er ligetil. Tilslut VCC til 5V, GND til GND, TRIG til en Arduino digital udgangspin og ECHO til en Arduino digital input pin. Følgende eksempel bruger Arduino Uno, TRIG på ben 9 og ECHO på ben 10.
Følgende typiske Arduino-program sender en 10us trigger-impuls, aflæser ECHO-pulsbredden, beregner afstanden i centimeter og udskriver resultatet i den serielle monitor.
const int trigPin = 9; const int echoPin = 10; lang varighed; flydeafstandCm; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); varighed = pulsIn(echoPin, HIGH, 30000); if (varighed == 0) { Serial.println('Udenfor rækkevidde'); } andet { distanceCm = varighed * 0,0343 / 2; Serial.print('Afstand: '); Serial.print(distanceCm); Serial.println(' cm'); } delay(60); }
Hvis du ser afstandsværdier i den serielle monitor, fungerer HC-SR04 ultralydssensoren og Arduino-ledningerne korrekt. Du kan derefter bruge afstandsdataene til forhindringsdetektion, robotbevægelseskontrol, automatiske døre, parkeringspåmindelser eller væskeniveauprojekter.
Hold det målte objekt inden for det anbefalede afstandsområde og uden for den 2 cm blinde zone.
Brug en flad og solid måloverflade for bedre ultralydsreflektion.
Undgå at måle bløde, vinklede, porøse eller lydabsorberende materialer.
Brug en stabil 5V strømforsyning og hold ledningerne korte og sikre.
Tilføj en timeout til pulseIn() for at forhindre lang blokering, når intet ekko vender tilbage.
Gennemsnitlig eller median-filter adskillige aflæsninger for at reducere støj.
For højere nøjagtighed skal du kompensere for temperaturen, fordi lydhastigheden ændres med lufttemperaturen.
| Anvendelse | Sådan bruges HC-SR04 |
| Robot til at undgå forhindringer | Registrerer genstande i nærheden og hjælper robotten med at ændre retning. |
| Parkeringsafstandssensor | Måler afstanden mellem køretøjet og en forhindring. |
| Detektion af væskeniveau | Måler afstanden fra sensoren til væskeoverfladen uden kontakt. |
| Smart skraldespand | Registrerer en nærliggende hånd eller genstand og udløser automatisk lågåbning. |
For at bruge en HC-SR04 ultralydssensor med Arduino skal du tilslutte VCC til 5V, GND til GND, TRIG til en digital udgangspin og ECHO til en digital inputpin. Send en 10us triggerimpuls, aflæs ekkovarigheden med pulseIn(), og beregn distance med flyvetidsformlen.
HC-SR04 er billig, nem at bruge og velegnet til mange Arduino-afstandsmålingsprojekter. For de bedste resultater skal du være opmærksom på måloverfladen, målevinkel, blindzone, stabil effekt, timeouthåndtering og temperatureffekter.
Arduino sender en 10us-puls til TRIG-pinden. HC-SR04 udsender otte 40 kHz ultralydsimpulser og sætter ECHO-stiften højt, indtil den reflekterede lyd vender tilbage. Arduino måler denne pulstid og beregner afstand.
Formlen er afstand = varighed × lydens hastighed / 2. I centimeter er en almindelig Arduino-formel distanceCm = varighed × 0,0343 / 2, hvor varigheden måles i mikrosekunder.
Den målte ekkotid er tiden fra sensoren til objektet og tilbage til sensoren. At dividere med 2 giver en ensrettet afstand mellem sensoren og objektet.
Du kan bruge de fleste Arduino digitale pins. I mange eksempler er TRIG forbundet til digital pin 9, og ECHO er forbundet til digital pin 10. Koden skal matche de ben, der bruges i din ledningsføring.
Almindelige årsager omfatter løse ledninger, ustabil 5V strøm, forkerte TRIG- eller ECHO-pinnumre, ingen genstand inden for rækkevidde, vinklede måloverflader, bløde materialer, blokerede sensorhoveder eller ingen timeout i pulseIn()-funktionen.
Blindzonen er den mindste afstand, hvor modulet ikke kan måle pålideligt. For HC-SR04 er blindzonen normalt omkring 2 cm. Objekter tættere på end dette kan give ustabile aflæsninger.
Ja, HC-SR04 kan bruges til simple berøringsfri vandstandsprojekter, hvis sensoren er beskyttet mod fugt og monteret over væskeoverfladen. Til fugtige, udendørs eller industrielle tanke anbefales en vandtæt ultralydssensor.
Brug en stabil strømforsyning, hold sensoren vinkelret på målet, undgå bløde eller vinklede overflader, tilføj pulseIn timeout, tag flere aflæsninger, brug medianfiltrering og tillad ca. 60 ms mellem målinger.