Samodejna čistila za tla niso nič novega, a vsem je skupna težava. Vsi so predragi za to, kar počnejo. Danes bomo izdelali samodejnega robota za čiščenje doma, ki stane le majhen del tistih na trgu. Ta robot lahko zazna ovire in predmete pred seboj ter se lahko še naprej premika in se izogiba oviram, dokler ni očiščena celotna soba. Za čiščenje tal je pritrjena majhna krtača.
Preverite tudi našega pametnega robota za sesanje z uporabo Arduina
Potrebna komponenta:
- Arduino UNO R3.
- Ultrazvočni senzor.
- Arduino Motor Driver ščit.
- Robosko podvozje s pogonom na kolesa.
- Računalnik za programiranje Arduina.
- Baterija za motorje.
- Power Bank za napajanje Arduina
- Čopič za čevlje.
- Scotch Brite čistilna blazinica.
Opomba: Namesto da uporabite baterije, lahko uporabite tudi dolgo 4-vijačno žico, kot smo to storili mi. Čeprav to ni zelo elegantna ali praktična rešitev, lahko pa jo storite, če je ne nameravate uporabljati vsak dan v resničnem svetu. Prepričajte se, da so kabli dovolj dolgi.
Preden se spustimo v podrobnosti, se najprej pogovorimo o ultrazvoku.
Ultrazvočni senzor HC-SR04:
Ultrazvočni senzor se uporablja za merjenje razdalje z visoko natančnostjo in stabilnimi odčitki. Izmeri lahko razdaljo od 2 cm do 400 cm ali od 1 palca do 13 čevljev. V zraku oddaja ultrazvočni val s frekvenco 40KHz in če bo predmet prišel na pot, se bo odbil nazaj do senzorja. Če izrabite razdaljo tako, da uporabite čas, ki je potreben za udarjanje predmeta in vrnitev nazaj.
Ultrazvočni senzor uporablja tehniko, imenovano "ECHO". "ECHO" je preprosto odsevni zvočni val. ECHO boste dobili, ko se bo zvok odseval nazaj, ko bo prišel v slepo ulico.
Modul HCSR04 ustvarja zvočne vibracije v ultrazvočnem območju, ko zatič "Trigger" postavimo visoko za približno 10us, kar bo poslalo 8-ciklični zvočni izbruh s hitrostjo zvoka in po udarcu v objekt ga bo prejel odmevni zatič. Odvisno od časa, ki ga zvočne vibracije vzamejo nazaj, zagotavlja ustrezen impulzni izhod. Če je predmet daleč, potem traja več časa, da se ECHO zasliši, širina izhodnega impulza pa bo velika. In če je ovira blizu, bo ECHO zaslišan hitreje in širina izhodnega impulza bo manjša.
Oddaljenost predmeta lahko izračunamo na podlagi časa, ki ga ultrazvočni val vzame nazaj na senzor. Ker sta čas in hitrost zvoka znana, lahko razdaljo izračunamo po naslednjih formulah.
Razdalja = (čas x hitrost zvoka v zraku (343 m / s)) / 2.
Vrednost je deljena z dvema, saj val potuje naprej in nazaj in pokriva enako razdaljo. Tako je čas za dosego ovire le polovica celotnega porabljenega časa
Torej Razdalja v centimetrih = 17150 * T
S tem ultrazvočnim senzorjem in Arduinom smo že naredili veliko uporabnih projektov, preverite jih spodaj:
- Merjenje razdalje na osnovi arduina z uporabo ultrazvočnega senzorja
- Alarm za vrata z uporabo Arduino in ultrazvočnega senzorja
- Nadzor smetišča na osnovi IOT z uporabo Arduina
Montaža Robota za čiščenje tal:
Arduino pritrdite na ohišje. Prepričajte se, da ničesar ne povzročite kratkega stika, če je vaše ohišje iz kovine. Dobro je dobiti škatlo za Arduino in ščit krmilnika motorja. Z vijaki pritrdite motorje s kolesi in podvozjem. Vaše ohišje bi moralo imeti tovarniške možnosti, če pa ne, lahko improvizirate drugo rešitev. Epoksid ni slaba ideja. Namestite krtačo za čevlje na sprednjo stran ohišja. Za to smo uporabili kombinacijo epoksida M-Seal in izvrtanih vijakov, čeprav lahko uporabite katero koli drugo rešitev, ki je morda lažja za vas. Za čopičem namestite čistilno blazinico Scotch Brite. Uporabili smo gred, ki je šla čez ohišje in jo drži v igri, čeprav je tudi to improvizirano. Vzmetno obremenjena gred se lahko uporabi za njeno spremljanje. Namestite baterije (ali kable na zadnjo stran ohišja).Epoksid ali držalo baterije sta dobra načina za to. Tudi vroče lepilo ni slabo.
Ožičenje in povezave:
Vezje za ta robot za samodejno čiščenje doma je zelo preprosto. Priključite senzor Ultrazvočne na Arduino, kot je navedeno spodaj in postavite Motor Driver ščit na Arduino kot kateri koli drug ščit.
Trig zatič ultrazvoka je povezan z 12. zatičem na Arduinu, zatič Echo je povezan s 13. zatičem, napetostni zatič na 5V zatič in ozemljitveni zatič na ozemljitveni zatič. Echo pin in Trig pin omogočata, da Arduino komunicira s senzorjem. Napajanje senzorju dovajajo napetostni in ozemljitveni zatiči, zatiči Trig in Echo pa mu omogočajo pošiljanje in sprejemanje podatkov z Arduinom. Več o povezovanju ultrazvočnega senzorja z Arduinom preberite tukaj.
Ščitnik motorja mora imeti vsaj 2 izhoda in morata biti povezana z vašima 2 motorjema. Običajno so ti izhodi označeni z “M1” in “M2” ali “Motor 1” in “Motor 2”. Baterije in baterijo priklopite na ščit motorja oziroma na Arduino. Ne povežite jih navzkrižno. Ščit vašega motorja mora imeti vhodni kanal. Če uporabljate žice, jih priključite na napajalnike.
Pojasnilo programiranja:
Odprite Arduino IDE. V IDE prilepite celotno kodo Arduino, podano na koncu te vadnice. Arduino povežite z računalnikom. V Orodja / vrata izberite vrata. Kliknite gumb za prenos.
Preizkusite robota. Če se obrne premalo ali preveč, preizkusite zamude, dokler niso popolne.
Preden se lotimo kode, moramo za pogon enosmernih motorjev namestiti knjižnico Adafruit Motor Shield. Ker uporabljamo ščit gonilnika motorja L293D, moramo od tu prenesti knjižnico AFmotor. Nato ga dodajte v mapo knjižnice Arduino IDE. Poskrbite, da ga boste preimenovali v AFMotor . Preberite več o namestitvi te knjižnice.
Koda je enostavna in jo je mogoče zlahka razumeti, toda tukaj smo razložili nekaj delov:
Spodaj koda nastavi robota. Najprej smo vključili knjižnico Adafruit za pogon motorjev s ščitnikom motorja. Po tem smo opredelili Trig pin in Echo pin. Prav tako postavlja motorje. Nastavi Trig pin na izhod in Echo pin na vhod.
#include #define trigPin 12 #define echoPin 13 AF_DCMotor motor1 (1, MOTOR12_64KHZ); AF_DCMotor motor2 (2, MOTOR12_8KHZ); void setup () {pinMode (trigPin, IZHOD); pinMode (echoPin, INPUT); }
Spodnja koda Arduinu sporoča, naj zažene naslednje ukaze. Po tem s senzorjem oddaja in sprejema ultrazvočne zvoke. Izračuna razdaljo, ki jo ima od predmeta, ko se ultrazvočni valovi odbijejo nazaj, potem ko ugotovi, da je objekt znotraj nastavljene razdalje, Arduinu pove, naj motorje ustrezno zavrti.
void loop () {dolgo trajanje, razdalja; digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); trajanje = pulseIn (echoPin, HIGH); razdalja = (trajanje / 2) / 29,1; if (razdalja <20) {motor1.setSpeed (255); motor2.setSpeed (0); motor1.run (NAZAJ); motor2.run (NAZAJ); zamuda (2000); // SPREMENITE TO PO KAKO SE OBRATI ROBOT.
Zaradi tega se robot obrača tako, da en motor zavrti, drugega pa ustavi.
Spodaj koda omogoča, da robot obrača oba motorja v isto smer, da se premika naprej, dokler ne zazna predmeta v prej omenjeni meji.
else {motor1.setSpeed (160); // TO SPREMENITE PO HITROSTI, KAKO BI TREBAL VAŠ ROBOT. motor2.setSpeed (160); // TO SPREMENITE NA ISTO VREDNOST, KOTER STE ZGORAJ. motor1.run (NAPRED); motor2.run (NAPRED); }