Zobrazení: 164 Autor: Grace Čas vydání: 26. 7. 2021 Původ: místo
The Ultrazvukový senzor HC-SR04 je jedním z nejoblíbenějších modulů pro měření vzdálenosti pro projekty Arduino. Je široce používán v robotech vyhýbajících se překážkám, parkovacích senzorech, detekci hladiny, inteligentních odpadkových koších, měřičích vzdálenosti a dalších aplikacích bezkontaktního snímání.
Modul vysílá 40kHz ultrazvukové vlny přes vysílač. Když se zvuková vlna setká s předmětem, odráží se zpět k přijímači. Měřením času ozvěny a pomocí rychlosti zvuku dokáže Arduino vypočítat vzdálenost mezi senzorem a objektem.
| Parametr | Hodnota |
| Typické pracovní napětí | 5V DC |
| Statický pracovní proud | U některých verzí modulů méně než 5 mA |
| Provozní frekvence | 40kHz ultrazvuková vlna |
| Detekční vzdálenost | Běžný rozsah: 2 cm až 400 cm; některé verze s upraveným ziskem mohou podporovat delší dosah. |
| Detekční úhel | Obvykle do 15 stupňů; některé verze s vyšším ziskem mohou dosáhnout asi 30 stupňů. |
| Přesnost | Až asi 0,3 cm za vhodných testovacích podmínek |
| Slepá zóna | Minimální vzdálenost měření cca 2 cm |
Ultrazvukový modul HC-SR04 má čtyři piny: VCC, TRIG, ECHO a GND. Arduino vyšle krátký spouštěcí impuls na pin TRIG a poté přečte zpětný impuls z pinu ECHO.
| Kolík HC-SR04 | Připojení Arduino | Funkce |
| VCC | 5V | Napájení ultrazvukového modulu. |
| TRIG | Digitální pin 9 | Spouštěcí vstup. Arduino použije 10us puls pro zahájení měření rozsahu. |
| ECHO | Digitální pin 10 | Echo výstup. Arduino čte šířku pulzu pro výpočet vzdálenosti. |
| GND | GND | Zemní spojení. |
HC-SR04 pracuje na základě měření doby letu. Arduino posílá vysokoúrovňový spouštěcí signál v délce alespoň 10 mikrosekund na pin TRIG. Modul poté automaticky vyšle osm 40kHz ultrazvukových pulzů a čeká na odraženou ozvěnu.
Když je detekován odražený ultrazvukový signál, kolík ECHO vydá vysokoúrovňový impuls. Doba trvání tohoto pulzu je doba cesty ultrazvukové vlny tam a zpět.
Vzdálenost = čas vysoké úrovně ozvěny × rychlost zvuku / 2
V kódu Arduino je běžný zjednodušený vzorec:
Vzdálenost v cm = trvání × 0,0343 / 2
Proces časování je jednoduchý: Arduino udržuje TRIG krátce na nízké úrovni, vyšle 10us vysoký puls a poté vrátí TRIG na nízkou úroveň. HC-SR04 vyšle ultrazvukový impulz a nastaví ECHO na vysokou úroveň, dokud se nevrátí odražený signál nebo dokud nevyprší čas měření.
Abyste se vyhnuli nestabilním hodnotám, ponechte mezi měřeními krátkou prodlevu. Běžně se používá cyklus měření asi 60 ms, takže předchozí ultrazvukové echo má čas zmizet před dalším spuštěním.
Funkce Arduino pulseIn() se používá k měření, jak dlouho zůstane digitální pin HIGH nebo LOW. Pro HC-SR04 používá Arduino pulseIn(echoPin, HIGH) ke čtení šířky pulsu na vysoké úrovni z pinu ECHO.
| Syntax | Význam |
| pulseIn(pin, hodnota) | Čte dobu trvání HIGH nebo LOW pulzu. |
| pulseIn(pin, hodnota, časový limit) | Čte puls s hodnotou časového limitu v mikrosekundách. |
Doporučuje se použít časový limit. Pokud není vrácena žádná ozvěna, funkce může přestat čekat a vrátit 0 místo blokování programu na příliš dlouhou dobu.
Zapojení je jednoduché. Připojte VCC k 5V, GND k GND, TRIG k digitálnímu výstupnímu pinu Arduino a ECHO k digitálnímu vstupnímu pinu Arduino. Následující příklad používá Arduino Uno, TRIG na kolíku 9 a ECHO na kolíku 10.
Následující typický program pro Arduino odešle spouštěcí impuls 10us, přečte šířku impulsu ECHO, vypočítá vzdálenost v centimetrech a vytiskne výsledek na sériovém monitoru.
const int trigPin = 9; const int echoPin = 10; dlouhé trvání; vzdálenost plovákuCm; 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); trvání = pulseIn(echoPin, HIGH, 30000); if (trvání == 0) { Serial.println('Mimo rozsah'); } else { vzdálenostCm = trvání * 0,0343 / 2; Serial.print('Vzdálenost: '); Serial.print(vzdálenostCm); Serial.println(' cm'); } zpoždění(60); }
Pokud v sériovém monitoru vidíte hodnoty vzdálenosti, ultrazvukový senzor HC-SR04 a kabeláž Arduino fungují správně. Údaje o vzdálenosti pak můžete použít pro detekci překážek, řízení pohybu robota, automatické dveře, připomenutí parkování nebo projekty hladiny kapalin.
Udržujte měřený objekt v doporučeném rozsahu vzdálenosti a mimo slepou zónu 2 cm.
Pro lepší odraz ultrazvuku použijte plochý a pevný cílový povrch.
Vyhněte se měření měkkých, šikmých, porézních nebo zvuk pohlcujících materiálů.
Používejte stabilní 5V napájecí zdroj a kabely udržujte krátké a bezpečné.
Přidejte časový limit k pulseIn(), abyste zabránili dlouhému blokování, když se nevrátí žádná ozvěna.
Pro snížení šumu zprůměrujte nebo vyfiltrujte střední hodnotu několika naměřených hodnot.
Pro vyšší přesnost kompenzujte teplotu, protože rychlost zvuku se mění s teplotou vzduchu.
| Aplikace | Jak se HC-SR04 používá |
| Robot vyhýbání se překážkám | Detekuje blízké předměty a pomáhá robotovi změnit směr. |
| Parkovací senzor | Měří vzdálenost mezi vozidlem a překážkou. |
| Detekce hladiny kapaliny | Bezdotykově měří vzdálenost od senzoru k povrchu kapaliny. |
| Chytrý odpadkový koš | Detekuje blízkou ruku nebo předmět a spustí automatické otevření víka. |
Chcete-li použít ultrazvukový snímač HC-SR04 s Arduinem, připojte VCC k 5V, GND k GND, TRIG k digitálnímu výstupnímu kolíku a ECHO k digitálnímu vstupnímu kolíku. Odešlete spouštěcí impuls 10us, odečtěte dobu trvání echa pomocí pulseIn() a vypočítejte vzdálenost pomocí vzorce doby letu.
HC-SR04 je levný, snadno použitelný a vhodný pro mnoho projektů měření vzdálenosti Arduino. Chcete-li dosáhnout nejlepších výsledků, věnujte pozornost cílovému povrchu, úhlu měření, slepé zóně, stabilnímu výkonu, zpracování časového limitu a teplotním vlivům.
Arduino posílá 10us impuls na TRIG pin. HC-SR04 vysílá osm 40kHz ultrazvukových pulzů a nastavuje kolík ECHO na vysokou úroveň, dokud se nevrátí odražený zvuk. Arduino měří tento čas pulzu a vypočítává vzdálenost.
Vzorec je vzdálenost = trvání × rychlost zvuku / 2. V centimetrech je běžný vzorec pro Arduino vzdálenostCm = trvání × 0,0343 / 2, kde se trvání měří v mikrosekundách.
Naměřená doba echa je doba oběhu ze snímače k objektu a zpět ke snímači. Vydělení 2 udává jednosměrnou vzdálenost mezi senzorem a objektem.
Můžete použít většinu digitálních pinů Arduino. V mnoha příkladech je TRIG připojen k digitálnímu kolíku 9 a ECHO k digitálnímu kolíku 10. Kód musí odpovídat kolíkům použitým ve vašem zapojení.
Mezi běžné příčiny patří uvolněná kabeláž, nestabilní napájení 5 V, nesprávná čísla pinů TRIG nebo ECHO, žádný objekt v dosahu, šikmé cílové povrchy, měkké materiály, zablokované hlavy senzorů nebo žádný časový limit ve funkci pulseIn().
Slepá zóna je minimální vzdálenost, kde modul nemůže spolehlivě měřit. U HC-SR04 je slepá zóna obvykle asi 2 cm. Objekty blíže než toto mohou způsobit nestabilní hodnoty.
Ano, HC-SR04 lze použít pro jednoduché bezkontaktní projekty vodní hladiny, pokud je senzor chráněn před vlhkostí a namontován nad hladinou kapaliny. Pro vlhké, venkovní nebo průmyslové nádrže se doporučuje vodotěsný ultrazvukový senzor.
Použijte stabilní napájení, udržujte senzor kolmo k cíli, vyhněte se měkkým nebo šikmým povrchům, přidejte pulseIn timeout, proveďte více měření, použijte mediánovou filtraci a mezi měřeními ponechejte asi 60 ms.