- Materiali necessari per costruire un robot per la pulizia dei pavimenti basato su Arduino
- Aspirapolvere portatile
- Modulo sensore a ultrasuoni HC-SR04
- Sensore a pavimento (sensore IR) per rilevamento scale
- Schema del circuito del robot per la pulizia dei pavimenti basato su Arduino
- Costruzione del circuito per robot per la pulizia dei pavimenti basato su Arduino
- Arduino
In uno scenario attuale, siamo tutti così impegnati con il nostro lavoro che non abbiamo il tempo per pulire adeguatamente la nostra casa. La soluzione al problema è molto semplice, devi solo acquistare un robot aspirapolvere domestico come irobot roomba che pulirà la tua casa con la semplice pressione di un pulsante. Ma tali prodotti commerciali sono un problema comune, che è il costo. Così oggi abbiamo deciso di realizzare un semplice robot lavapavimenti, che non solo è semplice da realizzare ma costa molto meno rispetto ai prodotti commerciali disponibili sul mercato. I lettori frequenti potrebbero ricordare il nostro robot aspirapolvere Arduino, che abbiamo costruito molto tempo fa, ma quello era molto ingombrante e aveva bisogno di una grande batteria al piombo per muoversi. Il nuovo aspirapolvere Arduino che costruiremo qui sarà compatto e più pratico. Inoltre, questo robot avrà sensori a ultrasuoni e un sensore di prossimità IR. Il sensore a ultrasuoni consentirà al robot di evitare gli ostacoli in modo che possa muoversi liberamente fino a quando la stanza non sarà adeguatamente pulita, e il sensore di prossimità lo aiuterà a evitare di cadere dalle scale. Tutte queste caratteristiche sembrano interessanti, giusto? Quindi iniziamo.
In uno dei nostri articoli precedenti, abbiamo creato molti robot come il robot autobilanciato, il robot automatizzato per la disinfezione delle superfici e il robot per evitare gli ostacoli. Controlla quelli se ti sembra interessante.
Materiali necessari per costruire un robot per la pulizia dei pavimenti basato su Arduino
Poiché abbiamo utilizzato componenti molto generici per costruire la sezione hardware del robot aspirapolvere, dovresti essere in grado di trovarli tutti nel tuo negozio di hobby locale. Ecco l'elenco completo del materiale richiesto insieme all'immagine di tutti i componenti.
- Arduino Pro Mini - 1
- Modulo ultrasuoni HC-SR04 - 3
- Driver motore L293D - 1
- Motori 5 Volt N20 e staffe di montaggio - 2
- Ruote motore N20 - 2
- Interruttore - 1
- Regolatore di tensione LM7805 - 1
- Batteria agli ioni di litio da 7,4 V - 1
- Modulo IR - 1
- Perfboard - 1
- Ruota piroettante - 1
- MDF
- Aspirapolvere portatile generico
Aspirapolvere portatile
Nella sezione dei requisiti dei componenti, abbiamo parlato di un aspirapolvere portatile, le immagini sotto mostrano esattamente questo. È un aspirapolvere portatile di Amazon. Questo viene fornito con un meccanismo molto semplice. Ha tre parti nella parte inferiore (una piccola camera per riporre la polvere, la parte centrale include il motore, la ventola e la presa della batteria nella parte superiore (c'è un coperchio o un cappuccio per la batteria). Ha un motore CC e un ventilatore. Questo motore è collegato direttamente a 3 V (2 batterie AA da 1,5 volt) tramite un semplice interruttore. Poiché alimentiamo il nostro robot con una batteria da 7,4 V, interromperemo la connessione dalla batteria interna e lo alimenteremo da 5 V Quindi, abbiamo rimosso tutte le parti non necessarie e solo il motore con foderi bifilari, come potete vedere nell'immagine sotto.
Modulo sensore a ultrasuoni HC-SR04
Per rilevare gli ostacoli, utilizziamo il popolare sensore di distanza a ultrasuoni HC-SR04 o possiamo chiamarlo sensori di evitamento degli ostacoli. Il funzionamento è molto semplice, in primo luogo, il modulo trasmettitore invia un'onda ultrasonica che viaggia nell'aria, colpisce un ostacolo e rimbalza indietro e il ricevitore riceve quell'onda. Calcolando il tempo con Arduino, possiamo determinare la distanza. In un precedente articolo sul progetto del sensore di distanza a ultrasuoni basato su Arduino, abbiamo discusso molto a fondo il principio di funzionamento di questo sensore. Puoi verificarlo se vuoi saperne di più sul modulo sensore di distanza a ultrasuoni HC-SR04.
Sensore a pavimento (sensore IR) per rilevamento scale
Nella sezione delle caratteristiche, abbiamo parlato di una funzionalità in cui il robot può rilevare le scale e può impedire a se stesso di cadere. Per farlo, utilizziamo un sensore IR. Faremo un'interfaccia tra il sensore IR e Arduino. Il funzionamento del sensore di prossimità IR è molto semplice, ha un LED IR e un fotodiodo, il LED IR emette luce IR e se qualche ostacolo si presenta davanti a questa luce emessa, verrà riflesso e verrà rilevata la luce riflessa dal fotodiodo. Ma la tensione generata dalla riflessione sarà molto bassa. Per aumentarlo, possiamo usare un comparatore op-amp, possiamo amplificare e ottenere output. Un modulo IRha tre pin: Vcc, ground e output. Di solito, l'uscita si abbassa quando un ostacolo si presenta davanti al sensore. Quindi, possiamo usarlo per rilevare il pavimento. Se per una frazione di secondo, rileviamo un effetto alto dal sensore, possiamo fermare il robot, girarlo indietro o fare qualsiasi cosa per evitare che cada dalle scale. In un articolo precedente, abbiamo realizzato una versione breadboard del modulo sensore di prossimità IR e spiegato il principio di funzionamento in dettaglio, puoi verificarlo se vuoi saperne di più su questo sensore.
Schema del circuito del robot per la pulizia dei pavimenti basato su Arduino
Abbiamo tre sensori a ultrasuoni che rilevano gli ostacoli. Quindi, dobbiamo collegare tutte le masse dei sensori a ultrasuoni e collegarli a una terra comune. Inoltre, colleghiamo tutti e tre i Vcc del sensore e li colleghiamo al pin VCC comune. Successivamente, colleghiamo i pin trigger ed eco ai pin PWM di Arduino. Colleghiamo anche il VCC del modulo IR a 5V e la massa al pin di terra di Arduino, il pin di uscita del modulo sensore IR va al pin digitale D2 di Arduino. Per il driver del motore, colleghiamo i due pin di abilitazione a 5 V e anche il pin di tensione del driver a 5 V perché stiamo utilizzando motori a 5 Volt. In un articolo precedente, abbiamo realizzato un Arduino Motor Driver Shield, puoi verificarlo per saperne di più su L293D Motor Driver ICe le sue operazioni. Arduino, moduli ad ultrasuoni, driver del motore e motori funzionano a 5 Volt, la tensione più alta lo ucciderà e stiamo usando la batteria da 7,4 volt, per convertirla in 5 Volt, viene utilizzato il regolatore di tensione LM7805. Collegare l'aspirapolvere direttamente al circuito principale.
Costruzione del circuito per robot per la pulizia dei pavimenti basato su Arduino
Per avere qualche idea sul mio robot, ho cercato online robot aspirapolvere e ho ottenuto alcune immagini di robot rotondi. Quindi, ho deciso di costruire un robot di forma rotonda. Per costruire l'inseguimento e il corpo del robot, ho molte opzioni come fogli di schiuma, MDF, cartone, ecc. Ma scelgo l'MDF perché è duro e ha alcune proprietà di resistenza all'acqua. Se lo fai, puoi decidere quale materiale scegliere per il tuo bot.
Per costruire il robot, ho preso il foglio di MDF, poi ho disegnato due cerchi con un raggio di 8 cm, e all'interno di quel cerchio ho disegnato anche un altro cerchio con un raggio di 4 cmper il montaggio dell'aspirapolvere. Poi ho ritagliato i cerchi. Inoltre, ho tagliato e rimosso i pezzi appropriati per il percorso della ruota (fare riferimento alle immagini per una migliore comprensione). Infine, ho fatto tre piccoli fori per la ruota piroettante. Il passo successivo è il montaggio dei motori sulla base utilizzando le sue staffe, inoltre posizionare e fissare la ruota piroettante nella sua posizione. Successivamente, posiziona i sensori a ultrasuoni a sinistra, a destra e al centro del robot. Inoltre, collega il modulo IR al lato inferiore del robot. Non dimenticare di aggiungere l'interruttore all'esterno. Si tratta solo di costruire il robot, se a questo punto ti senti confuso, puoi fare riferimento alle seguenti immagini.
Per la parte superiore, ho anche disegnato un cerchio di 11 cm di raggio sul foglio di schiuma e l'ho tagliato. Per la distanza tra la parte superiore e quella inferiore, avevo tagliato tre pezzi lunghi 4 cm di un tubo di plastica. Successivamente ho incollato i distanziatori in plastica sulla parte inferiore e poi ho incollato la parte superiore. Puoi coprire le parti laterali del robot con plastica o materiali simili, se lo desideri.
Arduino
Il codice completo per questo progetto è fornito alla fine del documento. Questo codice Arduino è simile al codice del sensore di distanza a ultrasuoni basato su Arduino, l'unica modifica è nel rilevamento del pavimento. Nelle righe seguenti, spiegherò come funziona il codice. In questo caso, non stiamo utilizzando alcuna libreria aggiuntiva. Di seguito abbiamo descritto il codice in modo graduale. Non stiamo usando alcuna libreria aggiuntiva per decodificare i dati sulla distanza dal sensore HC-SR04, perché è molto semplice. Nelle righe seguenti, abbiamo descritto come. Innanzitutto, dobbiamo definire il Trigger Pin e Echo Pin per tutti e tre i sensori di distanza a ultrasuoni che sono collegati alla scheda Arduino. In questo progetto, abbiamo tre pin Echo e tre pin Trigger. Notare che 1 è il sensore sinistro, 2 è il sensore anteriore e 3 è il sensore destro.
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;
Quindi abbiamo definito le variabili per la distanza che sono tutte variabili di tipo (int) e per la durata, abbiamo scelto di usare (long). Di nuovo, ne abbiamo tre di ciascuno. Inoltre, ho definito un numero intero per memorizzare lo stato del movimento, ne parleremo più avanti in questa sezione.
lunga durata1; lunga durata2; lunga durata3; int distanceleft; int distancefront; int distanceright; int a = 0;
Successivamente, nella sezione di configurazione, dobbiamo rendere tutti i pin della prospettiva come input o output utilizzando la funzione pinModes () . Per inviare onde ultrasoniche dal modulo, dobbiamo abilitare il trigger pin ad alto, ovvero tutti i trigger pin dovrebbero essere definiti come OUTPUT. E per ricevere l'eco, dobbiamo leggere lo stato dei pin dell'eco in modo che tutti i pin dell'eco dovrebbero essere definiti come INPUT. Inoltre, abilitiamo il monitor seriale per la risoluzione dei problemi. Per leggere lo stato dei moduli IR, ho definito l' irpin come input.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
E questi pin digitali sono definiti come OUTPUT per l'ingresso del driver del motore.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
Nel ciclo principale, abbiamo tre sezioni per tre sensori. Tutte le sezioni funzionano allo stesso modo ma ciascuna per sensori diversi. In questa sezione leggiamo la distanza dell'ostacolo da ogni sensore e la memorizziamo in ogni numero intero definito. Per leggere la distanza, in primo luogo, dobbiamo assicurarci che i perni del grilletto siano liberi, per questo, dobbiamo impostare il perno del grilletto su LOW per 2 µs. Ora, per generare l'onda ultrasonica, dobbiamo portare il perno del grilletto ALTO per 10 µs. Questo invierà il suono ultrasonico e con l'aiuto della funzione pulseIn () , possiamo leggere il tempo di percorrenza e memorizzare quel valore nella variabile " durata ". Questa funzione ha 2 parametri, il primo è il nome del pin dell'eco e per il secondo è possibile scrivere entrambiALTO o BASSO. HIGH significa che la funzione pulseIn () attenderà che il pin diventi ALTO causato dall'onda sonora rimbalzata e inizierà a contare, quindi attenderà che il pin diventi BASSO quando l'onda sonora terminerà, il che interromperà il conteggio. Questa funzione fornisce la durata dell'impulso in microsecondi. Per calcolare la distanza, moltiplicheremo la durata per 0,034 (la velocità del suono nell'aria è 340 m / s) e la divideremo per 2 (ciò è dovuto al viaggio avanti e indietro dell'onda sonora). Infine, memorizziamo la distanza di ciascun sensore in numeri interi corrispondenti.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = duration1 * 0.034 / 2;
Dopo aver ottenuto la distanza da ciascun sensore, possiamo controllare i motori con l'aiuto di un'istruzione if, quindi controlliamo il movimento del robot. Questo è molto semplice, per prima cosa abbiamo dato un valore di distanza dall'ostacolo, in questo caso è 15 cm (cambia questo valore come desideri). Poi abbiamo dato le condizioni in base a quel valore. Ad esempio, quando un ostacolo arriva davanti al sensore sinistro (ciò significa che la distanza del sensore sinistro deve essere inferiore o uguale a 15 cm) e le altre due distanze sono alte (significa che nessun ostacolo è davanti a questo sensore), quindi con l'aiuto della funzione di scrittura digitale, possiamo guidare i motori a destra. Successivamente, ho controllato lo stato del sensore IR. Se il robot è sul pavimento, il valore del pin IR sarà BASSO e, in caso contrario, il valore saràALTA. Quindi ho memorizzato quel valore nella variabile int s . Controlleremo il robot in base a questo stato.
Questa sezione del codice viene utilizzata per spostare il robot avanti e indietro :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); ritardo (1000); a = 1; }
Ma c'è un problema con questo metodo quando il motore si muove all'indietro, il pavimento torna indietro e il robot si sposta in avanti, e si ripeterà bloccando il robot. Per ovviare a ciò, memorizziamo un valore (1) in int dopo aver compreso che floor non è presente. Controlliamo questa condizione anche per altri movimenti.
Dopo aver rilevato l'assenza del pavimento, il robot non si muoverà in avanti. Invece, si sposterà a sinistra, in questo modo possiamo evitare il problema.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
Nella condizione di cui sopra. Per prima cosa, il robot controllerà lo stato del piano e il valore intero. Il bot andrà avanti solo se tutte le condizioni sono soddisfatte.
Ora possiamo scrivere i comandi per il driver del motore. Questo guiderà il motore destro indietro e il motore sinistro in avanti, girando così il robot a destra.
Questa sezione del codice viene utilizzata per spostare il robot a destra:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Se il bot rileva che il pavimento è assente, il valore cambia in 1 e il bot si sposta a sinistra. Dopo aver girato a sinistra, il valore di "a" cambia in 0 da 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); ritardo (100); a = 0; }
Questa sezione del codice viene utilizzata per spostare il robot a sinistra:
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); }
Questo è tutto per costruire robot aspirapolvere intelligente basato su Arduino. Il funzionamento completo del progetto si trova nel video linkato in fondo a questa pagina. Se hai domande, commenta di seguito.