Nuovo appuntamento con la Rubrica Firmware Reload di Elettronica Open Source. In questo articolo per la Rubrica Firmware Reload parleremo della popolare piattaforma hardware, spiegata direttamente da Atmel.
Introduzione
Arduino, una piccola scheda di colore blu, ha provocato una sorta di rivoluzione nel settore dell’elettronica. Gli sviluppatori hardware più esperti, dopo la prima esperienza con questa piattaforma, è probabile che tendano a snobbarla giudicandola poco più di un "giocattolo" inadatta per "veri" programmatori. Ma proprio questo è il motivo della sua crescente popolarità. Fin dalla sua introduzione, la famiglia di schede Arduino è cresciuta fino a comprendere una dozzina di versioni, che si differenziano in termini di fattori di forma e di microcontrollori al fine di soddisfare un’ampia gamma di esigenze applicative. Il "cervello" di queste schede è la famiglia di microcontrollori AVR® di Atmel: le schede più recenti sono equipaggiate con il processore SAM3X di Atmel basato su core ARM®. A questo punto può sorgere spontaneo chiedersi quale sia la necessità di introdurre una nuova scheda vista la varietà di piattaforme e schede di sviluppo già presenti sul mercato. La ragione è molto semplice: i microcontrollori sono troppo complicati.
Quest’ultima affermazione, ovviamente, non è valida per coloro che possono vantare anni di esperienza di sviluppo con i microcontrollori. Per contro, tutti quelli che operano al di fuori dell’industria elettronica e sono alla ricerca di metodi efficaci per aggiungere un certo livello di controllo sul prodotto che stanno sviluppando, necessitano di uno strumento che non richieda una curva di apprendimento così "impegnativa" come quella necessaria per i tradizionali dispositivi a microcontrollore. Si prenda come esempio un USART. Un tipico microcontrollore AVR ne ha più di uno: la prima decisione da prendere è selezionare quello da utilizzare. Inevitabilmente l’interfaccia scelta è associata con pin che sono per loro natura multifunzionali.
Così, prima di intraprendere qualsiasi compito, è necessario leggere il capitolo del datasheet relativo all’USART e la documentazione che descrive la modalità di selezione della funzionalità dell’USART in funzione dei pin scelti. Una volta completato questo compito, è necessario prendere in considerazione altri fattori tra cui: modalità di calcolo della velocità di trasferimento dati (baud rate), relazione esistente tra quest’ultima e la frequenza dell’oscillatore del microcontrollore AVR, modalità di abilitazione dell’interrupt dell’USART, modalità di scrittura di una routine di interrupt in funzione della realizzazione scelta. La lista dei compiti da svolgere, come si può vedere, è lunga e il tempo per il neofita è ridotto.
Tutti coloro che lavorano nel campo dei microcontrollori sono consci del fatto che sono necessari anni per accumulare l’esperienza richiesta per realizzare in tempi brevi e in maniera efficace un’interfaccia di questo tipo. Gli sviluppatori della piattaforma Arduino si sono resi conto di queste problematiche e attraverso l’ambiente di sviluppo di supporto rendono disponibile una API (Application Programming Interface) e librerie che permettono di realizzare funzioni complesse, come ad esempio le interfacce seriali, scrivendo un numero ridotto di righe di codice e senza dover conoscere in modo approfondito ciò che sta accadendo nel "motore" della piattaforma. In questo modo, il mondo della programmazione e dell’elettronica embedded è accessibile non solo a hobbisti e studenti, ma anche a tutti coloro che operano in campi completamente diversi come ad esempio quelli dell’arte e della moda. Non si deve dimenticare che l’elettronica e la programmazione embedded sono pervasive e che l’elettronica può essere integrata con numerose altre discipline.
PERCHÈ UN’ALTRA PIATTAFORMA?
Attualmente sono disponibili svariate piattaforme per quasi tutte le più diffuse architetture di microcontrollore. Esse, comunque, possono essere considerate alla stregua di variazioni su un medesimo tema: tutte prevedono un microcontrollore fisico in un formato che può essere utilizzato senza dover essere saldato e consentono di iniziare in tempi brevi lo sviluppo di un progetto grazie alla presenza di tutti i circuiti esterni necessari (quarzo, transceiver e alimentatore). I produttori di semiconduttori ovviamente utilizzano i loro tool di sviluppo come supporto della loro azione di marketing finalizzata alla promozione di determinati prodotti o caratteristiche presenti a bordo dei loro chip. In conformità con quanto riportato nel sito web di Arduino, questa piattaforma si differenzia da quelle disponibili sul mercato sulla base delle seguenti caratteristiche (Figura 1).
Economicità: il costo dei moduli assemblati è inferiore a 50 dollari e il più semplice può anche essere realizzato manualmente.
Portabilità su diverse piattaforme (Cross-platform): l’ambiente di sviluppo della programmazione gira sui sistemi operativi Windows, Linux e MAC.
Questa è una caratteristica che molti produttori di microcontrollori non possono vantare.
Ambiente di programmazione semplice e chiaro: basato sull’ambiente di programmazione "processing", l’IDE (Integrated Development Environment) è semplicissimo, formato soltanto da una serie di tasti e un editor di testo. Se necessario, è possibile aggiungere codice C standard al progetto.
Hardware e software open source e ampliabile: tutti gli elementi software e i progetti hardware sono rilasciati sotto una licenza di tipo Creative Commons. Questa licenza consente agli utenti di apportare modifiche e migliorie a tutto ciò che è disponibile. Naturalmente è incoraggiata la condivisione delle idee. Accanto ai vantaggi appena esposti, esistono alcuni svantaggi che appaiono in ogni caso di natura soggettiva.
Assenza di debugging: l’ambiente di sviluppo di Arduino supporta solamente la programmazione della scheda Arduino target. La mancanza di supporto per il debug può essere compensata in qualche misura mediante l’implementazione, tramite l’USART, di un’uscita testuale di semplice uso che rende disponibili messaggi di debug. L’ambiente di sviluppo fornisce inoltre un monitor seriale integrato.
Framework software fisso: la velocità dell’oscillatore, per esempio, è fissa. Ciò significa che tutte le altre funzionalità di Arduino possono operare all’interno dei limiti imposti dalla frequenza dell’oscillatore scelta. Inoltre, alcune delle altre librerie fornite fanno uso di determinate caratteristiche hardware (ad esempio timer), per cui non sono disponibili per l’applicazione considerata.
COSA SI PUÒ OTTENERE CON ARDUINO?
All’apparenza, non molto. Una scheda Arduino è composta da un regolatore per l’alimentazione, un’interfaccia USB che supporta sia l’interfaccia di programmazione sia l’interfaccia seriale di classe CDC (Communication Device Class) dell’utente (oltre a proporsi come una sorgente di potenza alternativa), il microcontrollore AVR, un tasto di reset, e una serie di pin header (in pratica i connettori). Questi ultimi sono raggruppati per funzioni seguendo uno schema di facile comprensione. Dapprima c’è l’header di alimentazione (Vin, 5,0 V, 3,3 V), massa (GND) e un IOREF per supportare l’interfacciamento con microcontrollori con alimentazione a 3,3 V invece della tradizionale alimentazione a 5,0 V. Gli header "ANALOG IN" forniscono funzionalità di misura analogica attraverso il modulo ADC del microcontrollore. I restanti pin sono di tipo digitale ("DIGITAL") e possono essere usati come GPIO (ovvero I/O di tipo general purpose) di ingresso o di uscita. Questi pin header possono essere ulteriormente suddivisi in uscite "PWM" (per la gestione di questo tipo di modulazione) e "COMMUNICATION" (comunicazione) nei casi in cui sono disponibili interfacce seriali.
Le sole caratteristiche hardware disponibili su molte schede sono un singolo LED collegato a un pin DIGITAL e l’USART connesso direttamente all’interfaccia USB di classe CDC presente sulla scheda. Lo scopo di Arduino non è quello di fornire una piattaforma di sviluppo moderna, avanzata e ricca di funzionalità. Piuttosto, il team che ha sviluppato Arduino incoraggia tutti i potenziali utilizzatori a integrare questa scheda con circuiti elettronici da loro ideati per dar vita ai propri prodotti. Arduino è un mezzo per raggiungere un obbiettivo, non un obbiettivo. Esistono comunque potenziali funzioni che sarebbe utile implementare ma risultano complesse o difficile da gestire.
Per esempio, la realizzazione di una connessione Ethernet o di un link wireless non è un compito semplice neppure per progettisti esperti. Il progetto meccanico di Arduino semplifica, attraverso lo sviluppo delle cosiddette "shield" (ovvero schede aggiuntive che vanno a "incastrarsi" perfettamente nei pin di Arduino), la condivisione di moduli standard espressamente progettati per aggiungere questa funzionalità. Poiché il layout (ovvero la disposizione) meccanico degli header è coerente nella maggior parte delle schede Arduino e le schede di maggiori dimensioni sono in pratica un super set della scheda Arduino UNO (la scheda base), è possibile progettare moduli standard, o appunto shield, caratterizzati da un elevato livello di compatibilità sia con la famiglia di schede Arduino sia con altre shield (Figura 2).
PROGETTO DI UNA SHIELD DI ARDUINO
Nonostante la "brillantezza" della scheda e il "fascino" del sito Web, Arduino fa ancora parte del mondo open source. Ciò significa disporre di un prodotto e/o servizi avanzati a fronte di una documentazione abbastanza carente. Sfortunatamente non esiste una documentazione "ufficiale" relativa alle modalità di sviluppo di una shield di Arduino. Non esiste neppure un canale ufficiale al quale rivolgersi per avere un riconoscimento del progetto di una nuova shield. Più semplicemente, si deve adottare un approccio del tipo: "si propone l’idea e quindi si verifica la reazione", in altre parole bisogna sperare che un certo numero di persone mostri interesse per una determinata shield, in modo tale che venga sponsorizzata dalla community che ne favorirà quindi la diffusione fino al punto in cui non sarà più possibile ignorare la shield in questione. Vi sono comunque alcune problematiche legate allo sviluppo di una shield di Arduino, tra cui dimensioni fisiche della scheda differenti, come già fatto notare in precedenza, alcune schede Arduino hanno un numero maggiore di header pin rispetto ad altre. Ovviamente, non tutte le shield di Arduino possono richiedere una risorsa fissa dalla scheda Arduino di base, poiché altre schede presenti nello stack potrebbero richiedere quella stessa risorsa. Quindi differenti shield potrebbero essere incompatibili tra di loro una volta impilate (stacked).
Differenti versioni di Arduino: nella revisione 3 delle schede Arduino è stato aggiunto il pin IOREF per consentire a una shield di determinare il tipo di alimentazione utilizzata dal microcontrollore (5 o 3,3 V). Le precedenti revisioni della scheda Arduino non disponevano di questo pin, ma le future shield potranno sfruttare questa caratteristica mantenendo nel contempo la retro compatibilità.
Modelli standard di PCB: non esiste un modello "ufficiale" o un footprint (ovvero quella raccolta di informazioni che definiscono area occupata, geometria, disposizione dei pin) della scheda PCB per una shield, che rappresenta senza dubbio un valido aiuto nel momento in cui si esegue il layout di qualsiasi scheda che deve risultare compatibile con un dato sistema.
Assenza di materiale documentativo di supporto: è ovvio che il solo hardware privo di esempi software, driver software o documentazione è meno pratico e utile rispetto a un hardware corredato da questi elementi. Naturalmente, come sempre accade nel mondo dell’open source, è possibile reperire suggerimenti, soluzioni ai problemi provocati da un errore (senza però riparare l’errore stesso) e raccomandazioni. E' peraltro ovvio che tutti coloro che preferiscono adattare l’idea alla specifica piuttosto che creare la specifica sulla base dell’idea non si troveranno molto a loro agio.
REALIZZAZIONE PRATICA DI UNA SHIELD QTOUCH
Il processo di sviluppo dell’hardware di una shield di Arduino non si differenzia dalla progettazione di qualsiasi altro circuito. A corredo di questa introduzione viene proposta la realizzazione di una shield per il rilevamento a sfioramento (touch) capacitivo basato sulla tecnologia QTouch®di Atmel. Il progetto, denominato "TickleShield" è reperibile sul nuovo sito Web "Spaces" di Atmel (si tratta di un sito aperto a tutti quelli che vogliono collaborare su progetti hardware/software basati su prodotti o microprocessori della società).
Scopo di questo progetto è creare una scheda di semplice uso da utilizzare come interfaccia a sfioramento per completare qualsiasi progetto che richieda un controllo semplice o il controllo di un sistema basato su menu di tipo grafico. Il progetto in questione è basato sul controllore AT42QT2120 (il cui schema a blocchi è riportato in Figura 3) per applicazioni di rilevamento tattile capacitivo: esso rende disponibili cinque tasti unitamente a un canale di protezione (guard) da utilizzare nel caso di rilevamenti indesiderati (come accade ad esempio nei casi in cui l’utente voglia eliminare umidità o liquidi dalla superficie tattile).
Il controllore fornisce anche un ingresso per il rilevamento di prossimità che può essere utilizzato per attivare l’illuminazione ambiente nel momento in cui viene rilevato l’avvicinamento di una mano. Lo stato di AT42QT2120 può essere letto attraverso sei uscite logiche che sono collegate a sei degli ingressi digitali di Arduino alla quale è collegato. Se la shield viene utilizzata in configurazione stand-alone, le uscite del dispositivo AT42QT sono anche trasferite a un header da 0,1” standard. Nel caso il cablaggio standard della shield non soddisfi le esigenze dell’utilizzatore, i collegamenti a impedenza nulla possono essere rimossi e le uscite del controllore AT42QT possono essere riconfigurate sulla base di specifiche necessità. Lo schema circuitale del progetto è relativamente semplice.
Il problema principale è rappresentato dal progetto della scheda PCB. Al fine di ottenere un progetto robusto e affidabile è necessario porre molta attenzione al progetto e al layout dei tasti a sfioramento (touch button), del rilevamento di prossimità e degli elementi dell’anello di protezione della scheda. La nota applicativa QTAN0079 di Atmel (dal titolo "Buttons, Sliders and Wheels Sensor Design Guide") rappresenta un’eccellente fonte di informazione. Per evitare il redesign delle piattaforme Arduino, come base della shield è possibile utilizzare i progetti hardware open source disponibili sotto forma di file in formato Eagle-CAD (Easily Applicable Graphical Layout Editor: software per la progettazione di circuiti elettronici prodotto da Cadsoft). In questo caso si è fatto ricorso alla scheda Arduino MEGA 2560, adottandone il layout e rimuovendo tutto il resto ad eccezione delle interconnessioni passanti (through hole) attorno ai lati della scheda stessa.
Importando di nuovo la scheda ottenuta in Eagle-CAD come se si trattasse di un nuovo componente è stato possibile garantire la correttezza del layout dei pin e, se richiesto, dei fori. Esportando il progetto mediante il plug-in open source EagleUp è stato possibile generare un layout tridimensionale del prototipo mediante il tool di disegno e modellazione 3D SketchUp di Trimble. Esportando il risultato ottenuto nel tool di rendering Maxwell si è quindi pervenuti a un’immagine fotorealistica della scheda da utilizzare per azioni di marketing (Figura 4). Per completare il corredo di documentazione di supporto è importante fornire alcuni esempi software per la piattaforma Arduino che illustrano le modalità di utilizzo delle caratteristiche della shield. I passi necessari per creare una libreria non sono particolarmente complessi. Sul sito web di Arduino è disponibile un eccellente tutorial che descrive un semplice processo che permette di passare dal codice di un’applicazione funzionante a una libreria completa da integrare nell’ambiente IDE di Arduino.