Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione...

22
MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo 1 Tesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico Ribaldi Lorenzo MicRobot

Transcript of Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione...

Page 1: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

1

Tesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008

Classe 5AIN

Autori: Braghiroli Federico Ribaldi Lorenzo

MicRobot

Page 2: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

2

MicRobot è il nome dell’automa evita-ostacoli. La progettazione di micRobot richiede buone conoscenze di elettronica e di programmazione in linguaggio C/assembler, senza escludere un ampio utilizzo di internet, da dove proviene la maggior parte dei datasheet e delle descrizioni del materiale utilizzato. Fondamentale è stata la capacità di sperimentare l’utilizzo di componenti elettronici, mai utilizzati da noi in ambito scolastico e/o privato. La realizzazione di micRobot, divisa in tre fasi principali, ha richiesto circa cinque mesi per essere completata. La prima fase di progettazione, iniziata verso fine gennaio, è stata seguita dalla realizzazione dei circuiti, delle parti meccaniche e dall'implementazione del firmware installato sul microcontrollore. L'ultima fase, costituita dai test e da piccoli perfezionamenti è stata terminata all'inizio di giugno. Le discipline scolastiche principalmente coinvolte nella realizzazione del robot sono Elettronica e Sistemi con alcuni riferimenti alla programmazione, e di Informatica col linguaggio C. Descrizione e difficoltà riscontrate Il Robot è stato programmato come automa evita-ostacoli. Incontrando un ostacolo il robot sceglierà la direzione alternativa da prendere cercando di mantenere la stessa traiettoria di partenza. La scelta dei componenti si è basata su ricerche in internet e su consigli dei professori. La spesa totale dei componenti utilizzati è stata di circa 40€. Il robot è controllato da un PIC, il quale pilota quattro motori passo-passo, rilevando gli ostacoli attraverso quattro sensori di prossimità. Le prime difficoltà, nell’utilizzo del programmatore di PIC, sono state risolte dopo diversi tentativi di configurazione. Successivamente ci si è posto il problema di come comandare i quattro motori passo-passo, essendo la nostra prima esperienza con questo tipo di motori. Facendo opportuni adattamenti agli schemi elettrici trovati su internet, abbiamo realizzato i circuiti di pilotaggio. Successivamente abbiamo effettuato alcuni test sui motori e sui driver, durante i quali abbiamo riscontrato diverse difficoltà. Altrettanto problematico è stato l’utilizzo dei sensori di prossimità; questi ultimi spesso non funzionavano correttamente a causa disturbi elettrici sull’alimentazione, che inizialmente avevamo sottovalutato, ma che spesso causavano un errato rilevamento degli oggetti. Un’attenta lettura dei manuali dei sensori ci ha permesso di costruire opportuni filtri da applicare all’alimentazione dei moduli di prossimità. Dati gli elevati consumi del robot (circa 10W) si è scelto di alimentarlo con otto batterie in serie di tipo “AA” da 1,2v per un totale di 10v, che gli garantiscono un’autonomia di circa 1 ora.

Page 3: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

3

Schema a blocchi del robot

Il Pic 16F876A

Per il controllo del robot si è preferito l'utilizzo di un microcontrollore di semplice utilizzo e relativamente economico. Il PIC16F876A fornisce un'ottima gamma di funzionalità (convertitori ADC, numerosi I/O digitali, interfaccia USART) e prestazioni relativamente elevate ad un modico costo (circa 5 euro).

I requisiti necessari per il funzionamento del robot sono di soli 8 I/O digitali, ma si è scelto di utilizzare un microcontrollore con caratteristiche più avanzate per permettere una futura implementazione di ulteriori funzionalità. Il PIC è stato montato su una millefori con un regolatore di tensione L7805, un oscillatore da 20MHz e 22 connettori a lancia direttamente collegati alle porte del PIC. La scheda è stata costruita non per essere montata esclusivamente sul robot, ma per un uso più generico, infatti essa garantisce il funzionamento del PIC per qualsiasi utilizzo, in tutte le sue funzionalità.

Page 4: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

4

Schema elettrico

Il jumper J1 server per mantenere il livello di MCLR a +5v. Quando il livello di MCLR viene portato a 0v il PIC si resetta. Se questo avviene in modo accidentale il robot potrebbe non funzionare come desiderato; per questo motivo viene messa una rete RC prima di MCLR per evitare eventuali disturbi o cali di tensione. Sollevando il jumper J1 e inserendo il jumper J2 il PIC viene resettato e bloccato fin quando MCLR non viene riportato a +5v.

Page 5: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

5

Caratteristiche principali:

• Processore RISC (Reduced Instruction Set Computer) con clock a 20Mhz • Memoria:

o 14,3Kbyte di programma, salvati su memoria flash che può essere riscritta migliaia di volte

o 368 byte di memoria SRAM, utilizzata per immagazzinare dati temporanei

o 256 byte di memoria EPROM, utilizzata per immagazzinare dati permanenti

• Timer e Interrupt: o 3 timer (T0, T1, T2), che possono essere utilizzati per azioni

temporizzate. Generano un interrupt dopo un tempo stabilito o Altri interrupt si trovano su alcune porte (in particolare RB0)

• Input/Output: o 22 I/O digitali, configurabili da programma o 5 ADC: convertitori analogico/digitale da 10bit o Interfaccia USART: seriale sincrona o asincrona

Page 6: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

6

Nome Pin Descrizione

Vpp 1 +ve supplì for chip RA0/AN0 2 Digital input/output A0 / Analogue input A0 RA1/AN1 3 Digital input/output A1 / Analogue input A1 RA2/AN2/VREF- 4 Digital input/output A2 / Analogue input A2 / A/D –ve

reference RA3/AN3/VREF+ 5 Digital input/output A3 / Analogue input A3 / A/D +ve

reference RA4 6 Digital input/output A4 RA5/AN4 7 Digital input/output A5 / Analogue input A4 VSS 8 0 volt reference for chip supply and I/O pins OSC1/CLKIN 9 External oscillator/clock input OSC2/CLKOUT 10 Internal oscillator/clock output RC0/T1OSO 11 Digital input/output C0 / Timer 1 oscillator output RC1 12 Digital input/output C1 RC2 13 Digital input/output C2 RC3 14 Digital input/output C3 RC4 15 Digital input/output C4 RC5 16 Digital input/output C5 RC6 17 Digital input/output C6 RC7 18 Digital input/output C7 VSS 19 0 volt reference for chip supply and I/O pins VDD 20 +ve supply for logic and I/O pins RB0/INT 21 Digital input/output B0 / External interrupt RB1 22 Digital input/output B1 RB2 23 Digital input/output B2 RB3 24 Digital input/output B3 RB4 25 Digital input/output B4 RB5 26 Digital input/output B5 RB6 27 Digital input/output B6 RB7 28 Digital input/output B7

Programmare il pic Il PIC ammette una programmazione seriale tramite due soli pin. Un pin è necessario per il clock e un pin è necessario per il transito dei dati (che possono essere bidirezionali). Se la programmazione avviene lasciando il PIC nel circuito di lavoro si parla di programmazione "In-Circuit", altrimenti avviene una programmazione normale, rimuovendo il PIC dal circuito di lavoro ed inserendolo nel programmatore. Il programma da trasferire al PIC è un file di tipo HEX ed è sufficiente inviarlo al PIC usufruendo della porta parallela o della porta seriale. Nel nostro caso, per la

Page 7: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

7

massima semplicità, si usa la seriale che dispone già dei segnali di comunicazione necessari, l'unica difficoltà è che il PIC funziona a 5V, mentre la seriale a ±12V. Questo problema è stato risolto inserendo alcune resistenze ed alcuni zener per limitare i segnali al dovuto livello. Esiste un segnale MCLR che serve ad avviare la programmazione con un valore di 12V facilmente ottenibile dalla porta seriale. Schema elettrico del programmatore

Software di programmazione In commercio esistono vari software sia freeware che a pagamento, per entrambe le piattaforme Windows e Linux. Il software che abbiamo utilizzato per programmare il PIC è IcProg, software freeware che permette la programmazione di una vasta gamma di PIC. Sono stati riscontrati alcuni problemi con l’utilizzo di questo software su piattaforme NT, in quanto richiede l’utilizzo di un driver specifico, che non sempre funziona correttamente. Inoltre, per consentire una programmazione corretta, occorrono macchine con interfacce seriali che riescano a fornire un’adeguata alimentazione al programmatore, in quanto non è alimentato esternamente. Solitamente macchine relativamente datate non hanno problemi di questo genere. Una valida alternativa ad IcProg è WinProg. Esso, pur implementando le stesse funzionalità di IcProg, non presenta alcun problema su piattaforme NT.

Page 8: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

8

Driver e motori

I motori passo-passo (detti step motor o stepper) sono la scelta ideale per tutte quelle applicazioni che richiedono precisione nello spostamento angolare e nella velocità di rotazione con la massima semplicità d'uso, quali la robotica ed i servomeccanismi in genere. Pregi/Difetti Il motore passo-passo ha una serie di caratteristiche interessanti:

• I circuiti di pilotaggio possono essere relativamente semplici sia dal punto di vista realizzativo che progettuale e non è richiesta particolare potenza di calcolo al controllore

• È facile far compiere all'albero piccole rotazioni angolari arbitrarie in ambedue i versi e bloccarlo in una determinata posizione

• La velocità di rotazione può essere molto bassa anche senza l'uso di riduttori meccanici

Difetti riscontrati:

• Hanno un funzionamento a scatti e spesso producono forti vibrazioni • Il loro rendimento energetico è basso e, in genere, la coppia, la velocità e di

conseguenza la potenza meccanica sono piccole • Hanno un costo elevato, rispetto ad altri tipi di motore con analoghe

prestazioni • Raggiungono velocità di rotazione non particolarmente elevate

Funzionamento I motori passo-passo sono motori che hanno come obiettivo quello di mantenere fermo l'albero in una posizione di equilibrio. Solo indirettamente è possibile ottenerne la rotazione: occorre inviare al motore una serie di impulsi di corrente, secondo un'opportuna sequenza, in modo tale da far spostare, per passi successivi, la posizione angolare di equilibrio. I motori passo-passo possono essere unipolari o bipolari a seconda della disposizione degli avvolgimenti nei motori. I motori utilizzati per questo robot sono unipolari.

Schema di funzionamento di un motore unipolare

Page 9: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

9

La sequenza con cui la corrente è applicata alle fasi può essere di vari tipi diversi:

• Wavemode: è il sistema base di funzionamento; con esso la corrente è applicata ad una sola delle fasi alla volta, secondo la tabella seguente:

Passo Ph1 Ph2 Ph3 Ph4 1 1 0 0 0 2 0 1 0 0 3 0 0 1 0 4 0 0 0 1

• Two phase-on: la corrente è applicata contemporaneamente a due fasi. In

questo modo il rotore è trattenuto in posizioni di equilibrio intermedie a quelle tipiche del funzionamento wavemode.

Passo Ph1 Ph2 Ph3 Ph4 1 1 1 0 0 2 0 1 1 0 3 0 0 1 1 4 1 0 0 1

La coppia disponibile è circa 1,4 volte maggiore di quella ottenuta con una sola fase attiva alla volta. Il consumo di corrente e quindi il riscaldamento raddoppiano.

• Half-step (mezzo passo): è in pratica l'alternarsi delle configurazioni dei due metodi appena visti e si basa sulla constatazione che tra le posizioni di equilibrio delle due sequenze precedentemente viste è presente uno sfasamento di esattamente mezzo passo.

Passo Ph1 Ph2 Ph3 Ph4 1 1 0 0 0 2 1 1 0 0 3 0 1 0 0 4 0 1 1 0 5 0 0 1 0 6 0 0 1 1 7 0 0 0 1 8 1 0 0 1

Page 10: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

10

Driver Per pilotare i motorini passo-passo si utilizza il metodo di controllo "Two phase-on" ottenuto con dei circuiti logici (XOR e flip flop). Il circuito driver permette di controllare indipendentemente i due motorini di destra e i due motorini di sinistra con sole 4 uscite del PIC (RB0 e RB1 per i sensi di marcia e RB2 e RB3 per gli step). Le uscite delle logiche digitali sono collegate alle basi dei transistor, utilizzati in saturazione come interruttori per alimentare gli avvolgimenti degli stepper. Il circuito del driver richiede due alimentazioni separate: una per alimentare la logica (+5VDC) e una per alimentare gli stepper (+10VDC). I transistor utilizzati sono i BDX53 scelti per gestire motori che richiedono fino ad un massimo di alcuni ampere, nonostante i nostri motori richiedano solamente 170mA per avvolgimento.

Page 11: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

11

Il diagramma rappresenta il funzionamento del circuito digitale del driver. Ad ogni step, alternandosi, uno dei due flip flop JK commuta grazie alla logica delle porte XOR, implementando così una sequenza di pilotaggio “Two phase-on”. Difficoltà di realizzazione Le principali difficoltà incontrate nella realizzazione del driver sono state nello stabilire le cause dei primi malfunzionamenti. Molto spesso infatti i motori non si muovevano oppure non eseguivano i giusti passi a causa di collegamenti errati. Il problema che ci ha tenuti impegnati per più tempo era legato ai transistor, infatti erroneamente venivano messi in cortocircuito i collettori attraverso il telaio del robot. La soluzione è stata dunque l’isolamento, attraverso l’utilizzo di materiale isolante, dei transistor dal telaio.

N.B.: Quando si pilotano carichi induttivi è sempre necessario inserire il cosiddetto "diodo di ricircolo", pena la repentina distruzione del transistor di potenza a causa delle tensioni elevate generate da motore.

Page 12: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

12

Schema elettrico del driver

Page 13: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

13

Sensori di prossimità

La scelta dei sensori è ricaduta sui moduli ad infrarossi per l’ottimo rapporto qualità/prezzo. Il funzionamento si basa sul principio del sonar. Il trasmettitore collocato sul robot emette un raggio di luce infrarossa. Se il raggio intercetta un ostacolo, viene riflesso verso il robot e captato dal sensore IR. Per fare in modo che il sensore non venga influenzato dalla luce ambientale o da altri segnali, si modula il raggio infrarosso con un'onda quadra. Solo sintonizzando il ricevitore sulla stessa frequenza del trasmettitore, si può ricevere il segnale trasmesso. Il ricevitore restituisce in output un livello logico basso (0v) quando riceve il segnale IR, altrimenti restituisce un livello logico alto (+5v) se non capta nessun segnale IR modulato (active-low). In teoria calcolando il tempo trascorso tra l'emissione e la ricezione, si riesce a calcolare la distanza dell'ostacolo, ma, all'atto pratico, questo non risulta un metodo affidabile. Caratteristiche

I sensori sono composti da un ricevitore (TSOP1838) alimentato a tensione costante di 5v, un trasmettitore IR led alimentato esternamente da un onda quadra a 38Khz e da alcuni componenti per filtrare i disturbi di alimentazione sul ricevitore. In commercio si trovano integrati che svolgono già la funzione di sensori di prossimità, ma si è deciso comunque di assemblarli

utilizzando componenti separati, in quanto risulta una scelta più economica, nonostante richieda molto più tempo per realizzarli. La modulazione del segnale di alimentazione dei led ir è stata affidata all’integrato 555 configurato in modalità astabile. Quest’ultimo comanda due transistor che forniscono l’alimentazione ai led. Sono stati aggiunti tre trimmer facoltativi dei quali due regolano la corrente di emissione sui led ed un altro “aggiusta” la frequenza di modulazione.

Page 14: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

14

Schema Ricevitore

Schema trasmettitore

Page 15: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

15

Programmazione

Per la programmazione del PIC si è scelto di utilizzare le librerie del linguaggio C fornite dall’ambiente di sviluppo “HI-TECH PICC Compiler”. Il compito del software da implementare sarà quello di gestire il senso di marcia e la velocità dei motorini passo-passo, controllando quanto più possibile che durante l’avanzamento del robot, esso non incontri ostacoli sul suo percorso. Nel caso in cui il robot incontri degli ostacoli, esso curverà a destra se l’ostacolo viene rilevato dal sensore di sinistra, a sinistra se l’ostacolo viene rilevato dal sensore di destra oppure se entrambi i sensori rilevano l’ostacolo, il robot retrocederà di alcuni passi, dopo di ché curverà a destra o a sinistra, decidendo in base ad una variabile (turnCounter) curvando a destra o a sinistra se essa è rispettivamente minore o maggiore (o uguale) a zero. Utilizzo degli interrupt Gli impulsi da fornire al driver dei motorini passo-passo determinano la velocità di avanzamento del robot. Per determinare con precisione la frequenza degli impulsi si è deciso di utilizzare un timer, che fornisce un interrupt ad ogni overlfow del registro. Per questa funzione si è scelto di utilizzare TRM1 in quanto opera su un registro di 16bit fornendo un interrupt ogni 13mS (mentre utilizzare timer con un registro a 8bit significherebbe avere un interrupt ogni 0,05mS, decisamente troppo veloce).

T =216

Fosc4

= 0.0131S

Dove FOSC è la frequenza dell’oscillatore del PIC, nel nostro caso 20MHz.

Page 16: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

16

Siccome la frequenza è ancora troppo elevata per pilotare i motorini passo-passo si è deciso di introdurre una variabile ‘velocita’ come ulteriore divisore. La variabile ‘velocita’ viene utilizzata per regolare la velocità del robot, ed è inversamente proporzionale ad essa.

T =216

Fosc

4

× velocita

La coda delle funzioni L’esecuzione delle varie operazioni da parte del robot avviene secondo alcune regole:

• Un operazione ha una durata limitata dal numero di steps, al suo termine partirà l’operazione in coda

• Se l’operazione non viene portata a termine a causa di un ostacolo, verrà annullata e partirà l’operazione in coda

• Se la coda non contiene operazioni da eseguire il robot procede in avanti “all’infinito”

• Le operazioni non vengono mai chiamate direttamente, ma sempre messe in coda

Utilizzando un sistema a coda di funzioni si è riusciti ad ottenere un automa estremamente flessibile e facile da implementare. A seconda dello stato dell’automa (variabile ‘now’) esso sa che funzione sta eseguendo, questo gli serve per decidere quali sensori controllare durante il cammino.

Page 17: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

17

Interrupt Routine In questo schema è rappresentata la routine chiamata dall’interrupt.

Page 18: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

18

Codice sorgente completo #include <pic.h> #include <limits.h> #define MAX_QUEUE 10 //sensori di ostacoli static volatile bit FR @ ((unsigned)&PORTA*8)+0; // front right static volatile bit FL @ ((unsigned)&PORTA*8)+1; // front left static volatile bit RR @ ((unsigned)&PORTA*8)+2; // rear right static volatile bit RL @ ((unsigned)&PORTA*8)+3; // rear left enum status{NULL=0,FW,BW,LEFT,RIGHT}; //avanti, ind ietro, sinistra, destra typedef void (*function_p)(unsigned int); typedef struct{ function_p func; short steps; }function; function queueNext(); bit addToQueue(function_p f,int s); void forward(unsigned int s); void backward(unsigned int s); void right(unsigned int s); void left(unsigned int s); void f_eye(); void r_eye(); /*dichiarazione delle variabili globali*/ unsigned int step; //durata dell'azione (numero d i step per l'azione) short count,velocita; //divisore degli interrupt ( inversamente proporzionale alla velocita') enum status now; //azione in corso short turnCounter; function queue[MAX_QUEUE]; void main() { short i; //sono tutti parametri della intcon (pag24 del dat asheet) TRISB0=0; TRISB1=0; TRISB2=0; TRISB3=0; TRISB4=0; TRISB5=0; TRISB6=0; TRISB7=0; ADCON1=7; //switch all pins in port A to digital TRISA0=1; TRISA1=1; TRISA2=1; TRISA3=1; TRISA4=1;

Page 19: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

19

TRISA5=1; TMR1CS=0; //seleziono il clock interno TMR1IE=1; //gli dico di darmi un interrupt ad ogni overflow del timer1 PORTB=0b00000000; //azzeramento PORTB PEIE=1; //abilito gli interrupt GIE=1; for(i=0;i<MAX_QUEUE;i++); //pulizia della coda del le funzioni { queue[i].func=(function_p)NULL; queue[i].steps=0; } velocita=40; //divisore della velocita' //azzero altre variabili step=0; count=0; turnCounter=0; now=NULL; TMR1ON=1; //attivo timer1 while(1); //loop di fine programma } static void interrupt isr(void) { if(count==5) //ripristino il livello logico dell'i mpulso { RB2=0; RB3=0; } if(count>velocita) //da' lo step al motorino { if(step>0) { RB2=1; //setto l'impulso RB3=1; step--; } else //e' finita l'azione, passo all'azione succe ssiva { function exec; exec=queueNext(); if(exec.func==(function_p)NULL) forward(UINT_MAX); else exec.func(exec.steps); } switch(now) { case FW: f_eye(); break;

Page 20: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

20

case BW: r_eye(); break; case RIGHT: break; case LEFT: break; case NULL: break; } count=0; } else count++; TMR1IF=0; //ri-setto il flag di overflow a 0 (ripa rte il timer) } /////////////////////////////////////////////////// ///////////////////////// //estraggo una nuova funzione dalla coda function queueNext() { function now=queue[0]; //estraggo la funzione da es eguire short i; for(i=0;i<MAX_QUEUE-1;i++) //shift del vettore ver so sinistra queue[i]=queue[i+1]; queue[i].func=(function_p)NULL; //inserimento di u n'azione "nulla" in coda al vettore queue[i].steps=0; return now; } //aggiungo una funzione in coda bit addToQueue(function_p f,int s) { short i; for(i=0;i<MAX_QUEUE;i++) //cerco la prima azione " nulla" all'interno del vettore, dove inserire la nuova azione if(queue[i].func==(function_p)NULL) { //inserimento nella struttura dati della nuova funzione col parametro queue[i].func=f; queue[i].steps=s; return 1; //ritorna 1 se ha avuto successo } return 0; //ritorna 0 se la coda e' piena } /////////////////////////////////////////////////// ///////////////////////// void forward(unsigned int s) { RB0=0; RB1=0;

Page 21: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

21

step=s; now=FW; } void backward(unsigned int s) { RB0=1; RB1=1; step=s; now=BW; } void right(unsigned int s) { RB0=1; RB1=0; step=s; turnCounter++; now=RIGHT; } void left(unsigned int s) { RB0=0; RB1=1; step=s; turnCounter--; now=LEFT; } void stop() { step=0; now=NULL; } /////////////////////////////////////////////////// ///////////////////////// void f_eye() { if(FR && !FL) //ostacolo sinistra { //se c'e' un ostacolo a sinistra il robot deve vo ltare a destra stop(); addToQueue(right,20); } else if(!FR && FL) //ostacolo destra { //se c'e' un ostacolo a destra il robot deve volt are a sinistra stop(); addToQueue(left,20); } else if(!FR && !FL) //ostacolo avanti { //se c'e' un ostacolo davanti il robot deve retro cedere leggermente //e nel caso in cui si sia voltato piu' volte a d estra, volta a sinistra o viceversa stop(); addToQueue(backward,10); addToQueue(turnCounter>0?left:right,20); } }

Page 22: Ribaldi Lorenzo MicRobot - GRIX.ITTesina esame di Maturità Itis E.Fermi Specializzazione informatica Abacus 2008 Classe 5AIN Autori: Braghiroli Federico ... le piattaforme Windows

MicRobot 2008 Braghiroli Federico & Ribaldi Lorenzo

22

void r_eye() {

if(RR && !RL) //ostacolo sinistra { stop(); addToQueue(left,20); } else if(!RR && RL) //ostacolo destra { stop(); addToQueue(right,20); } else if(!RR && !RL) //ostacolo indietro { stop(); addToQueue(forward,10); addToQueue(turnCounter>0?right:left,20); } }

Limiti

• La mancanza di sensori di prossimità nella parte superiore ed inferiore del robot possono creare problemi se si incontrassero scale oppure zone non sufficientemente alte per far passare l’automa.

• La velocità e il peso supportato sono scarsi a causa dei piccoli motori utilizzati • Il consumo energetico relativamente alto permette non oltre 2h di autonomia

Sviluppi futuri

• Inserimento di più sensori di prossimità e di movimento • Sostituzione dei quattro motori con altrettanti più potenti • Impiego di un modulo bluetooth per la comunicazione attraverso cellulari e

computer