- Materiály potrebné na výrobu robota na čistenie podláh na báze Arduino
- Prenosný vysávač
- Modul ultrazvukového snímača HC-SR04
- Podlahový senzor (IR senzor) na detekciu schodiska
- Schéma zapojenia robota na čistenie podláh na báze Arduino
- Budovanie obvodu pre robot na čistenie podláh na báze Arduino
- Arduino
Podľa súčasného scenára sme všetci tak zaneprázdnení prácou, že nemáme čas na poriadne upratovanie domu. Riešenie problému je veľmi jednoduché, stačí si kúpiť robotický vysávač pre domácnosť, ako je irobot roomba, ktorý vyčistí váš dom stlačením tlačidla. Ale také komerčné produkty sú častým problémom, ktorým sú náklady. Takže dnes sme sa rozhodli vyrobiť jednoduchý robot na čistenie podláh, ktorý sa nielen ľahko vyrába, ale stojí oveľa menej v porovnaní s komerčnými produktmi dostupnými na trhu. Častí čitatelia si možno pamätajú nášho vysávacieho robota Arduino, ktorý sme postavili už dávno, ale ten bol veľmi objemný a na pohyb potreboval veľkú olovenú batériu. Nový vysávač Arduino, ktoré tu postavíme, bude kompaktné a praktickejšie. Okrem toho bude mať tento robot ultrazvukové senzory a infračervený senzor priblíženia. Ultrazvukový senzor umožní robotovi vyhnúť sa prekážkam, aby sa mohol voľne pohybovať, kým nebude miestnosť správne vyčistená, a bezdotykový senzor mu pomôže zabrániť pádu zo schodov. Všetky tieto funkcie znejú zaujímavo, že? Takže poďme na to.
V jednom z našich minulých článkov sme vyrobili mnoho robotov, ako sú Self Balancing Robot, Automated Surface Desinfection Robot a Preventacle Avoiding Robot. Skontrolujte, či to pre vás znie zaujímavo.
Materiály potrebné na výrobu robota na čistenie podláh na báze Arduino
Pretože sme na zostavenie hardvérovej časti robota vysávača použili veľmi všeobecné komponenty, mali by ste byť schopní nájsť všetky z nich v miestnom hobby obchode. Tu je kompletný zoznam požadovaného materiálu spolu s obrázkom všetkých komponentov.
- Arduino Pro Mini - 1
- Ultrazvukový modul HC-SR04 - 3
- Vodič motora L293D - 1
- Motory 5Volt N20 a montážne konzoly - 2
- Motorové kolesá N20 - 2
- Prepínač - 1
- Regulátor napätia LM7805 - 1
- 7.4V lítium-iónová batéria - 1
- IR modul - 1
- Drevená doska - 1
- Koliesko - 1
- MDF
- Všeobecný prenosný vysávač
Prenosný vysávač
V časti s požiadavkami na komponenty sme hovorili o prenosnom vysávači, obrázky nižšie to presne ukazujú. Je to prenosný vysávač od Amazonu. To má veľmi jednoduchý mechanizmus. Skladá sa z troch častí v spodnej časti (malá komora na ukladanie prachu, v strednej časti je motor, ventilátor a zásuvka na batériu na vrchu (kryt alebo krytka na batériu). Má jednosmerný motor a ventilátor. Tento motor je priamo pripojený na 3 V (2 x 1,5 voltové AA batérie) pomocou jednoduchého prepínača. Pretože napájame nášho robota batériou s napätím 7,4 V, prerušíme pripojenie z internej batérie a napájame ho z 5 V napájanie. Odstránili sme teda všetky nepotrebné časti a zostal iba motor s dvojvodičovými drôtmi. To vidíte na obrázku nižšie.
Modul ultrazvukového snímača HC-SR04
Na detekciu prekážok používame populárny ultrazvukový snímač vzdialenosti HC-SR04 alebo ho môžeme nazvať snímače na vyhýbanie sa prekážkam. Práca je veľmi jednoduchá, po prvé, vysielací modul vyšle ultrazvukovú vlnu, ktorá cestuje vzduchom, narazí na prekážku a odrazí sa späť a prijímač túto vlnu prijme. Vypočítaním času pomocou Arduina môžeme určiť vzdialenosť. V predchádzajúcom článku o projekte Ultrazvukový snímač vzdialenosti založenom na Arduine sme veľmi dôkladne diskutovali o princípe práce tohto snímača. To môžete skontrolovať, ak sa chcete dozvedieť viac o module ultrazvukového diaľkového snímača HC-SR04.
Podlahový senzor (IR senzor) na detekciu schodiska
V časti o vlastnostiach sme hovorili o funkcii, pri ktorej robot dokáže zistiť schodisko a zabrániť pádu. Aby sme to dosiahli, používame IR senzor. Vytvoríme rozhranie medzi IR senzorom a Arduinom. Činnosť IR proximity senzora je veľmi jednoduchá, má IR LED a fotodiódu, IR LED vydáva IR svetlo a ak sa pred toto vyžarované svetlo dostane nejaká prekážka, odrazí sa to a odrazené svetlo bude detekované fotodiódou. Ale generované napätie z odrazu bude veľmi nízke. Aby sme to zvýšili, môžeme použiť komparátor op-amp, môžeme zosilniť a získať výstup. IR modulmá tri piny - Vcc, zem a výstup. Výstup sa zvyčajne zníži, keď sa pred snímač dostane prekážka. Môžeme to teda použiť na detekciu podlahy. Ak za zlomok sekundy zistíme zo senzora maximum, môžeme robot zastaviť, otočiť ho späť alebo urobiť čokoľvek, aby sme zabránili jeho pádu zo schodiska. V predchádzajúcom článku sme vytvorili verziu IR snímača priblíženia pomocou IR poľa a podrobne sme vysvetlili princíp práce. Ak sa chcete dozvedieť viac informácií o tomto snímači, môžete si to skontrolovať.
Schéma zapojenia robota na čistenie podláh na báze Arduino
Máme tri ultrazvukové senzory, ktoré detekujú prekážky. Takže musíme pripojiť všetky základy ultrazvukových senzorov a pripojiť ich k spoločnej zemi. Tiež pripojíme všetky tri Vcc snímača a pripojíme ho k spoločnému kolíku VCC. Ďalej pripojíme piny triggeru a echa k pinom PWM Arduina. Taktiež pripojíme VCC IR modulu na 5V a zem na zemný pin Arduina, výstupný pin modulu IR senzora ide na digitálny pin D2 Arduina. Pre vodič motora pripojíme dva uvoľňovacie piny na 5 V a tiež kolík napätia vodiča na 5 V, pretože používame 5voltové motory. V predchádzajúcom článku sme vytvorili štít Arduino Driver Driver Shield, ktorý môžete skontrolovať a zistiť ďalšie informácie o integrovanom obvode ovládača motora L293D.a jeho operácie. Arduino, ultrazvukové moduly, budič motora a motory pracujú na 5 voltoch, vyššie napätie ho zabije a my používame 7,4-voltovú batériu, na jej premenu na 5 voltov sa použije regulátor napätia LM7805. Pripojte vysávač priamo k hlavnému okruhu.
Budovanie obvodu pre robot na čistenie podláh na báze Arduino
Aby som získal nejaké predstavy o svojom robotovi, hľadal som online roboty do vysávačov a získal som obrázky robotov okrúhleho tvaru. Takže som sa rozhodol postaviť robota okrúhleho tvaru. Na zostavenie robota a tela robota mám veľa možností, ako napríklad penový plech, MDF, lepenka atď. Vyberám si však MDF, pretože je tvrdý a má niektoré vlastnosti odolné voči vode. Ak to robíte, môžete sa rozhodnúť, ktorý materiál si pre svojho robota vyberiete.
Na zostavenie robota som vzal list MDF, potom som nakreslil dva kruhy s polomerom 8 CM a vo vnútri tohto kruhu som nakreslil aj ďalší kruh s polomerom 4 CMna osadenie vysávača. Potom som vykrojila kruhy. Taktiež som vyrezal a odstránil príslušné kúsky pre cestu kolesa (pre lepšie pochopenie pozri obrázky). Nakoniec som urobil tri malé otvory pre otočné koliesko. Ďalším krokom je namontovanie motorov na základňu pomocou jeho konzol, tiež umiestnenie a pripevnenie otočného kolieska do jeho polohy. Potom umiestnite ultrazvukové senzory doľava, doprava a do stredu robota. IR modul tiež pripojte k spodnej strane robota. Nezabudnite pridať vypínač na vonkajšej strane. To je všetko o stavbe robota. Ak ste v tomto okamihu zmätení, môžete si prečítať nasledujúce obrázky.
Ako vrchnú časť som na penový plát nakreslil aj kruh s polomerom 11 CM a nastrihal ho. Pre rozstup medzi hornou a spodnou časťou som nastrihal tri kusy plastovej rúrky dlhé 4 CM. Potom som na spodnú časť nalepil plastové rozpery a potom som nalepil hornú časť. Bočné časti robota môžete podľa potreby zakryť plastom alebo podobnými materiálmi.
Arduino
Celý kód tohto projektu je uvedený na konci dokumentu. Tento kód Arduino je podobný kódu ultrazvukového snímača vzdialenosti založeného na Arduine, jediná zmena je v detekcii podlahy. V nasledujúcich riadkoch vysvetľujem, ako kód funguje. V tomto prípade nepoužívame žiadne ďalšie knižnice. Ďalej sme kód popísali podrobne. Na dekódovanie údajov o vzdialenosti zo senzora HC-SR04 nepoužívame žiadne ďalšie knižnice, pretože je to veľmi jednoduché. V nasledujúcich riadkoch sme si popísali ako. Najprv musíme definovať Trigger Pin a Echo Pin pre všetky tri ultrazvukové snímače vzdialenosti, ktoré sú pripojené k doske Arduino. V tomto projekte máme tri piny Echo a tri piny Trigger. Upozorňujeme, že 1 je ľavý snímač, 2 je predný snímač a 3 je pravý snímač.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Potom sme definovali premenné pre vzdialenosť, ktoré sú všetky premennými typu (int) a pre trvanie sme sa rozhodli použiť (long). Opäť máme z každého tri. Taktiež som definoval celé číslo na ukladanie stavu pohybu, o ktorom si povieme neskôr v tejto časti.
dlhé trvanie1; dlhé trvanie2; dlhé trvanie3; int distanceleft; int distancia; int distanceright; int a = 0;
Ďalej v sekcii nastavenia musíme vytvoriť všetky perspektívne piny ako vstupné alebo výstupné pomocou funkcie pinModes () . Ak chcete odoslať ultrazvukové vlny z modulu, musíme povoliť spúšťací kolík na vysokú hodnotu, tj všetky spúšťacie kolíky by mali byť definované ako VÝSTUP. Aby sme dostali echo, musíme si prečítať stav kolíkov echa, takže všetky kolíky echa by sa mali definovať ako VSTUP. Povolíme tiež sériový monitor na riešenie problémov. Aby som prečítal stav IR modulov, definoval som irpin ako vstup.
pinMode (trigPin1, VÝSTUP); pinMode (trigPin2, VÝSTUP); pinMode (trigPin3, VÝSTUP); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
A tieto digitálne piny sú definované ako VÝSTUP pre vstup budiča motora.
pinMode (4, VÝSTUP); pinMode (7, VÝSTUP); pinMode (8, VÝSTUP); pinMode (12, VÝSTUP);
V hlavnej slučke máme tri sekcie pre tri senzory. Všetky sekcie fungujú rovnako, ale každá z nich pre rôzne senzory. V tejto časti prečítame vzdialenosť prekážky od každého snímača a uložíme ju do každého definovaného celého čísla. Aby sme mohli prečítať vzdialenosť, najskôr sa musíme uistiť, že spúšťacie kolíky sú čisté, preto musíme na 2 µs nastaviť spúšťací kolík na LOW. Teraz, aby sme vytvorili ultrazvukovú vlnu, musíme otočiť spúšťací kolík HIGH na 10 µs. Toto vyšle ultrazvukový zvuk a pomocou funkcie pulseIn () môžeme načítať cestovný čas a túto hodnotu uložiť do premennej „ duration “. Táto funkcia má 2 parametre, prvý z nich je názov echo pinu a pre druhý môžete písať buďVYSOKÁ alebo NÍZKA. HIGH znamená, že funkcia pulseIn () počká, kým pin nezačne HIGH spôsobený odrazenou zvukovou vlnou, a začne počítať, potom počká, kým pin nezačne LOW, keď zvuková vlna skončí, čo zastaví počítanie. Táto funkcia udáva dĺžku impulzu v mikrosekundách. Pre výpočet vzdialenosti vynásobíme trvanie 0,034 (rýchlosť zvuku vo vzduchu je 340 m / s) a vydelíme ho 2 (je to spôsobené pohybom zvukovej vlny tam a späť). Nakoniec uložíme vzdialenosť každého snímača do zodpovedajúcich celých čísel.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = duration1 * 0,034 / 2;
Po získaní vzdialenosti od každého snímača môžeme ovládať motory pomocou príkazu if, teda riadime pohyb robota. Je to veľmi jednoduché, najskôr sme zadali hodnotu vzdialenosti prekážky, v tomto prípade je to 15 cm (zmeňte túto hodnotu podľa svojho želania). Potom sme dali podmienky podľa tejto hodnoty. Napríklad, keď pred ľavý snímač príde prekážka (to znamená, že vzdialenosť ľavého snímača by mala byť nižšia alebo rovná 15 cm) a ďalšie dve vzdialenosti sú vysoké (to znamená, že pred nimi nie je žiadna prekážka), potom pomocou funkcie digitálneho zápisu môžeme motory riadiť doprava. Neskôr som skontroloval stav IR snímača. Ak je robot na podlahe, hodnota IR kolíka bude NÍZKA, a ak nie, potom bude hodnotaVYSOKÁ. Potom som túto hodnotu uložil do premennej int s . Podľa tohto stavu ideme riadiť robota.
Táto časť kódu sa používa na pohyb robota dopredu a dozadu :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); oneskorenie (1 000); a = 1; }
Ale pri tejto metóde nastáva problém, keď sa motor pohybuje dozadu, podlaha sa vráti späť a robot sa bude pohybovať dopredu a bude sa opakovať, aby sa robot uviazol. Aby sme to prekonali, uložíme hodnotu (1) do int po pochopení, že nie je prítomná podlaha. Tento stav kontrolujeme aj pri ďalších pohyboch.
Po zistení neprítomnosti podlahy sa robot nebude pohybovať vpred. Namiesto toho sa posunie doľava, týmto spôsobom sa môžeme vyhnúť problémom.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancer> 15 && distanceright> 15))
Vo vyššie uvedenom stave. Najskôr robot skontroluje stav podlahy a celočíselnú hodnotu. Robot sa posunie vpred, iba ak sú splnené všetky podmienky.
Teraz môžeme písať príkazy pre vodič motora. To bude poháňať pravý motor dozadu a ľavý motor dopredu, čím sa robot otočí doprava.
Táto časť kódu sa používa na presun robota doprava:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Ak robot zistí, že podlaha nie je prítomná, hodnota sa zmení na 1 a robot sa presunie doľava. Po odbočení doľava sa hodnota „a“ zmení na 0 z 1.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distanceright> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); oneskorenie (100); a = 0; }
Táto časť kódu sa používa na presunutie robota doľava:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
To je všetko pre výrobu inteligentného robotického vysávača na báze Arduino. Kompletné fungovanie projektu nájdete vo videu prepojenom v dolnej časti tejto stránky. Ak máte akékoľvek otázky, komentujte nižšie.