SlideShare a Scribd company logo
1 of 29
Download to read offline
SISTEMI EMBEDDED
Il caso Arduino
San Secondo Parmense 2013
“se ascolto dimentico, se vedo ricordo, se faccio capisco”
San Secondo Parmense – Mirko Mancin 2013
INDICE
• Le schede Arduino e le shield
• Sleep, interrupt e consumi
• Storage
• Servo motori
San Secondo Parmense – Mirko Mancin 2013
I DIVERSI ARDUINO
Arduino UNO
• Versione 3
• Comunicazione seriale facilitata
• Bootloader precaricato
• Reset software automatico
• Protezione contro ‘’Overcurrent 500mA’’
Microcontroller ATmega328
Operating 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
Pin
50 mA
Flash Memory
32 KB (ATmega328) of
which 0.5 KB used by
bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz
San Secondo Parmense – Mirko Mancin 2013
I DIVERSI ARDUINO
LilyPad Arduino Microcontroller
ATmega168V
ATmega328V
Operating Voltage 2.7-5.5V
Input Voltage
(recommended)
2.7-5.5V
Digital I/O Pins
14 (of which 6 provide
PWM output)
Analog Input Pins 6
DC Current per I/O Pin 40 mA
Flash Memory
16 KB (of which 2 KB
used by bootloader)
SRAM 1 KB
EEPROM 512 bytes
Clock Speed 8 MHz
• 50mm di diametro
• Lavabile
San Secondo Parmense – Mirko Mancin 2013
I DIVERSI ARDUINO
Arduino Nano Microcontroller
ATmega168
ATmega328
Operating Voltage 5V
Input Voltage
(recommended)
7-12V (limits 6-20V)
Digital I/O Pins
14 (of which 6 provide
PWM output)
Analog Input Pins 8
DC Current per I/O Pin 40 mA
Flash Memory
16 KB or 32 KB (of
which 2 KB used by
bootloader)
SRAM 1 KB or 2 KB
EEPROM 512 bytes or 1 KB
Clock Speed 16 MHz
• 40mm di diametro
• FTDI solo con USB
• Reset software automatico
San Secondo Parmense – Mirko Mancin 2013
I DIVERSI ARDUINO
Arduino Leonardo Microcontroller ATmega32u4
Operating Voltage 5V
Input Voltage
(recommended)
7-12V (limits 6-20V)
Digital I/O Pins
20 (of which 7 provide
PWM output)
Analog Input Pins 12
DC Current per I/O Pin 40 mA
Flash Memory
32 KB (of which 4 KB
used by bootloader)
SRAM 2.5 KB
EEPROM 1 KB
Clock Speed 16 MHz
• Implementa anche comunicazione USB
(es. visibile come mouse o tastiera dal
pc)
• 6 canali digitali/analogici (4,6,8,9,10,12)
• Reset software automatico
• Necessario inizializzare il bootloader
San Secondo Parmense – Mirko Mancin 2013
I DIVERSI ARDUINO
Arduino
Mega 2560
Microcontroller ATmega2560
Operating Voltage 5V
Input Voltage
(recommended)
7-12V (limits 6-20V)
Digital I/O Pins
54 (of which 15
provide PWM output)
Analog Input Pins 16
DC Current per I/O Pin 40 mA
Flash Memory
256 KB (of which 8 KB
used by bootloader)
SRAM 8 KB
EEPROM 4 KB
Clock Speed 16 MHz
• Come l’Arduino UNO solo con più pin di
I/O
• La I2C (pin 20 e 21) non è allocata come
sull’Arduino UNO (pin A4 e A5)
San Secondo Parmense – Mirko Mancin 2013
I DIVERSI ARDUINO
Arduino Due Microcontroller AT91SAM3X8E
Operating Voltage 3.3V
Input Voltage
(recommended)
7-12V (limits 6-20V)
Digital I/O Pins
54 (of which 12
provide PWM output)
Analog Pins 12 Input e 2 Output
DC Current per I/O Pin 800 mA
Flash Memory
512 KB (of which 8 KB
used by bootloader)
SRAM 96 KB
EEPROM 4 KB
Clock Speed 84 MHz
• Processore a 32-bit
• Supporto a comunicazione CAN
• Integrazione di un modulo DAC a 12bit
San Secondo Parmense – Mirko Mancin 2013
ALCUNE SHIELD IN COMMERCIO
Motor ShieldEthernet Shield
Proto ShieldWiFiXbee
Wireless Shield
San Secondo Parmense – Mirko Mancin 2013
ESEMPI DI SKETCH CON LE SHIELD
NETWORKING
-> Web Server e client Ethernet
-> Web Server e client Wireless
-> Rete Xbee
Ma se voglio sapere come utilizzare la Motor Shield?
Cerco su internet (link) !!!
San Secondo Parmense – Mirko Mancin 2013
CONSUMI
Con lo sketch ‘’Blink’’ è stato possibile effettuare un test sul consumo del led 13
presente sulla scheda Arduino. Nella figura a destra, quando il led è spento, la
scheda consuma 48mA, mentre quando si accende, consuma 51,5mA.
Con una batteria da 1000 mA si potrebbe alimentare Arduino che
attende dentro un delay per circa 20 ore (1000 / 48 = 20,8333 )!!
San Secondo Parmense – Mirko Mancin 2013
Come risolvere il problema?
INTERRUPT
I pin di Arduino Uno sensibili alle variazioni di segnale sono i pin2 e pin3 che
rispettivamente vengono specificati nella funzione attachInterrupt come
0 e 1.
Nella funzione attachInterrupt , oltre a specificare il pin che vogliamo
monitorare dobbiamo specificare il nome della funzione da eseguire quando si
scatena l’interruzione e il modo in cui l’interruzione deve essere interpretata.
La variabili state viene dichiarata utilizzando l’attributo volatile, questo perchè la
funzione gestita dall’interrupt viene eseguita in contemporanea al
blocco loop() ed è necessario che in fase di compilazione la variabile sia caricata
nella RAM.
San Secondo Parmense – Mirko Mancin 2013
INTERRUPT
LOW Il segnale viene scatenato quando il livello del segnale è basso
CHANGE Il segnale viene scatenato ogni volta che si verifica un cambiamento di livello
sul pin
RISING Il segnale viene scatenato ogni volta che il livello passa da basso ad alto
FALLING Il segnale viene scatenato ogni volta che il livello passa da alto a basso
La variazione di stato del segnale applicato all’Arduino può essere gestita
in vari modi, a seconda del parametro utilizzato per la gestione dell’interrupt.
La tabella seguente mostra i parametri che determinano come deve
essere generata l’interruzione.
San Secondo Parmense – Mirko Mancin 2013
CODICE DI ESEMPIO PER INTERRUPT
int pin = 8;
//Notare l'uso di 'volatile'
volatile int state = LOW;
void setup(){
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
//Creo un gestore di interrupt e lo associo al pin3
attachInterrupt(1, GestInt, LOW);
}
void loop(){
//fai qualcosa...
delay(10);
}
void GestInt(){
state = !state;
digitalWrite(pin, state);
}
San Secondo Parmense – Mirko Mancin 2013
INTERRUPT TIMER
Prescale Time per counter tick Max Period
1 0.0625 uS 8.192 mS
8 0.5 uS 65.536 mS
64 4 uS 524.288 mS
256 16 uS 2097.152 mS
1024 64uS 8388.608mS
Timer1
Questa libreria consente di configurare il timer interno dell’ATmega328. Ci sono 3
timer disponibili per Arduino. L’uso dei timer è utile per generare segnali PWM.
L’accuratezza del timer dipende dalla velocità del processore e dalla sua frequenza.
Il Timer1 dispone inoltre di un prescaler che può essere settato secondo la tabella
sottostante.
For 16MHz:Max Period = (Prescale)*(1/Frequency)*(2^17)
Time per Tick = (Prescale)*(1/Frequency)
San Secondo Parmense – Mirko Mancin 2013
INTERRUPT TIMER
#include "TimerOne.h"
void setup(){
pinMode(10, OUTPUT);
Timer1.initialize(500000);
// initialize timer1, and set a 1/2
second period
Timer1.pwm(9, 512);
// setup pwm on pin 9, 50% duty cycle
Timer1.attachInterrupt(callback);
// attaches callback() as a timer
overflow interrupt
}
void callback(){
digitalWrite(10, digitalRead(10) ^ 1);
}
void loop(){
// your program here...
}
Approfondimenti
Link1
Link 2
San Secondo Parmense – Mirko Mancin 2013
Arduino è dotato di due porte di interrupt: pin 2 e 3.
Grazie a questi due interrupt, Arduino è in grado di "svegliarsi" e riprendere
l'esecuzione del codice. È anche possibile eseguire codice speciale a seconda di
quale interrupt ha innescato la sveglia. Eventi sul USART (la porta seriale)
riattivano Arduino. Perché questo funzioni, Arduino deve essere in
POWER_MODE_IDLE, l'unico modo che non disattiva l'USART.
Anche se questa modalità non dà grandi risparmi energetici è possibile utilizzare
le funzioni fornite in avr/power.h
per disattivare altri moduli hardware e quindi ottenere maggiore risparmio di
energia (link).
SLEEP
power_adc_disable(),
power_spi_disable(),
power_timer0_disable(),
power_timer1_disable(),
power_timer2_disable(),
power_twi_disable()
San Secondo Parmense – Mirko Mancin 2013
Quando Arduino è in SLEEP_MODE_PWR_DOWN l'unico modo per riattivarlo è
con un interrupt watchdog timer o con un cambio di livello sui piedini 2 o 3.
Un cambio di livello implica che il pin deve essere tenuto in quello stato per un
certo periodo di tempo prima che l'interrupt venga attivato.
Nella routine di servizio di interrupt (ISR) l'interrupt deve essere disabilitato
altrimenti l'ISR verrà richiamato più volte finché non ci sarà un cambio di stato.
void pin2_isr(){
detachInterrupt(0);
pin2_interrupt_flag = 1;
}
Come conseguenza, l'interrupt deve essere riattivato nel codice una volta che il
pin è tornato a uno stato normale, cioè per un livello basso, verificare che il pin
sia andato alto prima di fissare l'interrupt nuovamente.
SLEEP
-> SleepExample
San Secondo Parmense – Mirko Mancin 2013
Ovviamente per avere un Arduino a consumo zero devo ottimizzare i dispositivi
collegati e magari pensare ad una versione Stand-Alone in modo da eliminare
dispositivi che non mi servono
(per esempio l’interfaccia seriale
o i controllori per la comunicazione
I2C o SPI).
Con una soluzione del genere si
potrebbero realizzare dispositivi
outdoor con delle autonomie
piuttosto elevate (anche un paio di
anni se si ottimizzano le sleep)
ARDUINO A CONSUMO ZERO
San Secondo Parmense – Mirko Mancin 2013
--> EEPROM
STORAGE
Arduino dispone di alcuni sistemi di storage. Uno interno al microcontrollore,
basato su una memoria EEPROM (Arduino UNO ha un EEPROM di 1KB). In
ciascuna cella puoi memorizzare un valore che va da 0 a 255, è un dato di
tipo integer ossia un numero intero.
1. per poter scrivere in ogni cella occorrono
3,3 millisecondi, per cui tienine conto
quando memorizzerai i tuoi dati nella
EEPROM;
2. le EEPROM possono essere scritte per un
massimo di 100.000 volte, per scrittura si
intende ogni volta che cambi il valore in
una cella, considerando che solitamente
utilizzi la EEPROM solo per memorizzare dei
dati di configurazione, questo valore è
decisamente elevato;
San Secondo Parmense – Mirko Mancin 2013
STORAGE
-> SD
Mentre l’altra soluzione potrebbe essere quella di utilizzare
una shield con supporto per schede SD e salvare i dati su di
essa. Le shield con slot per micro SD consentono di montare
fino a schede di 2Gb utilizzabile per scrivere e leggere i propri
file.
Libreria <SD.h>
Bisogna abilitare la scrittura sull’SD. Sull’Ethernet Shield il
pin di abilitazione è il 4.
if (!SD.begin(4)) { return; }
San Secondo Parmense – Mirko Mancin 2013
SERVO MOTORI
Uno dei campi d’applicazione preferito d’Arduino è la
robotica. Essa si basa sulla combinazione di sensori e
motori per ottenere un dispositivo automatico che
interagisca con il mondo esterno.
Alcuni motori utilizzati sono i servo motori. Essi sono
particolari tipi di motore (elettrici, pneumatici, idraulici)
generalmente di piccola potenza, le cui condizioni
operative, a differenza dei motori tradizionali, sono
soggette ad ampie e spesso repentine variazioni sia nel
campo della velocità che della coppia motrice, alle quali si
deve adattare con la massima rapidità e precisione.
Colore Funzione
Nero o marrone Negativo di alimentazione (GND)
Rosso Positivo di alimentazione (+Vcc)
Giallo o bianco Segnale di comando (ingresso)
San Secondo Parmense – Mirko Mancin 2013
SERVO MOTORI – Istruzioni principali
Libreria <Servo.h>
Servo myServo
myServo.Attach();
Associa la variabile servo ad uno specifico pin.
myServo.attach(pin);
myServo.attach(pin, min,max);
Min (opzionale): durata minima dell'impulso, in microsecondi,
corrispondente al minimo grado di rotazione (0 gradi) del servo (il
valore predefinito è 544).
Max (opzionale): durata massima dell'impulso, in microsecondi,
corrispondente alla massima rotazione ( 180 gradi) del servo (il valore
predefinito è 2400).
San Secondo Parmense – Mirko Mancin 2013
SERVO MOTORI – Istruzioni principali
Libreria <Servo.h>
Servo myServo
myServo.Attached();
Verifica l'associazione tra la variabile servo ed il pin.
Ritorna vero se il servo è associato al pin; falso in caso contrario.
San Secondo Parmense – Mirko Mancin 2013
SERVO MOTORI – Istruzioni principali
Libreria <Servo.h>
Servo myServo
myServo.Detach();
Dissocia la variabile servo al pin specificato. Se tutte le variabili servo
non sono associate, i pin PWM possono essere usati come normali
uscite ‘’Analogiche’’ con l'istruzione analogWrite().
San Secondo Parmense – Mirko Mancin 2013
SERVO MOTORI – Istruzioni principali
Libreria <Servo.h>
Servo myServo
myServo.Read();
Legge l'attuale posizione del servo corrispondente all'ultima posizione
passata con l'istruzione write(). Ritorna l'angolo del servo da 0 a 180
gradi.
myServo.Write(angle);
Invia il valore in gradi relativo alla posizione del perno del servo. Un
valore 0 corrisponde alla massima rotazione a sinistra, mentre 180
equivale alla massima rotazione a destra; L'esatta corrispondenza tra
valore in gradi inviato e l'effettiva rotazione del servo viene specificata
dai valori Max e Min nella dichiarazione dell'istruzione attach(); tali
valori devono essere ricavati mediante prove pratiche, in quanto
possono anche variare da servo a servo.
San Secondo Parmense – Mirko Mancin 2013
SERVO MOTORI - Esempio
// Controlling a servo position using a potentiometer
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); //attaches the servo on pin 9 to the servo object
}
void loop() {
//reads the value of the potentiometer (value between 0 and 1023)
val = analogRead(potpin);
// scale it to use it with the servo (value between 0 and 180)
val = map(val, 0, 1023, 0, 179);
// sets the servo position according to the scaled value
myservo.write(val);
delay(15);
} -> Servo
San Secondo Parmense – Mirko Mancin 2013
SERVO MOTORI – Esempio avanzato
Nel costruire un robot, ad esempio, è necessario che tu sappia pilotare più di un servo
contemporaneamente, immagina il sistema di locomozione utilizzato dalla nasa per i
rover Sojourner, Pathfindere Opportunity, per la missione su Marte, con 6 ruote da
controllare, oppure ad un robot antropomorfo industriale con 8 giunti indipendenti.
Con Arduino ovviamente non si ha la pretesa di realizzare un prodotto tanto complesso (la
rotazione delle singole ruote sarebbe affidata ad esempio a dei motori in corrente continua,
ma la capacità di sterzare si potrebbe gestirla con dei servomotori).
-> ProtoRover
Lo sketch realizzato è uno sketch di esempio,
nulla che montato su un rover possa
consentirgli di muoversi; il suo scopo è quello
di pilotare i 6 servo impartendo dei comandi
provenienti dalla porta seriale.
San Secondo Parmense – Mirko Mancin 2013
RIFERIMENTI
www.mancio90.it
mirkomancin90@gmail.com

More Related Content

What's hot

Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Michele Maffucci
 
Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Michele Maffucci
 
Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1Daniele Costarella
 
Intro to Arduino
Intro to ArduinoIntro to Arduino
Intro to ArduinotrevisoAUG
 
Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Michele Maffucci
 
Lezione introduttiva su Arduino
Lezione introduttiva su ArduinoLezione introduttiva su Arduino
Lezione introduttiva su ArduinoMirko Mancin
 
Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Michele Maffucci
 
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...Luigi Francesco Cerfeda
 
Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Michele Maffucci
 
Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Michele Maffucci
 
Come rendere Arduino professionale
Come rendere Arduino professionaleCome rendere Arduino professionale
Come rendere Arduino professionaleEmanuele Bonanni
 
Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Michele Maffucci
 
Alfabeto arduino model expo italy
Alfabeto arduino   model expo italyAlfabeto arduino   model expo italy
Alfabeto arduino model expo italyMichele Maffucci
 
CoderDojo - Scratch 4 Arduino
CoderDojo - Scratch 4 ArduinoCoderDojo - Scratch 4 Arduino
CoderDojo - Scratch 4 ArduinoMirco Piccin
 
LinoLab - Laboratorio di Arduino
LinoLab - Laboratorio di Arduino LinoLab - Laboratorio di Arduino
LinoLab - Laboratorio di Arduino Matteo Troìa
 
Presentazione Arduino
Presentazione ArduinoPresentazione Arduino
Presentazione ArduinoAntonio Serra
 

What's hot (19)

Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1Alfabeto di Arduino - lezione 1
Alfabeto di Arduino - lezione 1
 
Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5Alfabeto di Arduino - lezione 5
Alfabeto di Arduino - lezione 5
 
Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1Electronics LAB [with Arduino] | DAY 1
Electronics LAB [with Arduino] | DAY 1
 
Intro to Arduino
Intro to ArduinoIntro to Arduino
Intro to Arduino
 
Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011Arduino lezione 01 - a.s 2010-2011
Arduino lezione 01 - a.s 2010-2011
 
Arduino&Raspberry
Arduino&RaspberryArduino&Raspberry
Arduino&Raspberry
 
Lezione introduttiva su Arduino
Lezione introduttiva su ArduinoLezione introduttiva su Arduino
Lezione introduttiva su Arduino
 
Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2Alfabeto di Arduino - lezione 2
Alfabeto di Arduino - lezione 2
 
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
Workshop: Arduino for makers - Cenni di progettazione elettronica ed utilizzo...
 
Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4Alfabeto di arduino - lezione 4
Alfabeto di arduino - lezione 4
 
Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6Alfabeto di Arduino - lezione 6
Alfabeto di Arduino - lezione 6
 
Come rendere Arduino professionale
Come rendere Arduino professionaleCome rendere Arduino professionale
Come rendere Arduino professionale
 
Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3Alfabeto di Arduino - lezione 3
Alfabeto di Arduino - lezione 3
 
Arduino: domotica OpenSource
Arduino: domotica OpenSourceArduino: domotica OpenSource
Arduino: domotica OpenSource
 
Alfabeto arduino model expo italy
Alfabeto arduino   model expo italyAlfabeto arduino   model expo italy
Alfabeto arduino model expo italy
 
CoderDojo - Scratch 4 Arduino
CoderDojo - Scratch 4 ArduinoCoderDojo - Scratch 4 Arduino
CoderDojo - Scratch 4 Arduino
 
LinoLab - Laboratorio di Arduino
LinoLab - Laboratorio di Arduino LinoLab - Laboratorio di Arduino
LinoLab - Laboratorio di Arduino
 
Presentazione Arduino
Presentazione ArduinoPresentazione Arduino
Presentazione Arduino
 
Arduino primo v1
Arduino primo v1Arduino primo v1
Arduino primo v1
 

Similar to Lezione 2 arduino - corso 20 ore

Review4 u arduino duemilanove scheda di sviluppo compatibile 2010-11-11
Review4 u arduino duemilanove scheda di sviluppo compatibile   2010-11-11Review4 u arduino duemilanove scheda di sviluppo compatibile   2010-11-11
Review4 u arduino duemilanove scheda di sviluppo compatibile 2010-11-11Ionela
 
Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollorisamu97
 
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Sardegna Ricerche
 
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acIrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acDavide Mercanti
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Daniele Costarella
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Salvatore Carotenuto
 
Design of programmable medical devices_Teamwork
Design of programmable medical devices_TeamworkDesign of programmable medical devices_Teamwork
Design of programmable medical devices_TeamworkAntonella Zito
 
Arduino wifi logger node
Arduino wifi logger nodeArduino wifi logger node
Arduino wifi logger nodeMirco Piccin
 
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileCommit University
 
Review4 u icd2 mplab pic programmer 2010-11-02
Review4 u icd2 mplab pic programmer   2010-11-02Review4 u icd2 mplab pic programmer   2010-11-02
Review4 u icd2 mplab pic programmer 2010-11-02Ionela
 
Arduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteArduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteMirco Sbrollini
 
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad ArduinoSimone Lusenti
 
Progettare con Arduino come un Ingegnere
Progettare con Arduino come un IngegnereProgettare con Arduino come un Ingegnere
Progettare con Arduino come un IngegnereEmanuele Bonanni
 
Arduino ai raggi x rendiamolo professionale
Arduino ai raggi x  rendiamolo professionaleArduino ai raggi x  rendiamolo professionale
Arduino ai raggi x rendiamolo professionaleEmanuele Bonanni
 

Similar to Lezione 2 arduino - corso 20 ore (20)

Review4 u arduino duemilanove scheda di sviluppo compatibile 2010-11-11
Review4 u arduino duemilanove scheda di sviluppo compatibile   2010-11-11Review4 u arduino duemilanove scheda di sviluppo compatibile   2010-11-11
Review4 u arduino duemilanove scheda di sviluppo compatibile 2010-11-11
 
Arduino ICT2016 [IT]
Arduino ICT2016 [IT]Arduino ICT2016 [IT]
Arduino ICT2016 [IT]
 
Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollori
 
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
 
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acIrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3
 
Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3Electronics LAB [with Arduino] | DAY 3
Electronics LAB [with Arduino] | DAY 3
 
Design of programmable medical devices_Teamwork
Design of programmable medical devices_TeamworkDesign of programmable medical devices_Teamwork
Design of programmable medical devices_Teamwork
 
Grix.it wood board usb
Grix.it    wood board usbGrix.it    wood board usb
Grix.it wood board usb
 
Arduino wifi logger node
Arduino wifi logger nodeArduino wifi logger node
Arduino wifi logger node
 
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore Basile
 
Review4 u icd2 mplab pic programmer 2010-11-02
Review4 u icd2 mplab pic programmer   2010-11-02Review4 u icd2 mplab pic programmer   2010-11-02
Review4 u icd2 mplab pic programmer 2010-11-02
 
Arduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteArduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolante
 
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad Arduino
 
Arduino galileo edison_udoo
Arduino galileo edison_udooArduino galileo edison_udoo
Arduino galileo edison_udoo
 
Il pic 16 f84a
Il pic 16 f84aIl pic 16 f84a
Il pic 16 f84a
 
Car accident detector
Car accident detectorCar accident detector
Car accident detector
 
Progettare con Arduino come un Ingegnere
Progettare con Arduino come un IngegnereProgettare con Arduino come un Ingegnere
Progettare con Arduino come un Ingegnere
 
Workshop arduino
Workshop arduinoWorkshop arduino
Workshop arduino
 
Arduino ai raggi x rendiamolo professionale
Arduino ai raggi x  rendiamolo professionaleArduino ai raggi x  rendiamolo professionale
Arduino ai raggi x rendiamolo professionale
 

More from Mirko Mancin

CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
Tesi Magistrale 2014
Tesi Magistrale 2014Tesi Magistrale 2014
Tesi Magistrale 2014Mirko Mancin
 
Kangaroo system - send/receive program to/from CNC machine
Kangaroo system - send/receive program to/from CNC machineKangaroo system - send/receive program to/from CNC machine
Kangaroo system - send/receive program to/from CNC machineMirko Mancin
 
Wireless Open Weather (WOW)
Wireless Open Weather (WOW)Wireless Open Weather (WOW)
Wireless Open Weather (WOW)Mirko Mancin
 

More from Mirko Mancin (7)

CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
 
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
 
Tesi Triennale
Tesi TriennaleTesi Triennale
Tesi Triennale
 
Tesi Magistrale 2014
Tesi Magistrale 2014Tesi Magistrale 2014
Tesi Magistrale 2014
 
Kangaroo system - send/receive program to/from CNC machine
Kangaroo system - send/receive program to/from CNC machineKangaroo system - send/receive program to/from CNC machine
Kangaroo system - send/receive program to/from CNC machine
 
Wireless Open Weather (WOW)
Wireless Open Weather (WOW)Wireless Open Weather (WOW)
Wireless Open Weather (WOW)
 

Recently uploaded

Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxlorenzodemidio01
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxlorenzodemidio01
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxlorenzodemidio01
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxlorenzodemidio01
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 

Recently uploaded (6)

Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 

Lezione 2 arduino - corso 20 ore

  • 1. SISTEMI EMBEDDED Il caso Arduino San Secondo Parmense 2013 “se ascolto dimentico, se vedo ricordo, se faccio capisco”
  • 2. San Secondo Parmense – Mirko Mancin 2013 INDICE • Le schede Arduino e le shield • Sleep, interrupt e consumi • Storage • Servo motori
  • 3. San Secondo Parmense – Mirko Mancin 2013 I DIVERSI ARDUINO Arduino UNO • Versione 3 • Comunicazione seriale facilitata • Bootloader precaricato • Reset software automatico • Protezione contro ‘’Overcurrent 500mA’’ Microcontroller ATmega328 Operating 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 Pin 50 mA Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Clock Speed 16 MHz
  • 4. San Secondo Parmense – Mirko Mancin 2013 I DIVERSI ARDUINO LilyPad Arduino Microcontroller ATmega168V ATmega328V Operating Voltage 2.7-5.5V Input Voltage (recommended) 2.7-5.5V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 mA Flash Memory 16 KB (of which 2 KB used by bootloader) SRAM 1 KB EEPROM 512 bytes Clock Speed 8 MHz • 50mm di diametro • Lavabile
  • 5. San Secondo Parmense – Mirko Mancin 2013 I DIVERSI ARDUINO Arduino Nano Microcontroller ATmega168 ATmega328 Operating Voltage 5V Input Voltage (recommended) 7-12V (limits 6-20V) Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 8 DC Current per I/O Pin 40 mA Flash Memory 16 KB or 32 KB (of which 2 KB used by bootloader) SRAM 1 KB or 2 KB EEPROM 512 bytes or 1 KB Clock Speed 16 MHz • 40mm di diametro • FTDI solo con USB • Reset software automatico
  • 6. San Secondo Parmense – Mirko Mancin 2013 I DIVERSI ARDUINO Arduino Leonardo Microcontroller ATmega32u4 Operating Voltage 5V Input Voltage (recommended) 7-12V (limits 6-20V) Digital I/O Pins 20 (of which 7 provide PWM output) Analog Input Pins 12 DC Current per I/O Pin 40 mA Flash Memory 32 KB (of which 4 KB used by bootloader) SRAM 2.5 KB EEPROM 1 KB Clock Speed 16 MHz • Implementa anche comunicazione USB (es. visibile come mouse o tastiera dal pc) • 6 canali digitali/analogici (4,6,8,9,10,12) • Reset software automatico • Necessario inizializzare il bootloader
  • 7. San Secondo Parmense – Mirko Mancin 2013 I DIVERSI ARDUINO Arduino Mega 2560 Microcontroller ATmega2560 Operating Voltage 5V Input Voltage (recommended) 7-12V (limits 6-20V) Digital I/O Pins 54 (of which 15 provide PWM output) Analog Input Pins 16 DC Current per I/O Pin 40 mA Flash Memory 256 KB (of which 8 KB used by bootloader) SRAM 8 KB EEPROM 4 KB Clock Speed 16 MHz • Come l’Arduino UNO solo con più pin di I/O • La I2C (pin 20 e 21) non è allocata come sull’Arduino UNO (pin A4 e A5)
  • 8. San Secondo Parmense – Mirko Mancin 2013 I DIVERSI ARDUINO Arduino Due Microcontroller AT91SAM3X8E Operating Voltage 3.3V Input Voltage (recommended) 7-12V (limits 6-20V) Digital I/O Pins 54 (of which 12 provide PWM output) Analog Pins 12 Input e 2 Output DC Current per I/O Pin 800 mA Flash Memory 512 KB (of which 8 KB used by bootloader) SRAM 96 KB EEPROM 4 KB Clock Speed 84 MHz • Processore a 32-bit • Supporto a comunicazione CAN • Integrazione di un modulo DAC a 12bit
  • 9. San Secondo Parmense – Mirko Mancin 2013 ALCUNE SHIELD IN COMMERCIO Motor ShieldEthernet Shield Proto ShieldWiFiXbee Wireless Shield
  • 10. San Secondo Parmense – Mirko Mancin 2013 ESEMPI DI SKETCH CON LE SHIELD NETWORKING -> Web Server e client Ethernet -> Web Server e client Wireless -> Rete Xbee Ma se voglio sapere come utilizzare la Motor Shield? Cerco su internet (link) !!!
  • 11. San Secondo Parmense – Mirko Mancin 2013 CONSUMI Con lo sketch ‘’Blink’’ è stato possibile effettuare un test sul consumo del led 13 presente sulla scheda Arduino. Nella figura a destra, quando il led è spento, la scheda consuma 48mA, mentre quando si accende, consuma 51,5mA. Con una batteria da 1000 mA si potrebbe alimentare Arduino che attende dentro un delay per circa 20 ore (1000 / 48 = 20,8333 )!!
  • 12. San Secondo Parmense – Mirko Mancin 2013 Come risolvere il problema? INTERRUPT I pin di Arduino Uno sensibili alle variazioni di segnale sono i pin2 e pin3 che rispettivamente vengono specificati nella funzione attachInterrupt come 0 e 1. Nella funzione attachInterrupt , oltre a specificare il pin che vogliamo monitorare dobbiamo specificare il nome della funzione da eseguire quando si scatena l’interruzione e il modo in cui l’interruzione deve essere interpretata. La variabili state viene dichiarata utilizzando l’attributo volatile, questo perchè la funzione gestita dall’interrupt viene eseguita in contemporanea al blocco loop() ed è necessario che in fase di compilazione la variabile sia caricata nella RAM.
  • 13. San Secondo Parmense – Mirko Mancin 2013 INTERRUPT LOW Il segnale viene scatenato quando il livello del segnale è basso CHANGE Il segnale viene scatenato ogni volta che si verifica un cambiamento di livello sul pin RISING Il segnale viene scatenato ogni volta che il livello passa da basso ad alto FALLING Il segnale viene scatenato ogni volta che il livello passa da alto a basso La variazione di stato del segnale applicato all’Arduino può essere gestita in vari modi, a seconda del parametro utilizzato per la gestione dell’interrupt. La tabella seguente mostra i parametri che determinano come deve essere generata l’interruzione.
  • 14. San Secondo Parmense – Mirko Mancin 2013 CODICE DI ESEMPIO PER INTERRUPT int pin = 8; //Notare l'uso di 'volatile' volatile int state = LOW; void setup(){ pinMode(pin, OUTPUT); digitalWrite(pin, LOW); //Creo un gestore di interrupt e lo associo al pin3 attachInterrupt(1, GestInt, LOW); } void loop(){ //fai qualcosa... delay(10); } void GestInt(){ state = !state; digitalWrite(pin, state); }
  • 15. San Secondo Parmense – Mirko Mancin 2013 INTERRUPT TIMER Prescale Time per counter tick Max Period 1 0.0625 uS 8.192 mS 8 0.5 uS 65.536 mS 64 4 uS 524.288 mS 256 16 uS 2097.152 mS 1024 64uS 8388.608mS Timer1 Questa libreria consente di configurare il timer interno dell’ATmega328. Ci sono 3 timer disponibili per Arduino. L’uso dei timer è utile per generare segnali PWM. L’accuratezza del timer dipende dalla velocità del processore e dalla sua frequenza. Il Timer1 dispone inoltre di un prescaler che può essere settato secondo la tabella sottostante. For 16MHz:Max Period = (Prescale)*(1/Frequency)*(2^17) Time per Tick = (Prescale)*(1/Frequency)
  • 16. San Secondo Parmense – Mirko Mancin 2013 INTERRUPT TIMER #include "TimerOne.h" void setup(){ pinMode(10, OUTPUT); Timer1.initialize(500000); // initialize timer1, and set a 1/2 second period Timer1.pwm(9, 512); // setup pwm on pin 9, 50% duty cycle Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt } void callback(){ digitalWrite(10, digitalRead(10) ^ 1); } void loop(){ // your program here... } Approfondimenti Link1 Link 2
  • 17. San Secondo Parmense – Mirko Mancin 2013 Arduino è dotato di due porte di interrupt: pin 2 e 3. Grazie a questi due interrupt, Arduino è in grado di "svegliarsi" e riprendere l'esecuzione del codice. È anche possibile eseguire codice speciale a seconda di quale interrupt ha innescato la sveglia. Eventi sul USART (la porta seriale) riattivano Arduino. Perché questo funzioni, Arduino deve essere in POWER_MODE_IDLE, l'unico modo che non disattiva l'USART. Anche se questa modalità non dà grandi risparmi energetici è possibile utilizzare le funzioni fornite in avr/power.h per disattivare altri moduli hardware e quindi ottenere maggiore risparmio di energia (link). SLEEP power_adc_disable(), power_spi_disable(), power_timer0_disable(), power_timer1_disable(), power_timer2_disable(), power_twi_disable()
  • 18. San Secondo Parmense – Mirko Mancin 2013 Quando Arduino è in SLEEP_MODE_PWR_DOWN l'unico modo per riattivarlo è con un interrupt watchdog timer o con un cambio di livello sui piedini 2 o 3. Un cambio di livello implica che il pin deve essere tenuto in quello stato per un certo periodo di tempo prima che l'interrupt venga attivato. Nella routine di servizio di interrupt (ISR) l'interrupt deve essere disabilitato altrimenti l'ISR verrà richiamato più volte finché non ci sarà un cambio di stato. void pin2_isr(){ detachInterrupt(0); pin2_interrupt_flag = 1; } Come conseguenza, l'interrupt deve essere riattivato nel codice una volta che il pin è tornato a uno stato normale, cioè per un livello basso, verificare che il pin sia andato alto prima di fissare l'interrupt nuovamente. SLEEP -> SleepExample
  • 19. San Secondo Parmense – Mirko Mancin 2013 Ovviamente per avere un Arduino a consumo zero devo ottimizzare i dispositivi collegati e magari pensare ad una versione Stand-Alone in modo da eliminare dispositivi che non mi servono (per esempio l’interfaccia seriale o i controllori per la comunicazione I2C o SPI). Con una soluzione del genere si potrebbero realizzare dispositivi outdoor con delle autonomie piuttosto elevate (anche un paio di anni se si ottimizzano le sleep) ARDUINO A CONSUMO ZERO
  • 20. San Secondo Parmense – Mirko Mancin 2013 --> EEPROM STORAGE Arduino dispone di alcuni sistemi di storage. Uno interno al microcontrollore, basato su una memoria EEPROM (Arduino UNO ha un EEPROM di 1KB). In ciascuna cella puoi memorizzare un valore che va da 0 a 255, è un dato di tipo integer ossia un numero intero. 1. per poter scrivere in ogni cella occorrono 3,3 millisecondi, per cui tienine conto quando memorizzerai i tuoi dati nella EEPROM; 2. le EEPROM possono essere scritte per un massimo di 100.000 volte, per scrittura si intende ogni volta che cambi il valore in una cella, considerando che solitamente utilizzi la EEPROM solo per memorizzare dei dati di configurazione, questo valore è decisamente elevato;
  • 21. San Secondo Parmense – Mirko Mancin 2013 STORAGE -> SD Mentre l’altra soluzione potrebbe essere quella di utilizzare una shield con supporto per schede SD e salvare i dati su di essa. Le shield con slot per micro SD consentono di montare fino a schede di 2Gb utilizzabile per scrivere e leggere i propri file. Libreria <SD.h> Bisogna abilitare la scrittura sull’SD. Sull’Ethernet Shield il pin di abilitazione è il 4. if (!SD.begin(4)) { return; }
  • 22. San Secondo Parmense – Mirko Mancin 2013 SERVO MOTORI Uno dei campi d’applicazione preferito d’Arduino è la robotica. Essa si basa sulla combinazione di sensori e motori per ottenere un dispositivo automatico che interagisca con il mondo esterno. Alcuni motori utilizzati sono i servo motori. Essi sono particolari tipi di motore (elettrici, pneumatici, idraulici) generalmente di piccola potenza, le cui condizioni operative, a differenza dei motori tradizionali, sono soggette ad ampie e spesso repentine variazioni sia nel campo della velocità che della coppia motrice, alle quali si deve adattare con la massima rapidità e precisione. Colore Funzione Nero o marrone Negativo di alimentazione (GND) Rosso Positivo di alimentazione (+Vcc) Giallo o bianco Segnale di comando (ingresso)
  • 23. San Secondo Parmense – Mirko Mancin 2013 SERVO MOTORI – Istruzioni principali Libreria <Servo.h> Servo myServo myServo.Attach(); Associa la variabile servo ad uno specifico pin. myServo.attach(pin); myServo.attach(pin, min,max); Min (opzionale): durata minima dell'impulso, in microsecondi, corrispondente al minimo grado di rotazione (0 gradi) del servo (il valore predefinito è 544). Max (opzionale): durata massima dell'impulso, in microsecondi, corrispondente alla massima rotazione ( 180 gradi) del servo (il valore predefinito è 2400).
  • 24. San Secondo Parmense – Mirko Mancin 2013 SERVO MOTORI – Istruzioni principali Libreria <Servo.h> Servo myServo myServo.Attached(); Verifica l'associazione tra la variabile servo ed il pin. Ritorna vero se il servo è associato al pin; falso in caso contrario.
  • 25. San Secondo Parmense – Mirko Mancin 2013 SERVO MOTORI – Istruzioni principali Libreria <Servo.h> Servo myServo myServo.Detach(); Dissocia la variabile servo al pin specificato. Se tutte le variabili servo non sono associate, i pin PWM possono essere usati come normali uscite ‘’Analogiche’’ con l'istruzione analogWrite().
  • 26. San Secondo Parmense – Mirko Mancin 2013 SERVO MOTORI – Istruzioni principali Libreria <Servo.h> Servo myServo myServo.Read(); Legge l'attuale posizione del servo corrispondente all'ultima posizione passata con l'istruzione write(). Ritorna l'angolo del servo da 0 a 180 gradi. myServo.Write(angle); Invia il valore in gradi relativo alla posizione del perno del servo. Un valore 0 corrisponde alla massima rotazione a sinistra, mentre 180 equivale alla massima rotazione a destra; L'esatta corrispondenza tra valore in gradi inviato e l'effettiva rotazione del servo viene specificata dai valori Max e Min nella dichiarazione dell'istruzione attach(); tali valori devono essere ricavati mediante prove pratiche, in quanto possono anche variare da servo a servo.
  • 27. San Secondo Parmense – Mirko Mancin 2013 SERVO MOTORI - Esempio // Controlling a servo position using a potentiometer #include <Servo.h> Servo myservo; // create servo object to control a servo int potpin = 0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin void setup() { myservo.attach(9); //attaches the servo on pin 9 to the servo object } void loop() { //reads the value of the potentiometer (value between 0 and 1023) val = analogRead(potpin); // scale it to use it with the servo (value between 0 and 180) val = map(val, 0, 1023, 0, 179); // sets the servo position according to the scaled value myservo.write(val); delay(15); } -> Servo
  • 28. San Secondo Parmense – Mirko Mancin 2013 SERVO MOTORI – Esempio avanzato Nel costruire un robot, ad esempio, è necessario che tu sappia pilotare più di un servo contemporaneamente, immagina il sistema di locomozione utilizzato dalla nasa per i rover Sojourner, Pathfindere Opportunity, per la missione su Marte, con 6 ruote da controllare, oppure ad un robot antropomorfo industriale con 8 giunti indipendenti. Con Arduino ovviamente non si ha la pretesa di realizzare un prodotto tanto complesso (la rotazione delle singole ruote sarebbe affidata ad esempio a dei motori in corrente continua, ma la capacità di sterzare si potrebbe gestirla con dei servomotori). -> ProtoRover Lo sketch realizzato è uno sketch di esempio, nulla che montato su un rover possa consentirgli di muoversi; il suo scopo è quello di pilotare i 6 servo impartendo dei comandi provenienti dalla porta seriale.
  • 29. San Secondo Parmense – Mirko Mancin 2013 RIFERIMENTI www.mancio90.it mirkomancin90@gmail.com