Arduino Uno
INTRODUZIONE
INTRODUZIONE ALL'USO DELLE TECNOLOGIE ICT PER I
SISTEMI URBANI ED IL TERRITORIO
CONOSCENZE NECESSARIE
La piattaforma Arduino: concetti di base
• CARATTERISTICHE PRINCIPALI
DELLA PIATTAFORMA
ARDUINO
• ARCHITETTURA ARDUINO
UNO
• COMPONENTI AGGIUNTIVE
NELLO STARTER KIT
Perché Arduino
Arduino è una scheda elettronica che permette di programmare in maniera
«semplice» un microcontrollore.
Un microcontrollore è un dispositivo elettronico che permette di acquisire
dati in ingresso (input), elaborarli e restituire dei risultati (output). E’ una
versione ridotta del processore o CPU
Le caratteristiche interessanti di Arduino sono varie:
•
Interfaccia semplice con sensori di vari tipo (sia analogici che
digitali)
•
Programmazione molto semplice
•
Compatto
•
Molto diffuso
•
Bassi consumi
Concetti di base dell'elettronica
• L'elettricità è una forma di energia che si propaga attraverso
conduttori (come i fili elettrici). Questa energia è facilmente
trasformabile in altre forme di energia ad esempio per accendere una
lampadina o far sentire suoni in un altoparlante. I dispositivi utilizzati
per fare questo sono detti trasduttori.
• Più in particolare i dispositivi che trasformano altri tipi di energie in
energia elettrica sono detti sensori, mentre quelli che convertono
energia elettrica in altre forme sono detti attuatori.
• Un circuito è un insieme di componenti elettroniche che muove
elettricità tra le componenti. Sono cicli chiusi di connessioni con
un'alimentazione (es. batteria).
• In un circuito elettricità fluisce da un punto a potenziale energetico
maggiore (indicato come alimentazione, VCC o semplicemente +) ad
un punto di potenziale inferiore. La terra o massa (o GND o -) è
tipicamente il punto a minor potenziale.
Concetti di base dell'elettronica
• Corrente I (misurata in ampere, simbolo A): è la quantità di carica
elettrica che passa attraverso uno specifico punto del circuito
• Voltaggio V (misurato in volt, simbolo V): è la differenza di energia tra
un punto del circuito ed un altro (o tensione)
• Resistenza R (misurata in ohm, simbolo Ω): misura quanto un
componente resiste al passaggio dell'energia elettrica
• Potenza P (misurata in watt, simbolo W): misura l'energia dissipata
dal circuito
Legge di Ohm: V=R•I
Prima legge di Joule: P=V•I=R•I2=V2/R
Concetti di base dell'elettronica
In un circuito, perché funzioni, ci deve essere almeno un percorso
completo dall'alimentazione (VCC) a massa (GND)
La corrente elettrica cerca sempre il percorso con meno resistenza
possibile. Ciò vuol anche dire che se creata una connessione diretta
(senza componenti, quindi senza o quasi resistenza, un filo ad esempio)
tra VCC e GND, tutta la corrente fluirà lì (e nulla nel resto del circuito) e
avrete fatto un corto circuito che provoca surriscaldamento e scintille e
spesso brucia il circuito.
Architettura di Arduino Uno
Architettura di Arduino Uno
Architettura di Arduino Uno
Architettura di Arduino Uno
Analogico vs Digitale
Segnale analogico
• Può assumere qualunque valore (eventualmente in un intervallo)
• È continuo in ampiezza (quanto vale)
• È continuo nello spazio e/o nel tempo.
Segnale digitale
• Può assumere un insieme finito di valori, cioè
• è discreto in ampiezza
• È una sequenza di numeri, quindi è discreto
•
nel tempo (e/o nello spazio)
PIN digitali (2/2)
• SPI: Serial Peripheral Interface, altro protocollo per
la comunicazione seriale, realizzato mediante i pin
10-13
• Pin 13: questo è anche automaticamente collegato
al LED che dicevamo prima e quindi se questo pin è
a valore alto (1) il led è acceso, altrimenti è spento
Altri componenti a disposizione
Tralasciando i fili, i componenti principali sono:
• BreadBoard (in italiano spesso chiamata millefori): è il componente
su cui inserire i vari componenti sia per tenerli fermi sia per collegarli
tra loro
• Resistenze: ce ne sono molte e di tipo diverso. La caratteristica
principale è il loro valore di resistenza (in ohm).
• LED: sfruttano la proprietà di alcuni semiconduttori di emettere fotoni
tramite emissione spontanea. Di solito hanno due terminali: anodo e
catodo. L'anodo è il terminale più lungo, oppure il catodo presenta
una piegatura. Per farli funzionare bisogna collegare l'anodo al + (VCC)
e il catodo al – (GND)
• Switch o interruttore: uno switch interrompe il flusso di corrente,
"spezzando" il circuito quando aperto e chiudendolo quando chiuso.
• Potenziometro: è un dispositivo che permette la variazione della
tensione letta in uscita modificato tramite una manovella la resistenza
del dispositivo. Ha 3 terminali, uno da collegare a VCC, uno a GND e il
terzo (centrale o isolato) per leggere la tensione variabile.
•PRIMO PROGETTO CON ARDUINO
•SERIE VS PARALLELO NEI CIRCUITI ELETTRICI
Primo Progetto
Prima di cominciare a parlare di programmazione di Arduino facciamo un
paio di prove per capire il concetto fondamentale di serie e parallelo. Qui
Arduino fa solo da tramite fornendo alimentazione al circuito, ma null'altro.
Innanzitutto colleghiamo Arduino all'alimentazione. La cosa più pratica è di
utilizzare il cavo USB a disposizione nel kit collegandolo ad un computer (ad
es il portatile).
Componenti necessari: Arduino e breadboard, magari nella piattaforma in
legno del kit
• Due cavi lunghi (poss. rosso e nero)
• Un led rosso
• Uno switch o pulsante
• Una resistenza da 220 ohm
• Due connettori corti
Primo Progetto
Prima di cominciare a parlare di programmazione di Arduino facciamo un
paio di prove per capire il concetto fondamentale di serie e parallelo. Qui
Arduino fa solo da tramite fornendo alimentazione al circuito, ma null'altro.
Innanzitutto colleghiamo Arduino all'alimentazione. La cosa più pratica è di
utilizzare il cavo USB a disposizione nel kit collegandolo ad un computer (ad
es il portatile).
Componenti necessari: Arduino e breadboard, magari nella piattaforma in
legno del kit
• Due cavi lunghi (poss. rosso e nero)
• Un led rosso
• Uno switch o pulsante
• Una resistenza da 220 ohm
• Due connettori corti
Primo Progetto
• 1) Scollegare l'alimentazione prima
di costruire il circuito
• 2) Collegare cavo rosso da pin 5V
di Arduino a uno qualsiasi dei fori
nella linea + della breadboard.
Stessa cosa con cavo nero tra pin
GND e foro nella linea -.
• 3) Posizionare lo switch a cavallo
delle due parti della breadboard.
La piega sui piedini deve andare
verso il centro della board
• 4) Mettere una resistenza da 220
ohm tra VCC e un lato dello switch
Primo Progetto
• 5) Collegare l'anodo (piedino più
lungo) il led rosso con l'altro
piedino dello switch mediante un
filo (di colore qualsiasi)
• 6) Collegare l'altro lato (catodo) del
led con GND mediante un filo
(colore qualsiasi) 7) Collegare
l'alimentazione con il cavo USB e
provare a premere lo switch
Serie e Parallelo
• Due componenti si dicono in serie
quando vengono uno dopo l'altro.
Due componenti di dicono in
parallelo se esistono due percorsi
paralleli della corrente, uno di
fianco all'altro.
• Modifichiamo l'esempio
precedente mettendo prima due
switch in serie e poi in parallelo.
• In questo caso solo la pressione di
entrambi gli switch fa accendere il
led.
Serie e Parallelo
• Nel caso del parallelo invece basta
che uno degli switch sia premuto
per far accendere il led.
PROGRAMMAZIONE ARDUINO
INSTALLAZIONE SOFTWARE
COMUNICAZIONE CON LA SCHEDA
PRIME ISTRUZIONI
PRIMO PROGETTO DI PROGRAMMAZIONE
Programmazione dell’ Arduino
• Cominciamo a vedere, sempre tramite esempi pratici, come
programmare il microcontrollore di Arduino.
• Programmarlo serve per modificare il suo comportamento a seconda
degli ingressi (tipicamente dai sensori) e dell'algoritmo che si vuole
realizzare. Tralasceremo se non strettamente necessario di fare
disamine teoriche su algoritmi e concetti della programmazione
• Innanzitutto è necessario che vi scarichiate ed installate l'IDE
(Integrated Development Environment) per Arduino. Un IDE è un
software che vi permette di scrivere direttamente il codice,
compilarlo e scaricarlo sulla scheda Arduino per farlo funzionare.
Spesso mette a disposizione anche altre funzionalità (come il
debugger, l'help, l'evidenziazione delle parole chiavi, ecc.)
Progetto con IDE
Il progetto prevedrà 3 led (due rossi e uno verde): inizialmente il led
verde sarà acceso e gli altri spenti. Alla pressione di un pulsante (switch
– già visto) vogliamo che il verde si spenga e i due rossi lampeggino.
Componenti necessari:
• Arduino e breadboard
• Due cavi lunghi (poss. rosso e nero)
• Due led rossi e uno verde
• Uno switch o pulsante
• Tre resistenze da 220 ohm e una da 10 Kohm
• Quattro connettori lunghi e uno corto
Progetto con IDE
1) Come al solito come prima cosa
collegiamo GND e VCC
2) Inseriamo i 3 led
3) Colleghiamo l'anodo di ciascuno con un
PIN digitale (es: 4 e 5 ai rossi e 3 al verde).
Il catodo è invece collegato attraverso una
resistenza da 220 ohm a GND
4) Mettiamo lo switch come negli esempi
precedenti. Colleghiamo ad alimentazione
e a massa attraverso una res. da 10 kohm
5) Aggiungiamo una connessione tra un
lato dello switch e il PIN digitale 2
Progetto con IDE
In pratica noterete che questa volta
non c'è un collegamento diretto tra
switch e led, ma solo attraverso
Arduino che utilizzerà il pin digitale 2
per verificare se è stato premuto lo
switch e a questo punto cambierà il
comportamento (acceso/spento) dei
led mediante i pin digitali 3,4 e 5.
Dobbiamo quindi scrivere il codice
che effettua questa operazione
Uso dei pin digitali
I pin digitali hanno solo due stati possibili: HIGH (o ON, acceso) e LOW (o
OFF, spento). Se un PIN in OUTPUT è messo HIGH significa che avrà una
tensione di 5V.
• Come detto in precedenza, i pin digitali di Arduino possono essere posti
sia come input che come output
• Di solito si parte almeno con il pin 2 perché i pin 0 e 1 come visto sono
utilizzati per la trasmissione seriale
ci serviranno 3 comandi:
1. pinMode per scegliere se un pin è input o output per quel programma
2. digitalRead per leggere un valore da un pin digitale in input
3. digitalWrite per scrivere un valore su un pin digitale in output
Uso dei pin digitali
Ogni programma o sketch di Arduino ha due funzioni principali. Una funzione è una
parte di programma che esegue comandi specifici (simile al concetto di funzione in
matematica). Le funzioni hanno nomi univoci e vengono "chiamate" (o "invocate")
quando serve.
Le funzioni principali di Arduino sono chiamate setup() e loop() (dove le parentesi stanno
ad indicare i parametri di ingresso alla funzione che in questo caso non ci sono).
La dichiarazione base di queste funzioni è la seguente:
void setup() {
}
void loop() {
}
Il codice racchiuso tra parentesi graffe rappresenta la lista di comandi di quella funzione
Uso dei pin digitali
I programmi (in qualsiasi linguaggio) ricevono in ingresso dei dati, li
elaborano e forniscono in uscita dei risultati.
Per raggiungere questo risultato fanno uso di variabili, costanti, funzioni e
comandi
• Le variabili sono delle entità che memorizzano dei dati (all'interno della
memoria di Arduino). Esse hanno un nome (significativo), un tipo (che
indica quale tipo di dato può essere memorizzato) ed eventualmente un
valore iniziale (o di default; se non indicato il valore può essere zero o
indefinito a seconda del processore). Il dato contenuto in una variabile
può appunto variare valore, a differenza delle costanti.
Basti per ora sapere che la dichiarazione di una variabile si fa con:
<tipo> <nome> [ = <valore iniziale ];
Uso dei pin digitali
Le variabili possono essere dichiarate fuori da qualsiasi funzione (ed in tal
caso si chiamano globali) o all'interno di una funzione (ed in tal caso si
chiamano locali). Le variabili globali sono "visibili" (cioè utilizzabili) da tutto
il programma e da ogni funzione. Le variabili locali sono invece visibili solo
all'interno della funzione dove sono dichiarate.
• Non possono esserci due variabili "allo stesso livello" con lo stesso
nome, ma possono esserci (anche se meglio non farlo per evitare
confusione) due variabili con lo stesso nome (e tipo diverso volendo!) che
tra loro sono visibili. Es:
int a=0;
int a=0;
void setup() {
int a=1;
int a=1; }
void setup() { }
OK!
NO!!
Il codice
Programma di prova (2/3)
La fuzione setup() citata prima viene eseguito solo una volta quando l'Arduino
viene acceso (o la prima volta che viene caricato un nuovo sketch).
In questa funzione di solito si fanno le operazioni di inizializzazione del programma.
Nel nostro esempio dobbiamo solo settare per i 4 pin digitali se sono input o
output.
void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(2,INPUT);
}
Il codice
• La fuzione loop() invece viene eseguita in continuazione dopo la fine
dell'esecuzione di setup(). Questo è il cuore del programma. Nel nostro caso
dobbiamo leggere il valore del pin 2 per verificare se è stato premuto il bottone
e di conseguenza cambiare lo stato switchState e il comportamento dei led.
• Per verificare il valore di un pin in input si usa digitalRead con un parametro che
è il numero del pin da leggere.
void loop() {
switchState = digitalRead(2);
• // questo è un commento
Se avete necessità di inserire un commento si usano le doppie barre (dritte /, sopra
al 7, non quelle rovesciate \ a sinistra di 1).
• Se c'è tensione sul pin 2 (e si ha solo se il circuito è chiuso dal bottone, quindi il
bottone è premuto), allora nella variabile switchState si mette il valore 1 (HIGH)
altrimenti il valore 0 (LOW).
IF ed ELSE
Cominciamo a vedere le strutture di controllo. Queste permettono di
modificare l’esecuzione sequenziale del programma. La prima e più
semplice (anche più usata) è l'istruzione condizionale IF che permette
di eseguire due parti di programma diverse a seconda che una
condizione sia VERA o FALSA.
Per verificare una condizione si usano i predicati booleani e gli
operatori relazionali o Gli operatori relazionali sono: == (uguale), !=
(diverso), <, <=, >, >=. Mettono a confronto due valori e se il confronto
è vero (es 5>4) allora restituiscono il valore VERO (true, 1) altrimenti
FALSO (false, 0).
IF ed ELSE
I predicati booleani si basano sull'Algebra di Boole. I simboli (valori) di base
dell’algebra di Boole sono lo 0 (falso) e 1 (vero), come nel sistema binario.
oLe operazioni di base dell’algebra sono: o
somma o OR logico
oprodotto o AND logico
ocomplemento o NOT logico
O Le tabelle di verità di queste operazioni sono le seguenti:
Legge di De Morgan: NOT(a AND b) = NOT(a) OR NOT(b) NOT(NOT(a) OR (b AND c)) = a AND NOT(b AND c)
= = a AND NOT(b) OR NOT(c)
Il codice
Riprendiamo quindi il nostro progetto. Eravamo rimasti alla funzione
loop() che iniziava così:
void loop() {
switchState = digitalRead(2);
Ora verifichiamo il valore letto dal pin 2:
if (switchState == LOW) {
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW); }
Quindi se il pulsante non è premuto, il pin 2 è a LOW, quindi anche
switchState, quindi si esegue la parte IF accendendo il led verde e
tenendo spenti quelli rossi
Il codice
Se invece il pulsante viene premuto vogliamo far lampeggiare i due led
rossi e spegnere il verde:
else {
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
delay(250); // aspetta per ¼ di secondo
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
delay(250); // aspetta per ¼ di secondo
}
} // fine loop()