Upload
csp-scarl
View
890
Download
2
Embed Size (px)
DESCRIPTION
Piattaforma Arduino per applicazioni UAV . concetti base
Citation preview
Piattaforma Arduino per applicazioni UAV:concetti base
Lezione 2
CSP@SCUOLAin collaborazione con ITI FAUSER NOVARA Anno scolastico 2011-2012
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
2Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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 consenteun 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
3Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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, pliotaggioservomotori
• 5 ingressi analogici => lettura di sensori di temperatura, pressione...
• Porta USB
• Ulteriori informazioni disponibili qui:
http://arduino.cc/en/Reference/HomePage
4Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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
5Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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
6Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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
7Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
Ambiente di sviluppo: interfaccia
8
Tasto di compilazione:compila il codice
Tasto di upload: compila e carica il codice sulla scheda Arduino collegata
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
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
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
9Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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)
10Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
Piattaforma Arduino: pin digitali
• I pin digitali possono essere utilizzati sia come input che comeoutput
– 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”
11Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
Piattaforma Arduino: pin digitali, esempio
• Da http://arduino.cc/en/Reference/DigitalRead
12Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
Piattaforma Arduino: pin analogici
• I pin analogici vengono comunemente utilizzati per interfacciareuna 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)
13Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
Considerazioni sui pin analogici
• Ogni scheda Arduino contiene un convertitore ADC (analog digitalconverter) 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:
• 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
14
5
1024= 0, 0049 ≅ 50mV
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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)
15Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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
16Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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()”
17Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
Lettura da interfaccia seriale: esempio
• Da http://arduino.cc/en/Serial/Read:
18Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
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
19Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base
20
CSP ICT Innovation
Livio Torrero [email protected]
Registered and Central Offices Environment Park - Laboratori A1via Livorno 60 - 10144 Torino
Operational OfficesVilla Gualino - Viale Settimio Severo 6310133 Torino
Tel +39 011 4815111Fax +39 011 4815001E-mail: [email protected]
www.csp.it rd.csp.it
Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base