Accedi al FORUM
 
MENU

LINKS

INFO

 


NOVITA'

Il sito si sta spostando www.it-robotix.net

Un saluto a tutti i visitatori di passaggio e a tutti i frequentatori abituali di questo sito, da pochi giorni è ormai attivo il nuovo sito IT-Robotix. Questa pagina ora disponibile sul nuovo sito, basta cliccare sul link che segue per accedere alla stessa pagina sul nuovo sito.

http://www.it-robotix.net/robot/robotzero/


ROBOT 21 Aprile 2005

RobotZero di Roberto

Vediamo come realizzare un semplice robot.

Dopo aver realizzato la 628Board ho pensato che il modo migliore per testarla sarebbe stato realizzare un semplice Robot. Quindi mi sono guardato un po' intorno, recuperando materiale qua e la ho realizzato "RobotZero", questo nome mi è venuto in mente proprio ora che sto scrivendo, visto che non è proprio un primo robot, ma una vera e propria base di partenza sulla quale fare esperimenti di ogni genere, infatti la prossima cosa che farò e montare un telemetro a infrarossi, per studiarne il funzionamento.
Ma torniamo a noi eccovi una foto completa dell'accrocco.

Clicca per ingrandire


Come si può vedere il termine "accrocco" non è sbagliato, ma come dicevo prima serve per studiare. Il circuito è composto da una 628Board, "cervello" del sistema, da un ponte H realizzato con L293D per pilotare i motori e due baffi, che altro non sono che semplici interruttori per evitare gli ostacoli.
Il circuito è alimentato da 4 batterie stilo, quelle che ho usato io sono batterie ricaricabili da 1,2V, per un totale di 4,8V questo mi da la possibilità di alimentare direttamente tutta l'elettronica senza la necessità di montare uno stabilizzatore.
Spesso il problema principale per realizzare un robot sta nella realizzazione della meccanica, io in questo caso ho usato qualcosa di già pronto, la base del primo robot della De Agostini, comunque in caso avete difficolta ora se ne trovano anche in commercio. La base che ho utilizzato monta 2 motori con relativa riduzione e un ruotino piroettante d'appoggio. Ho sfruttato la grande base per montarci il porta pile e una breadboard per realizzare il circuito del ponte H e la 628Board, ma se avete una base più piccola potete pensare sempre ad un montaggio a strati. I baffi sono degli switch di contatto ai quali ho fissato con dei faston del comune filo di ferro come si può vedere nella foto, il funzionamento dei baffi è quello di un comune interrutore, il PIC ne controlla lo stato per capire se è a contatto con un ostacolo o no.

Clicca per ingrandire     Clicca per ingrandire


I motori sono pilotati con un segnale PWM, questo permette di realizzare una semplice accelerazione, e non richiedere troppa corrente alle batterie alla partenza. La soluzione migliore sarebbe stata avere 2 PWM, ma il PIC 16F628 ne ha soltanto uno. Se desiderate approfondire il discorso sul PWM, vi consiglio di leggere il tutorial di Giovanni Giannetti al seguente link: http://www.tmasi.com/robotica/pwmtut/PWMTut_H.htm.
Lo schema seguente è quello relativo al circuito, riporta le indicazioni dei collegamenti alla 628Board.

Clicca per ingrandire


Esaminiamo ora il codice:


Analizziamo prima il codice della funzione main. Al solito per prima cosa vengono inizializzati i registri per il funzionamento delle porte, poi vengono richiamate le funzioni per inizializzare il display. La funzione "lcd_puts("PWM DMS SBD ???");" viene usata per stampare sulla prima riga del display delle etichette, di variabili che utilizzeremo per il debug del robot. I valori di tali vaiabili, vengono stampati sotto le etichette nella seconda righa, ad esempio l'etichetta PWM indica la variabile che contiene il valore del PWM generato dal PIC che varia da 0 a 255. Per scrivere questi valori sotto le etichette viene usata la funzione "lcd_put_uchar(valore,riga, colonna);", dove valore è la variabile che si vuole visualizzare (di tipo unsigned char), riga è la riga del display su cui scrivere, e colonna è la colonna dove va posizionato il valore. Attenzione il valore viene sempre stampato con 3 caratteri a partire dalla posizione colonna, ad esempio se la variabile da visualizzare contiene zero il risultato sarà "000".
Il passo successivo è l'inizializzazione del PIC per la generazione del segnale PWM, il primo registro da valorizzare è CCPR1L questo registro contiene gli 8 bit più significativi per la regolazione del duty-cycle, in questo esempio si useranno solo questi bit tralasciando i 2 meno significativi esclusivamente per semplicità di realizzazione. Per gli altri registri è possibile vedere in tutorial indicato in precedenza o il data sheet, per una spiegazione più dettagliata.
Vediamo ora la funzione motori(0,0,100); richiamata prima del loop infinito. Questa funzione molto grezza, serve semplicemente a generare una rampa di accelerazione per i motori, ed impostare la direzione in cui devono girare. I valori impostati del duty cycle iniziale nel ciclo for(vedi variabile "duty") e il controllo iniziale sulla variabile "rit_acc", sono definiti in base alla caratteristiche dei motori utilizzati, potrebbe essere necesario modificarli, se le caratteristiche dei motori che utilizzate sono diverse da quelle che ho usato io. Comunque controllando i dati visualizzati sul display, avanzando per tentativi si può trovare facilmente il valore più adatto.
Nel loop infito che chiude il programma, viene controllato continuamente lo stato dei baffi e nel caso in cui uno di questi risultasse premuto, il robot retrocede per un periodo di tempo indicato nella funzione motori, poi gira nella direzione opposta al baffo premuto e successivamente riprende ad andare avanti. Anche in questo caso le temporizzazioni potrebbero avere la necessità di essere modificati in base alle caratteristiche dei vostri motori.
A questo punto non vi resta che divertirvi a fare delle prove con il vostro nuovo robot.

:: Scarica i sorgenti di RobotZero ::


 

NEWS


NEWS


NEWS