ALLIEVI: Modolo - Ismalaj DOCENTE: Michele Visentin Classe: 5Aeln ESAMI DI STATO 2014-2015 ITIS GALILEO GALILEI CONEGLIANO LINE FOLLOWER INTRODUCTION OF ROBOT: The word “robot” comes from the term Czech robota, which means heavy work or forced work (in the plural in Czech is roboty, while Italian is invariable). A robot is a mechatronics device that performs automated tasks with a direct human supervision or default program, using artificial intelligence tecniques. The robots replace or improve human work, as in manufacture costruction of heavy or dangerous material. A robot can be equipped with connections guided by feedback between perception and action, and not from direct human control. The action may take the form of electro-magnetic motors, or actuators, which move a limb, open and close a gripper, or move the robot. Stepper control and feedback are provided by a program that is executed by an external or internal computer into the robot, or by a microcontroller. According to this definition, the concept of robot includes all the automated apparatuses. In the modern period, the term implies a level of autonomy that would exclude many automatic machines from the robots category. It is a research for more independent robot, which is the main objective of robotics research and the reason that drives much of the work on artificial intelligence. The robots that are used now are actually computers equipped with servomechanisms, with zero intelligence in fact they perform only the instructions that were given to them by a program. They are used nowadays to perform tasks that are too dangerous, difficult, repetitive or stupid to humans. This normally takes the form in industrial robots employed in assembly lines; other applications include cleaning of toxic waste, space exploration, mining, military operations such as defusing bombs. The factory is the main field in which we use the robot. In particular, articulated robots, with movements similar to of the human arm, are those most used. Applications include welding, painting machines. The car industry has made full use of this new technology where robots have been programmed to replace human work in the simplest tasks. UTILIZZO DEL LINE FOLOWING: Quello del “line following” é uno degli aspetti più interessanti della robotica: robot basati su di esso aiutano migliaia di fabbriche nel mondo consegnando posta, pacchi e materiali vari, in modo veloce ed efficiente. Le applicazioni dei line follower non si limitano a piccoli robot o all’automatizzazione nelle fabbriche, ma scienziati ed ingegneri stanno sperimentando spartineve e veicoli per il trasporto di passeggeri che seguono linee magnetiche su ferrovie intelligenti. Questi possono percepire la strada, ostacoli e segnaletica, eliminando ingorghi stradali e rendendo le nostre ferrovie più sicure. Sono state create sedie a rotelle automatizzate capaci di seguire un percorso, in grado di rendere la vita più semplice a portatori di handicap di varia natura. Inoltre sono stati messi in commercio macchinari utensili capaci di tagliare superfici di vario genere ricalcando una traccia, mediante la tecnica del line following. LINE FOLOWING NELLE SEDIE A ROTELLE: Il sistema “Line follower” è una scatola nera montata nella parte anteriore della carrozzella, dotata di sensori ad infrarossi capaci di individuare un nastro retroriflettente. I sensori lavorano incuranti della luminosità dell’ambiente, del colore del pavimento, o del fatto che questo sia coperto da un tappeto. Il loro compito è quello di scoprire dove è la linea rispetto alla sedia , in modo tale che questa possa seguirla. Se il sensore centrale vede la linea, la carrozzella va dritta; se invece il nastro è individuato dai sensori destro o sinistro, la sedia modifica la direzione per tornare su di esso. Quando il sistema è disattivato, la sedia si muove indipendentemente da qualunque traccia individui sul pavimento. Se il sistema viene invece attivato, la sedia seguirà la traccia, ignorando però eventuali incroci. Nel caso in cui si desideri avere possibilità di scelta davanti ad un bivio, si utilizza il comando: in questo caso l’utente sceglierà la strada da seguire usando il pulsante adatto (destra, sinistra, avanti, indietro). DESCRIZIONE PROGETTO: La parte principale di questo progetto consiste nella costruzione di un robot capace di seguire una linea scura tracciata sul pavimento (line-follower). Il corpo del robot è una macchinetta giocattolo radiocomandata, la quale è stata modificata per poter fissare le schede di controllo, i sensori, il servo e le batterie. I tre sensori che rilevano la posizione della linea, e di conseguenza fanno sterzare la macchinetta se necessario, sono stati posizionati sulla parte anteriore della macchina ad una distanza di circa 0.5 cm da terra per una ottimale lettura, come indicato sul data-sheet. Questa tipologia di sensori installati sfrutta la variazione di intensità della luce, una caratteristica molto comune e facilmente rilevabile nei fenomeni luminosi. Il fascio di luce emesso dai diodi(LED) viene riflesso sulla superficie sottostante ed in seguito catturato dal fotodiodo corrispondente. I problemi che possono sorgere con questo tipo di sensori sono legati a fattori come il tempo o la temperatura che alterano le emissioni della sorgente, quindi i dati ricevuti. METODI DI GUIDA: Quando all'inizio abbiamo deciso di costruire il line follower ci siamo trovati davanti ad una scelta sul tipo di guida da utilizzare per il nostro inseguitore. Le possibili scelte potevano essere: Guida per mezzo induttivo. Consiste in un cavo collocato sul pavimento e una corrente elettrica con una frequenza AC fissata, usata per generare un campo magnetico. Quest’ultimo viene rilevato da due spirali induttive che generano, allontanandosi dal campo, una corrente differenziale utilizzata per far sì che la guida si mantenga sulla giusta rotta. Dal momento che la corrente usata può avere diverse frequenze determinanti diverse direzioni,vari veicoli possono seguire traiettorie simili e sovrapposte in alcune parti. --Vantaggi A. Maggiore affidabilità rispetto ai sistemi ottici. B. Codici magnetici possono essere usati per differenti rotte senza alcuna confusione. C. Poiché non vi è confusione tra le rotte, molti veicoli possono seguire traiettorie diverse. --Svantaggi A. I cavi sono fissi e potrebbe essere dispendioso muoverli. B. Alimentare i cavi induttivi è costoso. C. Possono esserci disturbi causati da rumore elettromagnetico. Guida per mezzo ottico. Questa tipologia di guida utilizza la luce riflessa come mezzo di localizzazione. I metodi principali consistono nell’utilizzare una linea bianca o riflettente, posta sul pavimento, lungo la rotta che il veicolo deve seguire. I sensori ottici vengono utilizzati per la rilevazione della luce riflessa. Una sorgente di luce, posta vicino al rilevatore, è puntata verso il pavimento. Quando il sensore nota dei cambiamenti nella quantità di luce riflessa, essi vengono sfruttati per seguire la linea. La precisione nella rilevazione dipende dallo sfondo del percorso da seguire. --Vantaggi A. Facile collocamento delle piste. B. Metodo utilizzabile in zone affette da rumore elettromagnetico. C. Le tracce non richiedono alimentazione e il metodo usato per la loro deposizione e successivo spostamento è molto economico. --Svantaggi A. Le tracce devono essere pulite. B. Gli ostacoli devono essere rimossi dalla traiettoria. C. Si può verificare confusione relativamente a percorsi diversi. Considerando i vantaggi/svantaggi dei due metodi alla fine abbiamo optato per l'utilizzo del metodo ottico, usando dei sensori a luce infrarossa risolvendo cosi anche un eventuale problema legato alla luminosità dell’ambiente in cui si trova la macchina. SCHEMA A BLOCCHI: Con questo progetto abbiamo voluto realizzare un robot su quattro ruote di supporto in grado di seguire una linea posta a terra e eventualmente si fermi se trova degli ostacoli lungo il suo percorso. Per creare questo progetto ci siamo avvalsi di varie applicazioni e circuiti studiati e analizzati durante il percorso formativo intrapreso durante gli anni scolastici. ALIMENTAZIONE CIRCUITO In questo progetto è stato necessario fornire tre tensioni diverse per alimentare l'intero circuito. La tensione che serve per alimentare il motore in corrente continua che richiede almeno 10V di alimentazione ,la tensione per i sensori, il servomotore e i vari integrati che richiedono un’alimentazione di 5V mentre al PIC occorrono 3.3V. Dato che si tratta di un robot, come alimentazione non potevamo mettere tre batterie con le tre alimentazioni differenti. Perciò abbiamo usato otto batterie da 1.5V (quindi 8x1.5V=12V) e abbiamo fornito tramite gli integrati LM1117TO220 e 7805/TO un’alimentazione di 5V e 3.3V per il resto del circuito. Abbiamo utilizzato l’integrato LM7805 per abbassare e stabilizzare la tensione a 5v, questo integrato infatti tende a mantenere costante la tensione d’uscita sul carico al variare, entro certi limiti, della tensione d’ingresso e della corrente. Infatti la tensione d’ingresso deve essere superiore ai 5-6 volt per garantire il corretto funzionamento della stabilizzazione. Poi abbiamo utilizzato l'integrato LM1117TO220 per portare la tensione dai 5V, precedentemente stabilizzati, ai 3.3V che servono per alimentare il PIC. Abbiamo utilizzato un altro integrato LM7805 per stabilizzare la tensione a 5V solo per il servomotore,essendo che quest'ultimo consuma molta corrente e quindi abbiamo preferito separare le alimentazioni dai sensori a quella del servo. SENSORI Per realizzare questo progetto abbiamo utilizzato due tipi di sensori: -i sensori di luce che servono per rilevare la linea -i sensori di prossimità che servono per rilevare eventuali ostacoli Sensori di luce : Questo blocco permette al robot di seguire la linea. È formato da tre sensori ad infrarossi, ed ognuno dei quali è formato da due componenti, uno diodo(LED) che emette un fascio di luce infrarosso e un fotodiodo che cattura la luce riflessa. Questo sensore è dotato di un filtro ottico per ridurre le interferenze della luce ambientale. In questo progetto abbiamo utilizzato tre sensori di luce: un sensore per rilevare la parte destra della linea, un sensore per rilevare la parte centrale della linea, e un’altro per rilevare la parte sinistra della linea. Nel caso in cui sia attivo solo il sensore centrale lo sterzo è dritto, altrimenti se uno dei altri sensori è attivo lo sterzo gira dalla parte del sensore attivo. Il sensore che abbiamo scelto è il OPB700-4. Questi sensori sono posti a una distanza pari a 5 mm da terra perche questa è la distanza ottimale di lettura. In questa maniera il sensore rileverà il riflesso generato dal pavimento, e se questo riflesso è massimo significa che siamo su una superficie bianca, se invece è nullo (o molto basso) siamo su una superficie nera. In tal modo possiamo rilevare una linea scura su una pavimentazione chiara (non necessariamente bianca) oppure una linea chiara su una pavimentazione scura. Questo sensore ha bisogno di essere alimentato a 5 volt, e la differenza che rileviamo in uscita dal bianco al nero è di circa 3 volt. Questi valori analogici che troviamo in uscita del sensore vengono poi mandati al microcontrollore che grazie al modulo interno A/D riesce a convertire e capire se il sensore legge bianco o nero. Sensore di prossimità: Il sensore di prossimità serve per rilevare eventuali ostacoli durante il percorso. Questo Sensore restituisce una lettura analogica, il valore di tensione che possiamo prelevare in uscita varia in maniera lineare con il diminuire della distanza dell’oggetto rilevato. Il modello da noi usato è il Sharp GP2Y0A21YK. Questo modello è in grado di rilevare oggetti posti da 4 a 50 cm di distanza. Questo riportato di seguito è un grafico che ci fa capire come varia la tensione in base alla distanza dal oggetto riflettente. Anche in questo caso l'uscita analogica del sensore viene convertita e gestita dal microcontrollore. MOTORE IN CORRENTE CONTINUA Il motore a corrente continua, chiamato così perché per funzionare deve essere alimentato con tensione e corrente costante, è costituito, come gli altri motori da due parti, il rotore e lo statore. Questo tipo di motore può avere due tipi di statore (Statore a magneti permanenti E Statore alimentato). Lo statore ha lo scopo di generare un campo magnetico costante. Con il primo tipo di statore il valore del campo magnetico generato non è modificabile, in quanto sono due magneti a generarlo. Invece la seconda tipologia di statore è in grado di generare campi magnetici a valori regolabili. I valori desiderati di campo magnetico possono essere generati variando la tensione ai capi del circuito statorico. Il circuito statorico necessita anch’esso di una tensione e corrente costante ma solo perché deve generare come detto un campo magnetico costante. Il circuito statorico per poter generare il campo magnetico desiderato è avvolto su blocchi di materiale ferromagnetico. CONTROLLI PER IL MOTORE A C.C. Controllo motori On-Off I motori DC possono essere controllati in vari modi: il pilotaggio più semplice, è quello ON/OFF, che però permette di fare andare il motore solo in un verso. Questo controllo può essere implementato con un interruttore (es. un mos o un transistor) il quale quando è attivo fa passare tutta la tensione, invece quando è spento la tensione non passa. In base al tempo in cui l'interruttore rimane spento o acceso possiamo gestire la velocità con cui va il motore. Viene usato anche un diodo di ricircolo necessario per evitare danni al resto del circuito (il motore è un carico con una componente induttiva). Il ponte ad H Visto che nel caso del controllo ON/OFF non è possibile far girare il motore in entrambi i versi di rotazione, si usa il ponte ad H. Infatti per far girare il motore nel verso opposto è necessario invertire il segno della corrente che passa all’interno del motore stesso (e nel caso del controllo ON/OFF non si può), per far ciò si usa un circuito chiamato ponte ad H il quale è costituito da quattro interruttori(transistor) e permette il funzionamento bidirezionale del motore in presenza di una alimentazione singola. Il nome deriva dalla somiglianza del circuito alla lettera maiuscola H. Lo schema di fianco mostra come i quattro transistor sono connessi. In genere i due transistor inferiori sono detti di sink perché assorbono la corrente proveniente dal motore; i due transistor connessi direttamente alla Vcc sono detti di source. A seconda di quali transistor sono attivi, abbiamo diversi possibili percorsi per la corrente, illustrati qui affianco. LINEA VERDE: Se è attivo un transistor di sink ed uno di source appartenenti a lati opposti del ponte, abbiano passaggio di corrente nel motore, il quale va in rotazione; per ottenere la rotazione opposta è necessario attivare la coppia simmetrica. LINEA ROSSA: Se è attivo un transistor di sink ed uno di source appartenenti allo stesso lato del ponte abbiamo un corto circuito. Inutile dire che questa situazione deve essere evitata nel modo piu assoluto in quanto porterebbe alla distruzione del ponte o dell'alimentazione in tempi brevissimi. LINEA BLU: Se tutti i transistor sono spenti non abbiamo maglie in cui possa passare la corrente fornita dall'alimentatore. Quella indicata e la via che l'eventuale corrente accumulata dall'induttore percorre: si tratta ovviamente di un fenomeno temporaneo ma che deve essere previsto. Terminata la scarica dell'induttore non si ha piu passaggio di corrente e se il motore era precedentemente in moto si arresta lentamente a causa degli attriti meccanici. LINEA GIALLA: Se è attivo almeno uno dei transistor di source e nessuno di quelli di sink non vi sono percorsi in cui passa la corrente fornita dall'alimentatore. La differenza rispetto alla situazione precedente è il sostanziale cortocircuito che si viene a creare ai capi del motore, infatti la tensione ai capi del motore e pari alla tensione diretta del diodo sommata a quella di conduzione del transistor. L'effetto è una vigorosa azione frenante causata dalla presenza del generatore equivalente Struttura Ponte H Tale integrato è costituito da quattro mezzi ponti H ognuno dei quali è costituito da due transistor e da una logica che li comanda in modo da accenderne solo uno alla volta: quando il transistor superiore di un mezzo ponte è in conduzione quello inferiore sarà necessariamente spento e viceversa. E’ inoltre presente un comando di Enable che permette di inibire il funzionamento di una coppia di mezzi ponti. Ricapitolando, per ognuno dei due ponti presenti nell’integrato abbiamo a disposizione due ingressi di controllo per permettere il passaggio di corrente in un verso e un ingresso di Enable per accendere e spegnere il ponte. TEORIA SUL PWM Un segnale PWM (Pulse Width Modulation ovvero modulazione a variazione della larghezza d’impulso) è un’ onda quadra di dutycycle variabile che permette di controllare l’assorbimento (la potenza assorbita) di un carico elettrico (nel nostro caso il motore), variando il dutycycle. Duty Cycle Un segnale PWM è caratterizzato dalla frequenza (fissa) e dal duty cycle (variabile); il duty cycle è il rapporto tra il tempo in cui l’onda assume valore alto e il periodo T (l’inverso della frequenza: T=1/f) ne segue che un duty cycle del 50% corrisponde ad un’onda quadra che assume valore alto per il 50% del tempo, un duty cycle del 100% corrisponde ad un segnale sempre alto e un duty cycle dello 0% ad un segnale sempre basso. L’onda rettangolare in uscita da questo stadio è il segnale con cui vengono effettivamente pilotati gli switch (MOSFET) del convertitore di potenza. Questa tecnica permette di modificare la velocità pur assicurando un rendimento energetico elevato. Il circuito è lo stesso utilizzato nel funzionamento ON-OFF, già descritto sopra. L’ idea è però quella di pilotare la base del transistor con un’ onda quadra: se la commutazione è piuttosto frequente (qualche KHz), a causa del comportamento da induttore, la corrente media è sostanzialmente costante e proporzionale al duty cycle del segnale sulla base del MOS. COME APPPLICARE IL PWM Ora è necessario capire come applicare il segnale PWM e il verso di rotazione per controllare il motore. Sign-Magnitude PWM Come è possibile vedere dallo schema che segue, il pilotaggio SM (sign-magnitude) consiste nell'inviare il segnale PWM all'ingresso del pin di enable del ponte e di comandare la direzione di rotazione del motore tramite i due ingressi di controllo del ponte. Tali due ingressi devono essere comandati da segnali invertiti, in questo modo si riduce anche il numero di pin necessari per il controllo. Per il controllo SM sono necessari quindi due segnali: il primo è un'onda quadra di duty cycle variabile tra 0 e 100% che stabilisce la velocità di rotazione, il secondo è un segnale costante che determina il verso di rotazione(segnale basso rotazione in un verso, segnale alto rotazione nell'altro verso). Locked Anti-phase PWM Il controllo LAP (locked anti-phase) si basa sulla stessa configurazione circuitale del controllo SM tuttavia i segnali di comandi sono applicati in modo diverso, come è possibile vedere nella seguente figura: In questo caso il segnale PWM viene messo in ingresso all'invertitore in modo da avere ai due lati opposti del ponte due segnali invertiti tra loro; agendo sull'enable è possibile spegnere il rispettivo ponte. Per il controllo LAP può bastare anche solo un segnale di comando(l'enable può essere fissato alto se non necessario) infatti l'onda quadra stabilisce sia la velocità che il verso di rotazione nel seguente modo: • Duty cycle a 0 : rotazione alla massima velocità in un verso • Duty cycle al 50%: motore fermo • Duty cycle al 100%: rotazione alla massima velocità nell'altro verso SCHEMA DI PILOTAGGIO DEL MOTORE Nel nostro caso, dato che non ci serve l’inversione di marcia, abbiamo deciso di scegliere il pilotaggio ON-OFF realizzato con un driver di potenza e un mosfet. Per regolare la velocità abbiamo pilotato il transistor con la tecnica del PWM: Quindi per comandare il motore al massimo della velocità basta dare alla base transistor un PWM con duty cycle al 100% (e per fermarlo al 0%). Lo schema sopra riportato è lo schema con il quale pilotiamo il motore. L'integrato IR2108 serve per moltiplicare i due segnali di PwM bufferati(i due segnali PWM sono in pratica lo stesso segnale preso due volte), e quindi fornire una tensione in ingresso da 0 a 10 volt. Il segnale poi aziona il mosfet il quale aziona il motore, con la tecnica ON/OFF mostrata in precedenza. Il grafico riportato ci mostra come le uscite (HO e LO) variano a seconda degli ingessi (HIN e LIN), l’integrato quindi fa l’operazione di AND (moltiplicazione tra i due segnali d’ingresso) per l’uscita HO mentre di NAND per l’uscita LO. Quindi per avere il PWM che varia da 0 a 10V, dobbiamo mettere lo stesso segnale da entrambi gli ingressi. IL DIODO DI RICIRCOLO L' avvolgimento del motore e sostanzialmente un induttore, cioè un oggetto che tende a mantenere costante la corrente che in esso scorre. Quando il transistor rappresentato nello schema precedente si chiude, la corrente raggiunge il valore a regime in un certo tempo, secondo una curva esponenziale dipendente dal rapporto di La ed Ra del circuito equivalente (del motore). Questo fatto non causa, in prima approssimazione, particolari problemi. Quando un transistor si apre, la corrente istantaneamente dovrebbe andare a zero; l'induttore tende pero ad impedire questa rapida diminuzione e per fare questo tende a far salire la tensione sul collettore del transistor (il transistor improvvisamente diventa una resistenza molto elevata in cui l'induttore tenta di far passare una corrente: per la legge di ohm, la tensione deve salire). La tensione arriva facilmente a centinaia di volt, danneggiando il transistor stesso. Tale tensione e spesso chiamata "di fly-back". Per evitare questo fenomeno distruttivo viene inserito in parallelo alla bobina del motore un diodo che fornisce alla corrente una via alternativa a quella del transistor nel momento in cui questo si apre. Nello schema è rappresentata a sinistra la situazione in cui il transistor e in conduzione (la corrente attraversa l'avvolgimento del motore, rappresentato dal solo induttore, ed il transistor; nel diodo non passa corrente in quanto polarizzato inversamente). A destra invece l'andamento della corrente subito dopo l'apertura del transistor: la stessa corrente che prima attraversava il transistor ora passa nel diodo. Ovviamente quest'ultima situazione si esaurisce abbastanza rapidamente, mancando generatori in grado di mantenere nel tempo il passaggio di corrente. Questo tempo e legato al rapporto tra l'induttanza e la resistenza equivalente del motore e, in situazioni tipiche, e dell'ordine delle decine di millisecondi. I diodi da utilizzare i queste applicazioni devono avere due caratteristiche fondamentali: · Essere veloci, cioè essere capaci di passare in poco tempo dalla condizione di non passaggio di corrente a quella di conduzione e viceversa. In genere sono richiesti tempi di intervento dell'ordine delle decine di nanosecondi. · Essere capaci di gestire correnti elevate in quanto al momento dello spegnimento tutta la corrente del motore, in genere ampere, passa nei diodi. SERVOMOTORE Nella robotica per gli azionamenti, sono molto utilizzati i servomotori. Di solito questi si presentano come piccoli contenitori da cui fuoriesce un perno in grado di ruotare in un angolo compreso tra 0 e 180° mantenendo stabilmente la posizione raggiunta. L'albero del motore di un servo R/C viene posizionato utilizzando una tecnica PWM. In particolare, il circuito di controllo risponde a un segnale digitale i cui impulsi hanno una durata variabile da circa 1 ms a circa 2 ms. La durata esatta di un impulso, stabilisce la posizione del servo. Nel nostro progetto il servomotore ha la funzione di uno sterzo per la nostra macchinetta, viene controllato come già detto prima con la tecnica del PWM e anche se è un motore non ha bisogno di una sua particolare scheda di pilotaggio, ma viene comandato direttamente dal pic. Il microcontrollore dsPIC33FJ128MC706A: Il Microcontrollore che abbiamo utilizzato nel nostro progetto è il dspic33fj128mc706a, un pic che ha 64 porte e con il quale è stato possibile gestire tutti i processi della nostra macchinetta. Come già è stato detto in precedenza con questo pic abbiamo gestito il motore e il servomotore con il modulo CCP, e siamo riusciti a convertire e quindi di conseguenza gestire i dati arrivanti dai sensori con il modulo adc presente internamente al pic. Scheda di gestione Questa scheda è il vero cuore del robot, in questa scheda verrà inserito il microcontrollore dsPIC33FJ128MC706A. La quale è stata munita di due pulsanti uno che serve a far partire la macchinetta e l’altro per fermarla. Per spiegare il funzionamento di questa scheda è necessario suddividerla in ulteriori blocchi. Il pic è la parte centrale di questa scheda, infatti è quello che gestisce tutto. Al pic arrivano tutti i dati dei sensori e in base ai dati in arrivo il pic grazie al programma che abbiamo formulato gestisce il servo e la scheda di potenza del motore. Per poter controllare la scheda di potenza e il servo è stato necessario inserire un integrato di buffer non invertenti, per portare le tensioni di picco dei segnali PWM da 0÷3.3V a 0÷5V, dato che il nostro PIC da in uscita dei segnali che variano da 0 a 3.3V e quindi non sarebbe stato molto funzionale fornire tale tensione direttamente ai vari componenti inoltre cosi se per qualche motivo ci fossero errori si danneggerebbe il buffer e non il PIC. Per poter programmare il pic abbiamo usato il picit3 che funziona da interfaccia tra lo stesso pic e il computer. Visto che prima abbiamo spiegato come il pic fa a controllare e gestire il motore e lo servo, grazie alla tecnica del pwm, adesso mostriamo come lo stesso pic faccia a convertire tutti i segnali analogici in arrivo dai sensori. CONVERTITORE A/D Analog to Digital Converter (ADC), in italiano convertitore analogico-digitale, è un componente elettronico in grado di convertire una grandezza continua (ad es. una tensione) in una serie di valori discreti. La risoluzione di un convertitore indica il numero di valori discreti che può produrre. È usualmente espressa in bit. Per esempio, un ADC che codifica un ingresso analogico in 256 livelli discreti ha una risoluzione di 8 bit, essendo 2^8 = 256. La risoluzione può anche essere definita elettricamente, ed espressa in volt. La risoluzione in volt di un ADC è uguale alla minima differenza di potenziale tra due segnali che vengono codificati con due livelli distinti adiacenti. Nella pratica, la risoluzione di un convertitore è limitata dal rapporto segnale/rumore (S/N ratio) del segnale in questione. Se è presente troppo rumore all’ingresso analogico, sarà impossibile convertire con accuratezza oltre un certo numero di bit di risoluzione. Anche se l’ADC produrrà un valore, questo non sarà accurato essendo i bit meno significativi funzione del rumore e non del segnale. Ma nel nostro caso i rumori sono limitati e non influiscono la lettura dei valori. In elettronica ci sono cinque modi per implementare un adc: -ADC a conversione diretta(FLASH/HALFFLASH) -ADC ad approssimazioni successive -ADC ad inseguimento -ADC a gradinata -ADC a pipeline Abbiamo deciso di mostrare il funzionamento di una adc ad approssimazioni successive visto che è quello più comune ed è anche quello usato nei pic. Un ADC ad approssimazioni successive (SAR Successive Approximation Register) usa un comparatore e un convertitore digitale-analogico, ad ogni passaggio l'ADC prova a impostare un bit, partendo dal MSB(Most Significant Bit, bit con peso maggiore) e usando il DAC confronta il segnale campionato con il segnale di ingresso in feedback. Questo convertitore individua un bit ad ogni iterazione in una sorta di ricerca binaria e la risoluzione è limitata solo dalle esigenze di samplerate e dal rumore in ingresso. Noi nel nostro caso abbiamo utilizzato 5 porte analogiche del pic per convertire i tre segnali analogici del inseguitore di linea, il segnale analogico del sensore di prossimità e il segnale analogico che arriva dalle batterie in modo da poter sempre controllare la tensione con la quale alimentiamo l'intero circuito. DISPLAY Abbiamo utilizzato un display LCD 16*4, con lo schema elettrico uguale a quello che c'è in figura. Abbiamo utilizzato un trimmer da 10k per modificare l'intensità delle scritte. Abbiamo collegato E/RW/RS al pic per gestire il Display, e invece i dati vengono inviati dal pic sul D4/D5/D6/D7 e quindi abbiamo deciso di controllare il display con solo 4 bit. Per facilitarci con la programmazione del PIC abbiamo usato un display nel quale scriviamo i valori letti dai sensori, quindi per capire come variano i vari segnali forniti dai sensori quando cambia la superficie, quando ci si avvicina ad un’ ostacolo e quando si scaricano le batterie (ovvero per diagnostica). Sul display abbiamo messo anche il duty-cycle che forniamo al motore per capire anche la velocità con la quale sta andando la macchina. Algoritmo di gestione La parte più difficoltosa di questo progetto è stata quella di formulare un algoritmo in grado di gestire i sensori, in quanto era la prima volta che ci confrontavamo con la gestione di questo tipo di sensori. La logica per gestire i sensori è abbastanza semplice, ma con il passare del tempo ci imbattevamo sempre in problemi nuovi dovuti a una varietà di motivi, come ad esempio la lentezza dei sensori a rispondere al cambiamento e la velocità troppo elevata del motore e il conseguente ritardo dello sterzo a girare facevano perdere la linea alla macchinetta. Quindi abbiamo deciso di riportare il programma definitivo della gestione dei sensori, tralasciando quelli della gestione del ADC/PWM/DISPLAY che sono simili per quasi tutte le applicazioni del pic. if ((PUSH_2) || (ProxiBackward > 1000)) statoMov=0; else { MediaLight=(float) LightCenter + (float) LightLeft + (float) LightLeft; MediaLight/=3; t1=(float) LightCenter / MediaLight; t2=(float) LightLeft / MediaLight; t3=(float) LightRight / MediaLight; DiffLightCL=(int) ((t1-t2) * MediaLight); DiffLightCR=(int) ((t1-t3) * MediaLight); DiffLightLR=(int) ((t2-t3) * MediaLight); Soglia=(int) (MediaLight / 4); if (abs(DiffLightCL) > Soglia) { if (DiffLightCL < 0) StatoSensCL=2; // CENTRO SUL NERO SINISTRO SUL BIANCO else StatoSensCL=1; // CENTRO SUL BIANCO SINISTRO SUL NERO } else StatoSensCL=0; // PIU' O MENU UGUALI if (abs(DiffLightCR) > Soglia) { if (DiffLightCR < 0) StatoSensCR=2; // CENTRO SUL NERO DESTRO SUL BIANCO else StatoSensCR=1; // CENTRO SUL BIANCO DESTRO SUL NERO } else StatoSensCR=0; // PIU' O MENU UGUALI if (abs(DiffLightLR) > Soglia) { if (DiffLightLR < 0) StatoSensLR=2; // DESTRO SUL NERO SINISTRO SUL BIANCO else StatoSensLR=1; // DESTRO SUL BIANCO SINISTRO SUL NERO } else StatoSensLR=0; // PIU' O MENU UGUALI StatoSensor=0; if ((StatoSensCL==2) && (StatoSensLR==0) && (StatoSensCR==2)) // CENTRATO { SetMotor(MOTOR_OFF); // STERZO AL CENTRO OC1RS=SPEED_MOV; LED_DX_ON; LED_SX_ON; } if ((StatoSensCL==0) && (StatoSensLR==0) && (StatoSensCR==0)) // TUTTO SUL BIANCO -- STERZA A ..... { //SetMotor(MOTOR_OFF); OC1RS=SPEED_MOV_BOOST; LED_DX_OFF; LED_SX_OFF; // if (!timer[TIM_MOTOFF]) // statoMov=0; } if ((StatoSensCL==1) && (StatoSensLR==2) && (StatoSensCR==0)) // -- STERZA A DX { SetMotor(MOTOR_MIN); OC1RS=SPEED_MOV_BOOST; LED_DX_OFF; LED_SX_ON; } if ((StatoSensCL==0) && (StatoSensLR==1) && (StatoSensCR==1)) // STERZA A SX { SetMotor(MOTOR_MAX); OC1RS=SPEED_MOV_BOOST; LED_DX_ON; LED_SX_OFF; } } CONCLUSIONI E OSSERVAZIONI: Costruire il robot non è stato molto difficile ma è stato molto interessante, il problema più grande lo abbiamo riscontrato nella parte della scheda di potenza e nella realizzazione del software che gestisce l’intero robot. Inoltre la progettazione e la ricerca guasti ci hanno fornito un metodo di approccio ai problemi modulare e funzionale. Il risultato è buono, il robot segue con una buona precisione la linea tracciata e rileva gli ostacoli e riesce a fermarsi, senza difficoltà, prima di urtarli. Purtroppo il raggio di curvatura del robot non è molto ampio. FUTURISMO E IL MITO DELLA MACCHINA Con il termine "Futurismo" si indica un movimento artistico-letterario d’avanguardia, fondato da Filippo Tommaso Marinetti. Il Manifesto del Futurismo è stato pubblicato sul quotidiano francese “Le Figaro” nel 1909. Successivamente sono stati pubblicati altri manifesti, che definivano i caratteri generali delle varie arti: letteratura, teatro, pittura, scultura, architettura e musica. I punti principali del Manifesto del Futurismo, a cui tutti gli intellettuali devono adeguarsi, sono: - proiettarsi verso il futuro e verso il progresso; - cantare l’audacia, il pericolo, la velocità, il movimento, la dinamicità e la ribellione; - opporsi alla cultura Ottocentesca, immobile e assonnante; - considerare la lotta e la guerra come sola forma di igiene del mondo; - provare disprezzo nei confronti della donna, considerata portatrice di valori deboli ed ispiratrice della poesia sentimentale; - distruggere le biblioteche ed i musei, colpevoli di produrre una cultura stereotipata. I futuristi sono contrari alla realizzazione di opere artistiche in serie e arrivano a rompere il canale di comunicazione col pubblico: scrivono opere illeggibili e incomprensibili. Nel 1912 viene pubblicato il Manifesto letterario Futurista, nel quale i futuristi spiegarono come si sarebbe concretizzata la rottura del canale di comunicazione col pubblico: distruzione della sintassi, verbo all’infinito, disposizione di sostantivi automatica, distruzione dell’Io e della psicologia, abolizione di avverbio e aggettivo, abolizione della punteggiatura, testo scritto in orizzontale, verticale, e diagonale, introduzione di peso, odore e rumore nella letteratura e dell’immaginazione senza fili. Il futurismo contrappone al passato la moderna civiltà della macchina, la bellezza e l’ebbrezza della velocità. Si rifiuta l’immobilità pensosa, l’estasi ed il sonno del passato e si esalta l’aggressività, l’insonnia febbrile, il passo di corsa, il salto mortale, lo schiaffo ed il pugno, la guerra, il patriottismo e le belle idee per cui si muore. In Italia il Futurismo si è orientato sempre di più verso la destra in senso nazionalista e interventista, fino a sfociare, dopo la guerra, nel Fascismo e a diventare l’arte ufficiale del regime. Uno dei principali aspetti del Futurismo è proprio il mito della macchina. La letteratura italiana era rimasta legata per lungo tempo, a causa dei ritardi dello sviluppo economico e sociale, ad una realtà contadina. All'inizio l'industrializzazione e i primi segnali della Rivoluzione industriale causavano reazioni di sconcerto anche tra gli intellettuali. Giosuè Carducci invece, nell'Inno a Satana del 1863, aveva celebrato l'arrivo della locomotiva, come un segnale del trionfo della scienza e del libero pensiero. A poco a poco anche in Italia iniziò ad avvertirsi l'esigenza di una cultura industriale. La macchina diventa così un mito nel quale si raccolgono le aspirazioni della modernità, del rinnovamento e delle trasformazioni sociali. Nella letteratura l'avvento della macchina assume il valore di un simbolo, capace di alimentare le fantasie dell'immaginario collettivo. L'esaltazione della macchina diventa una sorta di religione: la macchina si trasforma nel mezzo e nel fine della creatività artistica e della sensibilità estetica. La macchina diventa una metafora dell'esistenza ed offre l'illusione di un fondamento concreto e oggettivo in una visione del mondo per molti aspetti astratta, delirante e irrazionale. Poeti e artisti futuristi organizzavano le “serate futuriste”, durante le quali venivano recitate poesie ed effettuate rappresentazioni teatrali. Queste serate si concludevano spesso con lancio di ortaggi da parte del pubblico. Nel campo letterario tra i futuristi si ricordano come scrittori Filippo Tomasso Marinetti, Luciano Fòlgore, Gian Piero Lucini; come poeti Aldo Palazzeschi, Corrado Govoni, Giovanni Papini; nelle arti figurative Carlo Carrà, Gino Severini, Umberto Boccioni. Il Futurismo ha influito su altri movimenti d’avanguardia del ‘900 ed ha promosso la dissoluzione dei vecchi contenuti e delle vecchie forme per giungere ad una poesia e ad un’arte nuova, più adeguata ai mutamenti dei tempi e dei costumi.