- Az Arduino alapú padlótisztító robot felépítéséhez szükséges anyagok
- Hordozható porszívó
- HC-SR04 ultrahangos érzékelő modul
- Padlóérzékelő (IR érzékelő) a lépcsőház érzékeléséhez
- Az Arduino alapú padlótisztító robot áramköre
- Az áramkör kiépítése Arduino alapú padlótisztító robot számára
- Arduino
Egy mai forgatókönyv szerint mindannyian annyira elfoglaltak vagyunk a munkánkkal, hogy nincs időnk a házunk megfelelő takarítására. A probléma megoldása nagyon egyszerű, csak meg kell vásárolnia egy olyan háztartási robotot, mint például az Irobot Roomba, amely egy gombnyomással megtisztítja a házat. De az ilyen kereskedelmi termékek közös kérdés, ami a költség. Tehát ma úgy döntöttünk, hogy elkészítünk egy egyszerű padlótisztító robotot, amelyet nemcsak egyszerűen elkészíteni, de a piacon kapható kereskedelmi termékekhez képest is nagyon kevesebbe kerül. A gyakori olvasók talán emlékeznek Arduino porszívó robotunkra, amelyet már régen építettünk, de ez nagyon terjedelmes volt, és nagy ólom-savas akkumulátorra volt szüksége a mozgáshoz. Az új Arduino porszívó itt fogunk építeni, kompakt és praktikusabb lesz. Ráadásul ez a robot ultrahangos érzékelőkkel és IR-közelség-érzékelővel rendelkezik. Az ultrahangos érzékelő lehetővé teszi a robot számára, hogy elkerülje az akadályokat, hogy szabadon mozoghasson, amíg a helyiséget megfelelően megtisztítják, és a közelségérzékelő segít elkerülni a lépcsőn történő leesést. Mindezek a funkciók érdekesnek tűnnek, igaz? Tehát kezdjük.
Az egyik korábbi cikkünkben sok olyan robotot készítettünk, mint az önkiegyensúlyozó robot, az automatikus felületfertőtlenítő robot és az akadályokat elkerülő robot. Nézd meg ezeket, ha ez érdekesnek tűnik számodra.
Az Arduino alapú padlótisztító robot felépítéséhez szükséges anyagok
Mivel nagyon általános alkatrészeket használtunk a porszívó robot hardver részének felépítéséhez, meg kell találnia mindazokat a helyi hobbiboltban. Itt található a szükséges anyagok teljes listája, az összes alkatrész képével együtt.
- Arduino Pro Mini - 1
- HC-SR04 ultrahangos modul - 3
- L293D motorvezérlő - 1
- 5Voltos N20 motorok és rögzítő konzolok - 2
- N20 motorkerekek - 2
- Kapcsoló - 1
- LM7805 feszültségszabályozó - 1
- 7,4 V-os lítium-ion akkumulátor - 1
- IR modul - 1
- Perfboard - 1
- Görgős kerék - 1
- MDF
- Általános hordozható porszívó
Hordozható porszívó
Az alkatrészigény részben egy hordozható porszívóról beszéltünk , az alábbi képek pontosan ezt mutatják. Ez egy amazon hordozható porszívója. Ez egy nagyon egyszerű mechanizmussal rendelkezik. Alul három részből áll (egy kis kamra a por tárolására, a középső rész magában foglalja a motort, a ventilátort és a tetején lévő akkumulátor foglalatot (van egy fedél vagy sapka az akkumulátor számára). DC motorral rendelkezik, és ventilátor. Ez a motor egy kapcsolóval egyenesen 3 V-hoz (2 * 1,5 V-os AA elemhez) csatlakozik. Mivel robotunkat 7,4 V-os akkumulátorral tápláljuk, a belső akkumulátorról megszakítjuk a kapcsolatot, és az 5 V-ról tápláljuk tápegység. Tehát eltávolítottunk minden felesleges alkatrészt, és csak a kétvezetékes motor marad. Ezt az alábbi képen láthatja.
HC-SR04 ultrahangos érzékelő modul
Az akadályok észleléséhez a közkedvelt HC-SR04 ultrahangos távolságérzékelőt használjuk, vagy nevezhetjük akadálykerülés érzékelőnek. A munka nagyon egyszerű, először is, az adómodul ultrahanghullámot küld, amely a levegőn halad át, eltalál egy akadályt, és visszapattan, és a vevő megkapja azt a hullámot. Az Arduino-val történő idő kiszámításával meghatározhatjuk a távolságot. Az Arduino alapú ultrahangos távolságérzékelő projektről szóló korábbi cikkünkben nagyon alaposan megvitattuk ennek az érzékelőnek a működési elvét. Ezt megnézheti, ha többet szeretne megtudni a HC-SR04 ultrahangos távolságérzékelő modulról.
Padlóérzékelő (IR érzékelő) a lépcsőház érzékeléséhez
A funkciók részben beszéltünk egy olyan funkcióról, ahol a robot felismeri a lépcsőket és megakadályozhatja, hogy leessen. Ehhez IR szenzort használunk. Készítünk egy interfészt az IR szenzor és az Arduino között. Az IR Proximity Sensor működése nagyon egyszerű, van IR LED-je és fotodiódája, az IR LED IR-fényt bocsát ki, és ha a kibocsátott fény elé bármilyen akadály érkezik, akkor visszaverődik, és a visszavert fény észlelhető a fotodióda által. De a visszaverődésből származó feszültség nagyon alacsony lesz. Ennek növelésére használhatunk op-amp komparátort, felerősíthetjük és kimenetet kaphatunk. Egy IR modulhárom csap van - Vcc, ground és output. Általában a kimenet alacsony, ha akadály érkezik az érzékelő elé. Tehát ezt használhatjuk a padló felismerésére. Ha egy másodperc töredékéig magas hőmérsékletet észlelünk az érzékelőből, akkor megállíthatjuk a robotot, visszafordíthatjuk, vagy bármit megtehetünk, hogy megakadályozzuk a lépcsőtől való leesést. Egy korábbi cikkünkben elkészítettük az IR Proximity Sensor Modul Breadboard verzióját, és részletesen elmagyaráztuk a működési elvet. Ezt megnézheti, ha többet szeretne tudni erről az érzékelőről.
Az Arduino alapú padlótisztító robot áramköre
Három ultrahangos érzékelőnk van, amely érzékeli az akadályokat. Tehát össze kell kapcsolnunk az ultrahangos érzékelők összes alapját, és csatlakoztatnunk kell őket a közös földre. Ezenkívül csatlakoztatjuk az érzékelő mind a három Vcc-jét, és csatlakoztatjuk azt a közös VCC csaphoz. Ezután összekapcsoljuk a ravaszt és a visszhangcsapokat az Arduino PWM csapjaival. Csatlakoztatjuk az IR modul VCC-jét 5 V-ra, és földeljük az Arduino földelő tűjére, az IR érzékelő modul kimeneti csapja az Arduino digitális D2 érintkezőjéhez kerül. A motorvezérlő számára a két engedélyező csapot 5 V-ra, a meghajtó feszültségét pedig 5 V-ra csatlakoztatjuk, mert 5 voltos motorokat használunk. Egy korábbi cikkünkben készítettünk egy Arduino Motor Driver Shield-et, amelyet megnézhet, ha többet szeretne megtudni az L293D Motor Driver IC-rőlés annak működését. Az Arduino, az ultrahangos modulok, a motor meghajtója és a motorok 5 V-on működnek, a nagyobb feszültség megöli, és a 7,4 V-os akkumulátort használjuk, hogy ezt 5 V-ra alakítsuk át, az LM7805 feszültségszabályozót használjuk. Csatlakoztassa a porszívót közvetlenül a főáramkörhöz.
Az áramkör kiépítése Arduino alapú padlótisztító robot számára
Annak érdekében, hogy ötleteket szerezzek a robotomról, online kerestem porszívó robotokat, és néhány képet kaptam kerek alakú robotokról. Tehát úgy döntöttem, hogy megépítek egy kör alakú robotot. A robot hajsza és testének felépítéséhez rengeteg lehetőségem van, például hablemez, MDF, karton stb. De azért választom az MDF-et, mert kemény és vízálló tulajdonságokkal rendelkezik. Ha ezt csinálja, eldöntheti, hogy melyik anyagot választja botjához.
A robot felépítéséhez elvettem az MDF lapot, majd két kört rajzoltam 8 cm sugarú körrel, és ezen a körön belül rajzoltam egy másik kört is, amelynek sugara 4 CMa porszívó felszereléséhez. Aztán kivágtam a köröket. Ezenkívül levágtam és eltávolítottam a kerék pályához megfelelő darabokat (a jobb megértés érdekében lásd a képeket). Végül három kis lyukat készítettem a görgő számára. A következő lépés a motorok felszerelése az alapra annak konzoljai segítségével, valamint helyezze és rögzítse a görgőt a helyére. Ezt követően helyezze az ultrahangos érzékelőket a robot balra, jobbra és közepére. Csatlakoztassa az IR modult a robot hátrányához is. Ne felejtse el hozzáadni a kapcsolót kívül. Ennyit jelent a robot felépítése, ha ezen a ponton összezavarodik, hivatkozhat a következő képekre.
A felső részhez 11 cm sugarú kört is rajzoltam a hablemezre, és levágtam. A felső és az alsó rész közötti távolságra három 4 CM hosszú darabot vágtam egy műanyag csőből. Ezt követően az alsó részre ragasztottam a műanyag távtartókat, majd a felső részt. Ha akarja, a bot oldalsó részeit műanyaggal vagy hasonló anyagokkal boríthatja.
Arduino
A projekt teljes kódja a dokumentum végén található. Ez az Arduino kód hasonló az Arduino alapú ultrahangos távolságérzékelő kódjához, az egyetlen változás a padlófelismerésben történik. A következő sorokban elmagyarázom a kód működését. Ebben az esetben nem használunk extra könyvtárakat. Az alábbiakban lépésről lépésre ismertettük a kódot. Nem használunk extra könyvtárakat a távolságadatok dekódolásához a HC-SR04 érzékelőtől, mert ez nagyon egyszerű. A következő sorokban leírtuk, hogyan. Először meg kell határoznunk a kiváltó csapot és az echo csapot mindhárom ultrahangos távolságérzékelőhöz, amelyek az Arduino táblához vannak csatlakoztatva. Ebben a projektben három Echo és három Trigger csap van. Ne feledje, hogy 1 a bal oldali, 2 az elülső és 3 a jobb érzékelő.
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;
Ezután meghatároztuk a távolság változóit, amelyek mindegyike (int) típusú változó, és az időtartamra a (long) használatát választottuk. Ismét hárman vannak. Meghatároztam egy egész számot is a mozgás állapotának tárolására, erről később, ebben a szakaszban fogunk beszélni.
hosszú időtartam1; hosszú időtartam2; hosszú időtartam3; int distanceleft; int távolságfront; int távoli; int a = 0;
Ezután a beállítási részben meg kell adnunk az összes perspektivikus csapot bemenetként vagy kimenetként a pinModes () függvény segítségével. Ahhoz, hogy ultrahanghullámokat küldhessünk a modulból, engedélyeznünk kell a kioldócsapot a magasra, azaz az összes kioldócsapot OUTPUT- ként kell meghatározni. És hogy visszhangot kapjunk, le kell olvasnunk a visszhangcsapok állapotát, így az összes visszhangcsapot INPUT- ként kell meghatározni. Ezenkívül engedélyezzük a soros monitort a hibaelhárításhoz. Az IR-modulok állapotának kiolvasásához bemenetként definiáltam az irpin- t.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Ezeket a digitális érintkezőket OUTPUT- ként definiálják a motorvezérlő bemenetére.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
A fő hurokban három szakasz található három érzékelő számára. Az összes szakasz ugyanúgy működik, de mindegyik különböző érzékelőkhöz. Ebben a részben leolvassuk az akadályok távolságát az egyes érzékelőktől, és minden meghatározott egész számban tároljuk. A távolság leolvasásához először is meg kell győződnünk arról, hogy a kioldó csapok szabadon vannak-e, ehhez a kioldó csapot LOW-ra kell állítani 2 µs-ra. Az ultrahangos hullám előállításához 10 µs- ig el kell fordítanunk a HIGH ravaszt. Ez elküldi az ultrahangos hangot, és a pulseIn () függvény segítségével leolvashatjuk az utazási időt, és eltárolhatjuk ezt az értéket az „ időtartam ” változóba. Ennek a funkciónak 2 paramétere van, az első az echo pin neve, a másodikhoz pedig írhatMAGAS vagy ALACSONY. A HIGH azt jelenti, hogy a pulseIn () függvény megvárja, amíg a pattanás HIGH- ra megy, a visszapattanó hanghullám okozta, és elkezd számolni, majd megvárja, amíg a pin LOW- ra megy, amikor a hanghullám véget ér, amely leállítja a számlálást. Ez a függvény adja meg az impulzus hosszát mikroszekundumban. A távolság kiszámításához meg kell szorozni az időtartamot 0,034-gyel (a hang sebessége a levegőben 340m / s), és elosztjuk 2-vel (ez a hanghullám előre-hátra haladásának köszönhető). Végül az egyes érzékelők távolságát megfelelő egész számokban tároljuk.
digitalWrite (trigPin1, LOW); késleltetés mikroszekundum (2); digitalWrite (trigPin1, HIGH); késleltetés mikroszekundum (10); digitalWrite (trigPin1, LOW); időtartam1 = pulzusIn (echoPin1, HIGH); távolság távolság = idő: 1 * 0,034 / 2;
Miután megkapta az egyes érzékelők távolságát, egy if utasítás segítségével vezérelhetjük a motorokat, így mi irányíthatjuk a robot mozgását. Ez nagyon egyszerű, először is adtunk egy akadálytávolság értéket, ebben az esetben 15 cm (változtassa meg ezt az értéket kívánságának megfelelően). Ezután ennek az értéknek megfelelően adtunk feltételeket. Például, ha akadály érkezik a bal érzékelő elé (ez azt jelenti, hogy a bal érzékelő távolságának 15 cm alatt kell lennie vagy egyenlőnek kell lennie), és a másik két távolság nagy (ez azt jelenti, hogy az érzékelők előtt nincs akadály), akkor a digitális írási funkció segítségével jobbra tudjuk hajtani a motorokat. Később ellenőriztem az IR érzékelő állapotát. Ha a robot a földön van, akkor az IR tű értéke LOW lesz, ha pedig nem, akkor az leszMAGAS. Ezután eltároltam ezt az értéket az int s változóban . A robotot ennek az állapotnak megfelelően fogjuk irányítani.
A kód ezen szakasza a robot előre és hátra mozgatására szolgál :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); késés (1000); a = 1; }
De van egy probléma ezzel a módszerrel, amikor a motor hátrafelé mozog, a padló visszajön, és a bot előre halad, és megismétli a bot beragadását. Ennek kiküszöbölése érdekében az (1) értéket eltároljuk az int-ben, miután megértettük a padlót. Ezt a feltételt más mozgások esetén is ellenőrizzük.
A padló hiányának észlelése után a robot nem mozdul előre. Ehelyett balra mozog, így elkerülhetjük a problémát.
ha ((a == 0) && (s == LOW) && (távolsági távolság <= 15 && távolságfront> 15 && távolságtartás <= 15) - (a == 0) && (s == ALACSONY) && (távoli távolság> 15 és& távolság távolság> 15 és& távolság távolság> 15))
A fenti állapotban. Először a robot ellenőrzi a padló állapotát és az egész értéket. A bot csak akkor halad előre, ha minden feltétel teljesül.
Most megírhatjuk a motorvezérlő parancsait. Ez a jobb motort hátra, a bal motort pedig előre hajtja, ezáltal a robotot jobbra fordítja.
A kód ezen szakasza a robot jobbra mozgatására szolgál:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Ha a bot észleli a padló hiányát, az érték 1-re változik, és a bot balra mozog. Balra fordulás után az 'a' értéke 0-ra változik 1-ről.
ha ((a == 1) && (s == LOW) - (s == LOW) && (távolsági távolság <= 15 && távolságfront <= 15 és& távolságtartás> 15) - (s == ALACSONY) && (távoli távolság <= 15 && távolságfront <= 15 && távolságtartó> 15) - (s == LOW) && (távoli <= 15 && távolság front> 15 && távolságtartó> 15) - (távoli <= 15 && távolság front> 15 && távolságtartó> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); késés (100); a = 0; }
A kód ezen szakasza a robot balra mozgatására szolgál:
ha ((s == LOW) && (távolsági távolság> 15 && távolságfront <= 15 && távolságtartás <= 15) - (s == ALACSONY) && (távoli távolság> 15 és& távolság távolság> 15 && távolságtartás <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
Ez az Arduino alapú intelligens porszívó robot felépítéséhez. A projekt teljes működése megtalálható az oldal alján linkelt videóban. Ha bármilyen kérdése van, írjon megjegyzést lentebb.