Arduino: Italia campione del mondo nell’elettronica open source
Vi ricordo che questo articolo è del 2010
Premessa: dopo l’estrema delusione della Nazionale ai mondiali, concedetemi almeno questo titolo e vediamo di tirarci su con l’Italia che “ci piace” e che ci da soddisfazione!
L’idea è folle. E’ assolutamente folle. E’ talmente folle che funziona alla grande e ha portato alla ribalta nel mondo dell’elettronica OpenSource il nome dell’Italia, ma non quell’Italia che ci fanno vedere in TV, ma quella fatta di gente in gamba, che vale, che ha delle “idee in grado di cambiare il mondo”. Un motivo di vero orgoglio insomma.
La storia risale a circa 5 anni fa quando un ingegnere italiano, Massimo Banzi, insegnante all’Interaction Design Institute di Ivrea, decide di creare per i propri studenti un sistema a microcontrollore assolutamente semplice da programmare (e quando dico semplice intendo: programmabile anche da qualcuno a digiuno completo nel campo della programmazione) e soprattutto economico e potente. L’ingegnere si affida così proprio ad un suo studente, David Mellis, per la scrittura del linguaggio di programmazione da usare.
Non passa nemmeno una settimana: la creatura è nata e ha bisogno di un nome. Viene scelto “Arduino“, dal nome di un pub che si trovava nelle vicinanze dell’istituto. Il successo è immediato.
La storia completa la potete leggere sul magazine italiano on-line Wired a questo indirizzo.
Arduino è piccolo, semplice da far paura, potente, economico. Ma di cosa si tratta precisamente? E’ una di quelle che in molti chiamano “scheda di sviluppo”. Ha a bordo un microcontrollore della Atmel (acerrima rivale della Microchip).
Fin qui nulla di speciale direte voi. Ma… Aspettate un attimo!
Arduino viene fornito con un bootloader precaricato: il che vuol dire che non avrete bisogno di un programmatore. Basterà semplicemente l’IDE, scaricabile gratuitamente dal sito ufficiale, e collegare la scheda tramite USB al computer. Una volta acquistata la schedina (che ha un costo davvero irrisorio), in pratica non avrete bisogno di null’altro per cominciare a divertirvi!
Ok ma… Questa è una funzione che hanno tantissime altre schede, direte voi. Certo ma la filosofia alla base di Arduino è ben diversa. Il software che andrete a scaricare è un qualcosa di estremamente completo. Ed è il software di Arduino che fa la vera differenza con altri sistemi simili.
Innanzitutto partiamo col dire che non ci sono limitazioni di nessun genere: l’IDE, che è un ide completo (linguaggio di programmazione, software di programmazione, manualistica, esempi di programmazione, librerie gratuite a iosa già pronte) è gratis ma soprattutto è open source. Così come è open source anche il bootloader, che permette al microcontrollore di essere programmato senza bisogno di acquistare programmatori, e così come sono opern source gli schemi e tutto ciò che compone il progetto Arduino.
Capite adesso il perchè della definizione di “idea folle”? Forse non l’avete ancora afferrata del tutto perchè ho dimenticato di dire che tutto questo è liberamente (leggi: gratuitamente) utilizzabile da chicchessia, senza limitazione alcuna. Esempio: un giorno vi svegliate e decidete di mettervi a produrre schede basate su Arduino, modificando il software in base alle vostre idee. Non ve lo impedirà nessuno. L’unica (e dico unica) limitazione è che non potrete utilizzare il nome “Arduino” che è l’unico copyright.
Difatti in commerciono esistono centinaia di schede compatibili con Arduino e il cui nome finisce con -duino proprio a ricordare che sono dei derivati del progetto Arduino.
Immaginate ora lo scenario che si prospetta: è tutto open source (ma proprio tutto)… Il che vuol dire che in tutto il mondo ci saranno milioni di persone che ci lavorano su e rendono disponibili le proprie idee.
Arduino si programma in C++. Chi già mastica il C non avrà nessuna difficoltà ad utilizzarlo per la prima volta (il C++ usa la stessa sintassi del C e in più c’è l’utilizzo di “oggetti” ma vi assicuro che non è nulla di complicato). Anche se il C non lo avete mai nemmeno “annusato”, ci vorranno due secondi per trovare, nella vasta libreria di esempi, un programmino che faccia al caso vostro e basterà un minimo di lettura alla documentazione delle funzioni per capire come modificarlo in base alle proprie esigenze.
Io stesso sono rimasto spiazzato di fronte alla semplicità disarmante del sistema in se stesso.
Un’altra delle trovate geniali di Arduino è costituita dagli Shields (scudi). Si tratta in pratica di schede di espansione che si collegano su Arduino e ne estendono le funzionalità. Esistono shields per praticamente qualsiasi cosa: collegamento display, Xbee, Ethernet, interfacce MIDI, interfacce GPS con datalogger, controllo motori ecc ecc, tutte ad un prezzo accessibile e tutte con librerie già pronte ed utilizzabili senza limitazioni
Detto tra noi, lo shield per l’Ethernet, che costa intorno ai 36 euro, considerando che le librerie per usare l’Ethernet sono già pronte… Mi fa gola non poco e penso proprio che prossimamente ci farò un pensierino.
Vi assicuro che per usare Arduino non sono necessari tutorial o libri, ne è necessario capire come è fatto un microcontrollore della Atmel: la documentazione fornita è completa e basta soltanto:
- Scaricare il software di programmazione all’indirizzo: http://arduino.cc/en/Main/Software
- Seguire le istruzioni per l’installazione: http://arduino.cc/en/Guide/Windows (il tutto è disponibile anche per altri sistemi operativi)
- Darsi una lettura alle funzioni usate dal linguaggio di Arduino: http://arduino.cc/en/Reference/Extended (oltre a quelle classiche usate dal C, essendo Arduino composto da librerie già fatte, ci sono alcune funzioni aggiuntive che ne renderanno molto facile l’utilizzo )
- Una volta che avrete afferrato la semplicità del tutto vorrete sicuramente passare alle librerie aggiuntive che vi permetterano di fare cose davvero succulente: http://arduino.cc/en/Reference/Libraries
Primo utilizzo
Collegando Arduino al pc mediante USB (le vecchie versioni usavano la normale porta seriale DB9), verrà riconosciuto un nuovo dispositivo e nella maggior parte dei casi ne verrà richiesta l’installazione. In pratica Arduino ha a bordo il classico FT232 per l’emulazione di una seriale su porta USB, i drivers sono già inclusi nel file che avete scaricato (cartella “Drivers”), l’installazione segue quella che ho già illustrato in questo articolo in cui si faceva uso di un dispositivo basato sullo stesso chip.
Il primo esempio da compilare è sicuramente il led lampeggiante. Scaricato il software di Arduino, lanciamo Arduino.exe (ah! non c’è nulla da installare oltre ai drivers per la seriale), ci troveremo di fronte all’IDE:
L’IDE di Arduino chiama i progetti col nome “Sketch” (bozza).
I più attenti noteranno l’icona di Java. Difatti il software deriva da Processing, che è scritto in Java. Non dovrete nemmeno preoccupartìvi di avere Java installato sul pc in quanto è tutto già compreso nel download e senza la necessità di doverlo installare!
Andando nel menù File -> Examples noterete come l’IDE comprenda già numerosissimi esempi di programmazione dai quali prendere spunto. Apriamo Examples -> Digital -> Blink, che è il classico esempio di lampeggìo del led:
int ledPin = 13; // LED connected to digital pin 13 // The setup() method runs once, when the sketch starts void setup() { // initialize the digital pin as an output: pinMode(ledPin, OUTPUT); } // the loop() method runs over and over again, // as long as the Arduino has power void loop() { digitalWrite(ledPin, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(ledPin, LOW); // set the LED off delay(1000); // wait for a second } |
C’è innanzitutto da notare la cosa principale: ogni programma avrà sempre due funzioni: setup e loop. Setup contiene appunto i settaggi (o comunque tutte le funzioni da eseguire un’unica volta all’avvio) e loop equivale in pratica al main/while(1) al quale noi programmatori di picmicro in C siamo abituati.
Per il resto, se capite un po’ di C, vedete che non c’è nulla di particolare. Arduino ha librerie già incluse che facilitano la stesura del codice: in questo esempio vediamo che pinMode setta il numero di pin, specificato come primo argomento (i numeri di pin sono serigrafati sulla scheda di Arduino), come uscita (OUTPUT). DigitalWrite serve per portare a livello alto o basso il pin specificato. E questo non potete negare che non si capisce chiaramente anche senza che si vada a leggere la documentazione!
E per caricarlo sulla scheda?
Hei! Stiamo parlando di Arduino! Qui non c’è bisogno di compilare, produrre l’HEX e quindi caricare con il programmatore! Basterà semplicemente tenere connesso Arduino e premere il pulsante Upload:
e quindi attendere il caricamento (o eventuali errori) nella finestra sottostante. La pressione del pulsantino Upload prevede comunque che abbiate correttamente settato la giusta porta seriale dal menù Tools->Serial port (almeno questo lo volete fare o siete davvero così pigri?). Il led lampeggerà da subito in quanto l’alimentazione viene prelevata dalla porta USB (ah dimenticavo! non c’è bisogno di collegare il led perchè Arduino già ha il led sulla porta 13).
Non dimenticate, inoltre, che essendo collegato su USB/Seriale, possiamo sempre sfruttare la comunicazione seriale come una sorta di Debug, inviando messaggi man mano che un programma viene eseguito (c’è difatti una voce che permette di controllare la seriale dal menù Tools -> Serial monitor e che agisce un po’ come hyperterminal su windows).
Alternative
Se volete, Arduino potete costruirvelo anche da soli dal momento che sono resi noti gli schemi e il bootloader. L’unico problema è che avrete bisogno di un programmatore almeno la prima volta per caricarvi il bootloader… Ma vi pare che il team di Arduino non aveva pensato anche a questo? A parte il fatto che pure il bootloader è già incluso nel corposo file che vi andate a scaricare e che c’è un’apposita funzione nell’IDE che vi permette di caricare il bootloader, nella sezione “hacking” del sito ufficiale ci sono tutte le informazioni relative al bootloader: http://www.arduino.cc/en/Hacking/Bootloader e quindi anche varie soluzioni per ottenere il programmatore, tra cui quello più semplice è sicuramente quello con interfaccia parallela: http://arduino.cc/en/Hacking/ParallelProgrammer.
Ma non vi preoccupate perchè vengono anche venduti gli ATmega328 (sul quale è basata l’ultima versione di Arduino Duemilanove) già con il bootloader usato da Arduino. Qui ad esempio trovate un esempio per realizzarvi il vostro Arduino: http://www.droids.it/cmsvb4/content.php?229-1000Pads-Arduino-Compatible
Ovviamente, seguendo l’esempio di Arduino, sono nate tantissime altre schede che ne seguono la filosofia e addirittura alcune di queste possono usarne gli shields pur essendo basati su altri microcontrollori.
A titolo di esempio voglio citare solo quelli che fanno uso di PIC della Microchip:
- Pinguino: una board basata su PIC18F2550, che utilizza l’USB nativa (quindi senza convertitori come l’FT232) e funziona con lo stesso IDE di Arduino, al quale però è affiancato SDCC per permettere la compilazione dei programmi: http://www.hackinglab.org/pinguino/index_pinguino.html
- Amicus18: board basata su PIC18F25K20, programmabile in protonbasic, e per la quale sono disponibili numerosi shields: http://digital-diy.com/home/amicus18/beginner-guides/195-introducing-the-amicus18.html
- Unduino: board basata su un potentissimo dsPIC33: http://www.unduino.com/
Un elenco completo anche dei cloni di Arduino è disponibile su Wikipedia in lingua inglese: http://en.wikipedia.org/wiki/Arduino