- Materiali, potrebni za izdelavo robota za čiščenje tal na osnovi Arduino
- Prenosni sesalnik
- Ultrazvočni senzorski modul HC-SR04
- Talni senzor (IR senzor) za zaznavanje stopnišč
- Shema vezja robota za čiščenje tal na osnovi Arduino
- Izdelava vezja za robota za čiščenje tal na osnovi Arduino
- Arduino
V današnjem scenariju smo vsi tako zaposleni s svojim delom, da nimamo časa za pravilno čiščenje hiše. Rešitev problema je zelo preprosta, kupiti morate le domačega robota za sesalnik, kot je irobot roomba, ki bo s pritiskom na gumb očistil vašo hišo. Toda takšni komercialni izdelki so pogosta težava, ki je stroškovna. Tako smo se danes odločili, da izdelamo preprost robot za čiščenje tal, ki ga ni le enostavno izdelati, ampak stane zelo manj kot komercialni izdelki, ki so na voljo na trgu. Pogosti bralci se morda spomnijo našega sesalnega robota Arduino, ki smo ga zgradili že zdavnaj, vendar je bil ta zelo zajet in je za premikanje potreboval veliko svinčevo baterijo. Novi sesalnik Arduino bomo zgradili tukaj, bo kompaktna in bolj praktična. Poleg tega bo imel ta robot še ultrazvočne senzorje in IR senzor bližine. Ultrazvočni senzor bo robotu omogočil, da se izogne oviram, da se bo lahko prosto premikal, dokler prostor ne bo pravilno očiščen, senzor bližine pa mu bo pomagal, da ne bo padel s stopnic. Vse te funkcije se slišijo zanimivo, kajne? Torej, začnimo.
V enem od naših prejšnjih člankov smo izdelali veliko robotov, kot so robot za samodejno uravnoteženje, robot za samodejno razkuževanje površin in robot, ki se izogiba oviram. Preverite tiste, če se vam to zdi zanimivo.
Materiali, potrebni za izdelavo robota za čiščenje tal na osnovi Arduino
Ker smo za izdelavo odseka strojne opreme robota sesalnika uporabili zelo splošne komponente, bi jih lahko našli v lokalni trgovini s hobiji. Tu je popoln seznam potrebnega materiala skupaj s sliko vseh komponent.
- Arduino Pro Mini - 1
- Ultrazvočni modul HC-SR04 - 3
- L293D Motor voznik - 1
- Motorji 5Volt N20 in nosilci - 2
- Motorna kolesa N20 - 2
- Stikalo - 1
- LM7805 Regulator napetosti - 1
- 7,4 V litij-ionska baterija - 1
- IR modul - 1
- Perfboard - 1
- Kolesce - 1
- MDF
- Splošni prenosni sesalnik
Prenosni sesalnik
V razdelku o zahtevah po komponentah smo govorili o prenosnem sesalniku, spodnje slike kažejo točno to. To je prenosni sesalnik iz Amazonke. To je opremljeno z zelo preprostim mehanizmom. Spodaj ima tri dele (majhna komora za shranjevanje prahu, srednji del vključuje motor, ventilator in vtičnico za baterije na vrhu (na bateriji je pokrov ali pokrov). Ima enosmerni motor in ventilator. Ta motor je prek preprostega stikala neposredno povezan s 3V (2 * 1,5-voltnimi AA baterijami). Ker robota napajamo s 7,4-V baterijo, bomo prekinili povezavo z notranje baterije in jo napajali s 5-voltne Napajanje. Odstranili smo vse nepotrebne dele in samo motor z dvožičnimi ostanki. To lahko vidite na spodnji sliki.
Ultrazvočni senzorski modul HC-SR04
Za odkrivanje ovir uporabljamo priljubljeni ultrazvočni senzor razdalje HC-SR04 ali pa ga lahko imenujemo senzorji za izogibanje oviram. Delo je zelo preprosto, najprej oddajniški modul pošlje ultrazvočni val, ki potuje po zraku, zadene oviro in se odbije nazaj, sprejemnik pa sprejme ta val. Z izračunom časa z Arduinom lahko določimo razdaljo. V prejšnjem članku o projektu ultrazvočnega senzorja razdalje na osnovi Arduino smo zelo temeljito razpravljali o principu delovanja tega senzorja. To lahko preverite, če želite izvedeti več o modulu ultrazvočnega senzorja razdalje HC-SR04.
Talni senzor (IR senzor) za zaznavanje stopnišč
V razdelku o lastnostih smo govorili o funkciji, pri kateri lahko robot zazna stopnišča in se lahko prepreči, da bi padel. Za to uporabljamo IR senzor. Naredili bomo vmesnik med IR senzorjem in Arduinom. Delovanje IR bližinskega senzorja je zelo preprosto, ima IR LED in fotodiodo, IR LED oddaja IR svetlobo in če pred to oddajano svetlobo pride katera koli ovira, se bo ta odsevala in odbojna svetloba bo zaznana s fotodiodo. Toda ustvarjena napetost zaradi odboja bo zelo nizka. Da bi to povečali, lahko uporabimo primerjalnik op-amp, lahko ojačamo in dobimo izhod. IR modulima tri nožice - Vcc, ozemljitev in izhod. Običajno je izhod nizek, ko je ovira pred senzorjem. Torej, to lahko uporabimo za zaznavanje tal. Če za delček sekunde zaznamo visoko s senzorja, lahko robota ustavimo, ga obrnemo nazaj ali naredimo karkoli, da preprečimo, da bi padel s stopnišča. V prejšnjem članku smo izdelali Breadboard različico modula IR senzorja bližine in podrobno razložili načelo delovanja. To lahko preverite, če želite izvedeti več o tem senzorju.
Shema vezja robota za čiščenje tal na osnovi Arduino
Imamo tri ultrazvočne senzorje, ki zaznavajo ovire. Torej, moramo povezati vse razloge ultrazvočnih senzorjev in jih povezati na skupno podlago. Prav tako priključimo vse tri Vcc senzorja in ga priključimo na skupni zatič VCC. Nato zatiče sprožilca in odmeva povežemo s PWM zatiči Arduina. VCC IR modula priključimo tudi na 5V in ozemljimo na ozemljitveni zatič Arduino, izhodni zatič modula IR senzorja gre na digitalni zatič D2 Arduina. Za gonilnik motorja priključimo oba zatiča na 5v in tudi napetostni zatič gonilnika na 5V, ker uporabljamo 5voltne motorje. V prejšnjem članku smo izdelali Arduino Motor Driver Shield. To lahko preverite, če želite izvedeti več o L293D IC Driver Motorin njegovega delovanja. Arduino, ultrazvočni moduli, gonilnik motorja in motorji delujejo na 5 voltov, višja napetost ga bo uničila in uporabljamo 7,4-voltno baterijo, da jo pretvorimo v 5 voltov, uporablja se regulator napetosti LM7805. Sesalnik priključite neposredno na glavni krog.
Izdelava vezja za robota za čiščenje tal na osnovi Arduino
Da bi dobil nekaj idej o svojem robotu, sem po spletu iskal robote za sesalnike in dobil nekaj slik robotov v okrogli obliki. Tako sem se odločil zgraditi robota v okrogli obliki. Za izgradnjo lova in telesa robota imam na voljo veliko možnosti, kot so penasta folija, MDF, karton itd. Ampak MDF sem izbral, ker je trden in ima nekaj vodoodpornih lastnosti. Če to počnete, se lahko odločite, kateri material boste izbrali za svojega bota.
Za izdelavo robota sem vzel list MDF, nato narisal dva kroga s polmerom 8 CM, znotraj tega kroga pa sem narisal še en krog s polmerom 4 CMza namestitev sesalnika. Potem sem izrezala kroge. Prav tako sem izrezal in odstranil ustrezne kose za kolesno pot (glejte slike za boljše razumevanje). Na koncu sem naredil tri majhne luknje za kolesce. Naslednji korak je namestitev motorjev na podnožje s pomočjo njegovih nosilcev, prav tako postavite in pritrdite kolesce na svoj položaj. Po tem postavite ultrazvočne senzorje na levo, desno in sredino robota. IR modul priključite tudi na spodnjo stran robota. Ne pozabite dodati stikala zunaj. To je vse pri izdelavi robota, če se v tem trenutku zmedete, se lahko sklicujete na naslednje slike.
Za zgornji del sem na ploščo iz pene narisal tudi krog s polmerom 11 CM in ga razrezal. Za razmik med zgornjim in spodnjim delom sem izrezal tri 4 cm dolge kose plastične cevi. Po tem sem na spodnji del prilepila plastične distančnike, nato pa še zgornji. Če želite, lahko pokrijete stranske dele bota s plastiko ali podobnimi materiali.
Arduino
Popolna koda za ta projekt je podana na koncu dokumenta. Ta koda Arduino je podobna kodi ultrazvočnega senzorja razdalje na osnovi Arduino, edina sprememba je v zaznavanju tal. V naslednjih vrsticah razlagam, kako koda deluje. V tem primeru ne uporabljamo dodatnih knjižnic. Spodaj smo opisovali kodo postopoma. Za dekodiranje podatkov o razdalji s senzorja HC-SR04 ne uporabljamo dodatnih knjižnic, ker je zelo preprosto. V naslednjih vrsticah smo opisali, kako. Najprej moramo definirati sprožilni pin in odmevni pin za vse tri ultrazvočne senzorje razdalje, ki so povezani na ploščo Arduino. V tem projektu imamo tri zatiče Echo in tri zatiče Trigger. Upoštevajte, da je 1 levi senzor, 2 sprednji senzor in 3 desni senzor.
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;
Nato smo določili spremenljivke za razdaljo, ki so vse spremenljivke (int), in za trajanje smo se odločili za uporabo (long). Spet imamo po tri. Določil sem tudi celo število za shranjevanje stanja gibanja, o tem bomo govorili kasneje v tem poglavju.
dolgo trajanje1; dolgo trajanje2; dolgo trajanje3; int distanceleft; int distancefront; int distanceright; int a = 0;
Nato v razdelku za nastavitev moramo vse perspektivne nožice narediti kot vhod ali izhod s pomočjo funkcije pinModes () . Za pošiljanje ultrazvočnih valov iz modula moramo omogočiti sprožilni zatič na visoko, tj. Vsi sprožilni zatiči morajo biti opredeljeni kot IZHOD. In da sprejmemo odmev, moramo prebrati stanje odmevov, tako da morajo biti vsi odmevi definirani kot VHOD. Prav tako omogočamo serijski monitor za odpravljanje težav. Za branje stanja IR-modulov sem kot vhod opredelil irpin.
pinMode (trigPin1, IZHOD); pinMode (trigPin2, IZHOD); pinMode (trigPin3, IZHOD); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
In ti digitalni zatiči so definirani kot IZHOD za vhod gonilnika motorja.
pinMode (4, IZHOD); pinMode (7, IZHOD); pinMode (8, IZHOD); pinMode (12, IZHOD);
V glavni zanki imamo tri odseke za tri senzorje. Vsi odseki delujejo enako, vendar vsak za različne senzorje. V tem razdelku beremo razdaljo ovir z vsakega senzorja in jo shranimo v vsako določeno celo število. Za odčitavanje razdalje moramo najprej poskrbeti, da so sprožilni zatiči prosti, zato moramo sprožilni zatič nastaviti na LOW za 2 µs. Zdaj moramo za ustvarjanje ultrazvočnega vala za 10 µs obrniti sprožilni zatič VISOKO. Ta bo poslal ultrazvočni zvok in s pomočjo funkcije pulseIn () lahko beremo čas potovanja in to vrednost shranimo v spremenljivko " trajanje ". Ta funkcija ima 2 parametra, prvi je ime echo pin-a, za drugega pa lahko napišete enegaVISOKO ali NIZKO. HIGH pomeni, da bo funkcija pulseIn () počakala, da se pin prične HIGH, ki ga povzroči odbojni zvočni val, in bo začela šteti, nato pa bo počakala, da bo pin padel LOW, ko se bo zvočni val končal, kar bo ustavilo štetje. Ta funkcija daje dolžino impulza v mikrosekundah. Za izračun razdalje bomo trajanje pomnožili z 0,034 (hitrost zvoka v zraku je 340 m / s) in ga delili z 2 (to je posledica potovanja zvočnega vala naprej in nazaj). Na koncu shranimo razdaljo vsakega senzorja v ustrezna cela števila.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = trajanje1 * 0,034 / 2;
Ko dobimo razdaljo od vsakega senzorja, lahko s pomočjo stavka if nadzorujemo motorje in tako nadzorujemo gibanje robota. To je zelo preprosto, najprej smo podali vrednost razdalje ovire, v tem primeru je 15 cm (to vrednost spremenite po svoji želji). Nato smo dali pogoje glede na to vrednost. Na primer, ko je ovira pred levim senzorjem (to pomeni, da mora biti razdalja levega senzorja pod ali enaka 15 cm), drugi dve razdalji pa sta veliki (to pomeni, da pred senzorji ni nobene ovire), nato lahko s pomočjo funkcije digitalnega pisanja motorje poganjamo v desno. Kasneje sem preveril stanje IR senzorja. Če je robot na tleh, bo vrednost IR zatiča LOW, v nasprotnem primeru pa bo vrednostVISOKO. Nato sem to vrednost shranil v spremenljivko int s . Nadzirali bomo robota v skladu s tem statusom.
Ta odsek kode se uporablja za premikanje robota naprej in nazaj :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, VISOKO); digitalWrite (8, LOW); digitalWrite (12, VISOKO); zamuda (1000); a = 1; }
Toda pri tej metodi obstaja težava, ko se motor premakne nazaj, tla se vrnejo in bot se premakne naprej in bo ponovil, da bot zatakne. Da bi to odpravili, v int shranimo vrednost (1), potem ko razumemo, da nadstropje ni prisotno. Ta pogoj preverjamo tudi pri drugih gibih.
Ko zazna odsotnost tal, se robot ne bo premaknil naprej. Namesto tega se bo premaknil levo, tako se bomo lahko izognili težavi.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
V zgornjem stanju. Najprej bo robot preveril stanje tal in celoštevilčno vrednost. Bot se bo premaknil naprej le, če bodo izpolnjeni vsi pogoji.
Zdaj lahko napišemo ukaze za voznika motorja. To bo poganjalo desni motor nazaj in levi motor naprej, s čimer bo robot zasukal v desno.
Ta odsek kode se uporablja za premik robota v desno:
digitalWrite (4, VISOKO); digitalWrite (7, LOW); digitalWrite (8, VISOKO); digitalWrite (12, LOW);
Če bot zazna, da tla ni, se vrednost spremeni na 1 in bot se premakne v levo. Po zavoju levo se vrednost 'a' spremeni na 0 iz 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 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, VISOKO); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, VISOKO); zamuda (100); a = 0; }
Ta odsek kode se uporablja za premik robota levo:
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, VISOKO); digitalWrite (8, VISOKO); digitalWrite (12, LOW); }
To je to za izdelavo pametnega sesalnika Robot na osnovi Arduina. Celotno delovanje projekta najdete v videoposnetku, ki je povezan na dnu te strani. Če imate kakršna koli vprašanja, komentirajte spodaj.