- Materijali potrebni za izgradnju robota za čišćenje poda na bazi Arduina
- Prijenosni usisavač
- HC-SR04 ultrazvučni senzorski modul
- Podni senzor (IR senzor) za otkrivanje stubišta
- Kružni dijagram robota za čišćenje poda na bazi Arduino
- Izgradnja kruga za robota za čišćenje poda na bazi Arduino
- Arduino
U današnjem scenariju svi smo toliko zauzeti svojim poslom da nemamo vremena za pravilno čišćenje kuće. Rješenje problema je vrlo jednostavno, samo trebate kupiti domaćeg robota za usisavač, kao što je irobot roomba, koji će pritiskom gumba očistiti vašu kuću. Ali takvi komercijalni proizvodi uobičajeno su pitanje, a to je trošak. Stoga smo danas odlučili izraditi jednostavnog robota za čišćenje poda, koji je ne samo jednostavan za izradu, već i vrlo jeftin u usporedbi s komercijalnim proizvodima dostupnim na tržištu. Česti čitatelji možda se sjećaju našeg robota za usisavanje Arduino, koji smo izgradili davno, ali taj je bio vrlo glomazan i za kretanje mu je bila potrebna velika olovna kiselina. Novi Arduino usisavač koje ćemo ovdje graditi biti će kompaktni i praktičniji. Povrh toga, ovaj će robot imati ultrazvučne senzore i IR senzor blizine. Ultrazvučni senzor omogućit će robotu da izbjegne prepreke kako bi se mogao slobodno kretati sve dok se prostorija ne očisti pravilno, a senzor blizine pomoći će mu da izbjegne pad sa stepenica. Sve ove značajke zvuče zanimljivo, zar ne? Pa, krenimo.
U jednom od naših prethodnih članaka izradili smo mnogo botova poput Samobalansirajućeg robota, Robota za automatiziranu površinsku dezinfekciju i Robota za izbjegavanje prepreka. Provjerite one ako vam to zvuči zanimljivo.
Materijali potrebni za izgradnju robota za čišćenje poda na bazi Arduina
Budući da smo za izradu hardverskog dijela robota usisavača koristili vrlo generičke komponente, trebali biste moći pronaći sve one u vašoj lokalnoj hobi trgovini. Ovdje je potpuni popis potrebnog materijala zajedno sa slikom svih komponenata.

- Arduino Pro Mini - 1
- HC-SR04 ultrazvučni modul - 3
- L293D Motorni vozač - 1
- 5Volt N20 motori i nosači - 2
- N20 motorni kotači - 2
- Prekidač - 1
- LM7805 Regulator napona - 1
- 7,4 V litij-jonska baterija - 1
- IC modul - 1
- Perfboard - 1
- Točkić - 1
- MDF
- Generički prijenosni usisavač
Prijenosni usisavač
U odjeljku o komponentama govorili smo o prijenosnom usisavaču, slike u nastavku točno pokazuju. To je prijenosni usisavač iz Amazona. Ovo dolazi s vrlo jednostavnim mehanizmom. Dno ima tri dijela (mala komora za odlaganje prašine, srednji dio uključuje motor, ventilator i utičnicu za baterije na vrhu (ima poklopac ili poklopac za bateriju). Ima istosmjerni motor i ventilator. Ovaj je motor putem jednostavne sklopke izravno povezan s 3V (2 * 1,5volt AA baterije). Kako napajamo svog robota baterijom 7,4V, prekinut ćemo vezu s interne baterije i napajati je s 5V Dakle, uklonili smo sve nepotrebne dijelove i ostaje samo motor s dvožičnim ostankom. To možete vidjeti na donjoj slici.

HC-SR04 ultrazvučni senzorski modul
Za otkrivanje prepreka koristimo popularni ultrazvučni senzor udaljenosti HC-SR04 ili ga možemo nazvati senzorima za izbjegavanje prepreka. Rad je vrlo jednostavan, prvo, modul odašiljača šalje ultrazvučni val koji putuje zrakom, udara u prepreku i odbija se natrag, a prijemnik prima taj val. Izračunavanjem vremena s Arduinom možemo odrediti udaljenost. U prethodnom članku o projektu ultrazvučnog senzora udaljenosti temeljenog na Arduinu vrlo smo temeljito razgovarali o principu rada ovog senzora. To možete provjeriti ako želite znati više o modulu ultrazvučnog senzora udaljenosti HC-SR04.
Podni senzor (IR senzor) za otkrivanje stubišta
U odjeljku sa značajkama govorili smo o značajci kod koje robot može otkriti stubišta i može spriječiti pad. Da bismo to učinili, koristimo IR senzor. Napravit ćemo sučelje između IR senzora i Arduina. Rad IR senzora blizine vrlo je jednostavan, ima IR LED i fotodiodu, IR LED emitira IR svjetlost i ako bilo koja prepreka dođe ispred ovog emitiranog svjetla, on će se odraziti, a reflektirana svjetlost detektirati fotodiodom. Ali generirani napon od refleksije bit će vrlo nizak. Da bismo to povećali, možemo koristiti komparator op-amp-a, možemo pojačati i dobiti izlaz. IR modulima tri pina - Vcc, uzemljenje i izlaz. Izlaz obično pada kada prepreka dođe ispred senzora. Dakle, ovo možemo koristiti za otkrivanje poda. Ako na djelić sekunde otkrijemo visoku vrijednost sa senzora, možemo zaustaviti robota, vratiti ga natrag ili učiniti bilo što što želimo da spriječimo da padne sa stubišta. U prethodnom članku izradili smo Breadboard verziju modula IR senzora blizine i detaljno objasnili princip rada, to možete provjeriti ako želite znati više o ovom senzoru.
Kružni dijagram robota za čišćenje poda na bazi Arduino

Imamo tri ultrazvučna senzora koji otkrivaju prepreke. Dakle, moramo povezati sve osnove ultrazvučnih senzora i povezati ih s zajedničkim tlom. Također, povezujemo sva tri Vcc senzora i spajamo ih na uobičajeni VCC pin. Dalje, spajamo okidač i eho igle na PWM pinove Arduina. Također priključujemo VCC IC modula na 5 V i uzemljenje na pin za uzemljenje Arduina, izlazni pin modula IR senzora ide na digitalni pin D2 Arduina. Za pokretač motora spojimo dvije osovinske osovine na 5v, a također i naponsku iglu pogonskog sklopa na 5V, jer koristimo 5voltne motore. U prethodnom članku izradili smo Arduino Motor Driver Shield, to možete provjeriti da biste saznali više o IC upravljačkom programu L293Di njegovo poslovanje. Arduino, ultrazvučni moduli, pokretački program motora i motori rade na 5 volti, viši napon će ga ubiti, a mi koristimo 7,4-voltnu bateriju da bismo ga pretvorili u 5 volti, koristi se regulator napona LM7805. Spojite usisavač izravno na glavni krug.
Izgradnja kruga za robota za čišćenje poda na bazi Arduino
Kako bih dobio neke ideje o svom robotu, na mreži sam potražio robote za usisavače i nabavio neke slike robota okruglog oblika. Tako sam odlučio izgraditi robota okruglog oblika. Da bih izgradio potjeru i tijelo robota, imam puno opcija poput pjenastog lima, MDF-a, kartona itd. Ali odabirem MDF-a jer je tvrd i ima neka svojstva otporna na vodu. Ako to radite, možete odlučiti koji ćete materijal odabrati za svog bota.
Da bih izgradio robota, uzeo sam MDF list, zatim nacrtao dva kruga s radijusom 8 CM, a unutar tog kruga također sam nacrtao još jedan krug radijusa 4 CMza ugradnju usisavača. Zatim sam izrezala krugove. Također sam izrezao i uklonio odgovarajuće dijelove za putanju kotača (za bolje razumijevanje pogledajte slike). Napokon sam napravio tri male rupe za kotačić. Sljedeći korak je postavljanje motora na postolje pomoću njegovih nosača, također postavite i učvrstite kotačić u svoj položaj. Nakon toga postavite ultrazvučne senzore lijevo, desno i sredinu robota. Također, IR modul spojite na donju stranu robota. Ne zaboravite dodati prekidač vani. To je sve o gradnji robota, ako se u ovom trenutku zbunite, možete se pozvati na sljedeće slike.

Za gornji dio također sam nacrtao krug polumjera 11 CM na pjenastom limu i izrezao ga. Za razmak između gornjeg i donjeg dijela izrezao sam tri komada plastične cijevi duljine 4 CM. Nakon toga sam na donji dio zalijepio plastične odstojnike, a zatim sam zalijepio gornji dio. Ako želite, bočne dijelove bota možete prekriti plastikom ili sličnim materijalima.

Arduino
Kompletni kod za ovaj projekt dan je na kraju dokumenta. Ovaj Arduino kôd sličan je kodu ultrazvučnog senzora udaljenosti zasnovan na Arduinu, jedina promjena je u otkrivanju poda. U sljedećim redovima objašnjavam kako kod funkcionira. U ovom slučaju ne koristimo nikakve dodatne knjižnice. U nastavku smo korak po korak opisali kôd. Ne koristimo nikakve dodatne knjižnice za dekodiranje podataka o udaljenosti od senzora HC-SR04, jer je to vrlo jednostavno. U sljedećim smo redovima opisali kako. Prvo, moramo definirati okidački pin i echo pin za sva tri ultrazvučna senzora udaljenosti koji su povezani s Arduino pločom. U ovom projektu imamo tri Echo igle i tri okidača. Imajte na umu da je 1 lijevi senzor, 2 prednji i 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;
Zatim smo definirali varijable za udaljenost koje su sve varijable tipa (int), a za trajanje smo odlučili koristiti (long). Opet ih imamo po troje. Također, definirao sam cijeli broj za pohranu statusa pokreta, o tome ćemo kasnije u ovom odjeljku.
dugo trajanje1; dugo trajanje2; dugo trajanje3; int distanceleft; int distancefront; int daljinsko; int a = 0;
Dalje, u odjeljku za postavljanje, sve perspektivne pinove moramo napraviti kao ulaz ili izlaz pomoću funkcije pinModes () . Da bismo ultrazvučne valove poslali iz modula, moramo omogućiti pin okidača na visoku, tj. Sve pinove okidača treba definirati kao IZLAZ. A da bismo primili jeku, moramo očitati stanje eho pinova pa bi se svi eho pinovi trebali definirati kao INPUT. Također, omogućavamo serijski monitor za rješavanje problema. Kako bih pročitao status IR modula, definirao sam irpin kao ulaz.
pinMode (trigPin1, IZLAZ); pinMode (trigPin2, IZLAZ); pinMode (trigPin3, IZLAZ); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
A ti digitalni pinovi definirani su kao IZLAZ za ulaz pogonskog sklopa motora.
pinMode (4, IZLAZ); pinMode (7, IZLAZ); pinMode (8, IZLAZ); pinMode (12, IZLAZ);
U glavnoj petlji imamo tri dijela za tri senzora. Svi odjeljci rade isto, ali svaki za različite senzore. U ovom odjeljku čitamo udaljenost prepreke sa svakog senzora i pohranjujemo je u svaki definirani cijeli broj. Da bismo očitali udaljenost, prvo moramo biti sigurni da su klinovi okidača slobodni, za to moramo postaviti okidač na LOW za 2 µs. Sada, za generiranje ultrazvučnog vala, moramo okrenuti iglu okidača VISOKO za 10 µs. To će poslati ultrazvučni zvuk i uz pomoć funkcije pulseIn () možemo očitati vrijeme putovanja i pohraniti tu vrijednost u varijablu " trajanje ". Ova funkcija ima 2 parametra, prvi je naziv eho-pina, a za drugi možete napisati bilo kojiVISOKO ili NISKO. HIGH znači da će funkcija pulseIn () pričekati da pin priđe HIGH uzrokovan odbijenim zvučnim valom i počet će brojati, a zatim će pričekati da pin ide LOW kada će zvučni val završiti što će zaustaviti brojanje. Ova funkcija daje duljinu impulsa u mikrosekundama. Za izračunavanje udaljenosti pomnožit ćemo trajanje s 0,034 (brzina zvuka u zraku je 340 m / s) i podijeliti ga s 2 (to je zbog naprijed-natrag putovanja zvučnog vala). Napokon, udaljenost svakog senzora pohranjujemo u odgovarajuće cijele brojeve.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); trajanje1 = pulsIn (echoPin1, HIGH); distanceleft = trajanje1 * 0,034 / 2;
Nakon dobivanja udaljenosti od svakog senzora, možemo upravljati motorima uz pomoć naredbe if, čime kontroliramo kretanje robota. Ovo je vrlo jednostavno, prvo, dali smo vrijednost udaljenosti od prepreke, u ovom slučaju to je 15 cm (ovu vrijednost promijenite prema svojoj želji). Tada smo dali uvjete prema toj vrijednosti. Na primjer, kada prepreka dođe ispred lijevog senzora (to znači da bi udaljenost lijevog senzora trebala biti ispod ili jednaka 15 cm), a ostale dvije udaljenosti su velike (to znači da nijedna prepreka nije ispred tog senzora), tada pomoću funkcije digitalnog upisivanja možemo pokretati motore udesno. Kasnije sam provjerio status IR senzora. Ako je robot na podu, vrijednost IR pina bit će NISKA, a ako nije, tada će vrijednost bitiVISOKO. Tada sam tu vrijednost pohranio u varijablu int s . Nadzirat ćemo robota prema ovom statusu.
Ovaj odjeljak koda koristi se za pomicanje robota naprijed i natrag :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, VISOKO); digitalWrite (8, LOW); digitalWrite (12, VISOKO); kašnjenje (1000); a = 1; }
Ali postoji problem s ovom metodom kada se motor pomakne unatrag, pod se vrati i bot se pomakne prema naprijed i ponovit će zaglavljivanje bota. Da bismo to prevladali, pohranjujemo vrijednost (1) u int nakon što razumijemo da poda nema. Ovo stanje provjeravamo i za druge pokrete.
Nakon otkrivanja odsutnosti poda, robot se neće pomicati naprijed. Umjesto toga, pomaknut će se ulijevo, na ovaj način možemo izbjeći problem.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
U gore navedenom stanju. Prvo će robot provjeriti status poda i cijelu vrijednost. Bot će se kretati prema naprijed samo ako su ispunjeni svi uvjeti.
Sada možemo napisati naredbe za vozača motora. To će voziti desni motor prema natrag, a lijevi prema naprijed, a time i robota okretati udesno.
Ovaj odjeljak koda koristi se za pomicanje robota udesno:
digitalWrite (4, VISOKO); digitalWrite (7, LOW); digitalWrite (8, VISOKO); digitalWrite (12, LOW);
Ako bot otkrije da poda nema, vrijednost se mijenja na 1 i bot će se pomaknuti ulijevo. Nakon skretanja ulijevo, vrijednost 'a' mijenja se 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); kašnjenje (100); a = 0; }
Ovaj odjeljak koda koristi se za pomicanje robota ulijevo:
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 izgradnju pametnog robota za usisavače temeljenog na Arduinu. Kompletni rad projekta nalazi se u videozapisu na dnu ove stranice. Ako imate pitanja, komentirajte dolje.
