Introduzione ad Arduino

Transcript

Introduzione ad Arduino
Introduzione a Arduino Gianpaolo Gonnelli [email protected] Arduino
1
Contenu7 l 
l 
l 
l 
l 
l 
l 
Cosa è? Da cosa è composto? Alcuni componen7 u7li Programmare Arduino Esperimen7 Comunicare col PC Schede ARM Arduino
2
Cosa è? •  Arduino è una scheda eleBronica che ci permeBe di programmare in maniera “semplice” un microcontrollore •  ProgeBo Italiano: Massimo Banzi ex-­‐docente all’Interac7on Design Ins7tute di Ivrea •  Arduino è il nome di un pub Arduino
3
Applicazioni Arduino
4
Modelli di Arduino Arduino
5
Arduino Shields Arduino
6
A cosa serve • 
• 
Arduino può essere visto come una centralina di controllo U7lizzato per la creazione di sistemi embedded (una volta caricato il codice, occorre solo l’alimentazione) Arduino
7
Da cosa è composto •  Il cuore di Arduino: il Microcontrollore •  Il risuonatore ceramico •  La porta seriale e l’alimentazione •  Componen7 eleBronici Arduino
8
Microcontrollore Atmel Atmega328 •  Computer on chip •  Programmazione a basso livello •  Bootloader Arduino
9
Porte e alimentazione l 
l 
Seriale USB per la programmazione e l'alimentazione 5v Ingresso alimentatore Arduino
10
Caratteristiche di Arduino
Microcontroller
ATmega328 Opera7ng Voltage 5V Input Voltage (recommended) 7-­‐12V Input Voltage (limits) 6-­‐20V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 mA DC Current for 3.3V PinFlash 50 mA Memory 32 KB (ATmega328) of which 0.5 KB bootloader SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Clock Speed 16 MHz Arduino
11
Digital vs Analog vs Digital PWM
•  Digital –  Due livelli 0-­‐1 (basso – alto) •  Analog –  Misura la tensione •  Digital PWM –  Simula l’analogica Arduino
12
PWM di Arduino
Pulse Width Modulation ed è una tecnica per simulare la
variazione di tensione
Tensione a step discreti tra 0 e i 5V
Il rapporto fra i livelli viene variato all’interno del
singolo ciclo(duty cicle) per simulare una
variazione di tensione
Per inviare un segnale pwm, analogWrite invia
la il rapporto tra basso e alto rimappato su
valori interi da 0 a 255.
La funzione writemicroseconds per
specificare per quanto tempo il segnale rimarrà
alto
Arduino
13
Alcuni Componen7 u7li l 
l 
l 
l 
l 
l 
l 
l 
Breadboard Resistenze Led Potenziometri Fotoresistenze Servo motori Panoramica sensori (I soli7: condensatori, diodi, transistor etc..) Arduino
14
La breadboard: proto7pazione circui7 Standard
Schema di collegamenti
Arduino
15
Resistenze: come leggerle Normalmente le resistenze sono caratterizzate da 4 strisce colorate:
per conoscere l’ordinamento delle strisce si guarda dove si trova
quella che dista di più dalle altre (che nell’ordinamento sarà l’ultima)
Significato dato dall’ordine:
•  1a e 2a: valore numerico
•  3a: moltiplicatore (normalmente in ohm)
•  4a: tolleranza (percentuale)
NOTA: Esistono anche resistenze a 6 strisce dette di precisione il loro significato è lo
stesso di quelle presentate solo che anche la 3° è un valore numerico la 4° il moltiplicatore
la 5° la tolleranza e la 6° la variazione di tolleranza a seconda della temperatura
Arduino
16
Resistenze: come leggerle Significato del colore
Prima e seconda striscia
Terza striscia
Quarta striscia
Valore = <rosso><nero>*<rosso>=20*100=2 Kohm
Tolleranza = <oro>= 5%
Arduino
17
Light Emiing Diode: LED Sfruttano la proprietà di alcuni semiconduttori di
emettere fotoni (solitamente giunzioni p/n) grazie
all’effetto noto come emissione spontanea
I più comuni hanno due terminali: anodo e catodo.
Solitamente l’anodo è più lungo del catodo oppure il catodo
presenta una piegatura
Per il collegamento:
•  Anodo al polo positivo
•  Catodo al polo negativo
•  Resistenza in serie all’alimentazione(limita la corrente in ingresso al led)
Calcolo della resistenza: R = (V-Vled)/I
Vled è la caduta di tensione nel led stesso che è proporzionale alla frequenza
emessa
Arduino
18
Light Emiing Diode: LED Valori nominali •  LED rossi = 1,6 V •  LED giallo = 2,2V •  LED verde = 2,4 V •  LED bianco = 3,0 V ( warm o sunny ) •  LED bianco ( cold ) o blu = 3,5 V Valori standard I valori di corrente sono intorno ai 10/15mA Esempio (LED rosso) R=(V-­‐Vled)/I=(5-­‐1,6)/0,016=218.77 ohm Arduino
Calcolo della resistenza:
R = (V-Vled)/I
220ohm (standard) 19
Potenziometri
Il potenziometro è equivalente ad un partitore di tensione variable
Il potenziometro è un dispositivo con
un contatto strisciante sulla reistenza
interna
Permette la variazione della tensione
letta in uscita (attuato manualmente)
Applicazioni:
Joystick, robot, interruttori etc..
E’ caratterizzato da tre terminali ed una manopola, i terminali più esterni vanno
connessi all’alimentazione (+ e - intercambili) mentre da quello centrale è
possibile leggere la tensione che varia ruotando la manopola.
Arduino
20
Fotoresistenze Componente elettronico la cui resistenza è inversamente
proporzionale alla quantità di luce lo colpisce
un potenziometro attuato con la luce
Applicazione principale:
Interruttore crepuscolare
Arduino
21
Servo comandi
Attuatori con controllo di posizione integrato
Da cosa sono composti
•  Motore DC
•  Potenziometro
•  Riduttore di giri
•  Elettronica di controllo
Come funzionano
Comandati in tensione (ingresso segnale analogico o PWM) a seconda del
valore in ingresso si posizionano ad un angolo preciso angolo. L’elettronica
interna è necessaria per fermare il motore quando ha raggiunto l’angolo
(controllo lineare)
E’ presente una “mappatura” tra valori di tensione ed angoli che dipende
dalle specifiche del servocomando
Arduino
22
Panoramica sensori
Cosa misurare Tipo sensore Posizione angolare Potenziometro, encoder.. Accelerazione Accelerometro,giroscopio.. Forza e pressione Estensimetri, estensimetri a fibra oica Luce fotoresistenze, diodi.. Temperatura Termoresistenze.. Distanza Laser, ultrasuoni.. Localizzazzione GPS.. Arduino
23
Arduino Solware l 
Ambiente di sviluppo l 
Funzioni principali l 
Librerie u7li Arduino
24
Ambiente di sviluppo
Sviluppato in java
• 
Codice c-like
• 
Validazione del codice
• 
Compilazione
• 
Upload su scheda
• 
Monitor Seriale
Guida installazione:
-  http://arduino.cc/en/Guide/HomePage
Arduino
25
Funzioni principali La funzione setup()
La funzione loop()
Chiamata all’inizio del nostro programma
(sketch), serve per inizializzare le variabili,
i vari pin e per iniziare ad usare le librerie.
Questa funzione viene eseguita solo una
volta.
Chiamata subito dopo la setup questa
funzione, cicla costantemente eseguendo
ad ogni ciclo le istruzioni presenti nel suo
blocco.
int buttonPin = 3;
void loop()
{
if (digitalRead(buttonPin) == HIGH)
Serial.write('H');
else
Serial.write('L');
void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}
void loop()
{
// ...
}
}
Arduino
delay(1000);
26
Alcune funzioni e librerie utili
Librerie
Serial
Usata per la comunicazione seriale di arduino mette a disposizione delle funzioni molto
utili come:
read(),write(),available() etc..
Servo
Usata per la gestione di servo comandi.
Funzioni
pinMode(<numero pin>,<modo>)
permetta la configurazione dei pin tra input e output
DigitalWrite(<alto o basso>)
permette di settare il pin tra HIGH e LOW (0V – 5V)
DigitalRead()
legge il valore del pin (HIGH o LOW)
AnalogRead()
legge il valore di tensione in ingresso su di un pin analogico.
AnalogWrite()
scrive il valore di tensione desiderato su un pin pwm.
Map()
mappa un range numerico su un altro. Poi esempio pratico
Arduino
27
Riferimenti:
http://arduino.cc/en/Reference/HomePage
Con le mani in pasta l 
l 
l 
Esperimento1 Esperimento2 Esperimento3 Arduino
28
Esperimento 1
Accendiamo un LED
Codice:
Collegamenti
int ledPin = 10;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
}
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
Arduino
29
Esperimento2
Utilizziamo un sensore
Come collegare la fotoresistenza.
Partitore di tensione.
Tensione nominale fotoresistenza 10kOhm
V out = (R2*I)/(R2+R1)
Arduino
30
Lo schema di colllegamento
Arduino
31
Codice int fotorValue = 0;
int fotorPin = 0;
int ledPin = 10;
void setup(){
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("Setted up");
}
void loop(){
fotorValue=analogRead(fotorPin);
}
if(fotorValue >600){
int val = map(fotorValue,600,1023,0,255);
Serial.println(val);
analogWrite(10,val);
}else{
analogWrite(10,0);
}
Arduino
32
Esperimento 3 Robot Planare 2R (più o meno)
Schema di collegamento
Arduino
33
Codice
Esperimento 3 Robot Planare 2R (più o meno)
#include <Servo.h>
char buffer[10];
int stat = 1300;
int count=0;
int pot1=0;
int pot2=1;
Servo servo2;
Servo servo;
void setup()
{
servo.attach(3);
servo2.attach(5);
Serial.begin(9600);
Serial.flush();
servo.writeMicroseconds(50);
servo2.writeMicroseconds(50);
}
void loop()
{
int angle1 = analogRead(pot1);
int angle2 = analogRead(pot2);
angle1=map(angle1, 0, 1023, 1000, 2500);
angle2=map(angle2, 0, 1023, 1000, 2500);
Serial.print(angle1);
Serial.print(" - ");
Serial.print(angle2);
Serial.println();
servo.writeMicroseconds(angle1);
servo2.writeMicroseconds(angle2);
}
Viene utilizzata la libreria Servo
ed il suo metodo writeMicroseconds
Arduino
34
Trasmissione PC -­‐ Arduino Arduino
35
Esperimento 4 La testa robo7ca l  Face tracking Arduino
36
Schede con microprocessore (ARM) Raspberry pi
Arduino
37
Altre Schede ACME systems
Aria
Fox
Arduino
38
Altre schede Nvidia
Arduino
39