Articles

Hoe gebruik je een HC-SR04 Ultrasone afstandssensor met Arduino

De HC-SR04 is een goedkope, eenvoudig te gebruiken ultrasone afstandssensor, met een bereik van 2 tot 400 cm. Het wordt vaak gebruikt in obstakels vermijden van robots en automatiseringsprojecten. In deze tutorial leert u hoe de sensor werkt en hoe u hem met Arduino kunt gebruiken.

Ik heb 5 voorbeelden opgenomen met een bedradingsschema en code zodat u kunt beginnen met experimenteren met uw sensor., We zullen eerst kijken naar een voorbeeld dat geen gebruik maakt van een Arduino bibliotheek. Vervolgens zal ik je laten zien hoe je de newping library kunt gebruiken om een compactere code te maken.

Goedkope ultrasone afstands – / nabijheidssensoren zijn geweldig, maar in sommige projecten heeft u mogelijk een waterdichte sensor nodig, zoals de JSN-SR04T of een IR-sensor die niet wordt beïnvloed door temperatuurveranderingen.,on

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

Software

Arduino IDE

Makerguides.,com is een deelnemer aan de Amazon Services LLC Associates Program, een affiliate reclame-programma ontworpen om een middel voor sites om reclame kosten te verdienen door reclame en linken naar producten op Amazon.com.

Hoe werkt een ultrasone afstandssensor?

ultrasone sensoren werken door geluidsgolven uit te zenden met een frequentie die te hoog is voor een mens om te horen. Deze geluidsgolven reizen door de lucht met een geluidssnelheid van ongeveer 343 m/s., Als er een object voor de sensor staat, worden de geluidsgolven terug gereflecteerd en detecteert de ontvanger van de ultrasone sensor deze. Door te meten hoeveel tijd er is verstreken tussen het verzenden en ontvangen van de geluidsgolven, kan de afstand tussen de sensor en het object worden berekend.

werkingsprincipe voor ultrasone afstandssensoren. Bron: https://www.maxbotix.com/

bij 20°C bedraagt de geluidssnelheid ongeveer 343 m/s of 0,034 cm/µs., Laten we zeggen dat de tijd tussen het verzenden en ontvangen van de geluidsgolven is 2000 microseconden. Als je de snelheid van het geluid vermenigvuldigt met de tijd dat de geluidsgolven reisden, krijg je de afstand die de geluidsgolven reisden.

afstand = snelheid X tijd

maar dat is niet het resultaat dat we zoeken. De afstand tussen de sensor en het object is eigenlijk slechts de helft van deze afstand omdat de geluidsgolven van de sensor naar het object en terug van het object naar de sensor reisden. Dus je moet het resultaat door twee delen.,

afstand (cm) = geluidssnelheid (cm/µs) × tijd (µs) / 2

en dus voor het voorbeeld wordt dit:

afstand (cm) = 0,0343 (cm/µs) × 2000 (µs) / 2 = 34,3 cm

temperatuurafhankelijkheid van de geluidssnelheid

de geluidssnelheid is eigenlijk sterk afhankelijk van de temperatuur en in veel mindere mate van de vochtigheid van de lucht. Wikipedia stelt dat de snelheid van geluid toeneemt met ongeveer 0,6 m / s per graad Celsius., Voor de meeste gevallen bij 20°C kunt u gewoon 343 m/s gebruiken, maar als u nauwkeuriger metingen wilt krijgen, kunt u de geluidssnelheid berekenen met de volgende formule:

V (m/s) = 331.3 + (0,606 × T)

v = geluidssnelheid (m/s)
T = luchttemperatuur (°C)

deze formule bevat geen vochtigheid omdat het effect op de geluidssnelheid slechts zeer klein is.

hieronder vindt u een tutorial over het gebruik van een DHT11 Temperatuur-en vochtigheidssensor om de geluidssnelheid te kalibreren en een nauwkeurigere afstand af te lezen met de HC-SR04.,

hoe de HC-SR04 werkt

aan de voorzijde van de HC-SR04-sensor bevinden zich twee zilveren cilinders (ultrasone transducers), waarvan de ene de zender van de geluidsgolven is en de andere de ontvanger. Om de sensor een sonische uitbarsting te laten genereren, moet u de Trig-pin hoog instellen voor ten minste 10 µs. De sensor maakt dan een 8-cyclus uitbarsting van ultrageluid bij 40 kHz.

Deze sonische uitbarsting reist met de snelheid van het geluid en stuitert terug en wordt ontvangen door de ontvanger van de sensor. De Echopin voert dan de tijd uit dat de geluidsgolven in microseconden reisden.,

u kunt de functie pulseIn() in de Arduino-code gebruiken om de lengte van de puls van de Echopin af te lezen. Daarna kunt u de bovenstaande formule gebruiken om de afstand tussen de sensor en het object te berekenen.,ncy

40 kHz Meetbereik 2 – 400 cm Resolutie 3 mm het Meten van hoek 15 graden Trigger input-signaal 10 µs hoge hartslag Kosten prijs Controleren

Voor meer informatie kunt u kijken op de datasheet hieronder:

Bekabeling – Aansluiten van HC-SR04 te Arduino UNO

Het schema hieronder toont u hoe te verbinden met de HC-SR04 sensor aan de Arduino.,

HC-SR04 with Arduino wiring diagram

de codevoorbeelden hieronder gebruiken digitale pin 2 en 3 voor respectievelijk de trigger-en echopin, maar natuurlijk kunt u dit naar elke digitale pin die je wilt.,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., U kunt de volgende voorbeeldcode uploaden naar uw Arduino met behulp van de Arduino IDE. Vervolgens zal ik u uitleggen hoe de code werkt.

hoe de code werkt

eerst worden de trigger pin en de echo pin gedefinieerd. Ik noem ze trigPin en EchoPin. De trekkerspeld wordt verbonden met digitale speld 2 en de echopeld aan digitale speld 3 op Arduino.

het statement #define wordt gebruikt om een naam te geven aan een constante waarde., De compiler zal alle verwijzingen naar deze constante vervangen door de gedefinieerde waarde wanneer het programma wordt gecompileerd. Dus overal waar je trigPin noemt, zal de compiler het vervangen door de waarde 2 wanneer het programma gecompileerd wordt.

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

vervolgens definieerde ik twee variabelen: duration en distance. Duur slaat de tijd tussen het verzenden en ontvangen van de geluidsgolven. De afstandsvariabele wordt gebruikt om de berekende afstand op te slaan.,

// Define variables:long duration;int distance;

In de setup(), begint u met het instellen van de trigPin als uitvoer en de echoPin als invoer. Vervolgens initialiseer je seriële communicatie met een baudrate van 9600. Later wordt de gemeten afstand weergegeven in de seriële monitor, die toegankelijk is met Ctrl+Shift+M of Tools > seriële Monitor. Zorg ervoor dat de baudrate ook op 9600 is ingesteld in de seriële monitor.

In de loop() activeert u de sensor door de trigPin hoog in te stellen voor 10 µs., Merk op dat om een schoon signaal te krijgen je begint met het wissen van de trigPin door het laag voor 5 microseconden.

vervolgens moet u de lengte van de puls lezen die door de echopine wordt verzonden. Ik gebruik hiervoor de functie pulseIn(). Deze functie wacht op de speld om van laag naar hoog te gaan, begint timing, dan wacht op de speld om laag te gaan en stopt timing.

daarna kunt u de afstand berekenen met behulp van de formule die wordt genoemd in de inleiding van deze tutorial.

ten slotte wordt de berekende afstand afgedrukt in de seriële monitor.,

voorbeeld code HC-SR04 met Arduino en NewPing library

De newping library geschreven door Tim Eckel kan gebruikt worden met veel ultrasone afstandssensoren. De nieuwste versie van deze bibliotheek kan hier worden gedownload op bitbucket.org het valt je misschien op dat de onderstaande code, die gebruik maakt van de newping bibliotheek, een stuk korter is dan de code die we eerder gebruikten. Naast dat, de newping bibliotheek bevat een aantal andere leuke functies. Hiermee kunt u een maximale leesafstand instellen, Het zal geen volledige seconde achterblijven wanneer er geen echo wordt ontvangen en het heeft een ingebouwd mediaanfilter.,

u kunt de bibliotheek installeren door naar Sketch > Include Library > Add te gaan .ZIP-bibliotheek in de Arduino IDE.

de bibliotheek bevat enkele voorbeelden die u kunt gebruiken, maar u zult ze moeten aanpassen om aan uw hardware-instellingen te voldoen. Ik heb hieronder een aangepaste voorbeeldcode opgenomen die kan worden gebruikt met dezelfde bedradingsopstelling als voorheen.

u kunt ook distance = sonar.ping_cm() of distance = sonar.ping_in() gebruiken die de gemeten afstand in hele centimeters of inches retourneert., Met deze functie hoeft u geen duurmeting te doen en de afstand te berekenen.

interfacing ultrasone sensoren in 3 pin modus

De newping bibliotheek maakt het ook gemakkelijk om te communiceren met ultrasone sensoren met slechts 1 I / O pin. Dit kan handig zijn als je heel weinig I/O pinnen beschikbaar hebt of als je een 3 pins ultrasone sensor wilt gebruiken zoals de Parallax Ping.

om een 3-pins setup (GND, 5V en SIG) te maken, moet je zowel de trigger-pin als de echopin verbinden met dezelfde digitale pin op de Arduino., In de code, het enige wat je hoeft te veranderen is Lijn 6-7 en definieer dezelfde pin voor zowel de trigPin en de echoPin. Bijvoorbeeld digitale pin 2.

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

hoe gebruik ik ping_median() digital filter

het belangrijkste wat ik leuk vind aan de newping library is dat het een ingebouwd mediaan filter heeft. Dit filter kan de nauwkeurigheid van uw HC-SR04-metingen aanzienlijk verbeteren. De functie ping_median() neemt vele duurmetingen op een Rij, gooit de buiten bereik metingen weg en gemiddelden dan de resterende., Standaard duurt het 5 metingen, maar u kunt opgeven hoeveel het moet nemen. Vervang regel 19 door onderstaande regels.

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

voorbeeld code HC-SR04 met I2C LCD en Arduino

om de gemeten afstand op een 2004 of 1602 I2C LCD weer te geven, hoeft u alleen de volgende verbindingen te maken en de onderstaande code te uploaden. De HC-SR04 sensor is op dezelfde manier aangesloten als voorheen.

HC-SR04 met Arduino-en I2C-lcd-bedradingsschema.,

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., Een Arduino UNO met de R3 lay-out (1.0 pinout), heeft ook de SDA (gegevenslijn) en SCL (kloklijn) speldkoppen dicht bij de AREF-speld. Bekijk de tabel hieronder voor meer details.,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., Zorg ervoor dat u deze exacte bibliotheek geïnstalleerd! Het bevat ook de draad.h bibliotheek, waarmee u kunt communiceren met I2C-apparaten. Deze bibliotheek moet vooraf geïnstalleerd zijn met de Arduino IDE.

Als u meer wilt weten over het besturen van een I2C LCD met Arduino, kunt u de volledige tutorial hier bekijken.

  • How to control a character I2C LCD with Arduino

merk op dat ik een 20 x 4 LCD display heb gebruikt. Als u een LCD-scherm van andere grootte heeft (16 x 2 is ook gebruikelijk) moet u Regel 20 veranderen in LiquidCrystal_I2C lcd(0x27,16,2);., Als uw LCD niet het standaard I2C adres, 0x27, check out de volledige I2C tutorial waar ik uitleggen hoe u kunt vinden wat het adres is.

voorbeeld code HC-SR04 met DHT11 temperatuursensor en Arduino

zoals eerder vermeld, hangt de geluidssnelheid sterk af van de luchttemperatuur. Als u lange afstanden (3-4 m) wilt meten, kan het een goed idee zijn om een DHT11 of DHT22 temperatuur-en vochtigheidssensor aan uw setup toe te voegen. Hiermee kunt u de geluidssnelheid in real time kalibreren en daarmee de nauwkeurigheid van uw metingen verhogen.,

Het toevoegen van een DHT11-sensor is heel eenvoudig. Het schakelschema hieronder toont u welke verbindingen u moet maken. Merk op dat ik gebruik een DHT11 met een breakout board, dus ik hoef alleen maar om draad omhoog 3 pinnen. Zorg ervoor dat u het etiket van de sensor controleert, de volgorde van de pinnen kan verschillen afhankelijk van de fabrikant. De HC-SR04 sensor is op dezelfde manier aangesloten als voorheen.

HC-SR04 met Arduino-en DHT11-bedradingsschema.,

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., Deze library werkt alleen als je ook de adafruit_sensor library hebt geïnstalleerd, die ook beschikbaar is op GitHub. U kunt de twee bibliotheken ook downloaden door op de onderstaande knoppen te klikken:

u kunt op de knop in de rechterbovenhoek van het codeveld klikken om de code te kopiëren.

voorbeeld code HC-SR04 met DHT11 en I2C LCD

HC-SR04 met Arduino, DHT11 en I2C lcd bedradingsschema.

de onderstaande code kan worden gebruikt om alle drie bovenstaande voorbeelden te combineren., Het toont zowel de temperatuur, De snelheid van het geluid en de gemeten afstand op het LCD-scherm.

HC-SR04 afmetingen

hieronder vindt u de afmetingen van de HC-SR04 ultrasone sensor. Ik heb gemerkt dat er enkele kleine verschillen zijn tussen fabrikanten, dus ik adviseer dubbele controle met uw eigen sensor.

HC-SR04 Dimensions

HC-SR04 CAD

Ik heb basis-CAD-tekeningen gemaakt van de HC-SR04 ultrasone sensor die u hieronder kunt downloaden.,

conclusie

In dit artikel heb ik u laten zien hoe de HC-SR04 ultrasone afstandssensor werkt en hoe u deze kunt gebruiken met Arduino. Ik hoop dat je het nuttig en informatief vond. Als je dat deed, deel het dan met een vriend die ook van elektronica houdt!

persoonlijk project: een paar maanden geleden bouwde ik een interactieve muur installatie met enkele vrienden. We gebruikten ongeveer 30 ultrasone afstandssensoren om mensen te detecteren die voor de muur lopen. De muur bevatte lichten en geluidseffecten die veranderden afhankelijk van hoe ver mensen stonden.,

foto: Guus Schoonewille

Ik zou graag willen weten welke projecten u van plan bent te bouwen (of al hebt gebouwd) met de HC-SR04 afstandssensor. Als u vragen, suggesties of als u denkt dat er dingen ontbreken in deze tutorial, laat dan een reactie hieronder.