- Componente richiesto:
- Assemblaggio del robot Floor Cleaner:
- Cablaggio e connessioni:
- Spiegazione della programmazione:
I lavapavimenti automatici non sono una novità, ma condividono tutti un problema comune. Sono tutti troppo costosi per quello che fanno. Oggi realizzeremo un robot automatico per la pulizia della casa che costa solo una piccola frazione di quelli sul mercato. Questo robot è in grado di rilevare gli ostacoli e gli oggetti di fronte e può continuare a muoversi, evitando gli ostacoli, fino a quando l'intera stanza non viene pulita. Ha una piccola spazzola attaccata per pulire il pavimento.
Controlla anche il nostro robot aspirapolvere intelligente con Arduino
Componente richiesto:
- Arduino UNO R3.
- Sensore ultrasonico.
- Scudo del driver del motore Arduino.
- Telaio per robot con trazione integrale.
- Computer per programmare Arduino.
- Batteria per i motori.
- Un Power Bank per alimentare Arduino
- Una spazzola per scarpe.
- Un tampone scrub Scotch Brite.
Nota: invece di usare le batterie, puoi anche usare un lungo cavo a 4 fili come abbiamo fatto noi. Anche se questa non è una soluzione molto elegante o pratica, puoi farlo se non hai intenzione di usarla nel mondo reale ogni giorno. Assicurati che le lunghezze del cavo siano sufficienti.
Prima di entrare nei dettagli, discutiamo prima di Ultrasonic.
Sensore a ultrasuoni HC-SR04:
Il sensore a ultrasuoni viene utilizzato per misurare la distanza con elevata precisione e letture stabili. Può misurare la distanza da 2 cm a 400 cm o da 1 pollice a 13 piedi. Emette un'onda ad ultrasuoni alla frequenza di 40 KHz nell'aria e se l'oggetto si frappone, rimbalzerà sul sensore. Utilizzando il tempo necessario per colpire l'oggetto e tornare indietro, puoi calcolare la distanza.
Il sensore a ultrasuoni utilizza una tecnica chiamata "ECHO". "ECHO" è semplicemente un'onda sonora riflessa. Avrai un ECHO quando il suono si riflette dopo aver raggiunto un vicolo cieco.
Il modulo HCSR04 genera una vibrazione sonora nella gamma degli ultrasuoni quando alziamo il pin 'Trigger' per circa 10us che invierà un burst sonoro di 8 cicli alla velocità del suono e dopo aver colpito l'oggetto, verrà ricevuto dal pin Echo. A seconda del tempo impiegato dalla vibrazione sonora per tornare indietro, fornisce un'uscita di impulsi appropriata. Se l'oggetto è lontano, ci vuole più tempo per sentire ECHO e l'ampiezza dell'impulso in uscita sarà grande. E se l'ostacolo è vicino, l'ECHO verrà udito più velocemente e la larghezza dell'impulso in uscita sarà inferiore.
Possiamo calcolare la distanza dell'oggetto in base al tempo impiegato dall'onda ultrasonica per tornare al sensore. Poiché il tempo e la velocità del suono sono noti, possiamo calcolare la distanza con le seguenti formule.
Distanza = (tempo x velocità del suono nell'aria (343 m / s)) / 2.
Il valore viene diviso per due poiché l'onda viaggia avanti e indietro coprendo la stessa distanza. Quindi il tempo per raggiungere l'ostacolo è solo la metà del tempo totale impiegato
Quindi Distanza in centimetri = 17150 * T
Abbiamo già realizzato molti progetti utili utilizzando questo sensore a ultrasuoni e Arduino, controllali di seguito:
- Misurazione della distanza basata su Arduino tramite sensore a ultrasuoni
- Allarme porta utilizzando Arduino e sensore a ultrasuoni
- Monitoraggio di dumpster basato su IOT utilizzando Arduino
Assemblaggio del robot Floor Cleaner:
Montare l'Arduino sullo chassis. Assicurati di non cortocircuitare nulla nel caso in cui il tuo telaio sia di metallo. È una buona idea procurarsi una scatola per Arduino e lo scudo del controller del motore. Fissare i motori con le ruote e il telaio utilizzando le viti. Il tuo telaio dovrebbe avere opzioni per farlo dalla fabbrica, ma in caso contrario, puoi improvvisare una soluzione diversa. La resina epossidica non è una cattiva idea. Montare la spazzola per scarpe sulla parte anteriore del telaio. Per questo abbiamo utilizzato una combinazione di resina epossidica M-Seal e viti perforate, sebbene tu possa utilizzare qualsiasi altra soluzione che potrebbe essere più semplice per te. Montare il tampone Scotch Brite dietro la spazzola. Abbiamo utilizzato un albero che attraversa il telaio che lo tiene in gioco, sebbene anche questo sia improvvisabile. Un albero caricato a molla può essere utilizzato per accompagnarlo. Montare le batterie (o i cavi sul retro del telaio).La resina epossidica o un portabatteria sono ottimi modi per farlo. Anche la colla a caldo non è male.
Cablaggio e connessioni:
Il circuito per questo robot automatico per la pulizia della casa è molto semplice. Collega il sensore a ultrasuoni ad Arduino come indicato di seguito e posiziona lo scudo del driver del motore su Arduino come qualsiasi altro scudo.
Il pin Trig di Ultrasonic è collegato al 12 ° pin di Arduino, il pin Echo è collegato al 13 ° pin, il pin di tensione al pin 5V e il pin Ground al pin di terra. Il pin Echo e il pin Trig consentono ad Arduino di comunicare con il sensore. L'alimentazione viene fornita al sensore attraverso i pin di tensione e di terra, mentre i pin Trig ed Echo gli consentono di inviare e ricevere dati con Arduino. Ulteriori informazioni sull'interfacciamento del sensore a ultrasuoni con Arduino qui.
La schermatura del motore dovrebbe avere almeno 2 uscite e dovrebbero essere collegate ai 2 motori. Normalmente, queste uscite sono etichettate "M1" e "M2" o "Motore 1" e "Motore 2". Collega le batterie e il power bank rispettivamente allo scudo del motore e ad Arduino. Non incrociarli. La protezione del motore dovrebbe avere un canale di ingresso. Se utilizzi cavi, collegali agli adattatori CA.
Spiegazione della programmazione:
Apri l'IDE di Arduino. Incolla il codice Arduino completo, fornito alla fine di questo tutorial, nell'IDE. Collega il tuo Arduino al computer. Seleziona la porta in Strumenti / Porta. Fare clic sul pulsante di caricamento.
Prova il robot. Se gira troppo poco o troppo, sperimenta i ritardi fino a renderli perfetti.
Prima di entrare nel codice, è necessario installare la libreria Adafruit Motor Shield per pilotare i motori CC. Dato che stiamo usando lo scudo del driver del motore L293D, dobbiamo scaricare la libreria AFmotor da qui. Quindi aggiungilo nella cartella della libreria IDE di Arduino. Assicurati di rinominarlo in AFMotor . Ulteriori informazioni sull'installazione di questa libreria.
Il codice è facile e può essere compreso facilmente, ma qui ne abbiamo spiegato alcune parti:
Di seguito il codice imposta il robot. Per prima cosa abbiamo incluso la libreria Adafruit per guidare i motori con lo scudo del driver del motore. Successivamente, abbiamo definito il pin Trig e il pin Echo. Inoltre imposta i motori. Imposta il pin Trig su output e il pin Echo su input.
#include #define trigPin 12 #define echoPin 13 AF_DCMotor motor1 (1, MOTOR12_64KHZ); AF_DCMotor motor2 (2, MOTOR12_8KHZ); void setup () {pinMode (trigPin, OUTPUT); pinMode (echoPin, INPUT); }
Il codice seguente indica ad Arduino di eseguire il ciclo dei seguenti comandi. Successivamente, utilizza il sensore per trasmettere e ricevere suoni ultrasonici. Calcola la distanza dall'oggetto una volta che le onde ultrasoniche si sono rimbalzate, dopo aver notato che l'oggetto si trova entro la distanza impostata, dice ad Arduino di ruotare i motori di conseguenza.
void loop () {lunga durata, distanza; digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); durata = pulseIn (echoPin, HIGH); distanza = (durata / 2) / 29,1; if (distanza <20) {motor1.setSpeed (255); motor2.setSpeed (0); motor1.run (BACKWARD); motor2.run (BACKWARD); ritardo (2000); // CAMBIA QUESTO A SECONDA DI COME GIRA IL ROBOT.
Questo fa girare il robot ruotando un motore e mantenendo l'altro stagnante.
Il codice seguente fa sì che il robot giri entrambi i motori nella stessa direzione per farlo muovere in avanti fino a quando non rileva un oggetto nel suddetto confine.
altro {motor1.setSpeed (160); // CAMBIA QUESTO A SECONDA DELLA VELOCITÀ DEL TUO ROBOT. motor2.setSpeed (160); // CAMBIA QUESTO CON LO STESSO VALORE DI CUI SOPRA. motor1.run (FORWARD); motor2.run (FORWARD); }