Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
tecniche
AeronauticaAgricoltura agrariaArchitetturaAutomobileCostruzione
Demografia urbanisticaElettronica elettricitaForensicsIngegneria tecnicoVela


AppuntiMania.com » Tecniche » Appunti di Ingegneria tecnico » Assemblaggio di componenti e sviluppo software per un robot cingolato dotato di sensori infrarossi

Assemblaggio di componenti e sviluppo software per un robot cingolato dotato di sensori infrarossi




Visite: 2539Gradito:apreciate 5-stela [ Grande appunti ]
Leggi anche appunti:

Popper e il falsificazionismo


Popper e il falsificazionismo   Sia la Teoria della Relatività nel suo

Numero di giri


Numero di giri La potenza massima in un motore è direttamente proporzionale al

Tecnica TDM e campionamento


Tecnica TDM e campionamento Nelle tecniche AM e FM i segnali analogici in ricezione
immagine di categoria

Scarica gratis Assemblaggio di componenti e sviluppo software per un robot cingolato dotato di sensori infrarossi

Istituto Tecnico Industriale "Leonardo Da Vinci"

Anno scolastico 2006/2007 - Tesina per l'esame di stato

Matteo Agostinelli







Assemblaggio di

componenti e sviluppo software per un robot cingolato dotato di sensori infrarossi.





Introduzione


La tesi proposta consiste nello sviluppo di un robot il quale sarà capace di muoversi autonomamente all'interno di un piano senza cadere oltre i bordi utilizzando dei sensori ad infrarosso.


Partendo da un'analisi del robot assemblato e delle problematiche connesse al controllo del piano di appoggio, si giunge alle scelte nello sviluppo del software di controllo. L'algoritmo è stato studiato a partire da un modello matematico semplificato del robot e successivamente affinato grazie a prove sperimentali.

Si cercherà quindi una taratura che punti a massimizzare la velocità dei movimenti ed al tempo stesso riduca al minimo il rischio di caduta accidentale del robot.





Il microprocessore riceve in input i dati analogici dei sensori IR ed attua, attraverso i sistemi di controllo dei motori, dei movimenti di risposta.


Capitolo 1 - Elettronica e programmazione


In questo capitolo analizzeremo parte dell'elettronica presente sul robot (quella utilizzata per realizzare il riconoscimento del piano) a cui sono connesse delle informazioni sulle possibilità di programmazione. Il robot dispone di una scheda interamente progettata da noi su cui è presente la sezione di alimentazione (1), il microcontrollore vero e proprio (ATMEGA 8535) che servirà per l'esecuzione del software utente (2) e una parte per la comunicazione con il PC tramite porta seriale(3) e ISP (4). Infine sono presenti delle sezioni per:

  • Accesso alla porta C (per adesso non utilizzata) (5)
  • Sensori e gli emettitori linea (6)
  • Motori (7)
  • Baffo palla (per adesso non utilizzato) (8)
  • Sensori per la palla (per adesso non utilizzato) (9)
  • Baffi posteriori (per adesso non utilizzato) (10)


1.1 Scheda madre: caratteristiche e potenzialità

La struttura della scheda costruita può essere riassunta in 4 punti principali:

  1. La sezione di alimentazione
  2. Il microcontrollore ATMEGA 8535 (per l'elaborazione dei dati e l'esecuzione del software)
  3. Comunicazione con il pc
  4. Slot di collegamento

1.1.1 Sezione di alimentazione

La scheda è stata progettata per essere alimentata esclusivamente in tensione continua a 6 volt. L'alimentazione proviene da un pacco di 5 batterie (1,2 V ciascuna) con capacità di 1100 mAh.

Dalla batteria sono ricavate le due linee di alimentazione: 5VA e 5VD.



Come è  possibile vedere nello schema, la tensione proveniente dal jack di connessione viene ridotta tramite il diodo D1, che protegge anche dal collegamento errato della batteria. Un ulteriore riduzione è ottenuta tramite il diodo D2. Come si può notare, la tensione 5VA è prelevata subito dopo il diodo D1. Questa tensione è utilizzata per l'alimentazione dei motori. La tensione 5VD invece viene utilizzata per alimentare tutti gli altri componenti del circuito.


1.1.2 Il microcontrollore ATMEGA 8535 (elaborazione dati ed esecuzione software)

L'elaborazione del software utente è affidata ad un microcontrollore della famiglia ATMEGA, in particolare al modello 8535. Molto diffusi per i costi ridotti e le buone capacità di calcolo ed interfacciamento, i microcontrollori presentano in un singolo circuito integrato un microprocessore, dei registri RAM ed EEPROM.

Inoltre sono presenti alcuni registri connessi con dei pin di I/O che permettono l'interfacciamento verso l'esterno.

Per ottenere dei pin di tipo bidirezionale, che possono funzionare sia come Input che come Output (non contemporaneamente), è necessario utilizzare uno schema con registri separati di input ed output e porte TRI-STATE.

Infatti una porta di input non può funzionare contemporaneamente come output, e viceversa. Inoltre, forzando un segnale su una porta di output, si rischia di danneggiarla.













Lo schema generale di un microcontrollore è il seguente:



Il cuore del microcontrollore è una CPU, che preleva le istruzioni presenti nella memoria flash e eeprom. La memoria RAM di lavoro contiene soltanto i dati che risultano separati dal programma. Le periferiche più comuni sono:

  • PIO (Parallel I/O): fornisce un insieme di piedini bidirezionali per il collegamento di dispositivi digitali esterni.
  • UART (Universal Asinchrous Receiver Transmitter): consiste in una porta seriale standard RS232 compatibile.
  • SPI (Seria Peripheral Integral): si tratta di una seriale sincrona (un segnale di clock viene utilizzato per sincronizzare lo scambio di dati tra i due dispositivi).
  • I2C: è una seriale sincrona che funziona con 2 fili, uno per il clock e l'altro bidirezionali. A questo bus è possibile collegare fino a 127 periferiche diverse.
  • Timer: viene utilizzato per creare interrupt periodici oppure per generare un'onda quadra su un piedino del microcontrollore. Il timer è basato su di un contatore che viene incrementato ad ogni colpo di clock della CPU e quando raggiunge un valore prefissato, solitamente, genera l'interrupt oppure inverte lo stato logico di un piedino.
  • PWM (Pulse Width Modulation): periferica basata sul timer che consente di generare un'onda quadra a frequenza fissa e duty cycle variabile. Il duty cicle è la percentuale di tempo che un segnale logico sta in posizione "ON" rispetto al periodo totale dell'onda quadra.
  • USB (Universal Serial Bus): consente il collegamento del microprocessore al PC (nell'ATMEGA 8535 non è presente).
  • EEPROM (Erasable Electrically Programmable Rom): è una memoria non volatile leggibile e scrivibile dal microcontrollore. Può essere utilizzata per salvataggi permanenti di parametri e variabili.
  • COMP (Comparatore): confronta la tensione analogica su due piedini del microcontrollore fornendo 1 logico in uscita se la tensione sul piedino COM+ è maggiore di quella sul piedino COM- e viceversa 0 logico. Può anche generare interrupt in caso di commutazione dello stato.
  • ADC (Analog to Digital Converter): converte una tensione analogica al suo ingresso in un numero intero proporzionale alla tensione analogica.

Vediamo come lavora in particolare l'ATMEGA:


L'ATMEGA 8535 presenta 40 piedini, ognuno con una funzione diversa. Qui sotto sono descritti i più importanti:


VCC: alimentazione


GND: massa


PA0.PA7, PB0.PB7, PC0.PC7, PD0.PD7: sono rispettivamente gli 8 piedini delle porte A, B, C, D. Ogni piedino rappresenta una linea di I/O del microcontrollore.


RESET: attivo a livello basso, provoca il reset del microcontrollore.



Il linguaggio e le regole sintattiche utilizzate per la programmazione sono quelle delle classiche versioni del C per PC. Il linguaggio è compilato, il microcontrollore interroga la memoria flash, da cui preleva il software, ed esegue i comandi richiesti.


1.1.3 Comunicazione con il pc

La comunicazione con il PC ha la funzione di memorizzare nella memoria FLASH i programmi utente. Può essere usata anche per effettuare il debug dei programmi in fase di sviluppo.


La porta parallela del PC è utilizzata per interfacciarsi con il microcontrollore al fine di poter trasferire i programmi nella sua memoria.

La porta seriale del microcontrollore, realizzata con il MAX 232, consente di interfacciare l'ATMEGA8535 con il mondo esterno. Questa porta in particolare consente anche di effettuare il debug dei programmi utente durante la fase di programmazione.


1.1.4 Slot di collegamento

Per facilitare le connessioni sulla scheda sono presenti una moltitudine di slot di espansione (o collegamento) di cui viene mostrata una panoramica in questo paragrafo.


Ogni slot è identificato dalla sigla Ji oppure MGi dove la i serve all'identificazione dello slot.


J1

Attacco per la porta C (non utilizzato)

J2

Attacco per la porta A (non utilizzato)

J3

Cavo per programmatore

J4 - J5

Alimentazione ausiliaria (non utilizzato)

J6

Attacco per la batteria

J7 - J8 - J9

Sensori palla (sinistro, centrale, destro)

J10 - J11 - J13 - J14

Attacchi per sensori e emettitori linea (per rilevare il piano)

J12

Attacco baffo per la palla

J15 - J16

Baffi posteriori

MG1 - MG2

Attacchi per motori destro e sinistro


Per lo schema dettagliato della posizione dei connettori vedere gli schemi a pagina 5 e 6.


1.2 Sensori IR

Naturalmente la scheda necessita di componenti per interagire con il mondo esterno: visto che tali componenti devono essere situati in posti diversi e strategici del robot, non è stato possibile implementarli direttamente all'interno della scheda. Per questo risultano connessi tramite gli slot di collegamento descritti in precedenza.


Il nostro robot utilizza dei sensori IR monoblocco per la rilevazione del piano.

In questo paragrafo verrà effettuata inizialmente una trattazione su questi sensori, in un secondo momento si valuteranno le implementazioni.


Con il termine sensore IR si indica un elemento sensibile alla radiazione nell'intorno della lunghezza d'onda infrarossa. Nel nostro caso si indica il gruppo emettitore + ricevitore.

L'emettitore è generalmente un led realizzato in modo da emettere radiazione infrarossa. Il ricevitore è un fototransistor, ovvero un transistor la cui corrente di collettore dipende dalla quantità di radiazione che lo investe.

Il funzionamento della coppia emettitore / ricevitore è quello di un classico transistor.

Una delle soluzioni per usare questo tipo di sensori è disporre emettitore e ricevitore in linea, in questo modo si ottiene una comunicazione a distanza come avviene nei telecomandi. La soluzione impiegata in questo robot è quella di usare un sensore IR con emettitore e ricevitore integrati e sfruttare le proprietà di riflessione dei materiali; in questo modo è possibile ottenere rilevazioni di prossimità. Nell'esempio proposto di seguito i sensori hanno integrato sia l'emettitore che il ricevitore.

Variando la lontananza del materiale, anche se non varia la quantità di radiazione infrarossa riflessa, si modificherà la zona di massima incidenza. Come mostrato nella figura sottostante.

Se la distanza è nell'intorno dei 3 mm la quasi totalità della radiazione riflessa investe il ricevitore, mentre per valori inferiori o superiori si riduce la quantità che investe direttamente il ricevitore.

L'ultimo fattore da considerare è la riflessione dei materiali. Ogni materiale è caratterizzato da tre coefficienti (riflessione, assorbimento, trasmissione) che ne caratterizzano il comportamento se investiti da radiazione. In generale i corpi di colore nero tendono ad assorbire la maggioranza della radiazione, mentre quelli bianchi tendono a riflettere la quasi totalità della radiazione.

Come per ogni sensore, anche per gli IR la misurazione può essere affetta da disturbi. Nel nostro caso ogni fonte di radiazione infrarossa rappresenta un disturbo.

Per rilevare la presenza del piano di appoggio sono utilizzati 4 sensori IR monoblocco che, tramite degli opportuni supporti, possono essere posti a circa 4 mm dal piano del moto. L'uscita dai sensori viene acquisita come segnale analogico.

Per rilevare lo stato dei sensori in parallelo sono necessari 5 pin (4 per i sensori linea, 1 per gli emettitori linea). Questo vuol dire che i led sono attivi tutti contemporaneamente ed è quindi possibile acquisire dati da più fonti contemporaneamente.

I sensori in questione sono i QRD1114 distribuiti dalla FAIRCHILD




I 4 sensori sono stati posizionati sugli angolo del robot grazie a dei supporti fissati direttamente sul telaio.



I connettori garantiscono il collegamento con il microcontrollore che, al momento della rilevazione di un segnale, fa indietreggiare il robot modificando il verso di rotazione dei motori. Successivamente effettua una manovra di rotazione ed una successiva ripartenza.



Capitolo 2 - Locomozione


La locomozione del robot è ottenuta mediante il doppio motoriduttore Tamiya 70097, che viene distribuito direttamente dalla Tamiya. Il kit contiene due piccoli motori DC che trasmettono il moto a due assi esagonali da 3mm separati. Di seguito è riportato un estratto del datasheet con le caratteristiche salienti:


Caratteristiche Tecniche:


Alimentazione 3Vdc (4.5Max)

Tipo Motore FA-130

Coppia 4.6 gcm

Velocità 13.230 rpm

Corrente 0.5 A

Rapporti 58:1 - 203:1

Dimensioni 75 x 50 x 23 mm


Il comando avviene a mezzo di impulsi di durata variabile dati alla rete di transistor. Nei paragrafi successivi saranno illustrate la struttura dell'apparato motorio e le problematiche legate al controllo ed alla sterzata.


2.1 - Il motore a spazzole in corrente continua

Il classico motore in corrente continua ha una parte che gira, detta rotore (in grigio nelle figure), e una parte che genera un campo magnetico fisso, detta statore (i due magneti colorati). Un interruttore rotante, detto collettore a spazzole (nelle figure l'anello color rame, fissato all'albero rotante del motore, con i due contatti striscianti + e - collegati alla parte ferma), inverte due volte ad ogni giro la direzione della corrente elettrica che percorre i due avvolgimenti, generando un campo magnetico che fa girare il rotore.


Quando la corrente scorre negli avvolgimenti, si genera un campo magnetico intorno al rotore. La parte sinistra del rotore è respinta dal magnete di sinistra ed attirata da quello di destra. Analogamente fa la parte in basso a destra. La coppia genera la rotazione.

Quando il rotore sarà allineato orizzontalmente, il commutatore invertirà la direzione della corrente che scorre negli avvolgimenti: invertendo il campo magnetico, inizierà la seconda parte del giro. E così via..

La velocità di rotazione dipende dai seguenti fattori:

  • Tensione applicata.
  • Corrente assorbita dal rotore.
  • Carico applicato (chiamato coppia di carico).

La coppia generata è proporzionale alla corrente. Il controllo più semplice agisce sulla tensione di alimentazione. Dato che questo tipo di motore può sviluppare una forte coppia a basse velocità di rotazione è stato usato nella trazione elettrica, come, ad esempio, sulle locomotive.


Il motore in corrente continua può essere visto come sistema elettromeccanico, scomponendolo in 2 circuiti, uno elettrico e uno meccanico:


  • Il circuito elettrico può essere descritto utilizzando:
  1. una resistenza Ra, che rappresenta la resistenza alla corrente dei fili che realizzano il circuito
  2. un'induttanza L, che rappresenta la parte del motore che è posta in rotazione
  3. un generatore di tensione Ec (in opposizione al generatore di ingresso Ea) che tiene conto della forza determinata dalla rotazione del rotore, e che vale: Ec = Ke · ω

dove Ke è la costante elettrica del motore e ω la velocità angolare dell'asse.


Le variabili che descrivono il sistema sono la tensione e la corrente elettrica; gli elementi devono essere connessi in serie perché attraversati dalla stessa corrente (corrente di armatura Ia).


Il circuito meccanico è composto da:

un generatore di coppia Cm, il cui valore dipende dalla relazione: Cm = Kt · Ia

dove Kt è la costante meccanica del motore e coincide con il valore di Ke (costante elettrica)

una resistenza meccanica Rm, determinata dall'attrito del motore con l'aria

un momento di inerzia J della massa in rotazione

un momento d'inerzia Jl dovuto al carico


Le variabili che descrivono il sistema sono la coppia e la velocità angolare. Gli elementi possono essere connessi in serie in quanto presentano tutti la stessa velocità angolare ω.


La figura sottostante rappresenta il funzionamento del sistema:


Schema di un motore in corrente continua con carico applicato.



Schema equivalente della parte elettrica

Schema equivalente della parte meccanica


Applicando il principio di Kirchhoff  alle due maglie, cominciando dal punto della maglia che si trova al potenziale di riferimento e procedendo in senso orario otteniamo un sistema di due equazioni che descrive la relazione ingresso-uscita:




In questo modo il sistema "motore in corrente continua" è descritto da un sistema di equazioni differenziali; possiamo dire che il sistema:

È del 2° ordine, in quanto descritto da due variabili di stato (corrente di armatura e velocità angolare)

lineare perché le equazioni differenziali sono combinazione lineare delle variabili e delle derivate prime

È invariante in quanto i coefficienti delle incognite sono delle costanti


L'andamento temporale della velocità angolare ω, una volta fissato l'andamento della tensione di ingresso Ea, può essere conosciuto risolvendo il sistema trovato.


2.2 - Il motoriduttore

Un motoriduttore consiste in una serie di ingranaggi finalizzati ad aumentare la potenza e ridurre sensibilmente i giri del motore a cui viene applicato.

Il motoriduttore usato è assemblabile in due diversi rapporti di riduzione: 58:1 (veloce e poco potente) oppure 203:1 (lento e potente). Questo è possibile scegliendo opportunamente i tipi di ingranaggi tra quelli disponibili. Visto che il nostro interesse era incentrato sulla potenza e non sulla velocità, abbiamo scelto il rapporto 203:1.


2.3 - Regolazione della velocità agendo sul PWM.

La tecnica di controllo basata sulla modulazione a larghezza di impulsi (PWM: pulse width modulation) consente un efficace controllo della velocità del motore.

Quest'ultimo viene alimentato con tensione Va ad andamento rettangolare, con ampiezza Vam, periodo T costante e duty cicle δ variabile (il duty cicle è la percentuale di tempo nella quale un segnale logico si trova a 1, quindi in posizione "ON", rispetto al periodo totale dell'onda quadra).

I motori in continua assestano il loro funzionamento sul valor medio della forma d'onda applicata in ingresso: con il variare del duty cicle del PWM riscontriamo una variazione del valor medio Vam applicato all'ingresso e quindi una corrispondente variazione di velocità.

In altre parole il motore, sia per la velocità che per la coppia, sente sostanzialmente il valore medio Vam della tensione di armatura, che a sua volta dipende dal duty cicle secondo la relazione:

Nell'esempio sotto è rappresentata la tensione di alimentazione con duty cicle rispettivamente del 50%, 75% e 25%. È come se al motore venissero applicate tensioni di armatura continue rispettivamente pari a 0,5 Vam, 0,75 Vam, 0,25 Vam.



2.4 - Inversione del senso di rotazione del motore attraverso il ponte ad H

Per invertire il senso di rotazione di un motore in continua a magneti permanenti occorre invertire la polarità della tensione di armatura. Questo è facilmente realizzabile con un "ponte H". 


Per capire come funziona possiamo vederlo come un semplice circuito con 4 interruttori (A,B,C,D), un alimentazione (supply + e -) ed un motorino (M).


Nella tabella sottostante possiamo osservare cosa succede quando si chiudono i diversi interruttori:

Combinazione

Polarità

Effetto

A e D chiusi

Avanti

Il motore gira in avanti

B e C chiusi

Indietro

Il motore gira all'indietro

A e B oppure C e D chiusi

Bloccato

Motore frenato

Tutti gli interruttori aperti

libero

Motore in folle


Come si vede, quando A e B sono uguali (entrambi chiusi o entrambi aperti), il motore non gira. Per invertire il senso di marcia bisogna invertire i livelli logici di A e B. 

2.5 - La sterzata

Nel robot l'azionamento dei due cingoli è indipendente, sia dal punto di vista meccanico (sono presenti due motori, uno per cingolo) che elettronico (i motori possono essere comandati in modo indipendente) e quindi è possibile ottenere la sterzata semplicemente modificando la velocità di rotazione di uno dei due motori.

Infatti, se uno dei due motori è azionato in modo da ruotare a velocità inferiore a quella dell'altro, il robot sarà costretto a seguire una traiettoria curvilinea in cui il cingolo più veloce percorre la traiettoria esterna (più lunga) ed ovviamente il cingolo più lento quella interna.

Capitolo 3 - Assemblaggio e taratura


Nella prima parte di questo capitolo sarà illustrata una panoramica sull'assemblaggio e sulle problematiche connesse. In seguito saranno mostrati gli aspetti principali della taratura hardware.


3.1 Realizzazione della scheda

Nei paragrafi seguenti verranno illustrate dettagliatamente le varie fasi che hanno portato al completamento della scheda


3.1.1 Creazione del master

Per realizzare il circuito tramite OrCad si utilizzano essenzialmente i footprint e i fili di collegamento. I footprint non sono altro che un disegno in scala reale del componente: una volta che la scheda sarà realizzata il componente potrà essere inserito nello spazio apposito. Per esempio un integrato MAX232 a 16 piedini ha il seguente footprint:


Prima di cominciare il disegno è necessario impostare alcune proprietà del foglio, come la scala, il numero di strati ecc. Di solito è utilizzato solamente uno strato. Ma, visto che il nostro circuito è bi-faccia, sono stati utilizzati due strati: TOP e BOTTOM.

Dopo aver definito le proprietà del foglio, si ha davanti la schermata nera di Layout pronta ad essere trasformata in un master.

Tramite il pulsante  è possibile inserire nuovi componenti e, selezionando il pulsante , è possibile inserire nuovi fili collegamento.

E' anche possibile inserire sulla scheda un testo: nel nostro caso abbiamo inserito i due nomi dei realizzatori del progetto, Agostinelli e Gentili, uno per ogni faccia della scheda. Questo piccolo accorgimento è servito per poter distinguere facilmente l'orientamento dei master in fase di "stampa" del circuito.


Prima di passare allo sbroglio delle piste di  collegamento è necessario impostare alcuni parametri, come la dimensione delle piste di collegamento, lo spazio mimino fra pista e pista, ecc.
Tramite l'AutoRoute del programma si procede allo sbroglio automatico delle piste: questo lavoro richiede diverso tempo a seconda della distribuzione dei componenti sul foglio.

Alla fine di questa fase si passa alla stampa del master che va effettuata su di un foglio lucido. La cosa più importante nella stampa è l'opacità del tracciato. Se questa non fosse sufficiente, infatti, si avrà poco contrasto fra le due zone, con il rischio di corrodere anche le piste nel tentativo di asportare il rame dalle zone vuote. Per ottenere il risultato sperato è consigliabile utilizzare una stampante laser.

La costruzione del circuito stampato è praticamente terminata: il nostro foglio lucido potrà essere usato, con la tecnica della fotoincisione, per la costruzione del circuito stampato. Quindi seguirà la foratura della basetta e la saldatura dei componenti.


Master del circuito a doppia faccia.

Figura in alto: lato montaggio componenti


3.1.2 Verniciatura della basetta con vernice fotosensibile

Il materiale di base per usare la tecnica della fotoincisione è costituito da una normale basetta per circuito stampato, su cui è stesa in modo omogeneo una particolare pellicola resistente all'incisione: se esposta a luce ultravioletta, questa pellicola diventa solubile in una soluzione basica e può quindi essere rimossa facilmente. Ovviamente il rame protetto dal master stampato sul lucido non viene intaccato, rimanendo sul supporto isolante a formare le piste necessarie per collegare i vari componenti.


3.1.3 Impressionamento con bromografo

Il bromografo è un apparecchio che serve per fotoimpressionare una basetta ricoperta di rame sulla quale è stato applicato uno strato di una speciale vernice fotosensibile.

Dopo aver fissato il lucido alla basetta tramite dei filetti di ferro, la inseriamo all'interno del piano in vetro del bromografo. Dopo aver chiuso il piano creiamo il vuoto al suo interno. In questo modo la basetta con il lucido sopra resterà ferma e bloccata per tutto il tempo dell'esposizione. Questo è molto importante perché, se per caso il lucido dovesse spostarsi anche solo di qualche millimetro, sarebbe compromesso tutto il lavoro. Infatti le piste del circuito sono talmente vicine che un minimo spostamento porterebbe di certo alla sovrapposizione di qualche pista.



Una volta che il nostro circuito è fissato bene, capovolgiamo il piano in vetro ed azioniamo le lampade a raggi ultravioletti. A questo punto basterà attendere, dopo 270 secondi, lo spegnimento delle lampade che coinciderà con il termine dell'impressionamento.

Dato che il nostro circuito è a doppia faccia è necessario ripetere l'operazione anche per l'altra parte del circuito. Al termine di questa fase possiamo passare allo sviluppo.


3.1.4 Sviluppo con soda caustica e incisione con cloruro ferrico

Una volta che la basetta è stata impressionata, è necessario fermare l'immagine sulla superficie di rame. Per fare questo è sufficiente immergere la scheda ramata nella soluzione ed agitare. Durante lo sviluppo noteremo che dal circuito si libera un colore nerastro. È la vernice fotosensibile impressionata che, sotto l'azione dell'acido, si stacca liberando la superficie ramata. Una volta che l'immagine risulta ben nitida sulla scheda, è necessario passare ad un abbondante risciacquo che tolga tutti i residui della soluzione dalla basetta e ne arresti lo sviluppo. Occorre fare molta attenzione quando si maneggia la soluzione, in quanto la soda caustica corrode molto facilmente gli indumenti: ne basta una sola goccia.



Ormai la vernice fotosensibile è stata tutta disciolta e ora possiamo lavorare in un ambiente più luminoso. In quest'ultima fase non rimane che eliminare il rame dalle zone vuote utilizzando la soluzione di cloruro ferrico. Per questo scopo nella nostra scuola è presente un macchinario che spruzza dell'acido sia da sopra che da sotto. In questo modo il rame non ricoperto dalla vernice viene "lavato" via.





Ad ogni lavaggio possiamo notare le condizioni sempre migliori della basetta. Dopo circa 6 lavaggi si comincia ad intravedere la vetronite al di sotto dello strato di rame.





Una volta uscita dal lavaggio con l'acido, la basetta viene lavata con dell'acqua per eliminare i residui dell'acido.




Ecco come si presenta la basetta al termine di circa 10 cicli di lavaggio: come possiamo vedere il rame di cui era ricoperta la lastra di vetronite è stato lavato via, tralasciando solamente i punti in cui era presente della vernice. Adesso la basetta è quasi pronta: resta solamente da eseguire qualche altro lavaggio per poi procedere all'operazione di foratura.


3.1.5 Foratura della scheda con trapano a colonna

L' operazione di foratura risulta più agevole se nei punti in cui vanno praticati i fori il rame è stato asportato nel processo di incisione: in tal modo la punta del trapano non scivolerà sul rame. Per forare la basetta abbiamo utilizzato una punta di 0,8 mm ed un piccolo trapano con un supporto a colonna. E' importante fare attenzione che durante la foratura rimanga una parte di rame attorno al foro per consentire poi un'agevole saldatura dei piedini.


3.1.6 Saldatura dei componenti sulla scheda

La saldatura a stagno è l'operazione che permette il fissaggio dei componenti al circuito stampato. Consiste nella fusione nel punto di contatto tra rame e componente di una lega metallica che, raffreddandosi, permette la connessione elettrica e meccanica. Il saldatore è lo strumento che permette la fusione della lega saldante (generalmente stagno). La saldatura di ciascun punto deve durare pochi secondi, ma senza fretta. Si inserisce il componente nei fori e si gira lo stampato in modo da vedere il lato rame: quindi si applica lo stagno fuso che andrà a collegare il componente con la piazzola in rame. La quantità di stagno deve essere appena sufficiente per coprire interamente la piazzola. Si procede in questo modo per tutti i componenti. A questo punto il circuito stampato è finito.


3.2 Realizzazione del telaio del robot

Per costruire il telaio del robot abbiamo pensato di utilizzare i mattoncini LEGO®. Questi mattoncini, estremamente versatili, si adattano perfettamente alle nostre esigenze. Infatti in questo modo è possibile modellare il telaio a nostro piacimento. Se ci sarà un problema nella struttura del robot, basterà semplicemente fare qualche modifica qua e là, smontando e rimontando i pezzi interessati. Dopo varie modifiche e miglioramenti strutturali suggeriti dalle varie prove effettuate il risultato è il seguente:




Come si può osservare dalle foto il motore è posizionato nella parte posteriore del telaio.


3.3 Taratura dei motori

Non essendo perfettamente uguali, i motori non possono garantire un funzionamento identico. Per far ruotare i due motori a velocità quanto più possibile simile è stato necessario tarare in modo opportuno i comandi .

Dalle diverse prove di taratura è risultato che il servomotore sinistro doveva essere comandato in modo da funzionare con il 98% della tensione di comando del servomotore destro. In questo modo abbiamo ottenuto una percorrenza senza significative deviazioni.

Ciò è dovuto ad inevitabili differenze tra i componenti dei due circuiti di comando (ponti H) dei motori.

La taratura del software per il controllo dei motori sarà discussa in un secondo momento.


Capitolo 4 - Controllo del piano di appoggio


Dopo aver approfondito le tematiche riguardanti la locomozione e l'hardware a disposizione, verranno affrontate quelle connesse al controllo del piano di appoggio.

Nel capitolo si cercherà di dare una modellazione del robot.


4.1 Modellazione del trasduttore

Il trasduttore è un dispositivo elettronico che converte grandezze meccaniche e fisiche in segnali elettrici.

La modellazione, nel nostro caso, è riferita all'interpretazione che può essere data alle informazioni provenienti dai sensori IR, che da ora in poi verranno visti come un unico blocco di trasduzione. Come abbiamo visto, il valore presente all'uscita dei sensori è inversamente proporzionale alla quantità di radiazione riflessa dalla superficie su cui si muove il robot. La taratura consiste nella regolazione della soglia di un comparatore software. In questo modo è possibile adattare i sensori alle caratteristiche di riflessione del pavimento.

Questa prima operazione è stata molto semplice, anche se per avere un risultato ottimale abbiamo dovuto fare moltissime prove ed è stata necessaria quasi un'intera giornata di lavoro.

Considerando che il riferimento di interesse è la presenza del piano di appoggio, è possibile assegnare ad ogni combinazione proveniente dai sensori un valore numerico che ne rappresenti lo stato. In pratica la lettura del trasduttore ci fornirà direttamente il segnale di errore da elaborare per ottenere un'azione di controllo.


4.2 Comando dei motori

Noto il significato delle informazioni provenienti dal trasduttore, è necessario valutare quale tipo di azione di controllo sarà necessaria. Nel nostro caso le azioni di controllo sono la marcia indietro e la sterzata e gli attuatori sono i motori.

L'azione di controllo indicata dall'algoritmo ovviamente non sarà una sterzata, ma il risultato sarà quello. Questo avviene utilizzando il metodo descritto nei precedenti capitoli, ossia far ruotare un motore più velocemente dell'altro.

Dovrà quindi essere valutato il valore massimo dei giri che il motore può effettuare ed associarlo alla massima azione di controllo. Le azioni di entità minore dovranno corrispondere proporzionalmente ai giri del motore.


Capitolo 5 - Software di controllo


Definita la struttura (meccanica ed elettronica) complessiva del robot e le problematiche sul rilevamento del piano di appoggio, resta da implementare il software di controllo basato sull'algoritmo presentato nel capitolo precedente.

Saranno inoltre trattate le problematiche connesse al funzionamento dell'algoritmo, come per esempio i controlli da effettuare per determinare la presenza di un angolo, presentando poi le soluzioni adottate per eliminare tali problemi.


5.1 Struttura del software

Un qualsiasi software di controllo ha una struttura articolata su tre punti

  1. Acquisizione informazioni
  2. Elaborazioni mediante algoritmo di controllo
  3. Attuazione sulla variabile di controllo

L'acquisizione delle informazioni consiste nel controllo di sensori di riferimento in modo da poter elaborare il segnale di errore: nel nostro caso le informazioni provengono dai sensori IR e possiamo interpretare il segnale come la presenza o meno del piano di appoggio. A questo punto il software elaborerà secondo l'algoritmo di controllo predefinito un azione da intraprendere. La variabile di controllo fornita dall'algoritmo verrà modificata e, nel nostro caso, applicheremo una sterzata oppure una marcia indietro.


5.2 Progettazione della legge di controllo

Da quanto detto fino ad ora possiamo così schematizzare il nostro sistema controllato:



Il robot, finché rileva la presenza del piano di appoggio, si muove in avanti. Quando i sensori indicano che il piano non è più presente, vengono attuate una serie di manovre per aggirare il problema. L'algoritmo di controllo dovrà quindi fornire direzione e velocità con i quali i motori dovranno essere azionati.




Esempio: se il sensore FSx non rileva più il piano di appoggio si dovrà attuare una sterzata verso destra. Il motore destro dovrà avere velocità zero (la direzione è indifferente), mentre quello sinistro dovrà avere velocità media e muoversi in avanti.


5.3 Software di controllo

Utilizzando un processo di discretizzazione possiamo ottenere, a partire da una legge di controllo, un algoritmo che ne emuli il comportamento.


In questo paragrafo verrà quindi presentato il software di controllo per intero. Nei vari sottoparagrafi di seguito verranno analizzate le varie parti del software punto per punto.

#include <avr/io.h> //libreria per sensori e motori

#include <inttypes.h> //libreria per motori

#include <avr/interrupt.h> //libreria per motori

#include <avr/sleep.h> //libreria per motori


//---------definizioni variabili di uso comune PER I SENSORI------------

#define EM_PIN 4

#define EM_DDR DDRB

#define EM_PORT PORTB

#define SENS_FS 3 //sensore frontale sinistro

#define SENS_FD 4 //sensore frontale destro

#define SENS_BS 5 //sensore posteriore sinistro

#define SENS_BD 6 //sensore posteriore destro


//-------definizione variabili di uso comune PER I MOTORI----------

#define MOT_PORT PORTD

#define MOT_DDR  DDRD

#define DIR1A 3 //direzione del motore sinistro

#define DIR1B 2 //direzione del motore destro

#define PWM1A 4 //PWM del motore sinistro

#define PWM1B 5 //PWM del motore destro


void adc_init( void //funzione per inizializzare l'ADC interno dell'ATMEGA



uint16_t adc_read( uint8_t pin ) //funzione per leggere il valore in uscita dall'ADC



void Wait( uint32_t n ) //funzione che genera un ritardo con un ciclo for



uint8_t MOT_dirA; //direzione motore sinistro

uint8_t MOT_dirB; //direzione motore destro


Funzione per settare i motori: accetta come parametri quale motore deve attivarsi, direzione e velocità.

mot

dir

vel


void MOT_set( uint8_t mot, uint8_t dir, uint8_t vel )


if mot & //se il motore destro è selezionato




void MOT_init( void



void down_check(uint8_t sensore1, uint8_t sensore2)

while (contatore < && flag==


MOT_set( //si ferma un attimo

Wait(


if (flag==


MOT_set( sensore1-

Wait(

MOT_set(

Wait(

MOT_set( sensore2-

Wait(

MOT_set(

Wait(

}

else //se non è in un angolo


MOT_set( //ferma i motori e attende un attimo

Wait(

}



int main( void



5.3.1 Funzioni per il controllo dell'ADC

Le funzioni qui presentate servono per analizzare i dati provenienti dai sensori IR. L'ADC converte il segnale analogico proveniente dai sensori in un segnale digitale. In questo modo sarà possibile definire una soglia entro la quale il piano viene considerato presente.


void adc_init( void



Questa funzione si occupa di inizializzare i parametri dell'ADC interno al microprocessore. I valori utilizzati sono stati scelti in base a quanto scritto all'interno del datasheet dell'ATMEGA.

uint16_t adc_read( uint8_t pin )



Questa è la funzione che ritorna il valore digitale risultante dalla conversione del segnale analogico proveniente dai sensori. Il valore restituito dalla funzione può andare da un minimo di 0 (piano di appoggio presente) ad un massimo di 1023 (piano di appoggio assente).


5.3.2 Funzioni per il movimento dei motori

Queste funzioni si occupano di gestire il segnale PWM per azionare i motori.


void MOT_init( void



È la funzione che inizializza i motori:

Per cominciare imposta come uscite e disattiva tutti i piedini del microcontrollore che riguardano i motori. Dopodiché si occupa di inizializzare i registri del timer 1.

Infine setta i motori come fermi.

void MOT_set( uint8_t mot, uint8_t dir, uint8_t vel )


if mot & //se il motore destro è selezionato



Questa funzione riceve come parametri di ingresso quale motore azionare, la direzione in cui esso deve girare e la velocità.


Per i motori è possibile scegliere:

1 - motore destro

2 - motore sinistro

3 - entrambi i motori.


Per quanto riguarda la direzione si può scegliere tra:

0 - avanti

1 - indietro


La velocità invece può variare da un minimo di 0 ad un massimo di 255.



5.3.3 La funzione DOWN_CHECK

Questa è la funzione che si occupa di attuare una manovra di risposta alle condizioni rilevate dai sensori frontali


void down_check(uint8_t sensore1, uint8_t sensore2)

while (contatore < && flag==


MOT_set( //si ferma un attimo

Wait(


if (flag==



MOT_set( sensore1-

Wait(

MOT_set(

Wait(

MOT_set( sensore2-

Wait(

MOT_set(

Wait(

}


else //se non è in un angolo



MOT_set( //ferma i motori e attende un attimo

Wait(

}



Questa funzione accetta come parametri i numeri identificativi dei 2 sensori anteriori: il primo viene considerato come principale e l'altro come secondario.


Per prima cosa viene controllato se il primo sensore passato nei parametri (quello principale) rileva la presenza del piano di appoggio: in caso negativo tutti e due i motori vengono fermati altrimenti la funzione ha il suo termine qui.


A questo punto si controlla se anche l'altro sensore (quello contraddistinto come secondario) ha perduto il segnale: se è così ci troviamo di fronte ad un angolo del piano e la soluzione prevista è la marcia indietro con una sterzata molto ampia. Se invece il sensore ha ancora il segnale, tutti i passaggi descritti di seguito vengono saltati e si passa direttamente alla fase finale della funzione che verrà descritta in seguito.


Una volta innescata la retromarcia si entra in un ciclo di ritardo che ha termine solo in due casi:

il conteggio ha raggiunto una data soglia (15000)

la variabile di controllo dei sensori posteriori è stata attivata (valore = 1) perché uno dei sensori posteriori non rileva più il piano.


Al termine del ciclo di ritardo i motori vengono fermati.


Se la variabile di controllo dei sensori posteriori è stata attivata, si effettua una manovra in avanti per allontanarsi dal bordo del piano.


A questo punto il robot effettua una manovra per cambiare direzione (attua una rotazione su se stesso).


Le istruzioni descritte fino ad ora vengono saltate se il controllo del sensore secondario ha dato esito positivo. Infatti in questo caso verrà eseguita solamente una piccola sterzata verso il lato opposto del sensore principale. In questo modo il robot "si rimetterà in carreggiata".


La funzione termina con la fermata del robot.



5.3.4 La funzione principale (main)

Il main è la funzione principale di ogni programma in linguaggio C.


int main( void




La funzione main, come prima cosa, imposta come uscita e attiva il piedino corrispondente agli emettitori dei sensori IR. In questo modo il led a infrarossi di ogni sensore sarà attivato.


Subito dopo inizializza, tramite le funzioni presentate in precedenza, l'ADC e i motori.


Seguendo l'evolversi della funzione entriamo in un ciclo infinito (infatti le istruzioni inserite dentro al while verranno eseguite finché 1=1, cioè per sempre).


All'interno di questo ciclo comincia l'algoritmo di controllo vero e proprio: entrambi i motori vengono azionati con direzione avanti e velocità media.

In seguito viene richiamata 2 volte la funzione down_check descritta in precedenza: la prima volta passando come sensore principale FSx e come secondario FDx. La seconda volta facendo il contrario.


Alla fine della fase di controllo dei sensori il ciclo ricomincia dall'inizio, e così via.



Conclusioni


Dalle prove realizzate si evince che il robot riesce senza problemi a restare su di un tavolo in assenza di bordi protettivi. Riesce ad affrontare curve con oscillazioni praticamente assenti.


Un'applicazione di questo tipo (fatte le debite proporzioni) può trovare seguito in grandi magazzini automatizzati, in cui possono essere utilizzati dei carrelli per il trasporto della merce. In questo caso i sensori dovrebbero essere tarati per distinguere una linea colorata situata sul pavimento. Il tutto garantendo la massima flessibilità, poiché il percorso potrà essere variato in poco tempo ad un costo molto basso.


Bibliografia e riferimenti internet


  • C. Rossi "Appunti del corso Fondamenti di Meccanica". 2004
  • De Agostini "Costruisci e programma il tuo robot".
  • Fairchild Semiconductor "Reflective Object Sensor"
  • Microchip "16K I2C Serial EEPROM"
  • Microchip "EEPROM/ROM Based - 8 Bit CMOS Microcontroller Series"
  • P. Bolzern, R. Scattolini, N. Schiavoni "Fondamenti di controlli automatici".
  • Parallax Inc. "Basic Stamp Syntax and Reference Manual". 2005
  • Parallax Inc. "Robotics! Student Guide". 2000
  • Vishay "Reflective Optical Sensor"
Scarica gratis Assemblaggio di componenti e sviluppo software per un robot cingolato dotato di sensori infrarossi
Appunti su: vale5va@liberoit mail, invertire rotazione con doppio deviatore,



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...

Appunti Aeronautica Aeronautica
Tesine Automobile Automobile
Lezioni Silvicoltura Silvicoltura