- Požadované komponenty:
- Ultrazvukový senzorový modul:
- Vysvetlenie obvodu:
- Ako to funguje:
- Vysvetlenie programovania:
Roboty sú stroje, ktoré znižujú úsilie ľudí v ťažkých prácach automatizáciou úloh v priemysle, továrňach, nemocniciach atď. Väčšina robotov je ovládaná pomocou niektorých riadiacich jednotiek alebo komponentov, ako sú tlačidlá, diaľkové ovládače, joysticky, počítače, gestá a vykonanie nejakého príkazu pomocou radiča alebo procesora. Ale dnes sme tu s automatickým robotom, ktorý sa pohybuje autonómne bez akýchkoľvek vonkajších udalostí a vyhýba sa všetkým prekážkam, ktoré mu bránia v ceste, áno, hovoríme o robotovi vyhýbajúcom sa prekážkam. V tomto projekte sme použili pohon Raspberry Pi a motor na pohon robota a ultrazvukový senzor na detekciu objektov v ceste robota.
Predtým sme sa zaoberali mnohými užitočnými robotmi. Nájdete ich v našej sekcii Robotické projekty.
Požadované komponenty:
- Malinový koláč
- Ultrazvukový senzorový modul HC-SR04
- Podvozok ROBOT so skrutkami
- Jednosmerné motory
- L293D IC
- Kolesá
- Chlebová doska
- Rezistor (1k)
- Kondenzátor (100 nF)
- Pripojovacie vodiče
- Napájací zdroj alebo napájacia banka
Ultrazvukový senzorový modul:
Prekážka vyhýbajúcu Robot je Automatizované Robot, a to nemusí byť riadený pomocou ľubovoľného diaľkového ovládača. Tieto typy automatizovaných robotov majú niektoré senzory „šiesteho zmyslu“, ako sú detektory prekážok, detektor zvuku, detektor tepla alebo detektory kovov. Tu sme vykonali detekciu prekážok pomocou ultrazvukových signálov. Na tento účel sme použili modul ultrazvukového snímača.
Ultrazvukové senzory sa bežne používajú na detekciu predmetov a na určenie vzdialenosti prekážky od senzora. Je to vynikajúci nástroj na meranie vzdialenosti bez akéhokoľvek fyzického kontaktu, ako je napríklad meranie hladiny vody v nádrži, meranie vzdialenosti, robot zabraňujúci prekážkam atď. Takže tu sme detekovali objekt a merali sme vzdialenosť pomocou ultrazvukového senzora a Raspberry Pi.
Ultrazvukový senzor HC-SR04 sa používa na meranie vzdialenosti v rozmedzí 2cm - 400cm s presnosťou na 3mm. Modul snímača pozostáva z ultrazvukového vysielača, prijímača a riadiaceho obvodu. Ultrazvukový senzor sa skladá z dvoch kruhových očí, z ktorých jedno sa používa na vysielanie ultrazvukovej vlny a druhé na jej príjem.
Môžeme vypočítať vzdialenosť objektu na základe času potrebného na návrat späť k senzoru ultrazvukovou vlnou. Pretože čas a rýchlosť zvuku sú známe, môžeme vzdialenosť vypočítať podľa nasledujúcich vzorcov.
- Vzdialenosť = (čas x rýchlosť zvuku vo vzduchu (343 m / s)) / 2.
Hodnota sa vydelí dvoma, pretože vlna sa pohybuje vpred a vzad a pokrýva rovnakú vzdialenosť. Čas potrebný na dosiahnutie prekážky je teda iba polovičný oproti celkovému času.
Vypočítali sme teda vzdialenosť (v centimetroch) od prekážky, ako je uvedené nižšie:
pulse_start = time.time () while GPIO.input (ECHO) == 1: # Skontrolujte, či je ECHO VYSOKÝ GPIO.output (led, False) pulse_end = time.time () pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17150 distance = round (distance, 2) avgDistance = avgDistance + distance
Kde pulse_duration je čas medzi odoslaním a prijatím ultrazvukového signálu.
Vysvetlenie obvodu:
Obvod je pre túto prekážku vyhýbajúcu sa robotovi pomocou Raspberry Pi veľmi jednoduchý. Modul ultrazvukového snímača, ktorý sa používa na detekciu objektov, je pripojený na pin GPIO 17 a 27 Raspberry Pi. K pohonu motorov robotov je k Raspberry Pi 3 pripojený IC Driver L293D. Vstupné piny 2, 7, 10 a 15 ovládača motora sú pripojené k pinom Raspberry Pi GPIO číslo 12, 16, 20 a 21. Tu sme na pohon robota použili dva jednosmerné motory, v ktorých je jeden motor pripojený k výstupným pinom 3 a 6 ovládača IC a druhý motor je pripojený k pinom 11 a 14 ovládača IC.
Ako to funguje:
Práca tohto autonómneho robota je veľmi jednoduchá. Keď je robot zapnutý a začne bežať, Raspberry Pi zmeria vzdialenosti objektov pred ním pomocou modulu ultrazvukového snímača a uloží ho do premennej. Potom RPi porovnáva túto hodnotu s preddefinovanými hodnotami a podľa toho prijíma rozhodnutia o pohybe robota doľava, doprava, dopredu alebo dozadu.
Tu v tomto projekte sme vybrali vzdialenosť 15 cm pre akékoľvek rozhodnutie Raspberry Pi. Teraz, kedykoľvek sa Raspberry Pi dostane do vzdialenosti menšej ako 15 cm od ľubovoľného objektu, Raspberry Pi zastaví robota, presunie ho dozadu a potom ho otočí doľava alebo doprava. Teraz pred opätovným posunutím vpred Raspberry Pi znova skontroluje, či sa v dosahu 15 cm nenachádza prekážka, ak áno, potom opakuje predchádzajúci proces, inak posuňte robota dopredu, kým znova nezistí prekážku alebo predmet.
Vysvetlenie programovania:
Pre program používame jazyk Python. Pred programovaním musí používateľ nakonfigurovať Raspberry Pi. Môžete si pozrieť naše predchádzajúce výukové programy Začíname s Raspberry Pi a Inštalácia a konfigurácia Raspbian Jessie OS v Pi.
Programová časť tohto projektu hrá veľmi dôležitú úlohu pri vykonávaní všetkých operácií. Najskôr zahrnieme požadované knižnice, inicializujeme premenné a definujeme piny pre ultrazvukový senzor, motor a komponenty.
import RPi.GPIO ako GPIO čas importu # knižnica času importu GPIO.setwarnings (False) GPIO.setmode (GPIO.BCM) TRIG = 17 ECHO = 27……………..
Potom sme vytvorili niektoré funkcie def forward (), def back (), def left (), def right () na pohyb robota vpred, dozadu, doľava alebo doprava a def stop () na zastavenie robota, skontrolujte funkcie v kóde uvedenom nižšie.
Potom sme v hlavnom programe spustili ultrazvukový senzor, prečítali sme čas medzi prenosom a príjmom signálu a vypočítali vzdialenosť. Tu sme tento proces kvôli lepšej presnosti opakovali už 5-krát. Už sme si vysvetlili proces výpočtu vzdialenosti pomocou ultrazvukového snímača.
i = 0 avgDistance = 0 pre i v rozsahu (5): GPIO.output (TRIG, False) time.sleep (0,1) GPIO.output (TRIG, True) time.sleep (0,00001) GPIO.output (TRIG, False) while GPIO.input (ECHO) == 0: GPIO.output (led, False) pulse_start = time.time () while GPIO.input (ECHO) == 1: # Skontrolujte, či je ECHO VYSOKÝ GPIO.output (led, False) pulse_end = time.time () pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17150 distance = round (distance, 2) avgDistance = avgDistance + distance
Nakoniec, ak Robot pred sebou nájde nejakú prekážku, potom po dosiahnutí vzdialenosti od prekážky sme naprogramovali iného robota.
if avgDistance <15: count = count + 1 stop () time.sleep (1) back () time.sleep (1.5) if (count% 3 == 1) & (flag == 0): right () flag = 1 else: left () flag = 0 time.sleep (1.5) stop () time.sleep (1) else: forward () flag = 0
Kompletný kód tohto robota na vyhýbanie sa prekážkam Raspberry Pi je uvedený nižšie s ukážkovým videom.