, Jak používat HC-SR04 Ultrazvukový Senzor Vzdálenosti s Arduino
HC-SR04 je levný, snadno použitelný ultrazvukový snímač vzdálenosti, s rozsahem 2 až 400 cm. Běžně se používá při vyhýbání se překážkám robotům a automatizačním projektům. V tomto tutoriálu se dozvíte, jak senzor funguje a jak jej používat s Arduino.
zahrnul jsem 5 příkladů s schématem zapojení a kódem, abyste mohli začít experimentovat se senzorem., Nejprve se podíváme na příklad, který nepoužívá knihovnu Arduino. Dále vám ukážu, jak můžete pomocí nové knihovny vytvořit kompaktnější kód.
levné ultrazvukové senzory vzdálenosti / blízkosti jsou skvělé, ale v některých projektech možná budete potřebovat vodotěsný senzor, jako je JSN-SR04T nebo IR senzor, který není ovlivněn změnami teploty.,on
AliExpress
Software
Arduino IDE |
Makerguides.,com je účastníkem Amazon Services LLC Associates Program, pobočka reklamní program navržen tak, aby prostředky pro stránky, jak vydělat reklamní poplatky, reklamu a propojení na produkty na Amazon.com.
Jak funguje ultrazvukový snímač vzdálenosti práce?
ultrazvukové senzory pracují tak, že vydávají zvukové vlny s frekvencí, která je příliš vysoká, aby člověk slyšel. Tyto zvukové vlny cestují vzduchem rychlostí zvuku, zhruba 343 m / s., Pokud je před senzorem objekt, zvukové vlny se odrážejí zpět a přijímač ultrazvukového senzoru je detekuje. Měřením, kolik času uplynulo mezi odesláním a přijímáním zvukových vln, lze vypočítat vzdálenost mezi senzorem a objektem.
Při 20°C je rychlost zvuku přibližně 343 m/s nebo 0.034 cm/µs., Řekněme, že čas mezi odesláním a přijímáním zvukových vln je 2000 mikrosekund. Pokud vynásobíte rychlost zvuku v době, kdy zvukové vlny cestovaly, získáte vzdálenost, kterou zvukové vlny urazily.
Distance = Speed X Time
ale to není výsledek, který hledáme. Vzdálenost mezi snímačem a objektem, je ve skutečnosti jen polovina této vzdálenosti, protože zvukové vlny se vzdalovali od senzoru k objektu a zpět od objektu ke snímači. Takže musíte výsledek rozdělit o dva.,
Vzdálenost (cm) = Rychlost zvuku (cm/µs) x Čas (µs) / 2
A tak, na příklad, to se stane:
Vzdálenost (cm) = 0.0343 (cm/µs) × 2000 (µs) / 2 = 34.3 cm
Teplotní závislost rychlosti zvuku
rychlost zvuku ve skutečnosti silně závisí na teplotě a v daleko menší míře na vlhkosti vzduchu. Wikipedia uvádí, že rychlost zvuku se zvyšuje se zhruba 0,6 m / s na stupeň Celsia., Pro většinu případů při 20°C stačí použít 343 m/s, ale pokud chcete získat více přesné údaje, lze vypočítat rychlost zvuku s následující vzorec:
V (m/s) = 331.3 + (0.606 × T),
V = Rychlost zvuku (m/s)
T = Teplota Vzduchu (°C)
Tento vzorec neobsahuje vlhkost, protože jeho vliv na rychlost zvuku, je jen velmi malá.
níže najdete návod, jak pomocí snímače teploty a vlhkosti DHT11 kalibrovat rychlost zvuku a získat přesnější čtení vzdálenosti pomocí HC-SR04.,
Jak HC-SR04 funguje
V přední části HC-SR04 senzor, můžete najít dvě stříbrné válce (ultrazvukové snímače), jedna je vysílač zvukových vln a druhý je přijímač. Chcete-li nechat senzor generovat zvukový výbuch, musíte nastavit Trig pin vysoko po dobu nejméně 10 µs. Senzor pak vytvoří 8 cyklový výbuch ultrazvuku při 40 kHz.
tento zvukový výbuch se pohybuje rychlostí zvuku a odrazí se zpět a obdrží přijímač senzoru. Echo pin pak vydává čas, který zvukové vlny cestovaly v mikrosekundách.,
můžete použít funkci pulseIn()
v kódu Arduino pro čtení délky pulsu z Echo pin. Poté můžete použít výše uvedený vzorec pro výpočet vzdálenosti mezi senzorem a objektem.,ncy
Pro více informací, můžete se podívat na datasheet níže:
Kabeláž – Připojení HC-SR04 pro Arduino UNO
kabeláž diagram níže ukazuje, jak propojit HC-SR04 senzor pro Arduino.,
kód příklady použití digitální pin 2 a 3 pro trigger a echo pin, respektive, ale samozřejmě můžete změnit na libovolný digitální pin, který chcete.,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., Následující příkladový kód můžete nahrát do Arduina pomocí Arduino IDE. Dále vám vysvětlím, jak kód funguje.
jak kód funguje
nejprve je definován spouštěcí pin a Echo pin. Říkám jim trigPin
a . Spouštěcí pin je připojen k digitálnímu pinu 2 a Echo pin k digitálnímu pinu 3 na Arduinu.
příkaz #define
se používá k zadání názvu konstantní hodnoty., Kompilátor nahradí všechny odkazy na tuto konstantu definovanou hodnotou, když je program sestaven. Takže všude, kde uvedete trigPin
, kompilátor jej nahradí hodnotou 2, když je program sestaven.
// Define Trig and Echo pin:#define trigPin 2#define echoPin 3
dále jsem definovány dvě proměnné: duration
distance
. Doba trvání ukládá čas mezi odesláním a přijímáním zvukových vln. Proměnná vzdálenosti se používá k uložení vypočtené vzdálenosti.,
// Define variables:long duration;int distance;
v setup()
, začnete nastavením trigpinu jako výstupu a epopinu jako vstupu. Dále inicializujete sériovou komunikaci rychlostí 9600. Později se vám budou zobrazovat naměřená vzdálenost v serial monitoru, který lze přistupovat pomocí Ctrl+Shift+M nebo Nástroje > Serial Monitor. Ujistěte se, že přenosová rychlost je také nastavena na hodnotu 9600 v sériovém monitoru.
v loop()
spustíte snímač nastavením trigpinu vysoko na 10 µs., Všimněte si, že chcete-li získat čistý signál, začnete tím, že zrušíte trigPin tím, že jej nastavíte na 5 mikrosekund.
Dále musíte přečíst délku pulzu odeslaného echopinem. K tomu používám funkci pulseIn()
. Tato funkce čeká, až kolík přejde z nízké na vysokou, začne načasování, pak čeká, až pin klesne a zastaví načasování.
poté můžete vypočítat vzdálenost pomocí vzorce uvedeného v úvodu tohoto tutoriálu.
nakonec je vypočtená vzdálenost vytištěna na sériovém monitoru.,
Příklad kódu HC-SR04 s Arduino a knihovny NewPing
knihovny NewPing napsal Tim Eckel může být použit s mnoha ultrazvukové senzory vzdálenosti. Nejnovější verzi této knihovny si můžete stáhnout zde bitbucket.org. možná si všimnete, že níže uvedený kód, který používá novou knihovnu, je mnohem kratší než kód, který jsme použili dříve. Kromě toho nová knihovna obsahuje i některé další pěkné funkce. Umožňuje nastavit maximální vzdálenost pro čtení, nebude zaostávat po celou sekundu, když nebude přijata žádná ozvěna a má vestavěný střední filtr.,
knihovnu můžete nainstalovat tak, že přejdete na Sketch > zahrnout knihovnu > přidat .ZIP knihovna v Arduino IDE.
knihovna obsahuje několik příkladů, které můžete použít, ale budete je muset upravit tak, aby odpovídaly nastavení hardwaru. Níže jsem zahrnul upravený příkladový kód, který lze použít se stejným nastavením kabeláže jako dříve.
můžete také použít distance = sonar.ping_cm()
nebo distance = sonar.ping_in()
, který vrací naměřenou vzdálenost v celých centimetrech nebo palcích., S touto funkcí nemusíte provádět měření délky a vypočítat vzdálenost.
propojení ultrazvukových senzorů v režimu 3 pin
knihovna NewPing také usnadňuje rozhraní s ultrazvukovými senzory při použití pouze 1 i / o pin. To může být užitečné, pokud máte k dispozici jen velmi málo i/o kolíků nebo chcete-li použít 3 pin ultrazvukový senzor, jako je Parallax Ping.
Chcete-li vytvořit nastavení pin 3 (GND, 5V a SIG), musíte připojit spouštěcí pin i echo pin ke stejnému digitálnímu kolíku na Arduinu., V kódu je jediná věc, kterou musíte změnit, řádek 6-7 a definovat stejný pin jak pro trigPin, tak pro echoPin. Například digitální pin 2.
//Define Trig and Echo pin#define trigPin 2#define echoPin 2
Jak používat ping_median() digitální filtr
hlavní věc se mi líbí o knihovny NewPing je, že má vestavěný mediánového filtru. Tento filtr může výrazně zlepšit přesnost vašich hodnot HC-SR04. Funkce ping_median()
trvá mnoho měření trvání v řadě, zahodí hodnoty mimo rozsah a poté průměry zbývajících., Ve výchozím nastavení to bude trvat 5 čtení, ale můžete určit, kolik by mělo trvat. Nahraďte linku 19 pod řádky.
int iterations = 5;duration = sonar.ping_median(iterations);
Příklad kódu HC-SR04 s I2C LCD a Arduino
K zobrazení naměřené vzdálenosti na 2004 nebo I2C 1602 LCD, vše, co musíte udělat, je provést následující připojení a nahrát kód níže. Snímač HC-SR04 je připojen stejným způsobem jako dříve.
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., Arduino UNO s rozložením R3 (1.0 pinout) má také hlavičky kolíků SDA (datová čára) a SCL (hodinová čára) v blízkosti pin AREF. Další podrobnosti naleznete v tabulce níže.,f43445″>
The code uses the LiquidCrystal_I2C library, which you can download here on GitHub., Ujistěte se, že máte nainstalovanou tuto přesnou knihovnu! Zahrnuje také drát.knihovna h, která umožňuje komunikovat se zařízeními I2C. Tato knihovna by měla být předinstalována s Arduino IDE.
Pokud se chcete dozvědět více o tom, jak ovládat I2C LCD s Arduino, můžete se podívat na celý tutoriál zde.
- jak ovládat znak I2C LCD s Arduino
Všimněte si, že jsem použil LCD displej 20 x 4. Pokud máte jinou velikost LCD (16 x 2 je také běžné), musíte změnit řádek 20 na LiquidCrystal_I2C lcd(0x27,16,2);
., Pokud váš LCD nemá výchozí adresu I2C, 0x27, podívejte se na kompletní tutoriál I2C, kde vysvětlím, jak můžete zjistit, jaká je adresa.
Příklad kódu HC-SR04 s DHT11 čidlo teploty a Arduino
Jak již bylo zmíněno, rychlost zvuku je silně závislá na teplotě vzduchu. Pokud chcete měřit velké vzdálenosti (3-4 m), může být dobré přidat do nastavení snímač teploty a vlhkosti DHT11 nebo DHT22. To vám umožní kalibrovat rychlost zvuku v reálném čase a tím zvýšit přesnost vašich měření.,
přidání senzoru DHT11 je opravdu jednoduché. Schéma zapojení níže ukazuje, která připojení je třeba provést. Všimněte si, že používám DHT11 s breakout board, takže potřebuji pouze připojit 3 kolíky. Nezapomeňte zkontrolovat štítek senzoru, pořadí kolíků se může lišit v závislosti na výrobci. Snímač HC-SR04 je připojen stejným způsobem jako dříve.
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., Tato knihovna funguje pouze v případě, že máte nainstalovanou knihovnu Adafruit_Sensor, která je k dispozici také na Githubu. Obě knihovny si můžete také stáhnout kliknutím na níže uvedená tlačítka:
kliknutím na tlačítko v pravém horním rohu pole kódu zkopírujete kód.
Příklad kódu HC-SR04 s DHT11 a I2C LCD
níže uvedený kód lze použít ke kombinaci všech 3 výše uvedených příkladů., Zobrazuje jak teplotu, rychlost zvuku, tak měřenou vzdálenost na LCD displeji.
HC-SR04 rozměry
níže naleznete rozměry ultrazvukového senzoru HC-SR04. Všiml jsem si, že mezi výrobci existují malé rozdíly, proto doporučuji dvojitou kontrolu proti vlastnímu senzoru.
HC-SR04 CAD
vytvořil jsem základní CAD výkresy ultrazvukový senzor HC-SR04, které si můžete stáhnout níže.,
Závěr
V tomto článku jsem vám ukázal, jak HC-SR04 ultrazvukový senzor vzdálenosti pracuje a jak můžete jej použít s Arduinem. Doufám, že to bylo užitečné a informativní. Pokud jste to udělali, Prosím, podělte se s přítelem, který má také rád elektroniku!
osobní projekt: před několika měsíci jsem postavil interaktivní nástěnnou instalaci s několika přáteli. Použili jsme asi 30 ultrazvukových senzorů vzdálenosti k detekci lidí, kteří chodí před stěnou. Stěna zahrnovala světla a zvukové efekty, které se změnily v závislosti na tom, jak daleko lidé stáli.,
ráda bych věděla, jaké projekty máte v plánu na budování (nebo již postavený) s HC-SR04 vzdálenost snímače. Máte-li jakékoli dotazy, návrhy nebo si myslíte, že v tomto tutoriálu chybí věci, zanechte prosím komentář níže.