Csp@scuola uav corso1_lez3

24
Programmazione Arduino e interfacciamento a moduli esterni Lezione 3 CSP@SCUOLA in collaborazione con ITI FAUSER NOVARA Anno scolastico 2011-2012

description

Programmazione Arduino e interfacciamento moduli esterni

Transcript of Csp@scuola uav corso1_lez3

Page 1: Csp@scuola uav corso1_lez3

Programmazione Arduino e interfacciamento amoduli esterni

Lezione 3

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

Page 2: Csp@scuola uav corso1_lez3

Introduzione

• Questa lezione si propone di fornire informazioni integrative per lo sviluppo su Arduino e di fornire concetti di base per:

– Interfacciamento di Arduino a moduli di espansione

– Sviluppo di applicazioni basate su di essi

• Attraverso questi moduli e’ possibile realizzare payload funzionali complessi, da installare a bordo di un micro UAV

• I moduli di espansione sono detti “shield”

– Daughter board che si installano sugli header della scheda Arduino

– Alimentati direttamente da Arduino

– Interfacciamento solitamente tramite pin/porta seriale

• In questa lezione verranno presentati alcuni shield di esempio:

– SD card shield

– GPS shield

– Communicator shield

2Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 3: Csp@scuola uav corso1_lez3

Considerazioni sullo sviluppo su piattaforma Arduino (1/4)

• Come già detto un programma generico per Arduino si suddivide in due sezioni

– Setup => inizializzazione, singola esecuzione

– Loop => vero programma eseguito ciclicamente da Arduino

• Il loop è eseguito a ciclo continuo

– Qualcosa come

While(1)

{

loop()

}

– Cercate di evitare l’uso di cicli “globali” dentro la funzione loopse non strettamente necessari

3Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 4: Csp@scuola uav corso1_lez3

Considerazioni sullo sviluppo su piattaforma Arduino (2/4)

• All’interno di ogni programma Arduino è possibile definire e richiamare delle funzioni, esattamente come avviene nel linguaggi o C

4Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 5: Csp@scuola uav corso1_lez3

Considerazioni sullo sviluppo su piattaforma Arduino (3/4)

• E’ possibile sviluppare la stessa applicazione su più file pde

– Non è necessaria nessuna inclusione esplicita

– Devono essere dentro la medesima cartella

– Il file principale implementa la funzione loop

5Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 6: Csp@scuola uav corso1_lez3

Considerazioni sullo sviluppo su piattaforma Arduino (4/4)

• E’ possibile inoltre creare delle librerie

– Collezioni di funzioni che possono essere utili a più programmi

• Ad esempio librerie per gestire una interfaccia ethernet ecc

• Qualsiasi applicativo può utilizzare le funzioni di una libreriaincludendone l’header

6Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 7: Csp@scuola uav corso1_lez3

Programmazione Arduino: approfondimenti utili

• Programmazione a stati finiti (raccomandato):

– http://zuccala.blogspot.com/2010/02/arduino-e-programmare-stati-finiti.html

• Programmazione multitasking (raccomandato):

– L’Arduino deve gestire in maniera temporizzata l’acquisizione dati da sensori diversi

– Qui riferimenti utili:

• http://zuccala.blogspot.com/2010/01/multitasking-arduino-millis-parte-1.html

• http://zuccala.blogspot.com/2010/02/multitasking-arduino-millis-parte-2.html

• Serializzazione (invio di strutture dati complesse tramite portaseriale)

– Libreria: http://code.google.com/p/simpleserialization/

• Esempio di calcolo di un codice a ridondanza ciclica per garantire l’integrità dei dati (da aggiungere prima di una trasmissione seriale o di rete):http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1246539386

7Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 8: Csp@scuola uav corso1_lez3

Arduino SD shield

• Interfacciamento di scheda Arduino a modulo SD

• Obiettivi:

– Interfacciamento a dispositivo di massa capace di memorizzare dati acquisiti da sensori o eventi di sistema in maniera persistente

– Accesso in lettura di dati memorizzati su un dispositivo SD con file system standard

• Interfaccia seriale sincrona tra modulo Arduino e SD shield

• Istruzioni dettagliate su utilizzo e installazione disponibili qui:http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-micro-sd

8Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 9: Csp@scuola uav corso1_lez3

Interfaccia seriale sincrona

• Serial Peripheral Interface (SPI)– Comunicazione tra microcontrollore e periferica– Comunicazione tra microcontrollori

• Dispositivo master=microcontrollore, dispositivo slave=periferica

• La comunicazione avviene attraverso 3 linee:– Master In Slave Out (MISO), linea usata dal dispositivo slave per comunicare con il master

– Master Out Slave In (MOSI), linea usata dal dispositivo master per comunicare con lo slave

– Segnale di clock seriale (CLK), impulso che sincronizza la trasmissione dati generato dal master

• Ogni periferica seriale sincrona ha un pin di selezione che la abilita– Slave Selector (SS)

• L’ambiente di sviluppo Arduino fornisce una libreria per la gestione a basso livello della SPI– http://arduino.cc/en/Reference/SPI

9Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 10: Csp@scuola uav corso1_lez3

Interfaccia seriale sincrona: connessioni (1/2)

10Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

1

RESET GND

5V

MISO

SCK

MOSI

Page 11: Csp@scuola uav corso1_lez3

Interfaccia seriale sincrona: connessioni (2/2)

• I pin ISP sono riportati su altri pin dell’header

– In questo modo è possibile installare sull’arduino più shield che non potrebbero combinarsi meccanicamente fra loro altrimenti

– La porta resta comunque unica

• Arduino Uno/diecimila/duemilanove

– SS => 10 (abilita l’uso dell’Arduino come slave)

– MOSI => 11

– MISO => 12

– SCK => 13

• Arduino Mega

– SS => 53 (abilita l’uso dell’Arduino come slave)

– MOSI => 51

– MISO => 50

– SCK => 52

11Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 12: Csp@scuola uav corso1_lez3

Arduino SD shield: libreria

• L’ambiente di sviluppo Arduino fornisce una libreria per la gestione di una scheda SD formattata con il file system FAT16 o FAT32 e supporta anche SDHC

• Libreria SD

– Metodi di gestione begin, read, write print, close, available...

– Documentazione qui:

• http://arduino.cc/en/Reference/SD

• NOTA: il processore Atmega dell’Arduino possiede un pin SS per essere utilizzato come slave. Anche se nell’interazione con lo shieldSD l’Arduino ha il ruolo di master, il pin SS dell’Atmega deve essere comunque inizializzato a pin digitale di output

– Arduino Mega => pinmode(53, OUTPUT);

– Arduino => pinmode(10, OUTPUT);

12Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 13: Csp@scuola uav corso1_lez3

Arduino SD shield: esempio

• Esempio di programma:

13Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Il pin SS dell’SD shielddeve essere connesso al pin digitale 53 dell’Arduino Mega

Creazione o apertura del file “test4.txt”sul file system della scheda SD

Scrittura del file sulla scheda SD. L’invocazione alla close finalizza la scrittura

Finchè ci sono dati sulla scheda SD (available) verranno inviati al PC tramite la porta seriale

Page 14: Csp@scuola uav corso1_lez3

Modulo GPS per Arduino

• Modulo GPS prodotto da Libelium

• Le stringhe NMEA sono disponibili su interfaccia seriale

– Default baud rate 4800 baud

• Basato su Vincotech A1080-b

– Il modulo adatta i livelli elettrici del ricevitore Vincotech alla seriale Arduino

– 1 aggiornamento al secondo

• Alimentazione da scheda Arduino mediante cavetti

14Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 15: Csp@scuola uav corso1_lez3

Modulo GPS per Arduino: esempio d’uso

15Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Interfaccia seriale 3

Alimentazione (5V)

• Informazioni dettagliate sul modulo disponibili qui:

http://www.cooking-hacks.com/index.php/gps-module-for-arduino.html

Page 16: Csp@scuola uav corso1_lez3

Modulo Vincotech A1080-b (1/2)

• Supporta la maggior parte delle stringhe NMEA di uso comune:

– GGA, GSA, VTG, RMC, GSV e GLL

• Mette a disposizione un protocollo di configurazione basato su messaggi inviati tramite la porta seriale a cui è collegato

– Permette di cambiare baud rate, richiedere specifiche stringhe NMEA ecc

• L’Arduino tramite la seriale invia opportuni comandi di configurazione e ottiene risposte dal modulo

16Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 17: Csp@scuola uav corso1_lez3

Vincotech A1080-b (2/2)

• Questi messaggi servono a modificare il comportamento base

– Di default il modulo si avvia con un buad rate 4800 e invia una volta al secondo le più comuni stringhe NMEA

• Esempi di messaggi di riconfigurazione del modulo GPS:

– $PSRF100,0,9600,8,1,0*0C

• Imposta il baud rate a 9600

• 8N1 (8 bit di dato, no bit di parità, 1 bit di stop)

– $PSRF101,0,0,0,0,0,0,12,4*10

• Reset del modulo GPS

– $PSRF103,0,1,0,1,*25

• Esegue la query di una stringa GGA

• A seconda dei parametri il PSRF103 permette di effettuare la query di una qualsiasi stringa NMEA o di impostare il rate per l’invio automatico

• Ulteriori informazioni disponibili qui:

http://www.cooking-hacks.com/skin/frontend/default/cooking/pdf/GPS_Firmware_GSC3_3.5.0_V4.2.pdf

17Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 18: Csp@scuola uav corso1_lez3

Modulo GPS: gestione avanzata dei dati

• Il GPS può essere gestito come un qualsiasi dispositivo seriale

• Tuttavia essendo un componente “standard” esistono librerie per semplificarne l’utilizzo

• Libreria TinyGPS

– http://arduiniana.org/libraries/tinygps/

• Semplifica la gestione delle stringhe NMEA nelle applicazioni

– Modulo di parsing completo per le stringhe NMEA più comuni

– Verifica automaticamente se il fix di posizione è valido

– Esegue automaticamente la verifica dell’integrità della stringa

– Fornisce delle funzioni per ottenere direttamente dalle stringhele informazioni di posizione, velocità ecc

18Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 19: Csp@scuola uav corso1_lez3

TinyGPS: esempio di utilizzo

19Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

2) Istanziare l’oggetto GPS

1) Includere la libreria

Nell’esempio il modulo GPS è connesso alla seriale 1. I dati letti saranno inviati sulla seriale 0

Per debug tutto quanto viene ricevuto è comunque inviato sulla seriale 0

Il metodo encode analizza byte per byte i dati ricevuti e se riconosce una stringa NMEA valida ritorna un valore>0

Il metodo get_positionattinge ai dati memorizzati dalla funzione encode per ottenere le informazioni richieste

• Per ulteriori informazioni sugli altri metodi della libreria si faccia riferimento a http://arduiniana.org/libraries/tinygps/

Page 20: Csp@scuola uav corso1_lez3

Communication shield

• Progettato originariamente per connettere un modulo Zigbee a una scheda Arduino, è stato successivamente per connettere vari altri moduli

• Fornisce una interfaccia completa, garantendo la corretta alimentazione del modulo installato

• http://arduino.cc/it/Main/ArduinoXbeeShield

20Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 21: Csp@scuola uav corso1_lez3

Communicator shield: principali moduli supportati

Modulo wifi: consente l’interfacciamento con una rete IEEE 802.11

Modulo RFID permette di utilizzare l’Arduino come modulo RFID per rilevare il passaggio in prossimità di ricevitori RFID

Modulo Bluetooth

Modulo Xbee: permette l’interfacciamento a una rete Zigbee (IEEE 802.15.4). Sarà oggetto della prossima lezione

21Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 22: Csp@scuola uav corso1_lez3

Communicator shield: considerazioni

• Il dispositivo installato nello shield comunica con la scheda Arduino attraverso l’interfaccia seriale 0

– La porta seriale 0 è accessibile:

• Attraverso i pin in alto a sinistra nell’header dell’Arduino base

– (a cui si connette lo shield)

• Tramite la porta USB

• La porta seriale 0 è la stessa usata per programmare il dispositivo

• Se la seriale è usata dal dispositivo montato sul modulo, la scheda Arduino non può essere riprogrammata attraverso la porta USB, poichè questa è la seriale 0

• Per ovviare al problema sullo shield sono presenti due jumper:

– Jumper entrambi in posizione “USB”=> la porta seriale 0 può essere usata per la programmazione dell’Arduino

– Jumper entrambi in posizione “xbee” => la porta seriale 0 èconnessa al dispositivo montato sullo shield e non può esssereusata per la programmazione

22Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 23: Csp@scuola uav corso1_lez3

Interfacciamento di più shield a una scheda Arduino

• Esempio:

• Shield SD => pin 50,51,52,53 (rilancio ICSP)

• Shield GPS => Seriale 3

23Lezione 3: programmazione Arduino e interfacciamento a moduli esterni

Page 24: Csp@scuola uav corso1_lez3

24

CSP ICT Innovation

Livio Torrero [email protected]

Registered and Central Offices Environment Park - Laboratori A1via Livorno 60 - 10144 Torino

Tel +39 011 4815111Fax +39 011 4815001E-mail: [email protected]

www.csp.it rd.csp.it

Lezione 3: piattaforma Arduino