- Material som krävs för att bygga Arduino-baserad golvrengöringsrobot
- Bärbar dammsugare
- HC-SR04 ultraljudssensormodul
- Golvsensor (IR-sensor) för trappupptäckt
- Kretsschema för Arduino-baserad golvrengöringsrobot
- Bygga kretsen för Arduino-baserad golvrengöringsrobot
- Arduino
I ett nuvarande scenario är vi alla så upptagna med vårt arbete att vi inte har tid att städa vårt hus ordentligt. Lösningen på problemet är väldigt enkel, du behöver bara köpa en inhemsk dammsugarrobot som irobot roomba som städar ditt hus med en knapptryckning. Men sådana kommersiella produkter är vanligt problem, vilket är kostnad. Så i dag bestämde vi oss för att göra en enkel golvrengöringsrobot, som inte bara är enkel att göra utan kostar mycket mindre jämfört med kommersiella produkter som finns på marknaden. Frekventa läsare kanske kommer ihåg vår Arduino-dammsugningsrobot, som vi byggde för länge sedan, men den var väldigt skrymmande och behövde ett stort blysyrabatteri för att röra sig. Den nya Arduino dammsugaren vi kommer att bygga här kommer att vara kompakt och mer praktisk. Dessutom kommer den här roboten att ha ultraljudssensorer och en IR-närhetssensor. Ultraljudsgivaren gör det möjligt för roboten att undvika hinder så att den kan röra sig fritt tills rummet rengörs ordentligt och närhetssensorn hjälper den att undvika att falla från trappan. Alla dessa funktioner låter intressanta, eller hur? Så, låt oss komma igång.
I en av våra tidigare artiklar skapade vi många robotar som Self Balancing Robot, Automated Surface Desinfecting Robot och Obstacle Robot. Kolla in dem om det låter intressant för dig.
Material som krävs för att bygga Arduino-baserad golvrengöringsrobot
Eftersom vi har använt mycket generiska komponenter för att bygga dammsugarbotens hårdvarusektion, borde du kunna hitta alla dessa i din lokala hobbybutik. Här är den kompletta listan över nödvändigt material tillsammans med bilden av alla komponenter.
- Arduino Pro Mini - 1
- HC-SR04 Ultraljudsmodul - 3
- L293D Motor Driver - 1
- 5Volt N20-motorer och monteringsfästen - 2
- N20 motorhjul - 2
- Strömbrytare - 1
- LM7805 Spänningsregulator - 1
- 7.4V litiumjonbatteri - 1
- IR-modul - 1
- Perfboard - 1
- Länkhjul - 1
- MDF
- Generisk bärbar dammsugare
Bärbar dammsugare
I avsnittet om krav på komponenter har vi pratat om en bärbar dammsugare, bilderna nedan visar exakt det. Det är en bärbar dammsugare från Amazon. Detta kommer med en mycket enkel mekanism. Den har tre delar i botten (en liten kammare för förvaring av damm, den mellersta delen inkluderar motor, fläkt och batteriuttaget på toppen (det finns ett lock eller lock för batteriet). Det har en likströmsmotor och en fläkt. Denna motor är direkt ansluten till 3V (2 * 1,5volt AA-batterier) via en enkel brytare. När vi driver vår robot med ett 7,4 V batteri kommer vi att skära anslutningen från det interna batteriet och driva det från 5 V så vi har tagit bort alla onödiga delar och bara motorn med tvåtrådsstag. Du kan se det på bilden nedan.
HC-SR04 ultraljudssensormodul
För att upptäcka hindren använder vi den populära HC-SR04 ultraljudssensorn eller vi kan kalla den för hinder för att undvika hinder. Arbetet är väldigt enkelt, först skickar sändarmodulen en ultraljudsvåg som rör sig genom luft, träffar ett hinder och studsar tillbaka och mottagaren tar emot den vågen. Genom att beräkna tiden med Arduino kan vi bestämma avståndet. I en tidigare artikel om Arduino Based Ultrasonic Distance Sensor-projekt har vi diskuterat arbetsprincipen för denna sensor mycket noggrant. Du kan kolla in det om du vill veta mer om HC-SR04 ultraljudssensormodul.
Golvsensor (IR-sensor) för trappupptäckt
I funktionsavsnittet har vi pratat om en funktion där roboten kan upptäcka trappor och kan förhindra att den faller. För att göra det använder vi en IR-sensor. Vi kommer att skapa ett gränssnitt mellan IR-sensorn och Arduino. Bearbetningen av IR induktiva givaren är mycket enkel, den har en IR LED och en fotodiod, IR LED avger IR-ljus, och om något hinder kommer framför denna emitterade ljuset, kommer det att reflekteras, och det reflekterade ljuset kommer att detekteras av fotodioden. Men den genererade spänningen från reflektionen kommer att vara mycket låg. För att öka det kan vi använda en op-amp-komparator, vi kan förstärka och få utdata. En IR-modulhar tre stift - Vcc, jord och utgång. Vanligtvis blir utgången låg när ett hinder kommer framför sensorn. Så vi kan använda detta för att upptäcka golvet. Om vi under en bråkdels sekund upptäcker ett högt från sensorn kan vi stoppa roboten, vrida tillbaka den eller göra vad vi vill för att förhindra att den faller ner från trappan. I en tidigare artikel har vi gjort en Breadboard-version av IR-närhetssensormodulen och förklarat arbetsprincipen i detaljer, du kan kolla in det om du vill veta mer om den här sensorn.
Kretsschema för Arduino-baserad golvrengöringsrobot
Vi har tre ultraljudssensorer som upptäcker hinder. Så vi måste ansluta alla grunder för ultraljudssensorer och ansluta dem till gemensam mark. Dessutom ansluter vi alla sensorns tre Vcc-enheter och ansluter den till den gemensamma VCC-stiftet. Därefter ansluter vi avtryckaren och ekostiften till PWM-stiften på Arduino. Vi ansluter också IR-modulens VCC till 5V och jordas till jordstiftet på Arduino, utgångsstiftet på IR-sensormodulen går till den digitala stiftet D2 på Arduino. För motorföraren ansluter vi de två aktiveringsstiften till 5v och även drivspänningsstiftet till 5V eftersom vi använder 5-voltsmotorer. I en tidigare artikel har vi skapat en Arduino Motor Driver Shield, du kan kolla in det för att lära dig mer om L293D Motor Driver ICoch dess verksamhet. Arduino, ultraljudsmoduler, motorförare och motorer fungerar på 5 volt, den högre spänningen kommer att döda den och vi använder 7,4-voltsbatteriet för att konvertera det till 5 volt, LM7805 spänningsregulator används. Anslut dammsugaren direkt till huvudkretsen.
Bygga kretsen för Arduino-baserad golvrengöringsrobot
För att få några idéer om min robot, sökte jag efter dammsugningsrobotar online och fick några bilder av rundformade robotar. Så jag bestämde mig för att bygga en rundformad robot. För att bygga robotens jakt och kropp har jag gott om alternativ som skumplåt, MDF, kartong etc. Men jag väljer MDF eftersom det är svårt och har vissa vattentåliga egenskaper. Om du gör detta kan du bestämma vilket material du väljer för din bot.
För att bygga roboten tog jag MDF-arket och ritade sedan två cirklar med en 8 CM-radie, och inuti den cirkeln har jag också ritat en annan cirkel med en radie på 4 CMför montering av dammsugaren. Sedan klippte jag ut cirklarna. Jag har också klippt ut och tagit bort lämpliga bitar för hjulbanan (se bilderna för bättre förståelse). Slutligen gjorde jag tre små hål för länkhjulet. Nästa steg är att montera motorerna på basen med hjälp av dess fästen, placera och fäst hjulet till dess läge. Därefter placerar du ultraljudssensorerna till vänster, höger och mitt på roboten. Anslut också IR-modulen till nackdelen av roboten. Glöm inte att lägga till strömbrytaren på utsidan. Det handlar om att bygga roboten. Om du blir förvirrad vid den här tiden kan du hänvisa till följande bilder.
För den övre delen har jag också ritat en cirkel på 11 CM i radie på skumplåten och klippt den. För avståndet mellan den övre och den nedre delen hade jag skurit tre delar av ett plaströr på 4 cm. Efter det limmade jag plastavstånden på den nedre delen och sedan limmade jag den övre delen. Du kan täcka bottenens sidodelar med plast eller liknande om du vill.
Arduino
Den fullständiga koden för detta projekt ges i slutet av dokumentet. Denna Arduino-kod liknar den Arduino-baserade Ultrasonic Distance Sensor- koden, den enda ändringen är i golvdetekteringen. I följande rader förklarar jag hur koden fungerar. I det här fallet använder vi inga extra bibliotek. Nedan har vi beskrivit koden steg för steg. Vi använder inga extra bibliotek för att avkoda avståndsdata från HC-SR04-sensorn, eftersom det är väldigt enkelt. I följande rader beskrev vi hur. Först måste vi definiera Trigger Pin och Echo Pin för alla tre ultraljudssensorer som är anslutna till Arduino-kortet. I det här projektet har vi tre Echo-stift och tre Trigger-stift. Observera att 1 är den vänstra sensorn, 2 är den främre sensorn och 3 är den högra sensorn.
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;
Sedan definierade vi variabler för avståndet som alla är (int) variabler och för varaktigheten valde vi att använda (lång). Återigen har vi tre av vardera. Jag har också definierat ett heltal för att lagra rörelsens status, vi kommer att prata om det senare i det här avsnittet.
lång varaktighet1; lång varaktighet2; lång varaktighet3; int distanseleft; int avståndsfront; int distansrätt; int a = 0;
Därefter, i installationssektionen, måste vi göra alla perspektivstiften som in- eller utdata med pinModes () -funktionen. För att skicka ultraljudsvågor från modulen måste vi aktivera triggerpinnen till hög, dvs. alla triggerpinnar ska definieras som OUTPUT. Och för att få ekot måste vi läsa tillståndet för ekostift så att alla ekostift definieras som INPUT. Vi aktiverar också den seriella skärmen för felsökning. För att läsa status för IR-modulerna har jag definierat irpin som ingång.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Och dessa digitala stift definieras som UTGÅNG för motorförarens ingång.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
I huvudslingan har vi tre sektioner för tre sensorer. Alla sektioner fungerar samma men var och en för olika sensorer. I det här avsnittet läser vi hinderavståndet från varje sensor och lagrar det i varje definierat heltal. För att läsa avståndet måste vi först se till att avtryckarstiften är tydliga, för det måste vi ställa in avtryckarstiftet på LÅG i 2 µs. För att generera ultraljudsvågen måste vi nu vrida avtryckarstiftet HÖG i 10 µs. Detta skickar ultraljud och med hjälp av pulseIn () -funktionen kan vi läsa restiden och spara det värdet i variabeln " varaktighet ". Denna funktion har två parametrar, den första är namnet på echo-stiftet och för den andra kan du skriva antingenHÖG eller LÅG. HÖG betyder att pulseIn () -funktionen väntar på att stiften går HÖG orsakad av den studsade ljudvågen och den kommer att börja räkna, sedan väntar den på att stiftet går LÅG när ljudvågen slutar vilket stoppar räkningen. Denna funktion ger pulslängden i mikrosekunder. För att beräkna avståndet multiplicerar vi varaktigheten med 0,034 (ljudets hastighet i luften är 340m / s) och delar den med 2 (detta beror på att ljudvågen går fram och tillbaka). Slutligen lagrar vi avståndet för varje sensor i motsvarande heltal.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); avståndsvänster = varaktighet1 * 0,034 / 2;
Efter att ha fått avståndet från varje sensor kan vi styra motorerna med hjälp av ett if-uttalande, så vi styr robotens rörelse. Det här är väldigt enkelt, först gav vi ett hinderavståndsvärde, i det här fallet är det 15 cm (ändra detta värde som du vill). Sedan gav vi villkor enligt det värdet. Till exempel, när ett hinder kommer framför den vänstra sensorn (det betyder att avståndet till den vänstra sensorn ska vara under eller är lika med 15 cm) och de andra två avstånden är höga (det betyder att inget hinder är framför de sensorerna), sedan med hjälp av digital skrivfunktion kan vi köra motorerna till höger. Senare kontrollerade jag status för IR-sensorn. Om roboten är på golvet kommer IR- stiftets värde att vara LÅG, och om inte kommer värdet att varaHÖG. Sedan lagrade jag det värdet i int s-variabeln . Vi ska kontrollera roboten enligt denna status.
Det här avsnittet i koden används för att flytta roboten framåt och bakåt :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HÖG); digitalWrite (8, LOW); digitalWrite (12, HÖG); fördröjning (1000); a = 1; }
Men det finns ett problem med den här metoden när motorn rör sig bakåt, golvet kommer tillbaka och botten kommer att röra sig framåt och det kommer att upprepas så att botten fastnar. För att övervinna detta lagrar vi ett värde (1) i int efter att golvet inte finns. Vi kontrollerar också detta tillstånd för andra rörelser.
Efter att ha upptäckt frånvaron av golvet kommer roboten inte att gå framåt. Istället kommer det att flytta åt vänster, så kan vi undvika problemet.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanseleft> 15 && distansfront> 15 && distanceright> 15))
I ovanstående skick. Först kommer roboten att kontrollera golvstatus och heltal. Bot kommer bara att gå framåt om alla villkor är uppfyllda.
Nu kan vi skriva kommandon för motorföraren. Detta kommer att köra högermotorn bakåt och vänstermotorn framåt och därigenom vrida roboten åt höger.
Det här avsnittet i koden används för att flytta roboten åt höger:
digitalWrite (4, HÖG); digitalWrite (7, LOW); digitalWrite (8, HÖG); digitalWrite (12, LOW);
Om botten upptäcker att golvet saknas ändras värdet till 1 och botten flyttas till vänster. Efter att ha svängt åt vänster ändras värdet 'a' till 0 från 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) - (distanseleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HÖG); fördröjning (100); a = 0; }
Det här avsnittet i koden används för att flytta roboten åt vänster:
om ((s == LOW) && (distansvänster> 15 && distansfront <= 15 && distanceright <= 15) - (s == LOW) && (distansvänster> 15 && distansfront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HÖG); digitalWrite (8, HÖG); digitalWrite (12, LOW); }
Det är det för att bygga Arduino-baserad Smart Vacuum Cleaner Robot. Det fullständiga arbetet med projektet finns i den länkade videon längst ner på denna sida. Om du har några frågor, kommentera nedan.