- Medžiagos, kurių reikia norint sukurti „Arduino“ grindų grindų valymo robotą
- Nešiojamas dulkių siurblys
- HC-SR04 ultragarso jutiklio modulis
- Grindų jutiklis (IR jutiklis) laiptinėms aptikti
- „Arduino“ grindų valymo roboto schema
- „Arduino“ grindų grindų valymo roboto grandinės sukūrimas
- Arduino
Pagal dabartinį scenarijų visi esame tokie užsiėmę savo darbu, kad neturime laiko tinkamai išvalyti savo namų. Problemos sprendimas yra labai paprastas, jums tereikia įsigyti buitinį dulkių siurblio robotą, pvz., „ Irobot Roomba“, kuris namus išvalys paspaudę mygtuką. Tačiau tokie komerciniai produktai yra bendra problema, kuri yra kaina. Taigi šiandien nusprendėme pagaminti paprastą „ Floor Cleaner“ robotą, kurį pagaminti yra ne tik paprasta, bet ir kainuoti labai pigiau, palyginti su rinkoje esančiais komerciniais produktais. Dažnai skaitytojai gali prisiminti mūsų „Arduino“ dulkių valymo robotą, kurį mes sukūrėme jau seniai, tačiau tas automobilis buvo labai stambus ir jam judėti reikėjo didelės švino rūgšties baterijos. Naujasis „ Arduino“ dulkių siurblys pastatysime, bus kompaktiškas ir praktiškesnis. Be to, šis robotas turės ultragarso jutiklius ir IR artumo jutiklį. Ultragarso jutiklis leis robotui išvengti kliūčių, kad jis galėtų laisvai judėti, kol kambarys bus tinkamai išvalytas, o artumo jutiklis padės išvengti kritimo nuo laiptų. Visos šios savybės skamba įdomiai, tiesa? Taigi, pradėkime.
Viename iš ankstesnių mūsų straipsnių sukūrėme daugybę robotų, tokių kaip savęs balansavimo robotas, automatizuotas paviršiaus dezinfekavimo robotas ir kliūčių išvengiantis robotas. Patikrinkite, ar tai jums įdomu.
Medžiagos, kurių reikia norint sukurti „Arduino“ grindų grindų valymo robotą
Kadangi dulkių siurblio roboto aparatinės įrangos skyriui kurti naudojome labai bendruosius komponentus, visus tuos turėtumėte rasti savo vietos pomėgių parduotuvėje. Čia yra visas reikalingos medžiagos sąrašas kartu su visų komponentų atvaizdu.
- „Arduino Pro Mini“ - 1
- HC-SR04 ultragarso modulis - 3
- L293D variklio tvarkyklė - 1
- 5 voltų „N20“ varikliai ir tvirtinimo laikikliai - 2
- N20 variklių ratai - 2
- Jungiklis - 1
- LM7805 įtampos reguliatorius - 1
- 7,4 V ličio jonų akumuliatorius - 1
- IR modulis - 1
- Perfboard - 1
- Ratuko ratas - 1
- MDF
- Bendras nešiojamas dulkių siurblys
Nešiojamas dulkių siurblys
Komponentų reikalavimų skyriuje kalbėjome apie nešiojamąjį dulkių siurblį, žemiau pateiktuose paveikslėliuose tai tiksliai parodyta. Tai nešiojamas dulkių siurblys iš „Amazon“. Tai yra labai paprastas mechanizmas. Jo apačioje yra trys dalys (maža kamera dulkėms laikyti, vidurinėje dalyje yra variklis, ventiliatorius ir akumuliatoriaus lizdas viršuje (yra akumuliatoriaus dangtelis arba dangtelis). Jame yra nuolatinės srovės variklis ir ventiliatorius. Šis variklis yra tiesiogiai prijungtas prie 3 V (2 * 1,5 voltų AA baterijos) per paprastą jungiklį. Kadangi robotą maitiname 7,4 V akumuliatoriumi, atjungsime vidinės baterijos jungtį ir maitinsime iš 5 V įtampos. maitinimo šaltinis. Taigi, mes pašalinome visas nereikalingas dalis ir lieka tik variklis su dviem laidais. Tai galite pamatyti žemiau esančiame paveikslėlyje.
HC-SR04 ultragarso jutiklio modulis
Norėdami aptikti kliūtis, mes naudojame populiarų HC-SR04 ultragarso atstumo jutiklį arba galime jį pavadinti kliūčių vengimo jutikliais. Darbas yra labai paprastas. Pirma, siųstuvo modulis siunčia ultragarso bangą, kuri skrieja oru, pataiko į kliūtį ir atšoka, o imtuvas priima tą bangą. Apskaičiavę laiką su „Arduino“, galime nustatyti atstumą. Ankstesniame straipsnyje apie „Arduino“ pagrįstą ultragarso atstumo jutiklio projektą mes labai nuodugniai aptarėme šio jutiklio veikimo principą. Galite tai patikrinti, jei norite sužinoti daugiau apie ultragarso atstumo jutiklio modulį HC-SR04.
Grindų jutiklis (IR jutiklis) laiptinėms aptikti
Funkcijų skyriuje kalbėjome apie funkciją, kai robotas gali aptikti laiptines ir neleisti nukristi. Norėdami tai padaryti, mes naudojame IR jutiklį. Sukursime sąsają tarp IR jutiklio ir „Arduino“. Darbingo IR Artumo jutiklis yra labai paprastas, ji turi IR LED ir fotodiodą, IR LED skleidžia infraraudonuosius spindulius ir, jei bet kokios kliūties ateina priešais šiame skleidžiamos šviesos ir ji bus atsižvelgta, ir atsispindi šviesa bus aptikta fotodiodu. Bet atspindžio sukurta įtampa bus labai maža. Norėdami tai padidinti, galime naudoti op-amp palygintuvą, galime sustiprinti ir gauti išvestį. IR modulisturi tris kaiščius - Vcc, ground ir output. Paprastai, kai priešais jutiklį atsiranda kliūtis, išėjimas būna mažas. Taigi, mes galime tai naudoti grindims aptikti. Jei sekundės dalimi iš jutiklio aptiksime aukštą lygį, galime sustabdyti robotą, jį pasukti atgal arba padaryti viską, ko norime, kad jis nenukristų nuo laiptų. Ankstesniame straipsnyje mes sukūrėme IR artumo jutiklio modulio „Breadboard“ versiją ir išsamiai paaiškinome veikimo principą. Jei norite sužinoti daugiau apie šį jutiklį, galite tai patikrinti.
„Arduino“ grindų valymo roboto schema
Mes turime tris ultragarso jutiklius, kurie aptinka kliūtis. Taigi, mes turime prijungti visus ultragarso jutiklių pagrindus ir prijungti juos prie bendros žemės. Be to, mes sujungiame visus tris jutiklio Vcc ir prijungiame juos prie bendro VCC kaiščio. Tada mes prijungiame gaiduką ir aido kaiščius prie „Arduino“ PWM kaiščių. Mes taip pat prijungiame IR modulio VCC prie 5 V ir įžeminame prie „Arduino“ žemės kaiščio, IR jutiklio modulio išvesties kaištis eina į „Arduino“ skaitmeninį kaištį D2. Variklio vairuotojui du įjungimo kaiščius prijungiame prie 5v, o vairuotojo įtampos kaištį - prie 5V, nes naudojame 5 voltų variklius. Ankstesniame straipsnyje mes sukūrėme „Arduino“ variklio tvarkyklę, galite tai patikrinti, kad sužinotumėte daugiau apie „ L293D“ variklio tvarkyklės ICir jos operacijos. „Arduino“, ultragarso moduliai, variklio tvarkyklė ir varikliai veikia esant 5 voltams, didesnė įtampa jį sunaikins ir mes naudojame 7,4 voltų bateriją, norėdami ją konvertuoti į 5 voltus, naudojamas įtampos reguliatorius LM7805. Prijunkite dulkių siurblį tiesiai prie pagrindinės grandinės.
„Arduino“ grindų grindų valymo roboto grandinės sukūrimas
Norėdamas pasisemti idėjų apie savo robotą, internete ieškojau dulkių siurblių robotų ir gavau keletą apvalios formos robotų vaizdų. Taigi, nusprendžiau pastatyti apvalios formos robotą. Norėdami sukurti roboto gaudymą ir kėbulą, turiu daugybę variantų, tokių kaip putplasčio lakštas, MDF, kartonas ir kt. Bet aš renkuosi MDF, nes jis yra kietas ir turi tam tikrų vandeniui atsparių savybių. Jei tai darote, galite nuspręsti, kurią medžiagą pasirinksite savo robotui.
Norėdami sukurti robotą, paėmiau MDF lapą, tada nupiešiau du apskritimus 8 CM spinduliu, o to apskritimo viduje aš taip pat nupiešiau dar vieną apskritimą, kurio spindulys buvo 4 CMdulkių siurblio montavimui. Tada iškirpau apskritimus. Be to, aš sukirpau ir pašalinau atitinkamas dalis rato kelyje (kad geriau suprastumėte, žiūrėkite paveikslėlius). Galiausiai aš padariau tris mažas skylutes ratukui. Kitas žingsnis - variklių montavimas ant pagrindo, naudojant jo laikiklius, taip pat padėkite ir pritvirtinkite ratuką savo vietoje. Po to įdėkite ultragarso jutiklius į kairę, dešinę ir roboto vidurį. Taip pat prijunkite IR modulį prie roboto minuso. Nepamirškite pridėti jungiklio lauke. Viskas apie roboto sukūrimą, jei šiuo metu jūs painiojate, galite remtis šiais vaizdais.
Viršutinei daliai aš taip pat nupiešiau 11 cm spindulio apskritimą ant putplasčio lakšto ir jį supjaustiau. Tarpui tarp viršutinės ir apatinės dalies buvau iškirpęs tris 4 CM ilgio plastikinio vamzdelio gabalėlius. Po to apatinėje dalyje priklijavau plastikinius tarpiklius, o tada - viršutinę. Jei norite, šonines roboto dalis galite padengti plastiku ar panašiomis medžiagomis.
Arduino
Visas šio projekto kodas pateikiamas dokumento pabaigoje. Šis „Arduino“ kodas yra panašus į „ Arduino“ ultragarso atstumo jutiklio kodą, vienintelis pokytis yra grindų aptikimas. Šiose eilutėse aš paaiškinu, kaip veikia kodas. Šiuo atveju nenaudojame jokių papildomų bibliotekų. Žemiau mes aprašėme kodą žingsnis po žingsnio. Nenaudojame jokių papildomų bibliotekų, norint iššifruoti atstumo duomenis iš jutiklio HC-SR04, nes tai labai paprasta. Šiose eilutėse mes aprašėme, kaip. Pirma, mes turime nustatyti visų trijų ultragarso atstumo jutiklių, kurie yra prijungti prie „Arduino“ plokštės, paleidimo kaištį ir aido kaištį. Šiame projekte mes turime tris „Echo“ ir tris „Trigger“ kaiščius. Atminkite, kad 1 yra kairysis jutiklis, 2 yra priekinis jutiklis ir 3 yra dešinysis jutiklis.
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;
Tada mes apibrėžėme kintamuosius atstumui, kurie visi yra (int) tipo kintamieji, ir trukmei, kurią pasirinkome naudoti (ilgas). Vėlgi, mes turime po tris. Be to, aš apibrėžiau sveikąjį skaičių, skirtą saugoti judėjimo būseną, apie tai pakalbėsime vėliau šiame skyriuje.
ilga trukmė1; ilga trukmė2; ilga trukmė3; int distanceleft; int atstumas priekyje; int distanceright; int a = 0;
Tada sąrankos skyriuje turime padaryti visus perspektyvinius kaiščius kaip įvestį ar išvestį, naudodami funkciją pinModes () . Norėdami siųsti ultragarso bangas iš modulio, turime įjungti įjungimo kaištį aukštai, ty visi paleidimo kaiščiai turėtų būti apibrėžti kaip OUTPUT. Norėdami gauti aidą, turime perskaityti aido kaiščių būseną, kad visi aido kaiščiai turėtų būti apibrėžti kaip įvestis. Be to, mes įgaliname serijinį monitorių trikčių šalinimui. Norėdami perskaityti IR modulių būseną, aš apibrėžiau irpin kaip įvestį.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Ir šie skaitmeniniai kaiščiai yra apibrėžiami kaip OUTPUT dėl variklio vairuotojo įvestį.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
Pagrindinėje kilpoje turime tris sekcijas trims jutikliams. Visos sekcijos veikia vienodai, bet kiekviena skirtingiems jutikliams. Šiame skyriuje mes skaitome kliūčių atstumą nuo kiekvieno jutiklio ir saugome jį kiekviename apibrėžtame sveikame skaičiuje. Norėdami perskaityti atstumą, pirmiausia turime įsitikinti, kad paleidimo kaiščiai yra aiškūs, tam reikia nustatyti 2 µs gaiduko kaištį į LOW. Dabar, norėdami generuoti ultragarso bangą, turime pasukti gaiduką HIGH 10 µs. Tai pasiųs ultragarso garsą ir naudodamiesi funkcija pulseIn () , mes galime nuskaityti kelionės laiką ir išsaugoti šią vertę kintamajame „ trukmė “. Ši funkcija turi 2 parametrus, pirmasis yra aido kaiščio pavadinimas, o antrasis - galite parašyti bet kurįAUKŠTA arba ŽEMA. „HIGH“ reiškia, kad „ pulseIn“ () funkcija lauks, kol kaištis eis HIGH, kurį sukels atšokusi garso banga, ir jis pradės skaičiuoti, tada jis lauks, kol kaištis eis LOW, kai baigsis garso banga, kuri sustabdys skaičiavimą. Ši funkcija pateikia impulso ilgį mikrosekundėmis. Apskaičiuodami atstumą, padauginsime trukmę iš 0,034 (garso greitis ore yra 340m / s) ir padalinsime iš 2 (taip yra dėl garso bangos judėjimo pirmyn ir atgal). Galiausiai kiekvieno jutiklio atstumą įrašome atitinkamais sveikaisiais skaičiais.
„digitalWrite“ (trigPin1, LOW); vėlavimasMikrosekundės (2); „digitalWrite“ (trigPin1, HIGH); vėlavimasMikrosekundės (10); „digitalWrite“ (trigPin1, LOW); trukmė1 = pulseIn (echoPin1, HIGH); distanceleft = trukmė1 * 0,034 / 2;
Gavę atstumą nuo kiekvieno jutiklio, variklį galime valdyti if teiginio pagalba, taigi mes valdome roboto judėjimą. Tai labai paprasta, pirma, mes pateikėme kliūties atstumo vertę, šiuo atveju ji yra 15 cm (pakeiskite šią vertę kaip savo norą). Tada mes suteikėme sąlygas pagal tą vertę. Pavyzdžiui, kai kliūtis ateina prieš kairįjį jutiklį (tai reiškia, kad kairiojo jutiklio atstumas turėtų būti mažesnis arba lygus 15 cm), o kiti du atstumai yra dideli (tai reiškia, kad prieš tai nėra jokių kliūčių), tada naudodamiesi skaitmeninio rašymo funkcija, mes galime vairuoti variklius į dešinę. Vėliau patikrinau IR jutiklio būseną. Jei robotas yra ant grindų, IR kaiščio vertė bus LOW, o jei ne, tada vertė busAUKŠTAS. Tada aš išsaugojau šią vertę int kintamajame . Mes ketiname valdyti robotą pagal šį statusą.
Šis kodekso skyrius naudojamas robotui judėti pirmyn ir atgal :
if (s == AUKŠTAS) { digitalWrite (4, LOW); „digitalWrite“ (7, HIGH); „digitalWrite“ (8, LOW); „digitalWrite“ (12, HIGH); vėlavimas (1000); a = 1; }
Tačiau yra šio metodo problema, kai variklis juda atgal, grindys grįžta atgal ir botas juda į priekį, ir jis pakartos botą įstrigusį. Norėdami tai įveikti, mes išsaugome vertę (1) int, supratę, kad nėra aukšto. Taip pat patikriname šią sąlygą, ar nėra kitų judesių.
Aptikęs grindų nebuvimą, robotas nejudės į priekį. Vietoj to, jis pasuks kairėn, tokiu būdu mes galime išvengti problemos.
jei ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancija> 15 && distancija> 15))
Esant minėtai būklei. Pirmiausia robotas patikrins grindų būseną ir sveiko skaičiaus vertę. Robotas judės į priekį tik tuo atveju, jei bus įvykdytos visos sąlygos.
Dabar mes galime parašyti variklio vairuotojo komandas. Tai varys dešinįjį variklį atgal, o kairįjį - į priekį, taip pasukdamas robotą į dešinę.
Šis kodekso skyrius naudojamas norint perkelti robotą į dešinę:
„digitalWrite“ (4, HIGH); „digitalWrite“ (7, LOW); „digitalWrite“ (8, HIGH); „digitalWrite“ (12, LOW);
Jei botas nustato, kad grindų nėra, vertė pasikeičia į 1 ir botas pasislinks į kairę. Pasukus kairėn, „a“ vertė pasikeičia į 0 iš 1.
jei ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancija <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); „digitalWrite“ (7, LOW); „digitalWrite“ (8, LOW); „digitalWrite“ (12, HIGH); vėlavimas (100); a = 0; }
Šis kodekso skyrius naudojamas perkelti robotą kairėn:
jei ((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); }
Tai viskas kuriant „Arduino“ pagrįstą išmanųjį dulkių siurblio robotą. Išsamų projekto darbą galite rasti vaizdo įraše, susietame šio puslapio apačioje. Jei turite klausimų, pakomentuokite žemiau.