- Materiali richiesti:
- Concetto di robot che evita ostacoli:
- Schema del circuito e spiegazione:
- Programmazione del microcontrollore PIC:
- Robot che evita ostacoli in azione:
Obstacle Avoider Robot è un altro famoso robot che arricchisce i progetti incorporati. Per coloro che sono nuovi robot evita ostacoli, è solo un normale robot su ruote che potrebbe spostarsi senza urtare alcun ostacolo. Ci sono molti modi per costruire un robot che evita ostacoli nel progetto, utilizzeremo un sensore a ultrasuoni (anteriore) e due sensori IR (sinistro / destro) in modo che il nostro robot abbia gli occhi in tutte e tre le direzioni. In questo modo puoi renderlo molto più intelligente e veloce rilevando oggetti in tutti e tre i lati e manovrando di conseguenza. Qui stiamo facendo causa al microcontrollore PIC PIC16F877A per questo ostacolo che evita il robot.
Il funzionamento di un robot che evita ostacoli può essere osservato da un prodotto in tempo reale chiamato Robot per la pulizia della casa. Sebbene la tecnologia ei sensori utilizzati in questi siano molto complicati, il concetto rimane lo stesso. Vediamo quanto possiamo ottenere utilizzando i nostri normali sensori e microcontrollori PIC.
Controlla anche i nostri altri robot per evitare gli ostacoli:
- Robot per evitare ostacoli basato su Raspberry Pi
- Robot aspirapolvere intelligente fai-da-te con Arduino
Materiali richiesti:
- PIC16F877A
- Sensore IR (2Nos)
- Sensore a ultrasuoni (1Nos)
- Motoriduttore DC (2Nos)
- Driver motore L293D
- Sedie (puoi anche costruirne una tua usando i cartoni)
- Power bank (qualsiasi fonte di alimentazione disponibile)
Concetto di robot che evita ostacoli:
Il concetto di Robot per evitare ostacoli è molto semplice. Usiamo sensori per rilevare la presenza di oggetti intorno al robot e utilizziamo questi dati per non far collidere il robot su quegli oggetti. Per rilevare un oggetto possiamo utilizzare qualsiasi sensore di utilizzo come sensore IR e sensore a ultrasuoni.
Nel nostro robot abbiamo utilizzato il sensore US come sensore anteriore e due sensori IR rispettivamente per il sinistro e il destro. Il robot si muoverà in avanti quando non è presente alcun oggetto davanti. Quindi il robot si muoverà in avanti finché il sensore a ultrasuoni (US) non rileva alcun oggetto.
Quando un oggetto viene rilevato dal sensore US, è il momento di cambiare la direzione del robot. Possiamo girare a sinistra oa destra, per decidere la direzione di svolta usiamo l'aiuto del sensore IR per verificare se c'è qualche oggetto presente vicino al lato sinistro o destro del robot.
Se viene rilevato un oggetto sulla parte anteriore e sul lato destro del robot, il robot tornerà indietro e girerà a sinistra. Facciamo in modo che il robot corra all'indietro per una certa distanza in modo che non entri in collisione con l'oggetto durante la svolta.
Se viene rilevato un oggetto sulla parte anteriore e sul lato sinistro del robot, il robot tornerà indietro e girerà a destra.
Se il robot raggiunge un angolo della stanza percepirà l'oggetto presente in tutti e quattro. In questo caso dobbiamo guidare il robot all'indietro fino a quando uno qualsiasi dei lati non si libera.
Un altro possibile caso è che ci sarà un oggetto davanti ma potrebbe non esserci alcun oggetto né sul lato sinistro né sul lato destro, in questo caso dobbiamo girare a caso in qualsiasi direzione.
Spero che questo abbia dato un'idea approssimativa di come funziona un evita ostacoli, ora procediamo con il diagramma del circuito per costruire questo bot e godercelo in azione.
Schema del circuito e spiegazione:
Lo schema del circuito completo del robot che evita gli ostacoli basato su PIC è mostrato nell'immagine sopra. Come puoi vedere abbiamo utilizzato due sensori IR per rilevare oggetti rispettivamente a sinistra ea destra del robot e un sensore a ultrasuoni per misurare la distanza dell'oggetto che è presente davanti al robot. Abbiamo anche utilizzato un modulo L293D Motor Driver per pilotare i due motori presenti in questo progetto. Questi sono solo normali motoriduttori CC per ruote e quindi possono essere derivati molto facilmente. La tabella seguente ti aiuterà nelle connessioni.
S.No |
Collegato da |
Collegato a |
1 |
Perno sinistro del sensore IR |
RD2 (pin 21) |
2 |
Sensore IR Perno di uscita destra |
RD3 (pin 22) |
4 |
Pin motore 1 canale A |
RC4 (pin 23) |
5 |
Pin del canale B del motore 1 |
RC5 (pin 25) |
6 |
Pin motore 2 canale A |
RC6 (pin 26) |
7 |
Perno motore 2 canale B. |
RC7 (pin 27) |
8 |
Perno grilletto USA |
RB1 (pin 34) |
9 |
US Echo Pin |
RB2 (pin 35) |
Un modulo driver motore come L293D è obbligatorio perché la quantità di corrente richiesta per il funzionamento del motoriduttore CC non può essere fornita dal pin I / O del microcontrollore PIC. I sensori e il modulo sono alimentati dall'alimentazione + 5V che viene regolata dal 7805. Il modulo driver del motore può essere alimentato anche usando + 12V, ma per questo progetto mi sono limitato ai + 5V disponibili.
Il robot completo è alimentato da un Power bank nel mio caso. È inoltre possibile utilizzare qualsiasi normale power bank e bypassare la sezione del regolatore o utilizzare il circuito sopra e utilizzare qualsiasi batteria da 9 V o 12 V per il Robot come mostrato nello schema del circuito sopra. Una volta terminate le connessioni, sarebbe simile a questo di seguito
Programmazione del microcontrollore PIC:
Programmare il tuo PIC in modo che funzioni per un ostacolo che evita gli ostacoli è davvero facile. Dobbiamo solo leggere il valore di questi tre sensori e guidare i motori di conseguenza. In questo progetto stiamo usando un sensore a ultrasuoni. Abbiamo già imparato come interfacciare gli ultrasuoni con il microcontrollore PIC, se sei nuovo qui, torna gentilmente a quel tutorial per capire come funziona un sensore americano con un PIC, poiché salterò i dettagli qui per evitare ripetizioni.
Il programma completo o questo Robot è fornito alla fine di questa pagina, ho spiegato ulteriormente le parti importanti del programma di seguito.
Come sappiamo tutti i programmi iniziano con le dichiarazioni dei pin di Input e Output. Qui i quattro pin del modulo Motor Driver e i pin Trigger sono i pin di uscita, mentre saranno inseriti il pin Echo e due pin di uscita IR. Dovremmo inizializzare il modulo Timer 1 per usarlo con il sensore a ultrasuoni.
TRISD = 0x00; // PORTD dichiarato come output per interfacciare LCD TRISB1 = 0; // Il pin di attivazione del sensore US viene inviato come pin di uscita TRISB2 = 1; // Il pin di eco del sensore US è impostato come pin di ingresso TRISB3 = 0; // RB3 è il pin di uscita per il LED TRISD2 = 1; TRISD3 = 1; // Entrambi i pin del sensore IR sono dichiarati come ingresso TRISC4 = 0; TRISC5 = 0; // Pin motore 1 dichiarati come uscita TRISC6 = 0; TRISC7 = 0; // 2 pin del motore dichiarati come uscita T1CON = 0x20;
In questo programma dovremmo controllare la distanza tra il sensore e l'oggetto abbastanza spesso, quindi abbiamo creato una funzione chiamata calcola_distanza () all'interno della quale misureremo la distanza con il metodo discusso nel tutorial sull'interfacciamento del sensore USA. Il codice è mostrato di seguito
void calcola_distanza () // funzione per calcolare la distanza di US {TMR1H = 0; TMR1L = 0; // cancella i bit del timer Trigger = 1; __delay_us (10); Trigger = 0; while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); distanza = (0,0272 * time_taken) / 2; }
Il prossimo passo sarebbe confrontare i valori del sensore a ultrasuoni e del sensore IR e spostare il robot di conseguenza. Qui In questo programma ho usato un valore di cm come distanza critica sotto la quale il Robot dovrebbe iniziare ad apportare modifiche alla direzione. Puoi usare i tuoi valori preferiti. Se non ci sono oggetti, il robot si limita a spostarsi in avanti
se (distanza> 5) {RC4 = 0; RC5 = 1; // Motore 1 avanti RC6 = 1; RC7 = 0; // Motore 2 avanti}
Se viene rilevato un oggetto, la distanza sarà inferiore a cm. In questo caso consideriamo i valori del sensore ultrasonico sinistro e destro. In base a questo valore decidiamo di svoltare a sinistra oppure a destra. Viene utilizzato un ritardo di ms in modo che il cambio di direzione sia visibile.
if (RD2 == 0 && RD3 == 1 && distanza <= 5) // Il sensore sinistro è bloccato {back_off (); RC4 = 1; RC5 = 1; // Arresto motore 1 RC6 = 1; RC7 = 0; // Motore 2 avanti __delay_ms (500); } calcola_distanza (); if (RD2 == 1 && RD3 == 0 && distanza <= 5) // Il sensore destro è bloccato {back_off (); RC4 = 0; RC5 = 1; // Motore 1 avanti RC6 = 1; RC7 = 1; // Arresto motore 2 __delay_ms (500); }
A volte il sensore a ultrasuoni rileva un oggetto, ma non viene rilevato alcun oggetto dai sensori IR. In questo caso il robot gira a sinistra per impostazione predefinita. Puoi anche farlo girare a destra o in una direzione casuale in base alle tue preferenze. Se ci sono oggetti su entrambi i lati, lo facciamo andare indietro. Il codice per fare lo stesso è mostrato di seguito.
calcola_distanza (); if (RD2 == 0 && RD3 == 0 && distanza <= 5) // Entrambi i sensori sono aperti {back_off (); RC4 = 0; RC5 = 1; // Motore 1 avanti RC6 = 1; RC7 = 1; // Arresto motore 2 __delay_ms (500); } calcola_distanza (); if (RD2 == 1 && RD3 == 1 && distanza <= 5) // Entrambi i sensori sono bloccati {back_off (); RC4 = 1; RC5 = 0; // Motore 1 indietro RC6 = 1; RC7 = 1; // Arresto motore 2 __delay_ms (1000); }
Robot che evita ostacoli in azione:
Il funzionamento del progetto è molto interessante e divertente da guardare. Una volta che hai finito con il tuo circuito e codice, accendi il tuo Bot e lascialo a terra. Dovrebbe essere in grado di identificare gli ostacoli ed evitarli in modo intelligente. Ma ecco che arriva la parte divertente. Puoi modificare il codice e fargli fare più cose come evitare una scala, renderlo più intelligente memorizzando curve preziose e cosa no?
Questo robot ti aiuterà a comprendere le basi della programmazione e ad apprendere come un hardware reale risponderà al tuo codice. È sempre divertente programmare questo robot e osservare come si comporta per il codice nel mondo reale.
Qui abbiamo utilizzato la stessa scheda PIC perf che abbiamo realizzato per lampeggiare LED utilizzando il microcontrollore PIC e abbiamo utilizzato questa scheda in altri progetti della serie PIC Tutorial.
Il tuo robot dovrebbe avere un aspetto simile a quello mostrato nell'immagine sopra. Il funzionamento completo di questo progetto è mostrato nel video qui sotto.
Spero che tu abbia capito il progetto e ti sia piaciuto realizzarne uno. Se hai dubbi o sei bloccato puoi utilizzare la sezione commenti per inviare le tue domande e farò del mio meglio per rispondere.