- Potřebné materiály:
- Kruhový diagram:
- Jak modul HC-SR04 vlastně funguje:
- Měření vzdálenosti mezi dvěma ultrazvukovými senzory (HC-SR04):
- Program pro snímač vysílače:
- Program pro senzor přijímače:
- Pracovní:
- Improvizovaná myšlenka - kalibrace senzoru pomocí známé vzdálenosti:
Ultrazvukový senzor (HC-SR04) se běžně používá k určení vzdálenosti objektu od jednoho konkrétního bodu. U Arduina to bylo celkem snadné a kód je také docela jednoduchý. Ale v tomto článku se pokusíme vyzkoušet něco jiného s těmito populárními senzory HC-SR04. Pokusíme se vypočítat vzdálenost mezi dvěma ultrazvukovými senzory, tj. Uděláme, aby jeden senzor fungoval jako vysílač a druhý senzor jako přijímač. Tímto způsobem můžeme sledovat polohu jednoho vysílače pomocí mnoha ultrazvukových přijímačů, toto sledování se nazývá triangulace a lze jej použít pro automatické dokovací roboty sledující zavazadla a další podobné aplikace. Zjištění vzdálenosti mezi dvěma americkými senzory může znít jako docela jednoduchý úkol, ale čelil jsem několika výzvám, které jsou diskutovány v tomto projektu.
Technika popsaná v tomto článku není dostatečně přesná a nemusí být užitečná v jakýchkoli reálných systémech bez úprav. V době této dokumentace jsem nenašel nikoho, kdo by získal výsledky tak blízké mým, takže jsem se podělil o své názory na to, jak jsem fungoval, aby lidé, kteří to zkoušejí, nemuseli znovu vymýšlet kolo.
Potřebné materiály:
- Arduino (2Nos) - Libovolný model
- Modul HCSR04 (2Nos)
Kruhový diagram:
I když uděláme, aby jeden americký (ultrazvukový) senzor fungoval jako vysílač a druhý jako přijímač, je povinné propojit všechny čtyři piny senzorů s Arduino. Proč bychom měli Více o tom bude diskutováno později, ale prozatím bude schéma zapojení následující
Jak vidíte, schéma zapojení vysílače i přijímače je identické. Zkontrolujte také: Arduino Ultrasonic Sensor Interfacing
Jak modul HC-SR04 vlastně funguje:
Než budeme pokračovat, pochopme, jak senzor HC-SR04 funguje. Níže uvedený časový diagram nám pomůže pochopit fungování.
Senzor má dva piny Trigger a Echo, které se používají k měření vzdálenosti, jak je znázorněno na časovacím diagramu. Nejprve k zahájení měření bychom měli vyslat ultrazvukovou vlnu z vysílače, což lze provést nastavením spouštěcího kolíku vysoko na 10uS. Jakmile to bude provedeno, vysílačový kolík vyšle 8 zvukových výbuchů amerických vln. Tato americká vlna zasáhne objekt, který se odrazí zpět, a bude přijímán přijímačem.
Zde časový diagram ukazuje, že jakmile přijímač přijme vlnu, způsobí, že kolík Echo půjde vysoko po dobu, která se rovná době potřebné k tomu, aby vlna cestovala z amerického senzoru a dosáhla zpět k senzoru. Zdá se, že tento časový diagram není pravdivý.
Zakryl jsem část vysílače Tx (vysílač) a zkontroloval, zda se impuls Echo dostal vysoko, a ano, jde vysoko. To znamená, že Echo puls nečeká na to, až bude přijata americká (ultrazvuková) vlna. Jakmile vysílá americkou vlnu, jde vysoko a zůstane vysoko, dokud se vlna nevrátí zpět. Správné schéma časování by tedy mělo vypadat přibližně takto (omlouvám se za mé špatné schopnosti psaní)
Aby váš HC-SR04 fungoval pouze jako vysílač:
Je docela jednoduché, aby HC-SR04 fungoval pouze jako vysílač. Jak je znázorněno v časovacím diagramu, musíte deklarovat Trigger pin jako výstupní pin a zajistit, aby zůstal vysoký po dobu 10 mikrosekund. To zahájí výbuch ultrazvukových vln. Takže kdykoli chceme přenášet vlnu, musíme ovládat spouštěcí kolík snímače vysílače, pro který je uveden kód níže.
Aby váš HC-SR04 fungoval pouze jako přijímač:
Jak je znázorněno v časovacím diagramu, nemůžeme řídit vzestup kolíku Echo, protože souvisí se spouštěcím kolíkem. Neexistuje tedy žádný způsob, jak zajistit, aby HC-SR04 fungoval pouze jako přijímač. Můžeme ale použít hack, pouhým zakrytím vysílací části senzoru páskou (jak je znázorněno na obrázku níže) nebo krytkou, americká vlna nemůže uniknout mimo skříň vysílače a pin Echo nebude touto americkou vlnou ovlivněn.
Nyní, aby se pin ozvěny dostal vysoko, stačí vytáhnout tento falešný spouštěcí pin vysoko na 10 mikrosekund. Jakmile tento snímač přijímače dostane americkou vlnu přenášenou snímačem vysílače, echo pin poklesne.
Měření vzdálenosti mezi dvěma ultrazvukovými senzory (HC-SR04):
Doposud jsme pochopili, jak zajistit, aby jeden snímač fungoval jako vysílač a druhý jako přijímač. Nyní musíme vyslat ultrazvukovou vlnu ze snímače vysílače a přijmout ji snímačem přijímače a zkontrolovat čas potřebný k tomu, aby vlna mohla cestovat z vysílače do přijímače snadno, že? Ale bohužel !, máme tady problém a nebude to fungovat.
Vysílací modul a přijímací modul jsou daleko od sebe a když přijímací modul přijímá americkou vlnu z vysílacího modulu, nebude vědět, kdy vysílač vyslal tuto konkrétní vlnu. Bez znalosti počátečního času nemůžeme vypočítat čas a tedy ani vzdálenost. Abychom tento problém vyřešili, musí být Echo puls přijímacího modulu nastaven tak, aby se dostal vysoko přesně, když vysílač vysílá americkou vlnu. Jinými slovy, modul vysílače a modul přijímače by se měly spouštět současně. Toho lze dosáhnout následující metodou.
Ve výše uvedeném diagramu Tx představuje snímač vysílače a Rx představuje snímač přijímače. Jak je znázorněno, snímač vysílače bude vyroben k přenosu amerických vln s periodickým známým zpožděním, to je vše, co musí udělat.
V senzoru přijímače musíme nějakým způsobem nastavit spouštěcí kolík vysoko přesně během doby, kdy kolík vysílače jde vysoko. Zpočátku tedy náhodně nastavíme, aby přijímač spouštěl vysoko, což zůstane a zůstane vysoko, dokud echo pin neklesne. Tento echo pin se sníží, pouze když přijme americkou vlnu z vysílače. Jakmile se sníží, můžeme předpokládat, že se vysílač právě spustil. Nyní, s tímto předpokladem, jakmile se ozvěna sníží, můžeme počkat na známé zpoždění a poté spustit spuštění přijímače. To by částečně synchronizovalo spoušť vysílače i přijímače, a proto můžete číst okamžitou dobu trvání echo pulzu pomocí pulseIn () a vypočítat vzdálenost.
Program pro snímač vysílače:
Kompletní program pro modul vysílače naleznete ve spodní části stránky. Nedělá nic jiného než spouštět senzor vysílače v pravidelných intervalech.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Ke spuštění senzoru musíme vytvořit spouštěcí kolík tak, aby zůstal vysoký po dobu 10uS. Kód pro totéž je uveden výše
Program pro senzor přijímače:
V senzoru přijímače jsme zakryli oko vysílače senzoru, aby byl fiktivní, jak bylo popsáno výše. Nyní můžeme použít výše zmíněnou techniku k měření vzdálenosti mezi dvěma senzory. Celý program je uveden ve spodní části této stránky. Níže je vysvětleno několik důležitých řádků
Trigger_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); duration = pulseIn (echoPin, HIGH);
Zpočátku spustíme americký senzor pomocí funkce Trigger_US () a pak počkáme, až echo pin zůstane vysoký pomocí while smyčky. Jakmile se sníží, počkáme na předem stanovenou dobu trvání, tato doba by měla být někde mezi 10 až 30 mikrosekundami, které lze určit pomocí pokusu a omylu (Nebo můžete použít improvizovaný nápad uvedený níže). Po tomto zpoždění spusťte USA znovu pomocí stejné funkce a poté pomocí funkce pulseIn () vypočítejte dobu trvání vlny.
Nyní pomocí stejných starých vzorců můžeme vypočítat vzdálenost, jak je uvedeno níže
vzdálenost = doba trvání * 0,034;
Pracovní:
Proveďte připojení, jak je vysvětleno v programu. Zakryjte Tx část snímače přijímače, jak je znázorněno na obrázku. Poté nahrajte kód vysílače a kód přijímače, které jsou uvedeny níže, do vysílače a přijímače Arduino. Otevřete sériový monitor modulu přijímače a měli byste si všimnout vzdálenosti mezi dvěma moduly, které se zobrazují, jak je znázorněno na videu níže.
Poznámka: Tato metoda je pouze ideologie a nemusí být přesná ani uspokojivá. Chcete-li však dosáhnout lepších výsledků, můžete vyzkoušet níže uvedený improvizovaný nápad.
Improvizovaná myšlenka - kalibrace senzoru pomocí známé vzdálenosti:
Metoda, která byla dosud podivně vysvětlena, se zdá být uspokojivá, přesto pro můj projekt stačila. Rád bych se však také podělil o nevýhody této metody a způsob, jak je překonat. Jednou z hlavních nevýhod této metody je, že předpokládáme, že kolík Echo přijímače klesne nízko bezprostředně poté, co snímač vysílače vyslal americkou vlnu, což není pravda, protože vlně bude nějaký čas trvat, než se z vysílače do přijímače dostane. Spouštěč vysílače a spoušť přijímače proto nebudou v dokonalé synchronizaci.
Abychom to překonali, můžeme senzor nejprve kalibrovat pomocí známé vzdálenosti. Pokud je vzdálenost známa, budeme vědět čas potřebný k tomu, aby americká vlna dosáhla přijímače z vysílače. Pojďme si tento čas vzít jako Del (D), jak je znázorněno níže.
Nyní budeme přesně vědět, po jak dlouhé době bychom měli nastavit spouštěcí kolík přijímače na vysokou, abychom získali synchronizaci se spouštěčem vysílače. Tuto dobu trvání lze vypočítat pomocí Známého zpoždění (t) - Del (D). Nebyl jsem schopen tento nápad otestovat kvůli časovým omezením, takže si nejsem jistý, jak přesný by to fungovalo. Pokud to tedy zkusíte, dejte mi vědět výsledky prostřednictvím sekce komentářů.