AA 2010/2011
Facoltà del Design - Politecnico di Milano
3.o anno – Disegno Industriale
Hands-On Arduino
Electronics for designers
P. Perego- Politecnico di Milano
Che cos’è ARDUINO?
Hardware, Software e prototipo di circuito.
2
“Arduino is an open-source physical computing platform based on a simple
i/o board and a development environment that implements the Processing /
Wiring language. Arduino can be used to develop stand-alone interactive
objects or can be connected to software on your computer.“
( www.arduino.cc, 2006 )
Paolo Perego
Perché ARDUINO?
Nano, Lilly, Fyo, Mini, Mega…
3
1. Arduino è nato per la prototipazione da parte di non elettronici:
robusto e immediato;
2. E' orientato all'applicazione, non alla piattaforma in sé;
3. Permette di provare, partendo dal piccolo e crescendo pezzo per pezzo
(sviluppo modulare);
4. Lo sviluppo è aiutato da una enorme community online con esempi e
consigli.
5. Economico
6. Connessione USB
Paolo Perego
Com’è fatto Arduino
4
Micro controllore:
Arduino è basato su un
microcontrollore, l’ATmega328
Il microcontrollore è il «cervello» di tutto il sistema, gestisce gli input, gli
output, la comunicazione USB, la temporizzazione.
Necessita quindi di istruzioni  deve essere programmato!!!
Paolo Perego
Microcontrollore:
Approfondimento
5
Il microprocessore è il nucleo centrale di un calcolatore; esso
è l’unità di elaborazione dei dati e di controllo del
funzionamento del calcolatore stesso e viene spesso indicato
con la sigla CPU (Central Processing Unit). Posto da solo, il uP
non è utilizzabile, infatti sia i dati che i programmi su cui il
processore opera sono immagazzinati in un’unità di memoria
esterna a causa della grande quantità di memoria richiesta.
Per applicazioni particolari, tipiche del controllo industriale si fa
invece uso dei così detti Microcontrollori (uC).
Un microcontrollore è un sistema a microprocessore completo,
integrato in un solo chip, progettato per ottenere la massima
autosufficienza funzionale ed ottimizzare il rapporto prezzoprestazioni per una specifica applicazione. I uC comprendono,
oltre all’unità di calcolo, anche la memoria (RAM e ROM) e
ulteriori
periferiche
di
input/output
(convertitori
analogico/digitali, timer, interfaccia USB) a seconda
dell’applicazione specifica.
Paolo Perego
Microcontrollore:
Approfondimento 2
6
I vantaggi dell’utilizzo dei micro:
• Sono richiesti meno dispositivi “discreti” per la realizzazione di un sistema
• Il sistema ha dimensioni ridotte
• Diminuiscono i costi
• Diminuisce il consumo di potenza
• Diminuisce la sensibilità all’ambiente (temperatura, EM, …)
• Utilizza meno componenti, quindi più affidabile.
• Riconvertibilità del progetto (riprogrammabile)
• Protezione contro la copia
• Interfacciamento semplice con altri dispositivi (PC, LCD, …)
Ma dove si usano???
• Componenti PC: mouse, tastiere, modem, carica batterie…
• Orologi, calcolatrici
• Serrature per porte, sistemi d’allarme
• Automotive: in una BMW X5 sono contenuti più di 70 microcontrollori.
Arduino è basato su un microcontrollore, l’ATmega328
La grande community online e il fatto di essere OpenSource lo rendono molto più
semplice ed intuitivo rispetto al normale utilizzo di microcontollori (PIC, ARM…)
Paolo Perego
Com’è fatto Arduino
7
Alimentazione da USB
Alimentazione da V-in (6 - 20V)
Si consiglia una tensione tra 7 e 12V.
Alimentazione da Jack (6 - 20V)
Se utilizziamo un alimentatore esterno, sul pin
Vin si troverà la tensione di alimentazione vera e
propria senza regolazione.
Arduino seleziona automaticamente la sorgente
di alimentazione. Solo il vecchio Arduino
diecimila necessita di un selettore.
Paolo Perego
Com’è fatto Arduino
8
Nota:
Segnale analogico: è un segnale a
tempo ed ampiezza continua.
Segnale digitale o numerico: è un
segnale a tempo discreto e ad
ampiezza quantizzata.
14 Ingressi/Uscite digitali
6 Ingressi
analogici
Paolo Perego
Alimentazione a batteria
Dimensionamento della batteria
9
Il dimensionamento della batteria è un aspetto fondamentale di un progetto.
Arduino One, Mega e 2009, grazie al connettore esterno, permettono di
alimentare il sistema per mezzo di batterie… ma quali usare?
La batteria da utilizzare dipende da:
1. Tempo d’uso
2. Corrente richiesta dal sistema
3. Tensione richiesta dal sistema
4. Dimensione massima (in cm) della batteria
Se per esempio abbiamo un circuito che necessità 3,3V, consuma 150mA e
vogliamo che la batteria duri alemno 8 ore, dovremo scegliere un batteria
con tensione maggiore di 3,3V (il circuito avrà un regolatore, come Arduino)
e una ‘capacità’ di almeno 150mA*8*1,2 = 1440mAh
1,2 è un fattore di correzione per assicurarsi la durata voluta.
Paolo Perego
Pin Digitali:
Generici ed specifici
10
Ognuno dei 14 pin Digital I/O dell’Arduino può essere utilizzato sia come input che
come output.
I pin Digital I/O operano ad una tensione di 5V e possono fornire fino a 40mA di
corrente
Alcuni di questi pin hanno funzioni specifiche:
Serial: pin 0 (RX) e pin 1 (TX). Sono rispettivamente il pin di trasmissione e
ricezione per la comunicazione seriale. Lavorano a 5V e sono connessi con l’USB.
Possono essere utilizzati per connettere un modulo bluetooth. In questo caso il
modulo deve essere scollegato per permettere la scrittura del firmware attraverso
l’USB.
External Interrupts: pin 2 e 3. Questi pin possono essere configurati per la
generazione di interrupt. Possono cioè essere configurati in modo che se il valore del
pin cambia, l’esecuzione del codice viene interrotta momentaneamente per eseguire
un’altra operazione, associata al cambiamento del pin
Paolo Perego
Pin Digitali:
Generici ed specifici
11
PWM: 3, 5, 6, 9, 10, e 11. Possono essere utilizzati come PWM a 8 bit.
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Questi pin possono essere utilizzati
per la comunicazione SPI con alcuni dispositivi (SDCARD, Ethernet shield, GSM).
LED: 13. Il pin 13 è collegato ad un led SMD presente sulla scheda.
I2C: 4 (SDA) e 5 (SCL). Configurabile come I2C (TWI) (simile a SPI).
Paolo Perego
Pin Digitali:
Pulse Width Modultation (PWM)
La PWM – Pulse Width Modulation è una
tecnica utilizzata per la generazione di un
segnale analogica utilizzano un uscita
digitale.
Variando la lunghezza dell’impulso posso
generare dei valori analogici da 0 a Vcc (5V
per Arduino).
Il duty-cycle è il rapporto tra il periodo
dell’impulso al valore logico alto sul periodo
in percentuale.
La frequenza di lavoro del PWM di Arduino
è circa 470Hz.
Pilotando un led con questa tecnica posso
far assumere diverse gradazioni di
luminosità, l’occhio non percepisce il
continuo on/off ma un livello differente di
luminosità.
Paolo Perego
12
Pin Analogici:
Convertitore Analogico-Digitale (ADC)
13
Arduino ha inoltre 6 ingressi analogici (A0…A5) ognuno dei quali ha una risoluzione a
10bit (cioè riconosce 2^10 = 1024 intervalli di tensione differenti).
Il convertittore analogico-digitale (ADC) interno di Aduino è settato di default per
acquisire valori tra 0 e 5V.
Questo vuol dire che l’intervallo di 5V sarà diviso in 1024 intervalli.
E se volessimo acquisire un segnale tra
0 e 3,3V?
Parte dei livelli di quantizzazione sarebbero
Inutili.
0V
Paolo Perego
3,3V
5V
Pin Analogici:
Convertitore Analogico-Digitale (ADC) 2
14
Per tale motivo è presente il pin AREF con il quale, per mezzo di una
apposita funzione che vedremo in seguito, si può fissare il valore di
riferimento (il valore massimo) per l’ADC
Un altro pin molto utile è il RESET.
Questo pin, se posto a 0, permette di resettare lo stato dell’arduino.
È possible resettare Arduino sia per mezzo del pulsante presente sulla
board, sia attraverso questo pin.
Durante la programmazione questo pin è posto basso per resettae Arduino
e permetterne la programmazione.
Paolo Perego
15
Programmazione di Base
Variabili
└ Array
Funzioni
Strutture di controllo
Nota: Utile per Arduino e Processing
Paolo Perego
Com’è fatto Arduino
16
Programmazione da USB
Nota:
Firmware: Insieme di istruzioni che
controllano il funzionamento di un
microcontrollore. E’ il «programmino»
che andremo a caricare sul nostro
Arduino.
Software: Insieme di istruzioni che
controllano parte del nostro computer.
Sono i programmi che girano sul nostro
calcolatore (Word, Excel…).
Incluso il software Arduino che avete
installato, chiamato anche «Integrated
Development Environment (IDE)
Arduino».
Procesing è un altro IDE che serve
tuttavia a creare software per PC/MAC.
Paolo Perego
Programmazione di base
Le Variabili
17
Dichiarazione delle varibili:
int ledPin = 13;
int ledPin1 = 10;
float interval = 100.5;
char carattere= ‘c’;
Tipo variabile NOME VARIABILE (= Valore iniziale);
Tipi di variabili presenti:
- boolean: variabile binaria, può essere TRUE o FALSE;
- char: usa un byte di memoria e può contenere un qualsiasi carattere. Ad
esso è assegnato un valore tra -127 e 128;
- byte: contiene 8 bit, valore tra 0 e 255;
- int: numero intero tra -32768 e 32767 (2 byte);
- word: contiene 16 bit, valore tra 0 e 65535;
- long: numero intero tra -2147483,648 e 2147483,647 (4 byte);
- float e double: numero con virgola mobile tra 3,4028235E+38 and as low
as -3,4028235E+38
- string: colonna di char;
- array: colonna di variabili (int, float…)
Paolo Perego
Programmazione di base
Esempi di variabili
18
boolean running = false;
char myChar = 'A';
byte b = B00010010;
int ledPin = 13;
word w = 10000;
long speedOfLight = 186000L;
float sensorCalbrate = 1.117;
STRING:
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char* myStrings[]={"This is string 1", "This is string
2", "string 3"};
ARRAY:
int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";
Paolo Perego
Esempi di variabili
Gli array
19
Si può immaginare un array come una sorta di casellario, le cui caselle sono
dette celle dell'array stesso. Ciascuna delle celle si comporta come
una variabile tradizionale; tutte le celle sono variabili di uno stesso tipo
preesistente, detto tipo base dell'array. Si parlerà perciò di tipi come "array di
interi", "array di stringhe", "array di caratteri" e così via.
La dimensione dell'array (ovvero il numero celle di cui esso è composto)
viene considerato parte della definizione del tipo array.
Ciascuna delle celle dell'array è identificata da un valore di indice. L'indice è
generalmente numerico e i valori che gli indici possono assumere sono
numeri interi che partono da 0. Si potrà quindi parlare della cella di indice 0,
di indice 1, e, in generale, di indice N, dove N è un intero compreso fra 0 e la
dimensione dell’array.
Dichiarazione di un array di 10 interi:
int myArray[10];
Uso dell’array:
myArray[0] = 10;
myArray[1] = 5;
…
Paolo Perego
Cosa sono le funzioni
20
Le funzioni sono parti di codice a cui viene associato un nome.
Le funzioni hanno principalmente tre funzioni:
- Permettere una maggiore leggibilità del codice
- Evitare di riscrivere lo stesso codice
- Possibilità di costruire librerie da poter utilizzare in differenti progetti
Una funzione ha solitamente questa struttura:
Tipo_dato_uscita NomeFunzione(tipi_ingressi NomeVariabile…)
{
Corpo della funzione
}
Arduino permette sia l’utilizzo di funzioni da librerie, sia la creazione di nuove
funzioni.
Paolo Perego
Strutture di controllo
•
21
if…else
Se la variabile corrisponde alla prima condizione eseguo azione 1, altrimenti eseguo l’azione
due.
if (condizione 1)
azione 1;
else
azione 2;
• Ciclo for
Serve per eseguire N volte le funzioni tra parentesi
Paolo Perego
Strutture di controllo
22
• Switch… case
Il controllo switch si comporta come più if in cascata. È utilizzato per quei casi in cui la
variabile può assumere più valori che devono essere controllati tutti (es. Che tasto ho
premuto?)
switch (var) {
case 1:
//do something when var equals 1
break;
case 2:
//do something when var equals 2
break;
default:
// if nothing else matches, do the default
// default is optional
}
Paolo Perego
Strutture di controllo
•
23
Ciclo while
Esegue continuamente le funzioni tra parentesi fino a che la condizione rimane invariata.
while(var < 200)
{
// do something repetitive 200 times
var++;
}
• Ciclo Do… while
È come il ciclo while, ma in questo caso la condizione è controllata alla fine.
do
{
x = readSensors();
} while (x < 100);
// check the sensors
Paolo Perego