- Materialer som kreves for å bygge Arduino-basert gulvrengjøringsrobot
- Bærbar støvsuger
- HC-SR04 Ultralydsensormodul
- Gulvføler (IR-sensor) for trappegjenkjenning
- Kretsdiagram over Arduino-basert gulvrengjøringsrobot
- Bygg kretsen for Arduino-basert gulvrengjøringsrobot
- Arduino
I et dagens scenario er vi alle så opptatt med arbeidet vårt at vi ikke har tid til å rengjøre huset vårt ordentlig. Løsningen på problemet er veldig enkel, du trenger bare å kjøpe en innenlands støvsugerrobot som irobot roomba som vil rengjøre huset ditt med et trykk på en knapp. Men slike kommersielle produkter er vanlig problem, noe som koster. Så i dag bestemte vi oss for å lage en enkel gulvrenserrobot, som ikke bare er enkel å lage, men koster veldig mindre sammenlignet med kommersielle produkter som er tilgjengelige i markedet. Hyppige lesere husker kanskje Arduino Vacuum Cleaning Robot, som vi bygde for lenge siden, men den var veldig klumpete og trengte et stort blybatteri for å bevege seg. Den nye Arduino støvsugeren vi skal bygge her vil være kompakte og mer praktiske. På toppen av det vil denne roboten ha ultralydssensorer og en IR-nærhetssensor. Ultralydssensoren vil tillate roboten å unngå hindringer slik at den kan bevege seg fritt til rommet er ordentlig rengjort, og nærhetssensoren vil hjelpe den til å unngå å falle fra trappene. Alle disse funksjonene høres interessante ut, ikke sant? Så la oss komme i gang.
I en av våre tidligere artikler laget vi mange roboter som Self Balancing Robot, Automated Surface Desinfecting Robot og Obstacle Unngående Robot. Sjekk dem om det høres interessant ut for deg.
Materialer som kreves for å bygge Arduino-basert gulvrengjøringsrobot
Siden vi har brukt veldig generiske komponenter til å bygge maskinvareseksjonen til støvsugerroboten, bør du kunne finne alle disse i din lokale hobbybutikk. Her er den komplette listen over nødvendig materiale sammen med bildet av alle komponentene.
- Arduino Pro Mini - 1
- HC-SR04 Ultralydsmodul - 3
- L293D Motordriver - 1
- 5Volt N20-motorer og monteringsbraketter - 2
- N20 motorhjul - 2
- Bryter - 1
- LM7805 Spenningsregulator - 1
- 7.4V litiumionbatteri - 1
- IR-modul - 1
- Perfboard - 1
- Hjul - 1
- MDF
- Generisk bærbar støvsuger
Bærbar støvsuger
I delen krav til komponent har vi snakket om en bærbar støvsuger, bildene nedenfor viser akkurat det. Det er en bærbar støvsuger fra Amazon. Dette kommer med en veldig enkel mekanisme. Den har tre deler i bunnen (et lite kammer for oppbevaring av støv, midtpartiet inkluderer motor, vifte og batterikontakten på toppen (det er et deksel eller hette for batteriet). Den har en DC-motor og en vifte. Denne motoren er koblet direkte til 3V (2 * 1,5 volt AA-batterier) via en enkel bryter. Da vi driver roboten vår med et 7,4 V batteri, vil vi kutte forbindelsen fra det interne batteriet og strømforsyne den fra 5 V strømforsyning. Så vi har fjernet alle unødvendige deler og bare motoren med to-leder stag. Du kan se det på bildet nedenfor.
HC-SR04 Ultralydsensormodul
For å oppdage hindringene bruker vi den populære HC-SR04 ultrasoniske avstandssensoren, eller vi kan kalle det hindringssensorer. Arbeidet er veldig enkelt, for det første sender sendemodulen en ultralydbølge som beveger seg gjennom luft, treffer et hinder og spretter tilbake og mottakeren mottar den bølgen. Ved å beregne tiden med Arduino kan vi bestemme avstanden. I en tidligere artikkel om Arduino Based Ultrasonic Distance Sensor-prosjekt har vi diskutert arbeidsprinsippet til denne sensoren veldig grundig. Du kan sjekke det ut hvis du vil vite mer om HC-SR04 ultralydavstandssensormodulen.
Gulvføler (IR-sensor) for trappegjenkjenning
I funksjonsseksjonen har vi snakket om en funksjon der roboten kan oppdage trapper og kan forhindre seg selv i å falle. For å gjøre det bruker vi en IR-sensor. Vi vil lage et grensesnitt mellom IR-sensoren og Arduino. Virkemåten for den IR-avstandssensoren er meget enkel, den har en IR-lampe og en fotodiode, IR LED-sender ut infrarødt lys, og hvis en hvilken som helst hindring kommer foran denne utsendte lys, vil den bli reflektert, og det reflekterte lys vil bli detektert av fotodioden. Men den genererte spenningen fra refleksjonen vil være veldig lav. For å øke det kan vi bruke en op-amp-komparator, vi kan forsterke og få utgang. En IR-modulhar tre pinner - Vcc, jord og utgang. Vanligvis går utgangen lavt når en hindring kommer foran sensoren. Så vi kan bruke dette til å oppdage gulvet. Hvis vi i et brutt sekund oppdager en høy fra sensoren, kan vi stoppe roboten, vri den tilbake eller gjøre noe vi vil for å forhindre at den faller ned fra trappen. I en tidligere artikkel har vi laget en Breadboard-versjon av IR-nærhetssensormodulen og forklart arbeidsprinsippet i detaljer, du kan sjekke det ut hvis du vil vite mer om denne sensoren.
Kretsdiagram over Arduino-basert gulvrengjøringsrobot
Vi har tre ultralydssensorer som oppdager hindringer. Så vi må koble alle grunnlag til ultralydssensorer og koble dem til vanlig grunn. Vi kobler også alle de tre Vcc-sensorene og kobler den til den vanlige VCC-pinnen. Deretter kobler vi utløseren og ekkopinnene til PWM-pinnene på Arduino. Vi kobler også VCC til IR-modulen til 5V og jord til jordpinnen på Arduino, utgangspinnen til IR-sensormodulen går til den digitale pinnen D2 på Arduino. For motordriveren kobler vi de to aktiveringspinnene til 5v og også driverens spenningsstift til 5V fordi vi bruker 5volts motorer. I en tidligere artikkel har vi laget et Arduino Motor Driver Shield, du kan sjekke det ut for å lære mer om L293D Motor Driver ICog dens virksomhet. Arduino, ultralydsmoduler, motordrivere og motorer fungerer på 5 volt, den høyere spenningen vil drepe den, og vi bruker 7,4 volt batteri, for å konvertere det til 5 volt, brukes LM7805 spenningsregulator. Koble støvsugeren direkte til hovedkretsen.
Bygg kretsen for Arduino-basert gulvrengjøringsrobot
For å få noen ideer om roboten min, søkte jeg på støvsugerroboter på nettet og fikk noen bilder av rundformede roboter. Så jeg bestemte meg for å bygge en rundformet robot. For å bygge jakten og kroppen til roboten har jeg mange alternativer som skumplate, MDF, papp osv. Men jeg velger MDF fordi den er vanskelig og har noen vanntette egenskaper. Hvis du gjør dette, kan du bestemme hvilket materiale du vil velge for boten din.
For å bygge roboten tok jeg MDF-arket og tegnet to sirkler med en 8 CM-radius, og inne i den sirkelen har jeg også tegnet en annen sirkel med en radius på 4 CMfor montering av støvsugeren. Så kuttet jeg ut sirklene. Dessuten har jeg kuttet og fjernet passende stykker for hjulbanen (se bildene for bedre forståelse). Til slutt lagde jeg tre små hull til hjulet. Det neste trinnet er å montere motorene på basen ved hjelp av brakettene, også plassere og feste hjulet på plass. Deretter plasserer du ultralydsensorene til venstre, høyre og midten av roboten. Koble også IR-modulen til baksiden av roboten. Ikke glem å legge til bryteren på utsiden. Alt handler om å bygge roboten. Hvis du blir forvirret på dette tidspunktet, kan du referere til følgende bilder.
For den øverste delen har jeg også tegnet en sirkel på 11 CM i radius på skumplaten og kuttet den. For avstanden mellom toppen og bunnen, hadde jeg kuttet tre 4 CM lange biter av et plastrør. Etter det limte jeg plastavstandsstykkene på den nederste delen og deretter limte jeg den øverste delen. Du kan dekke sidedelene av boten med plast eller lignende materialer hvis du vil.
Arduino
Den komplette koden for dette prosjektet er gitt på slutten av dokumentet. Denne Arduino-koden ligner på den Arduino-baserte ultralydavstandssensorkoden, den eneste endringen er i gulvdeteksjonen. I de følgende linjene forklarer jeg hvordan koden fungerer. I dette tilfellet bruker vi ikke noen ekstra biblioteker. Nedenfor har vi beskrevet koden trinnvis. Vi bruker ikke ekstra biblioteker for å dekode avstandsdataene fra HC-SR04-sensoren, fordi det er veldig enkelt. I de følgende linjene beskrev vi hvordan. Først må vi definere Trigger Pin og Echo Pin for alle tre ultralydavstandssensorene som er koblet til Arduino-kortet. I dette prosjektet har vi tre Echo pins og tre Trigger pins. Merk at 1 er den venstre sensoren, 2 er den fremre sensoren, og 3 er den høyre sensoren.
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;
Så definerte vi variabler for avstanden som alle er (int) type variabler, og for varigheten valgte vi å bruke (lang). Igjen har vi tre av hver. Også, jeg har definert et heltall for lagring av bevegelsens status, vi vil snakke om det senere i denne delen.
lang varighet1; lang varighet2; lang varighet3; int distanceleft; int distansefront; int distanseright; int a = 0;
Deretter må vi i oppsettdelen lage alle perspektivpinnene som input eller output ved hjelp av pinModes () -funksjonen. For å sende ultralydbølger fra modulen, må vi aktivere triggerpinnen til høy, dvs. alle triggerpinnene skal definere som OUTPUT. Og for å motta ekkoet, må vi lese tilstanden til ekkopinner slik at alle ekkopinner skal definere som INNGANG. Vi aktiverer også den serielle skjermen for feilsøking. For å lese status for IR-modulene har jeg definert irpin som input.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Og disse digitale pinnene er definert som OUTPUT for inngangen til motorføreren.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
I hovedsløyfen har vi tre seksjoner for tre sensorer. Alle seksjonene fungerer likt, men hver for forskjellige sensorer. I denne delen leser vi hindringsavstanden fra hver sensor og lagrer den i hvert definerte heltall. For å lese avstanden, må vi først sørge for at utløserpinnene er klare, for det må vi sette avtrekkerpinnen til LAV i 2 µs. Nå, for å generere ultralydbølgen, må vi vri avtrekkerstiften HØY i 10 µs. Dette vil sende ultralydlyden, og ved hjelp av pulseIn () -funksjonen kan vi lese reisetiden, og lagre den verdien i variabelen " varighet ". Denne funksjonen har to parametere, den første er navnet på ekkopinnen og for den andre kan du skrive entenHØY eller LAV. HIGH betyr at pulseIn () -funksjonen vil vente på at pinnen går HIGH forårsaket av den sprett lydbølgen, og den vil begynne å telle, så vil den vente på at pinnen skal gå LAV når lydbølgen slutter, noe som vil stoppe tellingen. Denne funksjonen gir pulslengden i mikrosekunder. For å beregne avstanden vil vi multiplisere varigheten med 0,034 (lydhastigheten i luften er 340m / s) og dele den med 2 (dette skyldes lydbølgen frem og tilbake). Til slutt lagrer vi avstanden til hver sensor i tilsvarende heltall.
digitalWrite (trigPin1, LOW); forsinkelseMikrosekunder (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); varighet1 = pulseIn (echoPin1, HIGH); distanseleft = varighet1 * 0,034 / 2;
Etter å ha fått avstanden fra hver sensor, kan vi kontrollere motorene ved hjelp av en if-uttalelse, slik at vi styrer bevegelsen til roboten. Dette er veldig enkelt, for det første ga vi en hindringsavstandsverdi, i dette tilfellet er den 15 cm (endre denne verdien som du ønsker). Så ga vi betingelser i henhold til den verdien. For eksempel når et hinder kommer foran venstre sensor (det betyr at avstanden til venstre sensor skal være under eller tilsvarer 15 cm) og de to andre avstandene er høye (det betyr at ingen hindring er foran sensorene), deretter ved hjelp av digital skrivefunksjon kan vi kjøre motorene til høyre. Senere sjekket jeg statusen til IR-sensoren. Hvis roboten er på gulvet, vil verdien av IR-pinnen være LAV, og hvis ikke, vil verdien væreHØY. Så lagret jeg den verdien i int s-variabelen . Vi skal kontrollere roboten i henhold til denne statusen.
Denne delen av koden brukes til å flytte roboten fremover og bakover :
hvis (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HØY); digitalWrite (8, LAV); digitalWrite (12, HØY); forsinkelse (1000); a = 1; }
Men det er et problem med denne metoden når motoren beveger seg bakover, gulvet kommer tilbake og boten vil bevege seg fremover, og den vil gjenta å gjøre boten fast. For å overvinne det lagrer vi en verdi (1) i int etter at gulvet ikke er til stede. Vi sjekker også denne tilstanden for andre bevegelser.
Etter å ha oppdaget fraværet av gulvet, vil ikke roboten bevege seg fremover. I stedet vil den bevege seg til venstre, på denne måten kan vi unngå problemet.
hvis ((a == 0) && (s == LAV) && (distanseleft <= 15 && distansefront> 15 && distanseright <= 15) - (a == 0) && (s == LAV) && (distanseleft> 15 && distansefront> 15 && distanceright> 15))
I ovennevnte tilstand. Først vil roboten sjekke gulvstatus og heltall. Boten vil bare gå fremover hvis alle forhold er oppfylt.
Nå kan vi skrive kommandoene til motorføreren. Dette vil kjøre høyre motor bakover og venstre motor fremover, og dreie roboten mot høyre.
Denne delen av koden brukes til å flytte roboten til høyre:
digitalWrite (4, HØY); digitalWrite (7, LAV); digitalWrite (8, HØY); digitalWrite (12, LAV);
Hvis boten oppdager at gulvet er fraværende, endres verdien til 1, og boten vil flytte til venstre. Etter å ha svingt til venstre endres verdien til 'a' til 0 fra 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, HIGH); digitalWrite (7, LAV); digitalWrite (8, LAV); digitalWrite (12, HØY); forsinkelse (100); a = 0; }
Denne delen av koden brukes til å flytte roboten til venstre:
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, HØY); digitalWrite (8, HØY); digitalWrite (12, LAV); }
Det er det for å bygge Arduino-basert Smart Vacuum Cleaner Robot. Fullstendig bearbeiding av prosjektet finner du i videoen som er lenket nederst på denne siden. Hvis du har spørsmål, kan du kommentere nedenfor.