1. ELECTRONICS LAB [WITH ARDUINO]
Daniele Costarella
Teatro Carlo Gesualdo / Casina Del Principe – Avellino – 28 > 31 agosto 2013
Salvatore Carotenuto
2. Rights to copy
Electronics LAB [with Arduino]28 > 31 agosto 2013 2
Attribution – ShareAlike 3.0 Unported
You are free:
● to Share - to copy, distribute and transmit the work
● to Remix – to adapt the work
Under the following conditions:
Attribution – You must attribute the work in the manner
specified by the authors.
Share Alike – If you alter, transform, or build upon this
work, you may distribute the resulting work only under the
same or similar license to this one.
Your fair use and other rights are in no way affected by the above.
To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/.
4. Il programma di oggi
Mattina
• Presentazione del corso
• Microcontrollori e introduzione ad Arduino
• Elementi di programmazione
Pomeriggio
• Cenni di elettronica
• Primi passi con Arduino
Electronics LAB [with Arduino]28 > 31 agosto 2013 4
5. Di cosa parleremo?
In questo corso impareremo a costruire semplici oggetti
elettronici in grado di interagire con gli esseri umani usando
sensori e attuatori controllati da dispositivi elettronici.
Electronics LAB [with Arduino]28 > 31 agosto 2013 5
6. Cos'è Arduino?
Il mondo Arduino, fondamentalmente,
si compone di 3 componenti essenziali
Electronics LAB [with Arduino]28 > 31 agosto 2013 6
7. Cos'è Arduino?
1. Una scheda elettronica
Electronics LAB [with Arduino]28 > 31 agosto 2013 7
8. Cos'è Arduino?
1. Una scheda elettronica
2. Un ambiente di sviluppo
semplificato
Electronics LAB [with Arduino]28 > 31 agosto 2013 8
9. Cos'è Arduino?
1. Una scheda elettronica
2. Un ambiente di sviluppo
semplificato
3. Una filosofia e una
comunità enorme
Electronics LAB [with Arduino]28 > 31 agosto 2013 9
10. A cosa serve?
Con Arduino è possibile creare circuiti per molte
applicazioni nel campo della robotica, dell'automazione,
e nella realizzazione di effetti luminosi e sonori
E' inoltre un prodotto ideale per la protipazione rapida e
per l'apprendimento delle basi dell'elettronica
e della programmazione
Electronics LAB [with Arduino]28 > 31 agosto 2013 10
11. Perché Arduino?
Electronics LAB [with Arduino]
• Artisti e designer
• Progettisti elettronici
• Open source hardware
●
Open Source Physical Computing Platform
• Open source
●
Aperto a modifiche, schemi sempre disponibili
• Community
●
Wiki, forum, tutorial
28 > 31 agosto 2013 11
12. Physical Computing?!
Electronics LAB [with Arduino]
“Physical Computing is about prototyping with electronics,
turning sensors, actuators and microcontrollers into materials
for designers and artists.”
“It involves the design of interactive objects that can communicate
with humans using sensors and actuators controlled by a behaviour
implemented as software running inside a microcontroller.”
Massimo Banzi, Arduino Co-Founder
28 > 31 agosto 2013 12
14. Segnali analogici e digitali
Electronics LAB [with Arduino]28 > 31 agosto 2013 14
15. Parleremo di “tensione” per indicare la
differenza tra il potenziale elettrico di due
punti dello spazio.
Una semplice analogia:
• Acqua ↔ Carica
• Pressione ↔ Tensione
• Flusso ↔ Corrente
Corrente, tensione e resistenza
Electronics LAB [with Arduino]28 > 31 agosto 2013 15
16. Possiamo pensare all’ammontare di acqua
che fluisce attraverso la condotta come la
“corrente” che scorre in cavo elettrico
Il nostro modello:
• Acqua ↔ Carica [Coulomb]
• Pressione ↔ Tensione [Volt]
• Flusso ↔ Corrente [Ampere]
• Ampiezza tubo ↔ Resistenza [Ohm]
Corrente, tensione e resistenza
Electronics LAB [with Arduino]28 > 31 agosto 2013 16
17. La “resistenza elettrica” è una
grandezza fisica che misura la tendenza
di un corpo ad opporsi al passaggio di
una corrente elettrica, quando sottoposto
a una tensione elettrica.
Il nostro modello:
• Acqua ↔ Carica [Coulomb]
• Pressione ↔ Tensione [Volt]
• Flusso ↔ Corrente [Ampere]
• Ampiezza tubo ↔ Resistenza [Ohm]
Corrente, tensione e resistenza
Electronics LAB [with Arduino]28 > 31 agosto 2013 17
24. Cenni di elettronica
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Uso della breadboard ?!?
24
25. Cenni di elettronica
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Uso della breadboard
Una breadboard (o anche detta basetta
sperimentale) è uno strumento utilizzato per
creare prototipi di circuiti elettrici.
Non richiede saldature ed è completamente
riusabile (è perciò utilizzata soprattutto per
circuiti temporanei).
25
26. Cenni di elettronica
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Uso della breadboard: struttura
Tutte le breadboard hanno, generalmente, una struttura simile composta da
linee di trasmissione (strips) che consistono in collegamenti elettrici tra i fori.
Come in figura, si possono notare le linee di alimentazione, poste generalmente
ai lati e collegate lungo tutto l’asse, e le linee dedicate ai componenti, collegate
in posizione perpendicolare alle linee di alimentazione.
26
27. Cenni di elettronica
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Uso della breadboard !!!
27
28. Arduino: “Studiamo” l'hardware
USB
LED
RX/TX
LED Test
(pin 13)
Alimentazione
esterna
ATmega328
Pin di in/out digitaliPulsante di
reset
Power LED
Alimentazioni e
massa
Input analogici
Electronics LAB [with Arduino]28 > 31 agosto 2013 28
29. Caratteristiche tecniche
Giffoni HackLAB 2013
Parametro Valore
Microcontrollore ATmega328
Tensione operativa 5 V
Tensione di ingresso (raccomandata) 7-12 V
Tensione di ingresso (Limiti) 6-20 V
Pin di I/O digitali 14 (di cui 6 PWM)
Pin di ingresso analogici 6
Corrente DC per i pin di I/O 40 mA
Corrente DC per i pin a 3.3V 50 mA
Memoria Flash 32 kB (ATmega328) di cui 0.5 usata per il
bootloader
SRAM 2 kB (ATmega 328)
EEPROM 1 kB (ATmega328)
Velocità del Clock 16 MHz
28 > 31 agosto 2013 29
30. Qualche termine strano
Giffoni HackLAB 2013
sketch
Il programma che scrivete e fate girare sulla scheda Arduino
pin
I connettori di input e output
digital
Vuol dire che può assumere solo due valori: ALTO o BASSO, ON o OFF
oppure 0 o 1
analog
Quando i valori utili che rappresentano i segnali sono continui (infiniti)
28 > 31 agosto 2013 30
50. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Installazione dell’ambiente di sviluppo
1. Scaricare l’IDE di Arduino dal sito web del progetto: arduino.cc
2. Collegare la board Arduino tramite il cavo USB
3. Installare i driver necessari
4. Riavviare il computer
5. Avviare il software di Arduino
50
51. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Installazione dell’ambiente di sviluppo
●
Collegarsi al sito web del progetto:
arduino.cc
●
Nella sezione Getting Started
scegliere il sistema operativo in uso:
Windows, Mac OS X, Linux
●
Scaricare il software di Arduino
51
52. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Installazione driver chip FTDI
●
Collegarsi al sito web del progetto:
www.ftdichip.com
●
Download dei driver adatti alla propria
piattaforma
●
Installare i driver
●
Riavviare il sistema
52
53. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Collegare la board
●
Collega Arduino al computer con un cavo USB
●
Un LED di colore verde (PWR) si accede quando la scheda è
alimentata correttamente
53
54. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Avvio dell'ambiente di sviluppo
54
55. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Impostazione dell’ambiente di lavoro: Tools > Board
55
56. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Impostazione dell’ambiente di lavoro: Tools > Serial Port
56
57. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
La semplice interfaccia
Verifica Carica Nuovo Apri Salva Monitor Seriale
57
58. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Il “ciclo” di sviluppo
58
59. Elementi di programmazione
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Esaminiamo, innanzitutto, un po’ di sintassi utile:
Simbolo Spiegazione
// Commento su una riga
Es. // questo è un commento
/* Inizio di un commento su più righe
*/ Chiusura di un commento su più
righe
void Dichiarazione di una funzione senza
nessun valore di ritorno: la funzione
esegue tutte le istruzioni senza
restituire alcun valore.
setup() E’ la funzione (obbligatoria in
Arduino) dedicata alle impostazioni
iniziali
59
60. Elementi di programmazione
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Esaminiamo, innanzitutto, un po’ di sintassi utile:
Simbolo Spiegazione
loop() Funzione obbligatoria in Arduino:
costituisce il loop principale del
programma
int Usato per dichiarare una variabile di
tipo integer (intero)
pinMode(pin, mode) Configurazione dei pin di Arduino
(INPUT o OUTPUT)
digitalWrite(pin, level) Comando di scrittura su un pin
digitale
delay(seconds) Funzione che introduce un’attesa
(espresso in millesimi di secondo)
60
61. Elementi di programmazione
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Un listato di esempio:
/* FLUSSI 2013 day 1
Esempio: lampeggio di un LED collegato al pin 13
*/
int ledPin = 13; // LED connesso al pin 13
void setup()
{
pinMode(ledPin, OUTPUT); // configura il pin come output
}
void loop()
{
digitalWrite(ledPin, HIGH); // accende il LED
delay(1000); // attende un secondo (ossia 1000 millisecondi)
digitalWrite(ledPin, LOW); // spegne il LED
delay(1000); // attende un secondo prima di ripartire
}
61
62. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Input / Output di segnali digitali: LED blinking
62
63. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Input / Output di segnali digitali: lettura di un pulsante
63
64. Elementi di programmazione
28 > 31 agosto 2013 Electronics LAB [with Arduino] 64
Il costrutto if e if/else
Simbolo Spiegazione
if (condizione)
{
// esegue questo codice
// se la condizione è vera
}
Esecuzione condizionata: esegue un
blocco di codice se e solo se la
condizione espressa è verificata
if (condizione)
{
// esegue questo codice
// se la condizione è vera
}
else
{
// esegue questo codice
// se la condizione è falsa
}
Se la condizione è vera esegue un
blocco di codice; se la condizione non
è vera viene eseguito il codice del
blocco else
65. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Input / Output di segnali digitali
Il costrutto if
/*
FLUSSI 2013 day 1:
Accendiamo il LED con un pulsante
*/
int led_pin = 13;
int button_pin = 8;
int state = 0;
int value = 0;
void setup()
{
pinMode(led_pin, OUTPUT);
pinMode(button_pin, INPUT);
}
[ Continua … ]
65
66. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Input / Output di segnali digitali
void loop()
{
value = digitalRead(button_pin);
if (value == HIGH)
{
state = 1;
}
else
{
state = 0;
}
if (state == 1)
{
digitalWrite(led_pin, HIGH);
}
else
{
digitalWrite(led_pin, LOW);
}
}
66
67. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Lettura di segnali analogici
Il componente LDR (Light Dependent Resistor)
67
68. Elementi di programmazione
28 > 31 agosto 2013 Electronics LAB [with Arduino] 68
La funzione analogRead
Simbolo Spiegazione
int analogRead(pin)
Legge la tensione applicata al pin di
input analogico e restituisce un
numero compreso tra 0 e 1023 che
rappresenta una tensione tra 0 e 5V
val = analogRead(0)
Esempio: legge l'analog input 0 e
memorizza il risultato nella variabile
val
69. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Lettura di segnali analogici
Il componente LDR (Light Dependent Resistor)
69
70. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
/*
FLUSSI 2013 day 1:
Lettura di un segnale analogico: LDR
*/
const int SENSOR = 0;
int val = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(SENSOR);
Serial.println(val);
delay(100);
}
Lettura di segnali analogici
Il componente LDR
70
71. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
/*
FLUSSI 2013 day 1:
Lettura di un segnale analogico: LDR
*/
const int SENSOR = 0;
int val = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(SENSOR);
Serial.println(val);
delay(100);
}
Lettura di segnali analogici
Il componente LDR
71
72. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
Lettura di segnali analogici: aggiungiamo un LED
72
73. Primi passi con Arduino
28 > 31 agosto 2013 Electronics LAB [with Arduino]
/*
FLUSSI 2013 day 1:
Regoliamo il lampeggio in base al
valore analogico letto
*/
# define LED 13 // pin usato per il LED
int val = 0; // variabile usata per il
// valore letto dall'LDR
void setup()
{
pinMode(LED, OUTPUT);
}
void loop()
{
val = analogRead(0);
digitalWrite(13, HIGH); // accendi il LED
delay(val); // attendi
digitalWrite(13, LOW); // spegni il LED
delay(val); // attendi
}
Lettura di segnali analogici
Il componente LDR
73