• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Csp@scuola uav corso1_lez3
 

Csp@scuola uav corso1_lez3

on

  • 1,356 views

Programmazione Arduino e interfacciamento moduli esterni

Programmazione Arduino e interfacciamento moduli esterni

Statistics

Views

Total Views
1,356
Views on SlideShare
1,356
Embed Views
0

Actions

Likes
0
Downloads
35
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Csp@scuola uav corso1_lez3 Csp@scuola uav corso1_lez3 Presentation Transcript

    • Programmazione Arduino e interfacciamento amoduli esterniLezione 3CSP@SCUOLAin collaborazionecon ITI FAUSER NOVARAAnno scolastico 2011-2012
    • 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 shieldLezione 3: programmazione Arduino e interfacciamento a moduli esterni 2
    • 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 loop se non strettamente necessariLezione 3: programmazione Arduino e interfacciamento a moduli esterni 3
    • 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 CLezione 3: programmazione Arduino e interfacciamento a moduli esterni 4
    • 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 loopLezione 3: programmazione Arduino e interfacciamento a moduli esterni 5
    • 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 libreria includendone l’headerLezione 3: programmazione Arduino e interfacciamento a moduli esterni 6
    • 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 porta seriale) – 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=1246539386Lezione 3: programmazione Arduino e interfacciamento a moduli esterni 7
    • 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-sdLezione 3: programmazione Arduino e interfacciamento a moduli esterni 8
    • 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/SPILezione 3: programmazione Arduino e interfacciamento a moduli esterni 9
    • Interfaccia seriale sincrona: connessioni (1/2) 1 SCK 5V MISO MOSI RESET GNDLezione 3: programmazione Arduino e interfacciamento a moduli esterni 10
    • 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 => 52Lezione 3: programmazione Arduino e interfacciamento a moduli esterni 11
    • 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 shield SD 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);Lezione 3: programmazione Arduino e interfacciamento a moduli esterni 12
    • Arduino SD shield: esempio • Esempio di programma: Il pin SS dell’SD shield deve 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 serialeLezione 3: programmazione Arduino e interfacciamento a moduli esterni 13
    • 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 cavettiLezione 3: programmazione Arduino e interfacciamento a moduli esterni 14
    • Modulo GPS per Arduino: esempio d’uso Interfaccia seriale 3 Alimentazione (5V) • Informazioni dettagliate sul modulo disponibili qui: http://www.cooking-hacks.com/index.php/gps-module-for-arduino.htmlLezione 3: programmazione Arduino e interfacciamento a moduli esterni 15
    • 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 moduloLezione 3: programmazione Arduino e interfacciamento a moduli esterni 16
    • 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.pdfLezione 3: programmazione Arduino e interfacciamento a moduli esterni 17
    • 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 stringhe le informazioni di posizione, velocità eccLezione 3: programmazione Arduino e interfacciamento a moduli esterni 18
    • TinyGPS: esempio di utilizzo 1) Includere la libreria 2) Istanziare l’oggetto GPSIl metodo encode analizza Nell’esempio il modulo GPSbyte per byte i dati è connesso alla seriale 1. Iricevuti e se riconosce una dati letti saranno inviatistringa NMEA valida sulla seriale 0ritorna un valore>0 Per debug tutto quanto viene ricevuto è comunque inviato sulla seriale 0 Il metodo get_position attinge 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/ Lezione 3: programmazione Arduino e interfacciamento a moduli esterni 19
    • 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/ArduinoXbeeShieldLezione 3: programmazione Arduino e interfacciamento a moduli esterni 20
    • 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 lezioneLezione 3: programmazione Arduino e interfacciamento a moduli esterni 21
    • 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ò esssere usata per la programmazioneLezione 3: programmazione Arduino e interfacciamento a moduli esterni 22
    • Interfacciamento di più shield a una scheda Arduino • Esempio: • Shield SD => pin 50,51,52,53 (rilancio ICSP) • Shield GPS => Seriale 3Lezione 3: programmazione Arduino e interfacciamento a moduli esterni 23
    • 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 Tel +39 011 4815111 Fax +39 011 4815001 E-mail: marketing@csp.itLezione 3: piattaforma Arduino 24