- Potrebné materiály:
- Schéma zapojenia:
- Ako modul HC-SR04 vlastne funguje:
- Meranie vzdialenosti medzi dvoma ultrazvukovými snímačmi (HC-SR04):
- Program pre snímač vysielača:
- Program pre snímač prijímača:
- Pracovné:
- Improvizovaná myšlienka - kalibrácia snímača pomocou známej vzdialenosti:
Ultrazvukový senzor (HC-SR04) sa bežne používa na zistenie vzdialenosti objektu od jedného konkrétneho bodu. U Arduina to bolo celkom ľahké a kód je tiež dosť jednoduchý. Ale v tomto článku sa pokúsime vyskúšať niečo iné s týmito populárnymi snímačmi HC-SR04. Pokúsime sa vypočítať vzdialenosť medzi dvoma ultrazvukovými snímačmi, to znamená, urobíme jeden snímač pôsobiacim ako vysielač a druhý snímač pôsobiacim ako prijímač. Týmto spôsobom môžeme sledovať polohu jedného vysielača pomocou mnohých ultrazvukových prijímačov, tomuto sledovaniu sa hovorí triangulácia a je možné ho použiť pre automatických dokovacích robotov na sledovanie batožiny a na podobné aplikácie. Nájdenie vzdialenosti medzi dvoma snímačmi v USA môže znieť ako dosť jednoduchá úloha, ale čelil som niekoľkým výzvam, o ktorých sa hovorí v tomto projekte.
Technika diskutovaná v tomto článku nie je celkom presná a nemusí byť užitočná v akýchkoľvek skutočných systémoch bez úprav. V čase tejto dokumentácie som nenašiel nikoho, kto by dosahoval výsledky tak blízko ako ja, takže som sa podelil o svoje názory na to, ako som fungoval, aby ľudia, ktorí to skúšajú, nemuseli koleso znova vynájsť.
Potrebné materiály:
- Arduino (2Nos) - ľubovoľný model
- Modul HCSR04 (2Nos)
Schéma zapojenia:
Aj keď chystáme, aby jeden americký (ultrazvukový) senzor fungoval ako vysielač a druhý ako prijímač, je povinné prepojiť všetky štyri piny senzorov s Arduino. Prečo by sme mali Viac o tom bude diskutovaných neskôr, ale zatiaľ bude schéma zapojenia nasledovná
Ako vidíte, schéma zapojenia vysielača aj prijímača je rovnaká. Skontrolujte tiež: rozhranie ultrazvukového senzora Arduino
Ako modul HC-SR04 vlastne funguje:
Predtým, ako budeme pokračovať, pochopíme, ako funguje snímač HC-SR04. Nižšie uvedený časový diagram nám pomôže pochopiť fungovanie.
Senzor má dva kolíky Trigger a Echo, ktoré sa používajú na meranie vzdialenosti, ako je znázornené na časovacom diagrame. Najskôr na spustenie merania by sme mali vyslať ultrazvukovú vlnu z vysielača, čo je možné dosiahnuť nastavením spúšťacieho kolíka vysoko na 10uS. Hneď ako to urobíte, kolík vysielača vyšle 8 zvukových výbuchov amerických vĺn. Táto americká vlna zasiahne objekt, ktorý sa odrazí späť, a bude prijatý prijímačom.
Tu časový diagram ukazuje, že akonáhle prijímač prijme vlnu, spôsobí, že pin Echo sa zvýši na dobu, ktorá sa rovná času potrebnému na to, aby vlna prešla od amerického senzora a dostala sa späť k senzoru. Zdá sa, že tento časový diagram nie je pravdivý.
Zakryl som časť Tx (vysielača) môjho snímača a skontroloval, či sa impulz Echo dostal vysoko, a áno, ide vysoko. To znamená, že impulz Echo nečaká na to, kým ním bude prijatá americká (ultrazvuková) vlna. Akonáhle vysiela vlnu USA, ide vysoko a zostane vysoká, kým sa vlna nevráti späť. Správny časový diagram by mal byť teda asi taký, ako je uvedené nižšie (prepáčte za moje slabé schopnosti písania)
Ako zabezpečiť, aby váš HC-SR04 fungoval iba ako vysielač:
Je celkom jednoduché, aby HC-SR04 fungoval iba ako vysielač. Ako je znázornené v časovom diagrame, musíte štrbinu Trigger deklarovať ako výstupný kolík a zaistiť jej vysokú hodnotu 10 mikrosekúnd. To spôsobí výbuch ultrazvukovej vlny. Takže kedykoľvek chceme vysielať vlnu, musíme len ovládať spúšťací kolík snímača vysielača, pre ktorý je uvedený kód nižšie.
Ako zabezpečiť, aby váš HC-SR04 fungoval iba ako prijímač:
Ako je znázornené na časovom diagrame, nemôžeme riadiť vzostup kolíka Echo, pretože súvisí so spúšťacím kolíkom. Nie je teda možné, aby sme HC-SR04 prinútili pracovať iba ako prijímač. Môžeme však použiť hack, len tak, že pokryjete časť vysielača snímača páskou (ako je znázornené na obrázku nižšie) alebo čiapkou, americká vlna nemôže uniknúť mimo plášť vysielača a pin Echo nebude touto americkou vlnou ovplyvnený.
Teraz, aby bol pin ozveny vysoký, musíme tento atrapový spúšťací kolík vytiahnuť vysoko na 10 mikrosekúnd. Akonáhle tento snímač prijímača dostane americkú vlnu vysielanú snímačom vysielača, echo pin poklesne.
Meranie vzdialenosti medzi dvoma ultrazvukovými snímačmi (HC-SR04):
Doteraz sme pochopili, ako dosiahnuť, aby jeden snímač fungoval ako vysielač a druhý ako prijímač. Teraz musíme vysielať ultrazvukovú vlnu zo snímača vysielača a prijímať ju snímačom prijímača a skontrolovať čas potrebný na to, aby vlna prešla z vysielača do prijímača ľahko, nie? Ale bohužiaľ !, máme tu problém a nebude to fungovať.
Vysielací modul a prijímací modul sú ďaleko od seba a keď prijímací modul prijme vlnu USA z vysielacieho modulu, nebude vedieť, kedy vysielač poslal túto konkrétnu vlnu. Bez znalosti času začiatku nemôžeme vypočítať čas a teda ani vzdialenosť. Aby sa tento problém vyriešil, musí byť impulz ozveny prijímacieho modulu nastavený na vysokú hodnotu presne vtedy, keď modul vysielača vysiela americkú vlnu. Inými slovami, modul vysielača a modul prijímača by sa mali spúšťať súčasne. To je možné dosiahnuť nasledujúcou metódou.
Na vyššie uvedenom diagrame Tx predstavuje snímač vysielača a Rx predstavuje snímač prijímača. Ako je znázornené, snímač vysielača bude vyrobený na prenos amerických vĺn s periodicky známym oneskorením, to je všetko, čo musí urobiť.
V snímači prijímača musíme nejako dosiahnuť, aby sa spúšťací kolík dostal vysoko presne počas doby, keď sa kolík vysielača zvýši. Spočiatku teda náhodne nastavíme spúšťač prijímačov tak, aby šiel vysoko, čo zostane vysoko, až kým echo pin neklesne nízko. Tento pin ozveny sa zníži, iba keď prijme americkú vlnu z vysielača. Takže akonáhle dôjde k nízkej hodnote, môžeme predpokladať, že sa práve spustil snímač vysielača. Teraz, s týmto predpokladom, akonáhle echo klesne nízko, môžeme počkať na známe oneskorenie a potom spustiť spúšťač prijímačov. To by čiastočne synchronizovalo spúšť vysielača aj prijímača, a preto môžete pomocou príkazu pulseIn () prečítať dobu trvania okamžitého impulzu echa a vypočítať vzdialenosť.
Program pre snímač vysielača:
Celý program pre vysielací modul nájdete v spodnej časti stránky. Nerobí nič iné, iba spúšťa snímač vysielača v pravidelných intervaloch.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Na spustenie snímača musíme vytvoriť spúšťací kolík, aby zostal vysoký po dobu 10uS. Kód, ktorý robí to isté, je uvedený vyššie
Program pre snímač prijímača:
V snímači prijímača máme zakryté oko vysielača snímača, aby bol fiktívny, ako bolo uvedené vyššie. Teraz môžeme použiť vyššie uvedenú techniku na meranie vzdialenosti medzi dvoma snímačmi. Celý program je uvedený v spodnej časti tejto stránky. Ďalej je vysvetlených niekoľko dôležitých riadkov
Trigger_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); duration = pulseIn (echoPin, HIGH);
Spočiatku spúšťame americký senzor pomocou funkcie Trigger_US () a potom počkáme, kým echo pin nezostane vysoký pomocou while cyklu. Akonáhle sa zníži, počkáme na vopred určené trvanie, toto trvanie by malo byť niekde medzi 10 až 30 mikrosekúnd, čo sa dá určiť pomocou pokusu a omylu (Alebo môžete použiť improvizovaný nápad uvedený nižšie). Po tomto oneskorení znovu spustite USA pomocou rovnakej funkcie a potom pomocou funkcie pulzIn () vypočítajte trvanie vlny.
Teraz pomocou rovnakých starých vzorcov môžeme vypočítať vzdialenosť, ako je uvedené nižšie
vzdialenosť = trvanie * 0,034;
Pracovné:
Pripojte podľa pokynov v programe. Zakryte Tx časť snímača prijímača, ako je znázornené na obrázku. Potom nahrajte kód vysielača a kód prijímača, ktoré sú uvedené nižšie, do vysielača a prijímača Arduino. Otvorte sériový monitor modulu prijímača a mali by ste si všimnúť, že sa zobrazuje vzdialenosť medzi dvoma modulmi, ako je to znázornené na videu nižšie.
Poznámka: Táto metóda je iba ideológia a nemusí byť presná alebo uspokojivá. Môžete však vyskúšať improvizovaný nápad uvedený nižšie, aby ste dosiahli lepšie výsledky.
Improvizovaná myšlienka - kalibrácia snímača pomocou známej vzdialenosti:
Metóda, ktorá bola zatiaľ zvláštne vysvetlená, sa javí ako uspokojivá, pre môj projekt však postačujúca. Rád by som sa však podelil o nevýhody tejto metódy a spôsob ich prekonania. Jednou z hlavných nevýhod tejto metódy je to, že predpokladáme, že kolík Echo prijímača padne nízko bezprostredne po tom, čo snímač vysielača vyslal americkú vlnu, čo nie je pravda, pretože vlne bude trvať určitý čas, kým sa z vysielača do prijímača dostane. Preto spúšťač vysielača a spúšť prijímača nebudú v dokonalej synchronizácii.
Aby sme to prekonali, môžeme senzor nakalibrovať najskôr pomocou známej vzdialenosti. Ak je vzdialenosť známa, poznáme čas potrebný na to, aby sa americká vlna dostala z vysielača k prijímaču. Poďme tento čas brať ako Del (D), ako je uvedené nižšie.
Teraz budeme presne vedieť, po akom čase by sme mali nastaviť spúšťací kolík prijímača na vysoký, aby sa synchronizovala so spúšťou vysielača. Túto dobu trvania je možné vypočítať pomocou Známeho oneskorenia (t) - Del (D). Túto myšlienku som nebol schopný otestovať z dôvodu časových obmedzení, takže si nie som istý, ako presná bude. Ak to teda náhodou vyskúšate, dajte mi vedieť výsledky prostredníctvom sekcie komentárov.