Csp@scuola uav corso1_lez2

20
Piattaforma Arduino per applicazioni UAV: concetti base Lezione 2 CSP@SCUOLA in collaborazione con ITI FAUSER NOVARA Anno scolastico 2011-2012

description

Piattaforma Arduino per applicazioni UAV . concetti base

Transcript of Csp@scuola uav corso1_lez2

Page 1: Csp@scuola uav corso1_lez2

Piattaforma Arduino per applicazioni UAV:concetti base

Lezione 2

CSP@SCUOLAin collaborazione con ITI FAUSER NOVARA Anno scolastico 2011-2012

Page 2: Csp@scuola uav corso1_lez2

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

Page 3: Csp@scuola uav corso1_lez2

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

Page 4: Csp@scuola uav corso1_lez2

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

Page 5: Csp@scuola uav corso1_lez2

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

Page 6: Csp@scuola uav corso1_lez2

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

Page 7: Csp@scuola uav corso1_lez2

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

Page 8: Csp@scuola uav corso1_lez2

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

Page 9: Csp@scuola uav corso1_lez2

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

Page 10: Csp@scuola uav corso1_lez2

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

Page 11: Csp@scuola uav corso1_lez2

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

Page 12: Csp@scuola uav corso1_lez2

Piattaforma Arduino: pin digitali, esempio

• Da http://arduino.cc/en/Reference/DigitalRead

12Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base

Page 13: Csp@scuola uav corso1_lez2

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

Page 14: Csp@scuola uav corso1_lez2

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

Page 15: Csp@scuola uav corso1_lez2

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

Page 16: Csp@scuola uav corso1_lez2

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

Page 17: Csp@scuola uav corso1_lez2

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

Page 18: Csp@scuola uav corso1_lez2

Lettura da interfaccia seriale: esempio

• Da http://arduino.cc/en/Serial/Read:

18Lezione 2 - piattaforma Arduino per applicazioni UAV: concetti base

Page 19: Csp@scuola uav corso1_lez2

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

Page 20: Csp@scuola uav corso1_lez2

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