- Nødvendige materialer til at bygge Arduino-baseret gulvrengøringsrobot
- Bærbar støvsuger
- HC-SR04 Ultralydssensormodul
- Gulvsensor (IR-sensor) til detektion af trappe
- Circuit Diagram of Arduino Based Floor Cleaner Robot
- Opbygning af kredsløbet til Arduino-baseret gulvrengøringsrobot
- Arduino
I et nutidsscenarie er vi alle så travlt med vores arbejde, at vi ikke har tid til at rengøre vores hus ordentligt. Løsningen på problemet er meget enkel, du skal bare købe en husstøvsugerrobot såsom irobot roomba, der renser dit hus med et tryk på en knap. Men sådanne kommercielle produkter er almindeligt problem, hvilket er omkostninger. Så i dag besluttede vi at lave en simpel Floor cleaner-robot, som ikke kun er let at fremstille, men koster meget mindre sammenlignet med kommercielle produkter, der er tilgængelige på markedet. Hyppige læsere husker måske vores Arduino støvsugerrobot, som vi byggede for længe siden, men den ene var meget klodset og havde brug for et stort blysyrebatteri for at bevæge sig rundt. Den nye Arduino støvsuger vi skal bygge her vil være kompakt og mere praktisk. Derudover vil denne robot have ultralydssensorer og en IR-nærhedsføler. Ultralydssensoren gør det muligt for robotten at undgå forhindringer, så den kan bevæge sig frit, indtil rummet er ordentligt rengjort, og nærhedssensoren hjælper den med at undgå at falde ned fra trappen. Alle disse funktioner lyder interessante, ikke? Så lad os komme i gang.
I en af vores tidligere artikler lavede vi mange bots som den selvbalancerende robot, automatiseret overfladedesinficeringsrobot og forhindringsroboten. Tjek dem, hvis det lyder interessant for dig.
Nødvendige materialer til at bygge Arduino-baseret gulvrengøringsrobot
Da vi har brugt meget generiske komponenter til at opbygge hardwareafsnittet på støvsugerrobotten, skal du være i stand til at finde alle dem i din lokale hobbybutik. Her er den komplette liste over krævet materiale sammen med billedet af alle komponenterne.
- Arduino Pro Mini - 1
- HC-SR04 Ultralydsmodul - 3
- L293D Motor Driver - 1
- 5Volt N20-motorer og monteringsbeslag - 2
- N20 motorhjul - 2
- Afbryder - 1
- LM7805 Spændingsregulator - 1
- 7,4 V litiumionbatteri - 1
- IR-modul - 1
- Perfboard - 1
- Hjul - 1
- MDF
- Generisk bærbar støvsuger
Bærbar støvsuger
I komponentkravssektionen har vi talt om en bærbar støvsuger, billederne nedenfor viser nøjagtigt det. Det er en bærbar støvsuger fra Amazon. Dette kommer med en meget enkel mekanisme. Den har tre dele i bunden (et lille kammer til opbevaring af støv, den midterste del inkluderer motoren, ventilatoren og batteristikket øverst (der er et låg eller et låg til batteriet). Det har en jævnstrømsmotor og en blæser. Denne motor er direkte forbundet til 3V (2 * 1,5 volt AA-batterier) via en simpel afbryder. Da vi forsyner vores robot med et 7,4 V batteri, afbryder vi forbindelsen fra det interne batteri og får strøm fra 5 V Strømforsyning. Så vi har fjernet alle de unødvendige dele og kun motoren med to-leder ophold. Det kan du se på billedet nedenfor.
HC-SR04 Ultralydssensormodul
For at opdage forhindringerne bruger vi den populære HC-SR04 ultralydssensor, eller vi kan kalde det forhindringssensorer. Arbejdet er meget simpelt, først sender sendermodulet en ultralydsbølge, der bevæger sig gennem luften, rammer en forhindring og hopper tilbage, og modtageren modtager den bølge. Ved at beregne tiden med Arduino kan vi bestemme afstanden. I en tidligere artikel om Arduino-baseret ultralydssensor-projekt har vi diskuteret funktionsprincippet for denne sensor meget grundigt. Du kan tjekke det ud, hvis du vil vide mere om HC-SR04 ultralydssensormodulet.
Gulvsensor (IR-sensor) til detektion af trappe
I funktionssektionen har vi talt om en funktion, hvor robotten kan registrere trapper og kan forhindre sig i at falde. For at gøre det bruger vi en IR-sensor. Vi opretter en grænseflade mellem IR-sensoren og Arduino. Den bearbejdning af IR Proximity Sensor er meget simpelt, det har en IR LED og en fotodiode, IR LED udsender IR-lys, og hvis nogen forhindring kommer foran dette udsendte lys, vil det blive afspejlet, og det reflekterede lys vil blive opdaget ved fotodioden. Men den genererede spænding fra refleksionen vil være meget lav. For at øge det kan vi bruge en op-amp-komparator, vi kan forstærke og få output. Et IR-modulhar tre ben - Vcc, jord og output. Normalt går output lavt, når en forhindring kommer foran sensoren. Så vi kan bruge dette til at opdage gulvet. Hvis vi i et split sekund registrerer et højt fra sensoren, kan vi stoppe robotten, dreje den tilbage eller gøre alt, hvad vi vil for at forhindre, at den falder ned fra trappen. I en tidligere artikel har vi lavet en Breadboard-version af IR Proximity Sensor Module og forklaret funktionsprincippet i detaljer, du kan tjekke det ud, hvis du vil vide mere om denne sensor.
Circuit Diagram of Arduino Based Floor Cleaner Robot
Vi har tre ultralydssensorer, der registrerer forhindringer. Så vi er nødt til at forbinde alle grunde til ultralydssensorer og forbinde dem til fælles jord. Vi forbinder også alle de tre Vcc af sensoren og forbinder den til den fælles VCC-pin. Dernæst forbinder vi trigger- og ekko-pins til PWM-pins i Arduino. Vi forbinder også VCC på IR-modulet til 5V og jord til jordstiften på Arduino, outputstiften på IR-sensormodulet går til den digitale pin D2 på Arduino. For motordriveren forbinder vi de to aktiveringsstifter til 5v og også driverens spændingsstift til 5V, fordi vi bruger 5 volt motorer. I en tidligere artikel har vi lavet et Arduino Motor Driver Shield, du kan tjekke det ud for at lære mere om L293D Motor Driver ICog dens aktiviteter. Arduino, ultralydsmoduler, motordrivere og motorer fungerer på 5 volt, den højere spænding vil dræbe den, og vi bruger 7,4 volt batteri til at konvertere det til 5 volt, LM7805-spændingsregulatoren bruges. Tilslut støvsugeren direkte til hovedkredsløbet.
Opbygning af kredsløbet til Arduino-baseret gulvrengøringsrobot
For at få nogle ideer om min robot søgte jeg efter støvsugerrobotter online og fik nogle billeder af runde robotter. Så jeg besluttede at bygge en rundformet robot. For at opbygge robotens jagt og krop har jeg masser af muligheder som skumplade, MDF, pap osv. Men jeg vælger MDF, fordi det er hårdt og har nogle vandtætte egenskaber. Hvis du gør dette, kan du beslutte, hvilket materiale du vælger til din bot.
For at bygge robotten tog jeg MDF-arket og tegnede derefter to cirkler med en 8 CM-radius, og inden i den cirkel har jeg også tegnet en anden cirkel med en radius på 4 CMtil montering af støvsugeren. Så skar jeg cirklerne ud. Jeg har også skåret og fjernet passende stykker til hjulstien (se billederne for bedre forståelse). Endelig lavede jeg tre små huller til hjulet. Det næste trin er at montere motorerne på basen ved hjælp af dens beslag, placere og fastgøre hjulet til dets position. Derefter placeres ultralydssensorerne til venstre, højre og midten af robotten. Tilslut også IR-modulet til robotens ulempe. Glem ikke at tilføje kontakten udenfor. Det handler om at bygge robotten. Hvis du bliver forvirret på dette tidspunkt, kan du henvise til følgende billeder.
Til den øverste del har jeg også tegnet en cirkel på 11 CM i radius på skumpladen og skåret den. For afstanden mellem den øverste og den nederste del havde jeg skåret tre 4 CM lange stykker af et plastrør. Derefter limede jeg plastafstandsstykkerne på den nederste del, og derefter limede jeg den øverste del. Du kan dække sidedelene af botten med plast eller lignende materialer, hvis du vil.
Arduino
Den komplette kode for dette projekt findes i slutningen af dokumentet. Denne Arduino-kode svarer til den Arduino-baserede Ultrasonic Distance Sensor- kode, den eneste ændring er i gulvdetekteringen. I de følgende linjer forklarer jeg, hvordan koden fungerer. I dette tilfælde bruger vi ikke ekstra biblioteker. Nedenfor har vi beskrevet koden trin for trin. Vi bruger ikke ekstra biblioteker til at afkode afstandsdataene fra HC-SR04-sensoren, fordi det er meget simpelt. I de følgende linjer beskrev vi hvordan. Først skal vi definere Trigger Pin og Echo Pin til alle tre ultralydssensorer, der er forbundet til Arduino-kortet. I dette projekt har vi tre Echo pins og tre Trigger pins. Bemærk, at 1 er den venstre sensor, 2 er den forreste sensor, og 3 er den højre sensor.
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;
Derefter definerede vi variabler for den afstand, som alle er (int) type variabler, og for varigheden valgte vi at bruge (lang). Igen har vi tre af hver. Jeg har også defineret et heltal til lagring af bevægelsens status, vi vil tale om det senere i dette afsnit.
lang varighed1; lang varighed2; lang varighed3; int distanceleft; int distancefront; int distanceright; int a = 0;
Dernæst i installationssektionen skal vi lave alle perspektivstifter som input eller output ved hjælp af pinModes () -funktionen. For at sende ultralydsbølger fra modulet er vi nødt til at aktivere trigger pin til høj, dvs. alle trigger pins skal definere som OUTPUT. Og for at modtage ekkoet er vi nødt til at læse tilstanden af ekko-ben, så alle ekko-ben skal defineres som INPUT. Vi aktiverer også den serielle skærm til fejlfinding. For at læse status for IR-modulerne har jeg defineret 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 stifter er defineret som OUTPUT til motordriverens input.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
I hovedsløjfen har vi tre sektioner til tre sensorer. Alle sektioner fungerer ens, men hver for forskellige sensorer. I dette afsnit læser vi hindringsafstanden fra hver sensor og gemmer den i hvert definerede heltal. For at læse afstanden skal vi først sørge for, at aftrækkerstifterne er klare, for det er vi nødt til at indstille udløserstiften til LAV i 2 µs. For at generere ultralydsbølgen er vi nødt til at dreje udløserstiften HØJ i 10 µs. Dette sender ultralydslyden og ved hjælp af pulseIn () -funktionen kan vi læse rejsetiden og gemme den værdi i variablen " varighed ". Denne funktion har 2 parametre, den første er navnet på ekko-pin og for den anden kan du skrive entenHØJ eller LAV. HIGH betyder, at pulseIn () -funktionen venter på, at stiften går HIGH forårsaget af den afviste lydbølge, og den begynder at tælle, så venter den på, at stiften går LAV, når lydbølgen slutter, hvilket stopper optællingen. Denne funktion giver pulslængden i mikrosekunder. Til beregning af afstanden multiplicerer vi varigheden med 0,034 (lydhastigheden i luften er 340m / s) og dividerer den med 2 (dette skyldes fremad og tilbage på lydbølgen). Endelig gemmer vi afstanden fra hver sensor i tilsvarende heltal.
digitalWrite (trigPin1, LOW); forsinkelseMikrosekunder (2); digitalWrite (trigPin1, HIGH); forsinkelseMikrosekunder (10); digitalWrite (trigPin1, LOW); varighed1 = pulseIn (echoPin1, HIGH); afstand = venstre varighed1 * 0,034 / 2;
Efter at have fået afstanden fra hver sensor, kan vi styre motorerne ved hjælp af en if-erklæring, så vi styrer robotens bevægelse. Dette er meget simpelt, først gav vi en hindringsafstandsværdi, i dette tilfælde er den 15 cm (skift denne værdi som dit ønske). Så gav vi betingelser i henhold til denne værdi. For eksempel når en forhindring kommer foran den venstre sensor (det betyder, at afstanden til den venstre sensor skal være under eller lig med 15 cm), og de to andre afstande er høje (det betyder, at der ikke er nogen forhindring foran sensorerne), så ved hjælp af digital skrivefunktion kan vi køre motorerne til højre. Senere kontrollerede jeg IR-sensorens status. Hvis robotten er på gulvet, vil værdien af IR-stiften være LAV, og hvis ikke, vil værdien væreHØJ. Derefter lagrede jeg den værdi i int s-variablen . Vi skal kontrollere robotten i henhold til denne status.
Dette afsnit af koden bruges til at flytte robotten fremad og bagud :
hvis (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LAV); digitalWrite (12, HIGH); forsinkelse (1000); a = 1; }
Men der er et problem med denne metode, når motoren bevæger sig baglæns, gulvet kommer tilbage, og boten bevæger sig fremad, og den gentager, så boten sidder fast. For at overvinde det gemmer vi en værdi (1) i int, efter at gulvet ikke er til stede. Vi kontrollerer også denne tilstand for andre bevægelser.
Efter at have registreret fraværet af gulvet, bevæger robotten sig ikke fremad. I stedet bevæger den sig til venstre, på denne måde kan vi undgå problemet.
hvis ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
I ovenstående tilstand. Først vil robotten kontrollere gulvstatus og heltal. Boten bevæger sig kun fremad, hvis alle betingelser er opfyldt.
Nu kan vi skrive kommandoer til motorføreren. Dette vil køre højre motor bagud og venstre motor fremad og derved dreje robotten til højre.
Dette afsnit af koden bruges til at flytte robotten til højre:
digitalWrite (4, HIGH); digitalWrite (7, LAV); digitalWrite (8, HIGH); digitalWrite (12, LAV);
Hvis bot opdager, at gulvet ikke er til stede, ændres værdien til 1, og bot flyttes til venstre. Efter at have drejet til venstre, ændres værdien af 'a' til 0 fra 1.
hvis ((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, HIGH); forsinkelse (100); a = 0; }
Dette afsnit af koden bruges til at flytte robotten til venstre:
hvis ((s == LAV) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LAV) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LAV); }
Det er det til opbygning af Arduino-baseret Smart Vacuum Cleaner Robot. Den komplette bearbejdning af projektet kan findes i den linkede video nederst på denne side. Hvis du har spørgsmål, kan du kommentere nedenunder.