– Hvordan å bruke en HC-SR04 Ultralyd Avstand Sensor med Arduino
HC-SR04 er en billig, enkel å bruke ultralyd avstand sensor, med en rekkevidde på 2 til 400 cm. Det er ofte brukt i hinderet for å unngå roboter og automatisering-prosjekter. I denne opplæringen vil du lære hvordan sensoren fungerer og hvordan du kan bruke det med Arduino.
jeg har tatt 5 eksempler med et koblingsskjema og kode, slik at du kan begynne å eksperimentere med sensoren., Vi vil først se på et eksempel som ikke bruker en Arduino bibliotek. Neste, jeg vil vise deg hvordan du kan bruke NewPing bibliotek for å lage en mer kompakt kode.
Billige ultralyd avstand/nærhet sensorer er stor, men i noen prosjekter, som du kanskje trenger en vanntett sensor som JSN-SR04T eller en IR-sensor som ikke er påvirket av temperatur endringer.,on
AliExpress
Software
Arduino IDE |
Makerguides.,com er en deltaker i Amazonas Services LLC Associates Program, en agentannonsering program utviklet for å gi et middel for nettsteder å tjene reklame avgifter av annonsering og linke til produkter på Amazon.com.
Hvordan gjør en ultralyd avstand sensor fungerer?
Ultrasoniske sensorer arbeid ved avgir lyd bølger med en frekvens som er for høyt for et menneske å høre. Disse lydbølgene reise gjennom luften med lydens hastighet, omtrent 343 m/s., Hvis det er et motiv foran sensoren, lydbølgene blir reflektert tilbake og mottakeren av ultralyd-sensor oppdager dem. Ved å måle hvor mye tid som gikk mellom sending og mottak av lydbølgene, avstanden mellom sensoren og objektet kan beregnes.
Ved 20°C, lydens hastighet er omtrent 343 m/s eller 0.034 cm/µs., La oss si at tiden mellom sending og mottak av lyd-bølger er 2000 mikrosekunder. Hvis du multiplisere den hastigheten til lyden av tid lydbølgene reiste, du får den avstanden som lydbølgene som reiste.
Avstand = Hastighet x Tid
Men det er ikke det resultatet vi er ute etter. Avstanden mellom sensoren og objektet er faktisk bare halvparten av denne avstanden fordi lydbølgene reiste fra sensor til objektet og tilbake fra objekt til sensoren. Så du trenger til å dele resultatet med to.,
Avstand (cm) = Speed of sound (cm/µs) × Tid (µs) / 2
Og så for eksempel blir dette:
Avstand (cm) = 0.0343 (cm/µs) × 2000 (µs) / 2 = 34.3 cm
Temperatur avhengighet av lydens hastighet
lydens hastighet faktisk avhenger sterkt av temperaturen, og i langt mindre grad på fuktighet i luften. Wikipedia sier at lydens hastighet øker med om lag 0,6 m/s per grad Celsius., For de fleste tilfeller ved 20°C kan du bare bruke 343 m/s, men hvis du ønsker å få mer nøyaktige målinger, kan du beregne hastigheten til lyden med følgende formel:
V (m/s) = 331.3 + (0.606 × T)
V = Hastighet av lyd (m/s)
T = Temperatur (°C)
Denne formelen ikke har luftfuktigheten siden dens effekt på hastigheten til lyden er svært små.
Nedenfor kan du finne en tutorial på hvordan du bruker en DHT11 temperatur og fuktighet sensor for å kalibrere lydens hastighet, og få en mer nøyaktig avstand leser med HC-SR04.,
Hvordan HC-SR04 fungerer
På forsiden av HC-SR04 sensor, kan du finne to sølv sylindere (ultralyd transdusere), er senderen av lydbølger og andre er mottaker. Å la sensoren generere en sonic sprekke, må du angi de Trigonometriske pin high for minst 10 µs. Sensoren oppretter deretter en 8 syklus utbrudd av ultralyd på 40 kHz.
Dette sonic burst reiser på lydens hastighet, og spretter tilbake og blir mottatt av mottakeren av sensoren. Echo-pin-koden deretter sender den tid at lydbølgene som reiste i mikrosekunder.,
Du kan bruke pulseIn()
funksjon i Arduino-koden for å lese lengden på pulsen fra Echo pin-kode. Etter det, kan du bruke formelen ovenfor til å beregne avstanden mellom sensoren og objekt.,ncy
For mer informasjon kan du sjekke ut produkt datablad nedenfor:
Kabling – Tilkobling HC-SR04 til Arduino UNO
koblingsskjemaet nedenfor viser hvordan du kobler HC-SR04 sensor til Arduino.,
– koden eksemplene nedenfor bruker digitale pinne 2 og 3 for å utløse og echo pin henholdsvis, men selvfølgelig kan du endre dette til et digitalt pin-koden du ønsker.,C-SR04 Connections
HC-SR04 | Arduino |
---|---|
VCC | 5 V |
Trig | Pin 2 |
Echo | Pin 3 |
GND | GND |
Example code for HC-SR04 with Arduino
Now that you have wired up the sensor it is time to connect the Arduino to the computer and upload some code., Du kan laste opp følgende eksempel koden til din Arduino ved hjelp av Arduino IDE. Neste, jeg vil forklare deg hvordan koden fungerer.
Hvordan koden fungerer
Først, utløser pin-kode og echo pin-koden er angitt. Jeg kaller dem trigPin
og EchoPin
. Trigger pin-koden er koblet til digital pinne 2 og echo pin for å digital pinne 3 på Arduino.
uttalelsen #define
brukes til å gi et navn til en konstant verdi., Kompilatoren vil erstatte eventuelle referanser til denne konstant med en definert verdi når programmet er kompilert. Så uansett hvor du nevne trigPin
, kompilatoren vil erstatte det med verdien 2 når programmet er kompilert.
// Define Trig and Echo pin:#define trigPin 2#define echoPin 3
Neste jeg definert to variabler: duration
og distance
. Varighet lagrer tid mellom sending og mottak av lydbølgene. Avstanden variabel som brukes til å lagre beregnet avstand.,
// Define variables:long duration;int distance;
I setup()
, starter du ved å sette trigPin som en utgang og echoPin som en inngang. Neste du initialisere seriell kommunikasjon på en overføringshastighet på 9600. Senere du vil vise den målte avstanden i serial monitor, som kan nås med Ctrl+Skift+M eller Verktøy > Serial Monitor. Kontroller at overføringshastigheten er også satt til 9600 i serial monitor.
I loop()
du utløse sensoren ved å sette trigPin HØY for 10 µs., Merk at for å få en ren signal du starter ved å fjerne de trigPin ved å sette den LAVE for 5 mikrosekunder.
Neste, du trenger å lese lengden av puls som sendes av echoPin. Jeg bruker funksjonen pulseIn()
for dette. Denne funksjonen venter for pin for å gå fra LAV til HØY, starter timing, så venter for pin for å gå LAVE og stopper timing.
Etter det, kan du beregne avstand ved hjelp av formelen som er nevnt i innledningen av denne opplæringen.
til Slutt, den beregnede avstanden er trykt i serial monitor.,
eksempelkode HC-SR04 med Arduino og NewPing bibliotek
NewPing bibliotek skrevet av Tim Eckel kan brukes med mange ultralyd avstand sensorer. Den nyeste versjonen av dette biblioteket kan lastes ned her på bitbucket.org. Du legger kanskje merke til at koden nedenfor, som bruker NewPing bibliotek, er mye kortere enn den koden vi brukte før. Bortsett fra det, NewPing biblioteket inneholder en del andre fine funksjoner. Det tillater deg å sette en maks avstand til å lese, det vil ikke lag for en hel andre når ingen ekko er mottatt, og den har en innebygd median filter.,
Du kan installere biblioteket ved å gå til Skisse > Inkluderer Bibliotek > Legg til .ZIP Bibliotek i Arduino IDE.
biblioteket ikke er noen eksempler som du kan bruke, men du vil ha til å endre dem til å matche din maskinvare oppsett. Jeg har tatt med en modifisert eksempel koden nedenfor som kan brukes med det samme kabling oppsett som før.
Du kan også bruke distance = sonar.ping_cm()
eller distance = sonar.ping_in()
som returnerer den målte avstanden i hele centimeter eller tommer., Med denne funksjonen, trenger du ikke å ta en varighet måle og beregne avstand.
Grensesnitt ultrasoniske sensorer i 3 pin-kode-modus
NewPing biblioteket gjør det også lett å grensesnitt med ultralyd sensorer mens du bruker bare 1 i/O-pin-koden. Dette kan være hendig hvis du har veldig få i/O-pinner er tilgjengelig, eller hvis du ønsker å bruke en 3 pin ultrasonisk sensor som Parallax Ping.
for Å lage en 3 pin setup (JORD, 5V og SIG), må du koble til både trigger-pin-koden og ekko-pin-koden til den samme digitale pin-kode på Arduino., I koden, det eneste du trenger å endre er linje 6-7 og angi den samme pin for både trigPin og echoPin. For eksempel digital pin-2.
//Define Trig and Echo pin#define trigPin 2#define echoPin 2
Hvordan å bruke ping_median() digital filter
Det viktigste jeg som om NewPing biblioteket er at det har en innebygd median filter. Dette filteret i stor grad kan forbedre nøyaktigheten av HC-SR04 målinger. ping_median()
funksjonen tar mange varighet målinger på rad, kaster bort den ut av rekkevidde målinger, og deretter gjennomsnitt de gjenværende., Som standard vil det ta 5 målinger, men du kan angi hvor mange det skal ta. Bytte linje med 19 nedenfor linjer.
int iterations = 5;duration = sonar.ping_median(iterations);
eksempelkode HC-SR04 med I2C-LCD-skjermen og Arduino
for Å vise den målte på en 2004 eller 1602 I2C-LCD, alt du trenger å gjøre er å gjøre følgende tilkoblinger og laste opp koden nedenfor. HC-SR04 sensor er koblet på samme måte som før.
I2C LCD Connections
I2C LCD | Arduino |
---|---|
GND | GND |
VCC | 5 V |
SDA | A4 |
SCL | A5 |
If you are not using an Arduino Uno, the SDA and SCL pins can be at a different location., En Arduino UNO med R3 layout (1.0 pinout), har også SDA (data linje) og SCL (klokke linje) pin-overskrifter nær AREF pin-kode. Sjekk tabellen nedenfor for mer informasjon.,f43445″>
The code uses the LiquidCrystal_I2C library, which you can download here on GitHub., Sørg for at du har denne eksakte bibliotek installert! Det omfatter også Wire.h-biblioteket, noe som gir deg mulighet til å kommunisere med I2C-enheter. Dette biblioteket bør komme forhåndsinstallert med Arduino IDE.
Hvis du ønsker å lære mer om hvordan du kan kontrollere en I2C LCD med Arduino, kan du sjekke ut hele veiledning her.
- Hvordan du kontrollerer en karakter I2C LCD med Arduino
Merk at jeg brukte en 20 x 4 LCD-skjerm. Hvis du har en annen størrelse LCD-skjerm (16 x 2 er også vanlig), må du endre linje 20 til LiquidCrystal_I2C lcd(0x27,16,2);
., Hvis LCD-skjermen ikke har standard I2C-adresse, 0x27, sjekk ut den komplette I2C opplæringen der jeg forklarer hvordan du kan finne ut hva adressen er.
eksempelkode HC-SR04 med DHT11 temperatur sensor og Arduino
Som nevnt tidligere, lydens hastighet sterkt avhengig av temperaturen. Hvis du ønsker å måle lange avstander (3-4 m) kan det være en god idé å legge en DHT11 eller DHT22 temperatur og fuktighet sensor til ditt oppsett. Dette vil tillate deg å kalibrere fart av lyd i sanntid, og dermed øke nøyaktigheten til målingene.,
Legge til en DHT11 sensor er veldig enkelt. Koblingsskjemaet nedenfor viser hvilke tilkoblinger du trenger å gjøre. Merk at jeg bruker en DHT11 med en breakout-styret, så jeg trenger bare å koble opp 3 pinner. Pass på å sjekke etiketten på sensoren, rekkefølgen på pinnene kan være forskjellig, avhengig av produsenten. HC-SR04 sensor er koblet på samme måte som før.
DHT11 Connections
DHT11 | Arduino |
---|---|
VCC (+) | 5 V |
Signal (s) | Pin 4 |
GND (-) | GND |
The code below uses the Adafruit DHT Humidity & Temperature Sensor library which you can download here on GitHub., Dette biblioteket fungerer bare hvis du har også Adafruit_Sensor bibliotek installert, som er også tilgjengelig på GitHub. Du kan også laste ned de to biblioteker ved å klikke på knappene under:
Du kan klikke på knappen i øverste høyre hjørne på kode-feltet for å kopiere denne koden.
eksempelkode HC-SR04 med DHT11 og I2C LCD
– koden nedenfor kan brukes til å kombinere alle de 3 eksemplene ovenfor., Det viser både temperatur, hastighet, lyd og målt avstand på LCD-skjermen.
HC-SR04 Dimensjoner
her kan du finne dimensjoner av HC-SR04 ultrasonisk sensor. Jeg har lagt merke til at det er noen små forskjeller mellom produsenter, så jeg anbefaler å dobbelt-sjekke mot din egen sensor.
HC-SR04 CAD
jeg har laget grunnleggende CAD tegninger av HC-SR04 ultrasonisk sensor som du kan laste ned nedenfor.,
Konklusjon
I denne artikkelen, har jeg vist deg hvordan HC-SR04 ultralyd avstand sensoren fungerer og hvordan du kan bruke det med Arduino. Jeg håper du synes det er nyttig og lærerikt. Hvis du gjorde det, kan du dele det med en venn som også liker elektronikk!
Personlig prosjekt: Et par måneder siden jeg bygget en interaktiv veggmontering med noen venner. Vi brukte rundt 30 ultralyd avstand sensorer for å oppdage personer som går foran veggen. Veggen inkludert lys og lyd effekter som endres avhengig av hvor langt folk ble stående.,
jeg ville elske å vite hvilke prosjekter du har tenkt på å bygge (eller allerede har bygget) med HC-SR04 avstand sensor. Hvis du har noen spørsmål, forslag eller hvis du tror at ting mangler i denne veiledningen, kan du legge igjen en kommentar under.