1. Piattaforma Arduino per applicazioni UAV:
concetti base
Lezione 2
CSP@SCUOLA
in collaborazione
con ITI FAUSER NOVARA
Anno scolastico 2011-2012
2. Introduzione
• Questa lezione introduce la piattaforma Arduino fornendo linee
guida per l’utilizzo e lo sviluppo
• La piattaforma Arduino è utilizzata attivamente per progetti di
vario genere
– Robotica, automazione domestica
• La piattaforma Arduino verrà presentata per quanto riguarda:
– Hardware
– Ambiente di sviluppo
– Concetti base per la programmazione
• La piattaforma Arduino può essere utilizzata per realizzare payload
funzionali per UAV di classe micro
– La lezione e le successive forniscono concetti base per lo
sviluppo applicativo
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 2
3. Concetti generali
• La piattaforma Arduino consiste di due componenti essenziali
– Scheda hardware dotata di microprocessore
– Ambiente di sviluppo
• Le schede Arduino sono basate su processori della famiglia Atmega
• L’ambiente di sviluppo dedicato e liberamente scaricabile consente
un facile approccio alla programmazione
• Le schede Arduino si basano su una architettura semplice molto
utile a fini didattici
• E’ possibile integrare nell’ambiente di sviluppo con facilità librerie
sviluppate anche da terzi che estendono le funzionalità originali
della scheda
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 3
4. Schede Arduino: Arduino UNO
• Basata su Atmega 328 (memoria flash da 32KB)
– Processore a 8bit, clock 16MHz
• 2KB di RAM integrati
• 1KB EEPROM
• 14 pin digitali (input/output) di cui 6 possono essere usati in PWM
– PWM => pulse width modulation => per esempio, pliotaggio
servomotori
• 5 ingressi analogici => lettura di sensori di temperatura,
pressione...
• Porta USB
• Ulteriori informazioni disponibili qui:
http://arduino.cc/en/Reference/HomePage
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 4
5. Arduino UNO: interfacce seriali
• La porta USB è l’unica interfaccia seriale presente sulla scheda
Arduino UNO
• La stessa porta seriale è accessibile alternativamente tramite due
pin negli header della scheda
– I pin 1 e 0 marcati TX e RX servono a questo
• I pin che “rilanciano” la seriale operano in logica TTL 5V
– Occorre tenerne conto quando si realizzano interfacce verso
altri dispositivi
– Es. dispositivi TTL 1.8V o TTL 3.3V
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 5
6. Schede Arduino: Arduino Mega 2560
• La scheda Arduino Mega 2560 rappresenta una versione evoluta
della Arduino UNO
– Più interfacce, più memoria
• Basata sul processore Atmega 2560 (memoria flash da 256 KB)
– 16 MHz, 8 bit
• 4 interfacce seriali hardware (TTL 5V)
• Analog to Digital Converter (ADC) con tensione di riferimento
configurabile
• 54 pin di I/O digitale (di cui output 14 PWM), 16 pin analogici
• RAM: 8 KB, EEPROM: 4 KB
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 6
7. Ambiente di sviluppo
• L’ambiente di sviluppo è un tool grafico che permette di
programmare le schede Arduino
• I programmi utente (detti sketch) sono realizzati in linguaggio C e
possono sfruttare le librerie dedicate per utilizzare le funzionalità
dell’hardware
– Semplice da programmare
– Si possono riadattare programmi già esistenti
• La programmazione avviene direttamente grazie alla interfaccia
USB
• L’ambiente di sviluppo è disponibile per tutti i principali sistemi
operativi
– Windows, Mac OS e Linux
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 7
8. Ambiente di sviluppo: interfaccia
Tasto di
compilazione:
compila il codice Terminale seriale: usato
solitamente per scopo di
Debug permette di vedere i
byte inviati dalla scheda sulla
porta USB e di inviare a
propria volta dei byte
Tasto di upload: compila e
carica il codice sulla scheda
Arduino collegata
Finestra di codice: qui
l’utente scrive il codice
da far eseguire alla
scheda
Finestra degli eventi:
qui vengono fornite
informazioni su errori o
successo nella varie
operazioni
(compilazione o upload
fallito)
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 8
9. Programmazione Arduino: concetti base (1/2)
• Le schede Arduino sono programmabili utilizzando un linguaggio
basato su C/C++
– Viene effettuato un link con le librerie AVR libc prima
dell’upload
– Manuale della libreria AVR libc =>
http://www.nongnu.org/avr-libc/user-manual/index.html
– Reference di programmazione Arduino =>
http://www.arduino.cc/en/Reference/HomePage
• Ogni programma eseguito su Arduino si divide in due sezioni:
– Setup
– Loop
• Sono entrambe funzioni
• La funzione “setup” viene eseguita una sola volta alla
inizializzazione della scheda
• La funzione “loop” viene invece eseguita in ciclo continuo e
rappresenta la funzione svolta dalla scheda
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 9
10. Programmazione Arduino: concetti base (2/2)
• Essendo basato su C/C++, il linguaggio di programmazione
Arduino ne eredita i costrutti base:
– if, else
– for
– while
– switch, case
– do, while
• Sono supportati i seguenti tipi elementari, fra cui:
– char
– byte, valore senza segno su 1 byte
– int (signed e unsigned su 2 byte)
– long (interi su 4 byte, signed e unsigned)
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 10
11. Piattaforma Arduino: pin digitali
• I pin digitali possono essere utilizzati sia come input che come
output
– Possono essere usati per comandare dispositivi ON/OFF
• Led..
– Possono essere utilizzati per leggere segnali digitali esterni
• Quando si vuole utilizzare un pin digitale occorre:
– Prima di tutto inizializzarlo
• Istruzione “pinmode” nella funzione setup
• Specifica se input o output
– Quindi se ne può leggere o settare il valore, a seconda di come
è stato inizializzato
• digitalRead(pin_number)
• digitalWrite(pin_number)
• Queste funzioni fanno parte della libreria base di Arduino e non è
richiesta alcuna inclusione tramite il comando “#include”
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 11
12. Piattaforma Arduino: pin digitali, esempio
• Da http://arduino.cc/en/Reference/DigitalRead
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 12
13. Piattaforma Arduino: pin analogici
• I pin analogici vengono comunemente utilizzati per interfacciare
una scheda Arduino a un sensore analogico
• I sensori utilizzati normalmente producono una variazione di
tensione proporzionale alla grandezza misurata
• I pin analogici, a differenza dei digitali non devono essere
inizializzati
• Semplicemente:
– Si legge il valore mediante l’istruzione
analogRead(pin_number)
– Si imposta il valore mediante l’istruzione
analogWrite(pin_number)
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 13
14. Considerazioni sui pin analogici
• Ogni scheda Arduino contiene un convertitore ADC (analog digital
converter) a 10 bit
– 6 canali sulla scheda Arduino base, 16 sulla scheda Arduino
Mega
• L’ADC converte un livello di tensione compreso tra 0 e 5V in un
valore numerico compreso tra 0 e 1023 (210-1 = 1023)
– Operazione eseguita a ogni invocazione di analogRead()
• La risoluzione per unità è quindi:
5
= 0, 0049 ≅ 50mV
1024
• Tuttavia questo valore di risoluzione è valido solamente se il
sensore collegato ha una dinamica [0,5V]
• Altrimenti occorre cambiare la tensione di riferimento utilizzando
l’istruzione analogReference()
– Con questa istruzione è possibile ad esempio impostare una
tensione di riferimento a 2.5V (per sensori con dinamica [0,
2.5]V)
– In questo modo i 210=1024 valori generati dall’ADC a 10 bit
saranno mappati uniformemente su valori di tensione
nell’intervallo [0, 2.5]V
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 14
15. AnalogReference()
• La funzione AnalogReference consente di cambiare il valore di
riferimento della tensione per l’ADC
• Ha in ingresso un parmetro che può essere impostato a:
– DEFAULT => 5V per le schede Arduino usate nel corso
– INTERNAL => solo su Arduino uno (Atmega 328) imposta la
tensione di riferimento a 1.1V
– INTERNAL1V1 => riferimento a 1.1V (solo Arduino Mega)
– INTERNAL2V56 => riferimento a 2.56V (solo Arduino Mega)
– EXTERNAL => tensione di riferimento sul pin AREF (fra 0 e 5V)
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 15
16. Interfacce seriali
• L’interfaccia seriale permette all’Arduino di comunicare con
dispositivi esterni
– PC, dispositivi come GPS, moduli per schede SD card ecc
• Tutte le schede Arduino dispongono di almeno una interfaccia
seriale
– Porta USB pin digitali TX/RX
• Per utilizzare la porta seriale occorre:
– Inizializzarla invocando l’istruzione “Serial.begin” nella
funzione setup()
– All’interno della funzione loop:
• Se si desidera scrivere sulla porta seriale si utilizza la
funzione Serial.write(<dati da inviare>)
– I dati potranno essere una stringa o una variabile
– I dati passati come parametro all’istruzione saranno
inviati al dispositivo collegato all’Arduino tramite
seriale
• Se si desidera leggere occorre utilizzare un paradigma più
complesso che sarà discusso nel seguito
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 16
17. Interfacce seriali: lettura
• Ogni scheda Arduino possiede un buffer di ingresso sulla porta
seriale
– I dati vengono accodati su questo buffer non appena sono
ricevuti
– La dimensione è di 128 byte
• Quando i dati sono ricevuti vengono memorizzati nel buffer, in
attesa che i programma utente li richiede, o che vengano
sovrascritti da altri dati
• La procedura di lettura si svolge quindi solitamente in due fasi
• All’interno del loop:
– Si esegue una chiamata alla funzione “Serial.available()”
• Questa funzione restituisce il numero di byte memorizzati
nel buffer di ingresso
– Se il numero di byte nel buffer è maggiore di zero, si esegue la
lettura invocando l’istruzione “Serial.read()”
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 17
18. Lettura da interfaccia seriale: esempio
• Da http://arduino.cc/en/Serial/Read:
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 18
19. Arduino Mega: gestione interfacce seriali
• Le schede Arduino Mega si distinguono dalle altre anche per la
presenza di 4 porte seriali hardware invece di una sola
• Sono indicate rispettivamente come:
– Serial1, Serial2,Serial3
• Sono gestite esattamente come la seriale di default:
– Es.: Serial1.read()
Serial1.available()
• ATTENZIONE: benchè tutte le seriali sono gestite allo stesso modo,
la porta “zero” (Serial), si distingue per il comportamento alla
connessione
– Connettendo un dispositivo alla porta USB, l’Arduino si riavvia
– Questo comportamento è legato al fatto che la scheda deve
poter essere programmata via USB
– Per poter caricare nuovo software, l’Arduino deve per forza
riavviarsi
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 19
20. www.csp.it rd.csp.it
CSP ICT Innovation
Livio Torrero livio.torrero@csp.it
Registered and Central Offices
Environment Park - Laboratori A1
via Livorno 60 - 10144 Torino
Operational Offices
Villa Gualino - Viale Settimio Severo 63
10133 Torino
Tel +39 011 4815111
Fax +39 011 4815001
E-mail: marketing@csp.it
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base 20