- Materiale necesare pentru construirea unui robot de curățare a podelelor pe bază de Arduino
- Aspirator portabil
- Modul senzor cu ultrasunete HC-SR04
- Senzor de podea (senzor IR) pentru detectarea scărilor
- Diagrama circuitului robotului Arduino pentru curățarea podelelor
- Construirea circuitului pentru robotul de curățare a podelelor bazat pe Arduino
- Arduino
Într-un scenariu actual, suntem cu toții atât de ocupați cu munca noastră, încât nu avem timp să ne curățăm casa în mod corespunzător. Soluția la problemă este foarte simplă, trebuie doar să cumpărați un robot de aspirator de uz casnic, cum ar fi irobot roomba, care vă va curăța casa prin simpla apăsare a unui buton. Dar astfel de produse comerciale sunt o problemă comună, care este costul. Așadar, astăzi am decis să facem un robot simplu pentru curățarea podelelor, care nu numai că este simplu de realizat, dar costă foarte puțin în comparație cu produsele comerciale disponibile pe piață. Cititorii frecvenți ar putea să-și amintească robotul nostru de curățare cu vid Arduino, pe care l-am construit cu mult timp în urmă, dar acela era foarte voluminos și avea nevoie de o baterie mare de plumb-acid pentru a se deplasa. Noul Aspirator Arduino vom construi aici va fi compact și mai practic. În plus, acest robot va avea senzori cu ultrasunete și un senzor de proximitate IR. Senzorul cu ultrasunete va permite robotului să evite obstacolele, astfel încât să se poată deplasa liber până când camera este curățată corespunzător, iar senzorul de proximitate îl va ajuta să evite căderea de pe scări. Toate aceste funcții sună interesante, nu? Deci sa începem.
Într-unul din articolele noastre anterioare, am creat mulți roboți precum robotul de echilibrare automată, robotul automat de dezinfectare a suprafeței și robotul de evitare a obstacolelor. Verificați-le dacă sună interesant pentru dvs.
Materiale necesare pentru construirea unui robot de curățare a podelelor pe bază de Arduino
Deoarece am folosit componente foarte generice pentru a construi secțiunea hardware a robotului aspiratorului, ar trebui să le puteți găsi pe toate din magazinul local de hobby-uri. Iată lista completă a materialului necesar împreună cu imaginea tuturor componentelor.
- Arduino Pro Mini - 1
- Modul cu ultrasunete HC-SR04 - 3
- Driver motor L293D - 1
- Motoare și suporturi de montare 5Volt N20 - 2
- Roți cu motor N20 - 2
- Comutator - 1
- LM7805 Regulator de tensiune - 1
- Baterie litiu-ion 7.4V - 1
- Modul IR - 1
- Perfboard - 1
- Roată cu rotor - 1
- MDF
- Aspirator portabil generic
Aspirator portabil
În secțiunea de cerințe privind componentele, am vorbit despre un aspirator portabil, imaginile de mai jos arată exact acest lucru. Este un aspirator portabil de la Amazon. Aceasta vine cu un mecanism foarte simplu. Are trei părți în partea de jos (o cameră mică pentru depozitarea prafului, partea din mijloc include motorul, ventilatorul și priza bateriei în partea superioară (există un capac sau capac pentru baterie). Are un motor DC și un ventilator. Acest motor este conectat direct la 3V (2 * 1,5 volt baterii AA) printr-un simplu comutator. Întrucât alimentăm robotul cu o baterie de 7,4 V, vom întrerupe conexiunea de la bateria internă și o vom alimenta de la 5V alimentarea cu energie electrică. Așadar, am eliminat toate părțile inutile și doar motorul cu suporturi cu două fire. Puteți vedea acest lucru în imaginea de mai jos.
Modul senzor cu ultrasunete HC-SR04
Pentru a detecta obstacolele, folosim popularul senzor de distanță cu ultrasunete HC-SR04 sau îl putem numi senzori de evitare a obstacolelor. Funcționarea este foarte simplă, mai întâi, modulul emițător trimite o undă ultrasonică care călătorește prin aer, lovește un obstacol și revine înapoi și receptorul primește acea undă. Calculând timpul cu Arduino, putem determina distanța. Într-un articol anterior despre proiectul senzorului de distanță cu ultrasunete bazat pe Arduino, am discutat cu atenție principiul de funcționare al acestui senzor. Puteți verifica acest lucru dacă doriți să aflați mai multe despre modulul cu senzor de distanță cu ultrasunete HC-SR04.
Senzor de podea (senzor IR) pentru detectarea scărilor
În secțiunea caracteristici, am vorbit despre o caracteristică în care robotul poate detecta scările și se poate preveni să cadă. Pentru a face acest lucru, folosim un senzor IR. Vom face o interfață între senzorul IR și Arduino. Funcționarea senzorului de proximitate IR este foarte simplă, are un LED IR și o fotodiodă, LED-ul IR emite lumină IR și dacă apare vreun obstacol în fața acestei lumini emise, acesta va fi reflectat, iar lumina reflectată va fi detectată de fotodiodă. Dar tensiunea generată de reflexie va fi foarte mică. Pentru a crește acest lucru, putem folosi un comparator op-amp, putem amplifica și obține ieșire. Un modul IRare trei pini - Vcc, masă și ieșire. De obicei, ieșirea scade atunci când un obstacol vine în fața senzorului. Deci, putem folosi acest lucru pentru a detecta podeaua. Dacă pentru o fracțiune de secundă, detectăm un maxim din senzor, putem opri robotul, îl putem întoarce înapoi sau putem face orice vrem pentru a preveni căderea de pe scară. Într-un articol anterior, am realizat o versiune Breadboard a modulului senzorului de proximitate IR și am explicat în detaliu principiul de funcționare, puteți verifica dacă doriți să aflați mai multe despre acest senzor.
Diagrama circuitului robotului Arduino pentru curățarea podelelor
Avem trei senzori cu ultrasunete care detectează obstacolele. Deci, trebuie să conectăm toate terenurile senzorilor cu ultrasunete și să le conectăm la sol comun. De asemenea, conectăm toate cele trei Vcc ale senzorului și le conectăm la pinul VCC comun. Apoi, conectăm pinii de declanșare și ecou la pinii PWM ai Arduino. De asemenea, conectăm VCC-ul modulului IR la 5V și împământăm la pinul de masă al Arduino, pinul de ieșire al modulului senzorului IR merge la pinul digital D2 al Arduino. Pentru driverul motorului, conectăm cei doi pini de activare la 5v și, de asemenea, pinul de tensiune al driverului la 5V, deoarece folosim motoare de 5 volt. Într-un articol anterior, am realizat un dispozitiv de protecție a motorului Arduino, puteți verifica acest lucru pentru a afla mai multe despre IC driverul de motor L293Dși operațiunile sale. Arduino, modulele cu ultrasunete, driverul motorului și motoarele funcționează la 5 volți, tensiunea mai mare îl va ucide și folosim bateria de 7,4 volți, pentru a o converti în 5 volți, se folosește regulatorul de tensiune LM7805. Conectați aspiratorul direct la circuitul principal.
Construirea circuitului pentru robotul de curățare a podelelor bazat pe Arduino
Pentru a obține câteva idei despre robotul meu, am căutat online roboți pentru aspiratoare și am obținut câteva imagini cu roboți în formă rotundă. Deci, am decis să construiesc un robot în formă rotundă. Pentru a construi urmărirea și corpul robotului, am o mulțime de opțiuni, cum ar fi foaie de spumă, MDF, carton etc. Dar aleg MDF deoarece este dur și are unele proprietăți rezistente la apă. Dacă faceți acest lucru, puteți decide ce material veți alege pentru botul dvs.
Pentru a construi robotul, am luat foaia MDF, apoi am desenat două cercuri cu o rază de 8 cm și , în interiorul acelui cerc, am desenat și un alt cerc cu o rază de 4 CMpentru montarea aspiratorului. Apoi am decupat cercurile. De asemenea, am tăiat și îndepărtat piesele adecvate pentru traseul roții (consultați imaginile pentru o mai bună înțelegere). În cele din urmă, am făcut trei găuri mici pentru roata. Următorul pas este montarea motoarelor pe bază folosind suporturile sale, așezați și fixați roata de rotație în poziția sa. După aceea, plasați senzorii cu ultrasunete la stânga, la dreapta și la mijlocul robotului. De asemenea, conectați modulul IR la dezavantajul robotului. Nu uitați să adăugați comutatorul pe exterior. Asta este totul despre construirea robotului, dacă vă confundați în acest moment, puteți consulta următoarele imagini.
Pentru partea de sus, am desenat și un cerc de 11 cm pe rază pe foaia de spumă și l-am tăiat. Pentru distanța dintre partea de sus și partea de jos, am tăiat trei bucăți lungi de 4 cm dintr-un tub de plastic. După aceea, am lipit distanțierii din plastic pe partea inferioară și apoi am lipit partea superioară. Puteți acoperi părțile laterale ale botului cu plastic sau materiale similare, dacă doriți.
Arduino
Codul complet pentru acest proiect este dat la sfârșitul documentului. Acest cod Arduino este similar cu codul senzorului de distanță cu ultrasunete bazat pe Arduino, singura modificare este în detectarea podelei. În rândurile următoare, vă explic cum funcționează codul. În acest caz, nu folosim nicio bibliotecă suplimentară. Mai jos am descris codul în mod pas cu pas. Nu folosim nicio bibliotecă suplimentară pentru a decoda datele de distanță de la senzorul HC-SR04, deoarece este foarte simplu. În rândurile următoare, am descris cum. În primul rând, trebuie să definim Pinul de declanșare și Pinul de ecou pentru toți cei trei senzori de distanță cu ultrasunete care sunt conectați la placa Arduino. În acest proiect, avem trei pini Echo și trei pini Trigger. Rețineți că 1 este senzorul din stânga, 2 este senzorul din față și 3 este senzorul din dreapta.
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;
Apoi am definit variabile pentru distanța care toate sunt variabile de tip (int) și pentru durată, am ales să folosim (lung). Din nou, avem câte trei. De asemenea, am definit un număr întreg pentru stocarea stării mișcării, despre aceasta vom vorbi mai târziu în această secțiune.
lungă durată1; lungă durată2; lungă durată3; int distanceleft; int distanță; int distanceright; int a = 0;
Apoi, în secțiunea de configurare, trebuie să realizăm toți pinii de perspectivă ca intrare sau ieșire folosind funcția pinModes () . Pentru a trimite unde ultrasonice din modul, trebuie să activăm pinul de declanșare la mare, adică toți pinii de declanșare ar trebui să fie definiți ca OUTPUT. Și pentru a primi ecoul, trebuie să citim starea pinilor de ecou, astfel încât toți pinii de ecou să se definească ca INPUT. De asemenea, activăm monitorul serial pentru depanare. Pentru a citi starea modulelor IR, am definit irpinul ca intrare.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Și acești pini digitali sunt definiți ca IEȘIRE pentru intrarea driverului motorului.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
În bucla principală, avem trei secțiuni pentru trei senzori. Toate secțiunile funcționează la fel, dar fiecare pentru senzori diferiți. În această secțiune, citim distanța obstacolului față de fiecare senzor și o stocăm în fiecare număr întreg definit. Pentru a citi distanța, mai întâi, trebuie să ne asigurăm că pinii de declanșare sunt liberi, pentru aceasta, trebuie să setăm pinul de declanșare la LOW pentru 2 µs. Acum, pentru generarea undei ultrasonice, trebuie să rotim pinul de declanșare HIGH pentru 10 µs. Acest lucru va trimite sunetul cu ultrasunete și cu ajutorul funcției pulseIn () , putem citi timpul de călătorie și putem stoca acea valoare în variabila „ durată ”. Această funcție are 2 parametri, primul este numele pinului de ecou și pentru al doilea, puteți scrie fieMARE sau MIC. HIGH înseamnă că funcția pulseIn () va aștepta ca pinul să meargă HIGH cauzat de unda sonoră sărită și va începe să numere, apoi va aștepta ca pinul să scadă LOW când se va încheia unda sonoră care va opri numărarea. Această funcție dă lungimea pulsului în microsecunde. Pentru calcularea distanței, vom înmulți durata cu 0,034 (viteza sunetului în aer este de 340m / s) și o vom împărți la 2 (acest lucru se datorează deplasării înainte și înapoi a undei sonore). În cele din urmă, stocăm distanța fiecărui senzor în numere întregi corespunzătoare.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); durata1 = pulseIn (echoPin1, HIGH); distanța de stânga = durata 1 * 0,034 / 2;
După obținerea distanței de la fiecare senzor, putem controla motoarele cu ajutorul unei afirmații if, astfel controlăm mișcarea robotului. Acest lucru este foarte simplu, mai întâi, am dat o valoare a distanței obstacolului, în acest caz, este de 15 cm (modificați această valoare după dorința dvs.). Apoi am dat condiții în funcție de această valoare. De exemplu, atunci când un obstacol vine în fața senzorului stâng (asta înseamnă că distanța senzorului stâng ar trebui să fie sub sau egal cu 15 cm) și celelalte două distanțe sunt mari (asta înseamnă că nici un obstacol nu este în fața senzorilor) apoi cu ajutorul funcției de scriere digitală, putem conduce motoarele spre dreapta. Ulterior, am verificat starea senzorului IR. Dacă robotul este pe podea, valoarea pinului IR va fi scăzută, iar dacă nu, atunci valoarea va fiMARE. Apoi am stocat acea valoare în variabila int s . Vom controla robotul în funcție de această stare.
Această secțiune a codului este utilizată pentru a muta robotul înainte și înapoi :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); întârziere (1000); a = 1; }
Dar există o problemă cu această metodă atunci când motorul se mișcă înapoi, podeaua se întoarce și robotul se va mișca înainte și se va repeta făcând robotul blocat. Pentru a depăși acest lucru, stocăm o valoare (1) în int după ce înțelegem că etajul nu este prezent. De asemenea, verificăm această condiție pentru alte mișcări.
După detectarea absenței podelei, robotul nu va avansa. În schimb, se va deplasa la stânga, în acest fel, putem evita problema.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && frontfront> 15 && distanceright> 15))
În starea de mai sus. În primul rând, robotul va verifica starea podelei și valoarea întregului. Botul va avansa numai dacă sunt îndeplinite toate condițiile.
Acum, putem scrie comenzile pentru driverul motorului. Acest lucru va conduce motorul drept înapoi și motorul stâng înainte, rotind astfel robotul spre dreapta.
Această secțiune a codului este utilizată pentru a muta robotul spre dreapta:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Dacă robotul detectează că podeaua este absentă, valoarea se schimbă la 1 și botul se va deplasa spre stânga. După ce virați la stânga, valoarea „a” se schimbă la 0 din 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, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); întârziere (100); a = 0; }
Această secțiune a codului este utilizată pentru a muta robotul spre stânga:
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, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
Asta este pentru construirea unui robot inteligent cu aspirator bazat pe Arduino. Funcționarea completă a proiectului poate fi găsită în videoclipul legat în partea de jos a acestei pagini. Dacă aveți întrebări, comentați mai jos.