Articles

hur man använder en HC-SR04 Ultraljudsavståndssensor med Arduino

HC-SR04 är en billig, lättanvänd ultraljudsavståndssensor, med ett intervall på 2 till 400 cm. Det används ofta i hinder undvika robotar och automationsprojekt. I den här guiden kommer du att lära dig hur sensorn fungerar och hur man använder den med Arduino.

jag har inkluderat 5 exempel med ett kopplingsschema och kod så att du kan börja experimentera med din sensor., Vi kommer först att titta på ett exempel som inte använder ett Arduino-bibliotek. Därefter visar jag dig hur du kan använda newping-biblioteket för att skapa en mer kompakt kod.

billiga ultraljudsavstånd / närhetssensorer är bra men i vissa projekt kan du behöva en vattentät sensor som JSN-SR04T eller en IR-sensor som inte påverkas av temperaturförändringar.,on

20×4 character I2C LCD (optional) × 1 Amazon
AliExpress DHT11 sensor (optional) × 1 Amazon

Software

Arduino IDE

Makerguides.,com är en deltagare i Amazon Services LLC Associates Program, en affiliate reklam program som syftar till att ge ett medel för webbplatser att tjäna reklam avgifter genom reklam och länka till produkter på Amazon.com.

hur fungerar en ultraljudssensor?

ultraljudssensorer arbetar genom att emittera ljudvågor med en frekvens som är för hög för att en människa ska kunna höra. Dessa ljudvågor färdas genom luften med ljudets hastighet, ungefär 343 m / s., Om det finns ett föremål framför sensorn, blir ljudvågorna reflekterade tillbaka och mottagaren av ultraljudssensorn upptäcker dem. Genom att mäta hur mycket tid som gått mellan att skicka och ta emot ljudvågorna kan avståndet mellan sensorn och objektet beräknas.

ultraljudssensorer arbetar princip. Källa: https://www.maxbotix.com/

vid 20°C är ljudets hastighet ungefär 343 m/s eller 0,034 cm/µs., Låt oss säga att tiden mellan att skicka och ta emot ljudvågorna är 2000 mikrosekunder. Om du multiplicerar ljudets hastighet när ljudvågorna reste, får du det avstånd som ljudvågorna reste.

Distance = Speed x Time

men det är inte det resultat vi letar efter. Avståndet mellan sensorn och objektet är faktiskt bara hälften av detta avstånd eftersom ljudvågorna reste från sensorn till objektet och tillbaka från objektet till sensorn. Så du måste dela resultatet med två.,

avstånd (cm) = ljudets hastighet (cm/µs) × tid (µs) / 2

och så för exemplet blir detta:

avstånd (cm) = 0,0343 (cm/µs) × 2000 (µs) / 2 = 34,3 cm

temperaturberoende av ljudets hastighet

ljudets hastighet beror faktiskt starkt på temperaturen och i mycket mindre grad på luftfuktigheten.av luften. Wikipedia säger att ljudets hastighet ökar med ungefär 0,6 m / s per grad Celsius., För de flesta fall vid 20°C kan du bara använda 343 m/s men om du vill få mer exakta avläsningar kan du beräkna ljudets hastighet med följande formel:

v (m/s) = 331.3 + (0.606 × t)

v = ljudets hastighet (m/s)
t = lufttemperatur (°c)

denna formel inkluderar inte luftfuktigheten eftersom dess effekt på ljudets hastighet är endast mycket liten.

nedan kan du hitta en handledning om hur du använder en DHT11 temperatur-och fuktighetsgivare för att kalibrera ljudets hastighet och få en mer exakt distansläsning med HC-SR04.,

hur HC-SR04 fungerar

på framsidan av HC-SR04-sensorn kan du hitta två silvercylindrar( ultraljudsomvandlare), en är sändaren av ljudvågorna och den andra är mottagaren. För att låta sensorn generera En sonic burst måste du ställa in Trig-stiftet högt för minst 10 µs. Sensorn skapar sedan en 8-cykel utbrott av ultraljud vid 40 kHz.

denna sonic burst färdas med ljudets hastighet och studsar tillbaka och tas emot av mottagaren av sensorn. Echo-stiftet matar sedan ut den tid som ljudvågorna reste i mikrosekunder.,

Du kan använda funktionenpulseIn() I Arduino-koden för att läsa pulsens längd från Eko-pin. Därefter kan du använda formeln som nämns ovan för att beräkna avståndet mellan sensorn och objektet.,NCY

40 kHz mätområde 2 – 400 cm upplösning 3 mm mätvinkel 15 grader Trigger insignal 10 µs hög puls kostnad kontrollera pris

För mer information kan du kolla in databladet nedan:

ledningar – anslutning av HC-SR04 till Arduino Uno

databladet som du kan använda för kopplingsschema nedan visar hur du ansluter HC-SR04-sensorn till Arduino.,

HC-SR04 med Arduino kopplingsschema

kodexemplen nedan använder digital pin 2 och 3 för trigger respektive echo pin, men naturligtvis kan du ändra detta till vilken digital pin du vill.,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 ladda upp följande exempelkod till din Arduino med hjälp av Arduino IDE. Därefter kommer jag att förklara för dig hur koden fungerar.

hur koden fungerar

först definieras utlösningsstiftet och eko-pin-koden. Jag kallar dem trigPinochEchoPin. Triggerstiftet är anslutet till digital pin 2 och eko-stiftet till digital pin 3 på Arduino.

uttalandet#define används för att ge ett namn till ett konstant värde., Kompilatorn kommer att ersätta alla referenser till denna konstant med det definierade värdet när programmet sammanställs. Så överallt nämner du trigPin, kompilatorn kommer att ersätta den med värdet 2 när programmet sammanställs.

// Define Trig and Echo pin:#define trigPin 2#define echoPin 3

nästa jag definierade två variabler: durationoch distance. Varaktighet lagrar tiden mellan att skicka och ta emot ljudvågorna. Avståndsvariabeln används för att lagra det beräknade avståndet.,

// Define variables:long duration;int distance;

i setup() börjar du med att ställa in trigPin som en utgång och echoPin som en ingång. Därefter initierar du seriell kommunikation med en baud-hastighet på 9600. Senare kommer du att visa det uppmätta avståndet i den seriella bildskärmen, som kan nås med Ctrl+Shift+M eller verktyg > seriell bildskärm. Se till att baud-hastigheten också är inställd på 9600 i den seriella bildskärmen.

iloop() utlöser du sensorn genom att ställa in trigPin hög för 10 µs., Observera att för att få en ren signal börjar du med att rensa trigPin genom att ställa in den låg för 5 mikrosekunder.

därefter måste du läsa längden på pulsen som skickas av echoPin. Jag använder funktionen pulseIn() för detta. Denna funktion väntar på att stiftet ska gå från lågt till högt, startar timing, väntar sedan på att stiftet ska gå lågt och stoppar timing.

därefter kan du beräkna avståndet med hjälp av formeln som nämns i introduktionen av denna handledning.

slutligen skrivs det beräknade avståndet ut i den seriella bildskärmen.,

exempelkod HC-SR04 med Arduino och NewPing bibliotek

NewPing bibliotek skriven av Tim Eckel kan användas med många ultraljud avståndssensorer. Den senaste versionen av detta bibliotek kan laddas ner här på bitbucket.org. du kanske märker att koden nedan, som använder newping-biblioteket, är mycket kortare än koden vi använde tidigare. Dessutom innehåller NewPing-biblioteket några andra trevliga funktioner. Det låter dig ställa in ett maxavstånd för att läsa, det kommer inte att släpa i en hel sekund när inget eko tas emot och det har ett inbyggt medianfilter.,

Du kan installera biblioteket genom att gå till Sketch> inkludera Bibliotek> Lägg till .ZIP Bibliotek i Arduino IDE.

biblioteket innehåller några exempel som du kan använda, men du måste ändra dem för att matcha din maskinvaruinställning. Jag har inkluderat en modifierad exempelkod nedan som kan användas med samma ledningsinställning som tidigare.

Du kan också användadistance = sonar.ping_cm() ellerdistance = sonar.ping_in() som returnerar det uppmätta avståndet i hela centimeter eller tum., Med den här funktionen behöver du inte ta en tidsmätning och beräkna avståndet.

Interfacing ultraljudssensorer i 3-pin-läge

NewPing-biblioteket gör det också enkelt att interagera med ultraljudssensorer när man bara använder 1 I / O-stift. Detta kan vara praktiskt om du har väldigt få i / O-stift tillgängliga eller om du vill använda en 3-stifts ultraljudssensor som Parallax Ping.

för att skapa en 3-pin-inställning (GND, 5V och SIG) måste du ansluta både utlösningsstiftet och eko-stiftet till samma digitala stift på Arduino., I koden är det enda du behöver ändra linje 6-7 och definiera samma stift för både trigPin och echoPin. Till exempel digital pin 2.

//Define Trig and Echo pin#define trigPin 2#define echoPin 2

hur man använder ping_median() digitalt filter

det viktigaste Jag gillar med NewPing-biblioteket är att det har ett inbyggt medianfilter. Detta filter kan avsevärt förbättra noggrannheten i din HC-SR04 avläsningar. Funktionenping_median() tar många tidsmätningar i rad, kastar bort avläsningarna utanför intervallet och sedan medelvärden de återstående., Som standard tar det 5 avläsningar men du kan ange hur många det ska ta. Ersätt rad 19 med nedanstående rader.

int iterations = 5;duration = sonar.ping_median(iterations);

exempelkod HC-SR04 med I2C LCD och Arduino

för att visa det uppmätta avståndet på en 2004 eller 1602 I2C LCD, allt du behöver göra är att göra följande anslutningar och ladda upp koden nedan. HC-SR04-sensorn är ansluten på samma sätt som tidigare.

HC-SR04 med Arduino och I2C LCD kopplingsschema.,

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 stiftplacering), har också SDA (data line) och SCL (scl) stiftlister nära AREF pin-kod. Kontrollera tabellen nedan för mer information.,f43445″>

Arduino Uno A4 A5 Arduino Nano A4 A5 Arduino Micro 2 3 Arduino Mega 2560 20 21 Arduino Leonardo 2 3 Arduino Due 20 21
I2C pin locations for different Arduino boards

The code uses the LiquidCrystal_I2C library, which you can download here on GitHub., Se till att du har det här exakta biblioteket installerat! Den innehåller också tråden.h bibliotek, som låter dig kommunicera med I2C-enheter. Detta bibliotek bör komma förinstallerat med Arduino IDE.

om du vill veta mer om hur du styr en I2C LCD med Arduino, kan du kolla in hela handledningen här.

  • hur man styr ett tecken I2C LCD med Arduino

Observera att jag använde en 20 x 4 LCD-skärm. Om du har en annan storlek LCD (16 x 2 är också vanligt) måste du ändra rad 20 till LiquidCrystal_I2C lcd(0x27,16,2);., Om din LCD inte har standard I2C-adress, 0x27, kolla in den fullständiga I2C-handledningen där jag förklarar hur du kan ta reda på vad adressen är.

exempelkod HC-SR04 med temperaturgivare DHT11 och Arduino

som tidigare nämnts beror ljudets hastighet starkt på lufttemperaturen. Om du vill mäta långa avstånd (3-4 m) kan det vara en bra idé att lägga till en DHT11 eller DHT22 temperatur-och fuktighetsgivare till din inställning. Detta gör att du kan kalibrera ljudets hastighet i realtid och därigenom öka noggrannheten i dina mätningar.,

det är väldigt enkelt att lägga till en DHT11-sensor. Kopplingsschemat nedan visar vilka anslutningar du behöver göra. Observera att jag använder en DHT11 med en breakout board, så jag behöver bara koppla upp 3 stift. Var noga med att kontrollera sensorns etikett, stiften kan vara olika beroende på tillverkaren. HC-SR04-sensorn är ansluten på samma sätt som tidigare.

HC-SR04 med Arduino och DHT11 kopplingsschema.,

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., Det här biblioteket fungerar bara om du också har adafruit_sensor-biblioteket installerat, vilket också är tillgängligt på GitHub. Du kan också ladda ner de två biblioteken genom att klicka på knapparna nedan:

Du kan klicka på knappen längst upp till höger i kodfältet för att kopiera koden.

Exempel kod HC-SR04 med DHT11 och I2C LCD

HC-SR04 med Arduino, DHT11 och I2C LCD-kopplingsschema.

koden nedan kan användas för att kombinera alla 3 exempel ovan., Den visar både temperaturen, ljudets hastighet och det uppmätta avståndet på LCD-skärmen.

HC-SR04 mått

nedan hittar du måtten på HC-SR04 ultraljudssensor. Jag har märkt att det finns några små skillnader mellan tillverkare, så jag rekommenderar dubbelkontroll mot din egen sensor.

HC-SR04 mått

HC-SR04 CAD

Jag har skapat grundläggande CAD-ritningar av HC-SR04 ultraljudssensor som du kan ladda ner nedan.,

slutsats

i den här artikeln har jag visat dig hur HC-SR04 ultraljudsavståndssensor fungerar och hur du kan använda den med Arduino. Jag hoppas att du hittade den användbar och informativ. Om du gjorde, Vänligen dela den med en vän som också gillar Elektronik!

personligt projekt: för några månader sedan byggde jag en interaktiv vägginstallation med några vänner. Vi använde runt 30 ultraljudssensorer för att upptäcka människor som gick framför väggen. Väggen inkluderade ljus och ljudeffekter som förändrats beroende på hur långt borta människor stod.,

foto: Guus Schoonewille

Jag skulle älska att veta vilka projekt du planerar att bygga (eller redan har byggt) med HC-SR04-avståndssensorn. Om du har några frågor, förslag eller om du tror att saker saknas i den här handledningen, lämna en kommentar nedan.