- Arduino-pohjaisen lattianpuhdistusrobotin rakentamiseen tarvittavat materiaalit
- Kannettava pölynimuri
- HC-SR04-ultraäänianturimoduuli
- Lattia-anturi (IR-anturi) portaikon havaitsemiseen
- Arduino-pohjaisen lattianpuhdistusrobotin piirikaavio
- Piirin rakentaminen Arduino-pohjaiselle lattianpuhdistusrobotille
- Arduino
Nykypäivän skenaariossa olemme kaikki niin kiireisiä työmme kanssa, että meillä ei ole aikaa puhdistaa talomme kunnolla. Ratkaisu ongelmaan on hyvin yksinkertainen, sinun tarvitsee vain ostaa kotimainen pölynimurirobotti, kuten irobot roomba, joka puhdistaa talosi napin painalluksella. Mutta tällaiset kaupalliset tuotteet ovat yleinen ongelma, joka on kustannuksia. Joten tänään päätimme tehdä yksinkertaisen lattianpuhdistusrobotin, jota ei ole vain helppo valmistaa, vaan se maksaa paljon vähemmän kuin markkinoilla olevat kaupalliset tuotteet. Usein lukijat saattavat muistaa kauan sitten rakentamamme Arduino-pölynimurobotin, mutta se oli erittäin iso ja tarvitsi suuren lyijyakun liikkumiseen. Uusi Arduino-pölynimuri rakennamme tänne on kompakti ja käytännöllisempi. Tämän lisäksi tällä robotilla on ultraäänianturit ja IR-läheisyysanturi. Ultraäänianturin avulla robotti voi välttää esteitä, jotta se voi liikkua vapaasti, kunnes huone on puhdistettu kunnolla, ja läheisyysanturi auttaa sitä välttämään putoamista portaista. Kaikki nämä ominaisuudet kuulostavat mielenkiintoisilta, eikö? Joten, aloitetaan.
Yhdessä aikaisemmista artikkeleistamme teimme monia robotteja, kuten Itsetasapainottava robotti, Automaattinen pinnan desinfiointirobotti ja Esteitä välttävä robotti. Tarkista nämä, jos se kuulostaa mielenkiintoiselta.
Arduino-pohjaisen lattianpuhdistusrobotin rakentamiseen tarvittavat materiaalit
Koska olemme käyttäneet hyvin yleisiä komponentteja pölynimurirobotin laitteisto-osan rakentamiseen, sinun pitäisi pystyä löytämään kaikki ne paikallisesta harrastekaupastasi. Tässä on täydellinen luettelo vaaditusta materiaalista sekä kaikkien komponenttien kuva.
- Arduino Pro Mini - 1
- HC-SR04-ultraäänimoduuli - 3
- L293D-moottorin ohjain - 1
- 5Voltin N20-moottorit ja kiinnikkeet - 2
- N20-moottoripyörät - 2
- Kytkin - 1
- LM7805 Jännitesäädin - 1
- 7,4 V: n litiumioniakku - 1
- IR-moduuli - 1
- Perfboard - 1
- Pyörän pyörät - 1
- MDF
- Geneerinen kannettava pölynimuri
Kannettava pölynimuri
Komponenttivaatimuksia koskevassa osassa olemme puhuneet kannettavasta pölynimurista, alla olevat kuvat osoittavat juuri sen. Se on Amazonin kannettava pölynimuri. Tämän mukana tulee hyvin yksinkertainen mekanismi. Sen alaosassa on kolme osaa (pieni kammio pölyn varastointia varten, keskiosa sisältää moottorin, tuulettimen ja ylhäällä olevan akkuliitännän (akulle on kansi tai korkki). Siinä on tasavirtamoottori ja puhallin. Tämä moottori on kytketty suoraan 3 V: n (2 * 1,5 V: n AA-paristoon) yksinkertaisella kytkimellä. Koska virtalähteenä on robotti 7,4 V: n paristolla, katkaisemme yhteyden sisäisestä akusta ja virran 5 V: n Joten olemme poistaneet kaikki tarpeettomat osat ja vain moottori, jossa on kaksijohtiminen, pysyy. Voit nähdä sen alla olevasta kuvasta.
HC-SR04-ultraäänianturimoduuli
Esteiden havaitsemiseksi käytämme suosittua ultraäänietäisyyden tunnistinta HC-SR04 tai voimme kutsua sitä esteiden välttämisantureiksi. Työskentely on hyvin yksinkertaista. Ensinnäkin lähetinmoduuli lähettää ultraääniaallon, joka kulkee ilman läpi, osuu esteeseen ja palautuu takaisin ja vastaanotin vastaanottaa aallon. Laskemalla aika Arduinolla voimme määrittää etäisyyden. Aikaisemmassa artikkelissa Arduino-pohjaisesta ultraäänimatka-anturiprojektista olemme keskustelleet tämän anturin toimintaperiaatteesta erittäin perusteellisesti. Voit tarkistaa sen, jos haluat tietää enemmän ultraäänietäisyysanturimoduulista HC-SR04.
Lattia-anturi (IR-anturi) portaikon havaitsemiseen
Ominaisuudet-osiossa olemme puhuneet ominaisuudesta, jossa robotti voi havaita portaat ja estää itsensä putoamasta. Tätä varten käytämme IR-anturia. Teemme liitännän IR-anturin ja Arduinon välille. Työskentelystä IR lähestymiskytkin on hyvin yksinkertainen, se on IR-LED ja valodiodi, IR-LED emittoi infrapunavaloa, ja jos mitään esteitä tulee edessä tämän lähetetyn valon, se heijastuu, ja heijastunut valo havaitaan valodiodin avulla. Mutta heijastuksen tuottama jännite on hyvin pieni. Tämän lisäämiseksi voimme käyttää op-amp-vertailijaa, voimme vahvistaa ja saada lähtöä. IR-moduulion kolme nastaa - Vcc, ground ja output. Yleensä lähtö vähenee, kun anturin eteen tulee este. Joten voimme käyttää tätä lattian havaitsemiseen. Jos havaitsemme anturin sekunnin murto-osan korkeuden anturista, voimme pysäyttää robotin, kääntää sen takaisin tai tehdä mitä tahansa, jotta estämme sen putoamisen portaikosta. Aikaisemmassa artikkelissa olemme tehneet leipälevyn version IR-läheisyysanturimoduulista ja selittäneet toimintaperiaatetta yksityiskohtaisesti. Voit tarkistaa sen, jos haluat tietää enemmän tästä anturista.
Arduino-pohjaisen lattianpuhdistusrobotin piirikaavio
Meillä on kolme ultraäänianturia, jotka havaitsevat esteet. Joten meidän on yhdistettävä kaikki ultraääniantureiden kentät ja liitettävä ne yhteiseen maahan. Yhdistämme myös anturin kaikki kolme Vcc: tä ja liitämme ne yhteiseen VCC-nastaan. Seuraavaksi yhdistämme liipaisimen ja kaiunastat Arduinon PWM-nastoihin. Yhdistämme myös IR-moduulin VCC: n 5 V: iin ja maadoitetaan Arduinon maadoitustappiin, IR-anturimoduulin lähtötappi menee Arduinon digitaaliseen tapiin D2. Yhdistämme moottorinohjaimelle kaksi aktivointitappia 5 V: iin ja myös kuljettajan jännitetapin 5 V: iin, koska käytämme 5 voltin moottoreita. Aikaisemmassa artikkelissa olemme tehneet Arduino Motor Driver Shield -sovelluksen, voit tarkistaa sen saadaksesi lisätietoja L293D Motor Driver IC: stäja sen toiminnasta. Arduino, ultraäänimoduulit, moottoriohjain ja moottorit toimivat 5 voltin jännitteellä, korkeampi jännite tappaa sen ja käytämme 7,4 voltin akkua, jotta muunnetaan se 5 voltiksi, käytetään LM7805-jännitesäädintä. Liitä pölynimuri suoraan pääpiiriin.
Piirin rakentaminen Arduino-pohjaiselle lattianpuhdistusrobotille
Saadakseni ideoita robotistani, etsin verkossa pölynimurirobotteja ja sain kuvia pyöreistä robotteista. Joten päätin rakentaa pyöreän muotoisen robotin. Robotin jahdin ja rungon rakentamiseksi minulla on paljon vaihtoehtoja, kuten vaahtolevy, MDF, pahvi jne. Mutta valitsen MDF: n, koska se on kova ja sillä on joitain vedenpitäviä ominaisuuksia. Jos teet tämän, voit päättää minkä materiaalin valitset botillesi.
Robotin rakentamiseksi otin MDF-levyn, piirsin sitten kaksi ympyrää, joiden säde oli 8 CM, ja tämän ympyrän sisällä olen piirtänyt myös toisen ympyrän, jonka säde on 4 CMpölynimurin asentamista varten. Sitten leikkain ympyrät. Olen myös leikannut ja poistanut sopivat kappaleet pyörätietä varten (katso kuvat ymmärtämistä varten). Lopuksi tein kolme pientä reikää pyörää varten. Seuraava vaihe on moottoreiden asentaminen alustalle sen kannattimien avulla, aseta ja kiinnitä pyöräpyörä myös paikalleen. Sitten sijoita ultraäänianturit robotin vasemmalle, oikealle ja keskelle. Liitä myös IR-moduuli robotin haittapuoleen. Älä unohda lisätä kytkintä ulkopuolelle. Siinä kaikki robotin rakentamisessa, jos olet hämmentynyt tässä vaiheessa, voit viitata seuraaviin kuviin.
Yläosaan olen myös piirtänyt vaahtolevylle ympyrän, jonka säde on 11 cm ja leikkaanut sen. Ylä- ja alaosan välistä etäisyyttä varten olin leikannut kolme 4 CM pitkää muoviputken palaa. Sen jälkeen liimatin muoviset välikappaleet alaosaan ja sitten liimattiin yläosa. Voit peittää botin sivuosat muovilla tai vastaavilla materiaaleilla, jos haluat.
Arduino
Tämän projektin täydellinen koodi on asiakirjan lopussa. Tämä Arduino-koodi on samanlainen kuin Arduino-pohjainen ultraäänimatka-anturikoodi, ainoa muutos on lattian tunnistuksessa. Seuraavilla riveillä selitän koodin toimintaa. Tässä tapauksessa emme käytä ylimääräisiä kirjastoja. Alla on kuvattu koodi vaihe vaiheelta. Emme käytä ylimääräisiä kirjastoja etädatan purkamiseen HC-SR04-anturista, koska se on hyvin yksinkertaista. Seuraavissa riveissä kuvailimme miten. Ensin meidän on määritettävä liipaisutappi ja kaiun tappi kaikille kolmelle Arduino-korttiin liitetylle ultraäänimatka-anturille. Tässä projektissa meillä on kolme Echo-nastaa ja kolme Trigger-nastaa. Huomaa, että 1 on vasen anturi, 2 on etuanturi ja 3 on oikea anturi.
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;
Sitten määritimme muuttujat etäisyydelle, jotka kaikki ovat (int) -tyyppisiä muuttujia, ja kestolle, jonka valitsimme käyttää (pitkä). Jälleen meillä on kolme kutakin. Lisäksi olen määritellyt kokonaisluvun liikkeen tilan tallentamiseksi, puhumme siitä myöhemmin tässä osiossa.
pitkä kesto1; pitkä kesto2; pitkä kesto3; int etäisyys vasen; int etäisyys; int etäisyystarkka; int a = 0;
Seuraavaksi, asennusosassa, meidän on tehtävä kaikki perspektiivinastat tuloina tai lähtöinä käyttämällä pinModes () -toimintoa. Ultraääniaaltojen lähettämiseksi moduulista meidän on sallittava liipaisintappi korkealle eli kaikkien liipaisintappien tulisi määritellä OUTPUT. Ja kaiun vastaanottamiseksi meidän on luettava kaiunastojen tila, jotta kaikkien kaiunastojen tulisi määritellä tuloksi. Lisäksi otamme sarjamonitorin käyttöön vianmääritystä varten. IR-moduulien tilan lukemiseksi olen määrittänyt irpin: n tuloksi.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Ja nämä digitaaliset nastat on määritelty OUTPUT: ksi moottorin kuljettajan tulolle.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
Pääsilmukassa meillä on kolme osaa kolmelle anturille. Kaikki osat toimivat samalla tavalla, mutta kukin eri antureille. Tässä osassa luemme esteen etäisyydet kustakin anturista ja tallennamme sen kullekin määritetylle kokonaisluvulle. Etäisyyden lukemiseksi meidän on ensin varmistettava, että liipaisimen tapit ovat selkeät, sitä varten meidän on asetettava liipaisintappi asentoon LOW 2 µs. Nyt ultraääniaallon muodostamiseksi meidän on käännettävä liipaisintappia HIGH 10 µs. Tämä lähettää ultraäänen ja pulseIn () -toiminnon avulla voimme lukea matka-ajan ja tallentaa arvon muuttujaan " kesto ". Tällä toiminnolla on 2 parametria, joista ensimmäinen on kaiun nimi ja toiselle voit kirjoittaa jommankummanKORKEA tai MATALA. KORKEA tarkoittaa, että pulseIn () -toiminto odottaa, että tappi menee HIGH: iin, jonka aiheuttaa palautunut ääniaalto, ja se alkaa laskea, sitten se odottaa, että tappi menee matalaksi, kun ääniaalto loppuu, mikä lopettaa laskennan. Tämä toiminto antaa pulssin pituuden mikrosekunteina. Etäisyyden laskemiseksi kerrotaan kesto 0,034: llä (äänen nopeus ilmassa on 340 m / s) ja jaamme sen 2: lla (tämä johtuu ääniaallon kulkemisesta edestakaisin). Lopuksi tallennamme kunkin anturin etäisyyden vastaaviin kokonaislukuihin.
digitalWrite (trigPin1, LOW); viive mikrosekuntia (2); digitalWrite (trigPin1, HIGH); viive mikrosekuntia (10); digitalWrite (trigPin1, LOW); kesto1 = pulssi (echoPin1, HIGH); etäisyys vasen = kesto1 * 0,034 / 2;
Saatuamme etäisyyden jokaisesta anturista voimme ohjata moottoreita if-lauseen avulla, joten ohjaamme robotin liikettä. Tämä on hyvin yksinkertaista. Ensinnäkin annoimme esteetäisyyden arvon, tässä tapauksessa se on 15 cm (muuta tätä arvoa haluamallasi tavalla). Sitten annoimme kyseisen arvon mukaiset ehdot. Esimerkiksi, kun vasemman anturin eteen tulee este (mikä tarkoittaa, että vasemman anturin etäisyyden tulisi olla alle 15 cm tai yhtä suuri kuin 15 cm) ja kaksi muuta etäisyyttä ovat korkeat (eli antureiden edessä ei ole esteitä), sitten voimme digitaalisen kirjoitustoiminnon avulla ajaa moottorit oikealle. Myöhemmin tarkistin IR-anturin tilan. Jos robotti on lattialla, IR-nastan arvo on MATALA, ja jos ei, niin arvo onKORKEA. Sitten tallensin kyseisen arvon int-muuttujaan . Aiomme ohjata robottia tämän tilan mukaan.
Tätä koodin osaa käytetään robotin siirtämiseen eteenpäin ja taaksepäin :
if (s == KORKEA) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); viive (1000); a = 1; }
Mutta tässä menetelmässä on ongelma, kun moottori liikkuu taaksepäin, lattia tulee takaisin ja botti liikkuu eteenpäin, ja se toistaa botin jumittumisen. Tämän voittamiseksi tallennamme arvon (1) int: ään sen jälkeen, kun ymmärrämme, että lattiaa ei ole. Tarkistamme tämän ehdon myös muille liikkeille.
Lattian puuttumisen jälkeen robotti ei liiku eteenpäin. Sen sijaan se liikkuu vasemmalle, tällä tavalla voimme välttää ongelman.
jos ((a == 0) && (s == MATALA) && (etäisyys vasen <= 15 && etäisyys edessä> 15 && etäisyys <= 15) - (a == 0) && (s == LOW) && (etäisyys vasen> 15 && etäisyys> 15 && etäisyys> 15))
Edellä mainitussa tilassa. Ensin robotti tarkistaa lattian tilan ja kokonaisluvun. Botti liikkuu eteenpäin vain, jos kaikki ehdot täyttyvät.
Nyt voimme kirjoittaa komennot moottoriohjaimelle. Tämä ajaa oikean moottorin taaksepäin ja vasemman moottorin eteenpäin, mikä kääntää robotin oikealle.
Tätä koodin osaa käytetään robotin siirtämiseen oikealle:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Jos botti havaitsee lattian puuttumisen, arvo muuttuu arvoksi 1 ja botti siirtyy vasemmalle. Käänny vasemmalle, a-arvon arvo muuttuu arvoksi 0 arvosta 1.
jos ((a == 1) && (s == LOW) - (s == LOW) && (etäisyys vasen <= 15 && etäisyys <= 15 && etäisyys> 15) - (s == LOW) && (etäisyys vasen <= 15 && etäisyys <= 15 && etäisyys> 15) - (s == LOW) && (etäisyys vasen <= 15 && etäisyys> 15 && etäisyys> 15) - (etäisyys <= 15 && etäisyys> 15 && etäisyys> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); viive (100); a = 0; }
Tätä koodin osaa käytetään robotin siirtämiseen vasemmalle:
jos ((s == MATALA) && (etäisyys vasen> 15 && etäisyys edessä = = 15 && etäisyys <= 15) - (s == matala) && (etäisyys> 15 && etäisyys> 15 && etäisyys <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
Se on Arduino-pohjaisen älypuhdistinrobotin rakentamiseen. Projektin täydellinen toiminta löytyy tämän sivun alaosassa olevasta videosta. Jos sinulla on kysyttävää, kommentoi alla.