Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Luca Moschella
V A ITI
INDICE
1.Introduzione .................................................................................................................................................. 3
2.Componenti Hardware del sistema ............................................................................................................... 3
2.1 Piattaforma Hardware Arduino UNO ...................................................................................................... 3
2.1.1 Arduino UNO ................................................................................................................................... 4
2.1.2 Alimentazione.................................................................................................................................. 5
2.1.3 Memoria .......................................................................................................................................... 5
2.1.4 Input e Output ................................................................................................................................. 5
2.1.5 Comunicazione ................................................................................................................................ 6
2.1.6 Programmazione ............................................................................................................................. 7
2.1.7 Protezione USB da sovracorrente .................................................................................................... 7
2.1.8 Caratteristiche fisiche ...................................................................................................................... 7
2.2 Struttura ................................................................................................................................................. 8
2.2.1 Dimensionamento della struttura ................................................................................................... 8
2.2.2 Realizzazione della struttura .......................................................................................................... 10
2.3 Driver Motore ....................................................................................................................................... 11
2.3.1 Schema elettrico ............................................................................................................................ 12
2.3.2 Funzionamento Driver Motore ...................................................................................................... 13
2.4 Amplificatore Differenziale ................................................................................................................... 14
2.4.1 Schema elettrico ............................................................................................................................ 14
2.4.2 Dimensionamento Amplificatore Differenziale ............................................................................. 15
2.4.3 Funzionamento di VShift .................................................................................................................. 18
2.5 Sensori a Infrarossi (IR) ......................................................................................................................... 20
2.6 Attuatori ............................................................................................................................................... 21
2.7 Altri componenti ................................................................................................................................... 22
2.8 Rendering del sistema fisico in esame .................................................................................................. 22
3.Algoritmo di Controllo ................................................................................................................................. 23
3.1 Controllo PID ........................................................................................................................................ 23
3.2 Diagramma di flusso ............................................................................................................................. 24
3.3 Sketch ................................................................................................................................................... 25
1.Introduzione
In questo progetto stato realizzato un robot a due ruote in grado
di mantenersi in equilibrio.
Lobiettivo quello di bilanciare il robot con un controllo software PID.
2.1.2 Alimentazione
Arduino UNO pu essere alimentato attraverso la connessione USB
o con un alimentatore esterno. Il consiglio dato dal manuale quello di
farlo operare con un alimentatore esterno da 6V a 20V. Il pin 5V pu
fornire meno di 5V e di conseguenza la scheda potrebbe risultare
instabile. Se invece si utilizzano pi di 12V, il regolatore di tensione
potrebbe surriscaldarsi e danneggiare la scheda. L'intervallo consigliato
7-12V.
I pin di alimentazione sono i seguenti:
- VIN. Il pin con cui possibile alimentare la scheda Arduino con una
tensione superiore ai 5V. possibile fornire tensione attraverso
connessione USB o un'altra fonte di alimentazione regolata in
tensione. collegato direttamente al Jack di alimentazione;
- 5V. Il Pin di alimentazione regolata, utilizzata per alimentare il
microcontrollore e gli altri componenti sulla scheda. La tensione di
5V pu essere ricavata dal pin VIN tramite un regolatore a bordo o
essere fornita tramite USB o un altro 5V controllato;
- 3V3. generata dal board su chip FTDI e ha un assorbimento di
corrente massimo pari a 50mA;
- GND. Ground pin;
2.1.3 Memoria
L'Atmega-328 ha 32 KB, di cui 2KB utilizzati per il bootloader, 2KB di
SRAM e 1KB di EEPROM.
2.1.4 Input e Output
Ciascuno dei 14 pin digitali sull'Arduino UNO pu essere usato come
input o output, utilizzando funzioni attraverso il software specifico
(pinMode(),digitalWrite() e digitalRead() ). I pin operano a 5V e ognuno di
questi pu fornire o ricevere un massimo di 40mA; presentano una
5
2.1.6 Programmazione
La scheda UNO pu essere programmata con il software Arduino.
L'Atmega-328 su Arduino UNO viene pre-caricato con un bootloader che
permette di caricare il nuovo codice senza l'uso di un programmatore
hardware esterno.
La comunicazione con la scheda avviene utilizzando l'originale protocollo
STK500 che ha come riferimento i file di intestazione C.
2.1.7 Protezione USB da sovracorrente
L'Arduino UNO ha un polyfuse azzerabile (componente di memoria
tempo-programmabile usato in circuiti a semiconduttori per la
memorizzazione dei dati unici), che protegge le porte USB del computer
da cortocircuiti e sovracorrenti.
Sebbene la maggior parte dei computer fornisce una propria protezione
interna, il fusibile fornisce un ulteriore livello di protezione. Se pi di
500mA vengono applicati alla porta USB, il fusibile automaticamente
interrompe la connessione fino a quando il corto o sovraccarico viene
rimosso.
2.1.8 Caratteristiche fisiche
La lunghezza e la larghezza massima del PCB UNO sono 2,7 * 2:1
pollici, con il connettore USB e il jack di alimentazione che fuoriescono, si
estende oltre la dimensione precedente. Tre fori per le viti consentono
alla scheda di essere fissata su di una superficie.
2.2 Struttura
stato deciso di sviluppare il sistema su tre piani, suddividendo i
componenti Hardware su ogni piano in questo modo:
- Primo piano: Attuatori, Batteria;
- Secondo piano: Driver Motore, Amplificatore Differenziale, Switch;
- Terzo piano: Sensori Sharp IR, Arduino;
Particolare importanza ha la posizione dei sensori.
2.2.1 Dimensionamento della struttura
Per capire dove posizionare i sensori, in modo tale che per un dato
spostamento angolare si abbia una variazione della distanza rilevata dai
sensori apprezzabile, sono necessari alcuni semplici calcoli.
Esaminiamo una circonferenza non goniometrica, quindi non di raggio
unitario:
noto che il seno il rapporto
fra la proiezione sullasse Y di un
punto generico A, individuato
sulla circonferenza, e il raggio
della stessa circonferenza.
Mentre il coseno il rapporto fra
la proiezione sullasse X di un
punto generico A, individuato
sulla circonferenza, e il raggio
della stessa circonferenza.
Si pu, quindi, dire che in una circonferenza generica:
Il
sistema
AutoBalance
pu
essere
cos
semplificato:
stato cos calcolato il braccio del sistema, cio la minima distanza alla
quale devono essere posizionati i sensori rispetto lasse delle ruote.
9
10
11
12
14
15
Da questo possiamo ricavare tre condizioni del sistema che devono essere
rispettate, le seguenti:
1)
2)
3)
16
17
Lequazione:
18
19
20
2.6 Attuatori
Per quanto riguarda gli attuatori, sono stati scelti due semplici
motoriduttori SBGM9.
Le caratteristiche che ci hanno portato a scegliere questi motoriduttori
sono le seguenti:
- Rapporto di riduzione 143:1;
- Dimensioni 70.2 x 30.4 x 22.6mm;
- Peso 32.6g;
Le caratteristiche principali di questi motoriduttori possono essere
riassunte nella seguente tabella:
22
3.Algoritmo di Controllo
3.1 Controllo PID
Questo tipo di regolatore prevede un controllo proporzionale
allerrore rispetto ad un riferimento, derivativo ed integrativo. Leffetto
del controllo proporzionale quello di contrastare lerrore, quello del
derivativo quello di anticipare la risposta del sistema, quello
dellintegrativo di annullare lerrore a regime.
Questo si traduce nel calcolare i coefficienti del regolatore in modo che il
sistema abbia una risposta adeguata allerrore rilevato.
La scelta dei coefficienti del regolatore, come spesso avviene in questi
casi, stata fatta per lo pi basandosi su basi sperimentali. Seguendo
questa strada si arrivati a determinare i seguenti coefficienti:
- Kp = 0,6;
- Ki = 7;
- Kd = 0,02;
Un ulteriore concetto da sottolineare la scelta dellalgoritmo realmente
implementato sul microcontrollore Arduino. Come si legge nella maggior
parte dei libri di controlli automatici la ritmica di funzionamento
dellalgoritmo a tempo costante. Al contrario, in questo progetto stata
adottata una tecnica leggermente diversa. Infatti, invece di avere un
tempo costante e scartare il tempo avanzato aspettando il prossimo
turno, stato semplicemente cronometrato il tempo necessario per ogni
loop e le azioni integrative e derivative sono state rese proporzionali a
questo intervallo di tempo. Quindi, con questa tecnica, se un'acquisizione
durata pi di un'altra, avr pi peso nella correzione generata dal
controllore.
Il sistema presenta, comunque, un carattere oscillante che non possibile
eliminare.
23
Definizione PIN
utilizzati
Dichiarazione e
inizializzazione
variabili utilizzate
Setup dei pin come
OUTPUT
Acquisizione
Errore
Eliminazione
delloffset
Calcolo e limitazione
del PID
Calcolo PWM e
Controllo attuatori
tramite PWM
Calcolo del tempo
impiegato per
effettuare il ciclo
Memorizzo Errore
attuale
24
3.3 Sketch
Il programma, chiamato Sketch, stato diviso in funzioni per
comodit.
stato suddiviso nelle seguenti funzioni:
- Main Program: programma principale dedicato alle definizioni, alle
dichiarazioni, al setup ed al loop;
- Controllo Motori: funzione dedicata alla generazioni del segnale
PWM ed al controllo dei motori;
- GetErrore: funzione dedicata allacquisizione dellerrore;
- GetPID: funzione dedicata al calcolo e alla limitazione del PID;
Lo Sketch il seguente:
Main Program:
// Software AutoBalance
// Il programma legge l'errore
// Attraverso un controllo PID muove le ruote in modo da correggere tale errore.
// Definizione dei pin di INPUT
#define input A0
l'amplificatore differenziale
// Inclinazione dell'AutoBalance
// Inclinazione dell'AutoBalance al ciclo
//
//
//
//
Variabile
Variabile
Variabile
Parametro
25
void setup()
{
//Serial.begin( 9600 );
pinMode( motore, OUTPUT );
}
void loop()
{
/*
Serial.print( " Errore = " );
Serial.print( Errore );
Serial.print( " Intervallo = " );
Serial.print( interval );
Serial.print( " P = " );
Serial.print( P );
Serial.print( " I = " );
Serial.print( I );
Serial.print( " D = " );
Serial.print( D );
Serial.print( " PID = " );
Serial.print( PID );
Serial.print( " PWM = " );
Serial.println( 127 + PID );
*/
time = millis();
interval = (time - previousTime)/1000;
ciclo in secondi
getErrore();
ottenere l'errore
getPID();
i parametri del controllo PID
controllomotori();
il contorllo degli attuatori
previousTime = time;
previousErrore = Errore;
GetPID:
void getPID()
{
Errore = Errore - (511.5);
// Elimina l'offeset
P = Errore * kP;
I = I + (P * interval * kI) ;
D = kD * ( Errore - previousErrore ) / interval;
PID = P + I + D;
// Calcola il PID
Controllo Motori:
void controllomotori ()
motori DC
{
analogWrite( motore, 127 - PID );
26
GetErrore:
float getErrore()
sensore da cui misurare
{
int n = 50;
misura, per il calcolo della media
int array[n];
distanza
float somma = 0;
media
int C;
for ( C = 0; C < n; C++ )
{
array[C] = analogRead( input );
n
somma = somma + array[C];
nell'array
}
Errore = somma / n ;
nella variabile Errore
}
27