Uno dei principali fenomeni degli ultimi anni che ha dato maggiore visibilità al software open source ma soprattutto al concetto di hardware open source è sicuramente quello dei "maker". Tale fenomeno va inquadrato come un vero e proprio movimento che può essere considerato una rivisitazione in chiave moderna del "fai da te" (DIY, Do It Yourself) per tutti coloro che sono fan dell'elettronica, della robotica e del software/firmware che permette di animare un qualsiasi oggetto di questo tipo.
È assolutamente innegabile che in questo campo, la scheda elettronica maggiormente utilizzata per scopi hobbistici e didattici ma in moltissimi casi anche per usi professionali sia Arduino.
Arduino, non solo "una board"
Parlare di Arduino come di un'unica board è riduttivo, in quanto con questo nome viene considerato un intero progetto completamente italiano, nato ad Ivrea nel 2005 con lo scopo di ridurre i tempi di prototipizzazione dei prodotti elettronici ad un costo estremamente basso.
Questo progetto prevede ad oggi una intera famiglia di board che si differenziano per capacità di elaborazione, tipologia di connettività disponibile, dimensioni e dotazione software/firmware. Si va infatti dalla "Arduino Uno" considerata come la entry level della famiglia alla "Arduino Yun" che attualmente rappresenta il top della gamma (con a bordo Linux) passando per tante altre board differenti.
Le shield
Lì dove le periferiche a disposizione non bastino per i nostri progetti, possiamo acquistare una delle numerose "shield" attraverso le quali si estendono le potenzialità della scheda elettronica di base, aggiungendo per esempio la connessione ethernet, Wi-Fi, GPRS, un lettore di microSD e così via. Non a caso si trovano in rete numerosi add-on o progetti completamente nuovi definiti come "Arduino-compatibile", proprio per esprime il concetto compatibilità con tale famiglia sia da un punto di vista hardware (corrispondenza dei connettori/pin) che software (possibilità di esecuzione del firmware); non ultimo è l'accordo raggiunto con la Intel che ha rilasciato la board Galileo, pin-to-pin compatibile con tutte le "shield" Arduino ed in grado di eseguire un qualsiasi programma già scritto per quest'ultimo.
Nel corso di questa guida introduttiva sulla programmazione con Arduino, faremo riferimento alla prima board nata nella famiglia ossia la "Arduino Uno" che ha tutte le carte in regola per la realizzazione di un qualsiasi progetto che vi venga in mente; considerata l'assenza della connessione Ethernet nativa, sarà successivamente necessario avvalersi della nota "Arduino Ethernet Shield".
Per chi si avvicina per la prima volta al mondo dello sviluppo su sistemi "embedded", va anticipato che molto spesso si avrà a che fare con ordini di grandezza estremamente ridotti in termini di memoria RAM e di storage; non si parlerà di centinaia di MegaBytes (MB) o di GigaBytes (GB) rispettivamente ma molto più verosimilmente di KiloBytes (KB). Durante questo percorso, vedremo quante cose si possono fare con delle risorse così estremamente ridotte, provando soprattutto il gusto di interagire con il mondo esterno.
Arduino Ethernet Shield
Arduino Uno
La "Arduino Uno" è una board basata su un microcontrollore della Atmel, ATmega328, che ha a bordo tutta la memoria e lo storage necessario per i nostri programmi (che come vedremo sono chiamati "sketch"); in particolare abbiamo a disposizione:
- 32 KB di memoria Flash (di cui 0,5 KB sono già occupati dal bootloader), la memoria Flash è utilizzata per il salvataggio del nostro "sketch" che sarà lanciato in esecuzione ad ogni avvio della board;
- 2 KB di SRAM (Static RAM), la memoria RAM è utilizzata a runtime (ad esempio per le variabili) ;
- 1 KB di EEPROM (Electrically Erasable Programmable ROM), che serve per salvare eventuali dati e parametri di configurazione utili e/o necessari al nostro programma.
È da sottolineare che, in termini di capacità di calcolo, stiamo parlando di un microcontrollore con architettura RISC (Reduced Instruction Set Computer) ad 8-bit (eh sì… avete letto proprio bene! Solo 8 bit contro i processori moderni a 32 e 64 bit di cui sentiamo parlare tutti i giorni) con una frequenza di clock di 16 Mhz (dimenticatevi i Ghz dei vostri PC). Seppur questi numeri esigui possano farvi spaventare, vedrete come sia possibile realizzare qualsiasi cosa, stando comunque sempre attenti allo spreco dei bytes non necessari.
I/O
I principali pin del microcontrollore sono messi a disposizione del "maker" attraverso due connettori posti ai bordi della scheda, attraverso i quali è banale collegare un qualsiasi altro dispositivo esterno che possa essere pilotato attraverso il nostro programma. In particolare, sono disponibili: 14 pin digitali e 6 pin analogici, in quanto l'Atmega328 è dotato anche di un AD Converter (Analog to Digital) a 6 canali e con 10 bit di risoluzione.
Ciascuno dei pin digitali può essere pilotato in maniera indipendente da software, impostandone il livello 1 (alto) o 0 (basso), ed utilizzato come pin di GPIO (General Purpose Input Output); alcuni di questi pin hanno comunque delle funzionalità aggiuntive se opportunamente configurati ed in particolare :
- Una porta seriale di tipo TTL (attenzione non RS232) caratterizzata dai soli segnali RX (Ricezione) e TX (trasmissione);
- Due pin per segnalare ("triggerare") un interrupt verso il microcontrollore, in corrispondenza del quale deve essere magari eseguita una specifica elaborazione;
- Segnali di output di tipo PWM (Pulse Width Modulation) per ottenere una tensione media variabile (che non sia solo alta o bassa) strettamente legata alla durata di un impulso nel tempo;
- Una porta SPI (Serial Peripheral Interface) utilizzata per l'interconnessione con device esterni attraverso appunto il bus sincrono di tipo SPI;
- Una porta I2C (Inter Integrated Circuit) che alla pari dell'SPI è utilizzata su un bus sincrono per la connessione ad altri device. Essa è anche nota come TWI (Two Wires Interface) essendo costituita da due soli segnali contro i quattro previsti dall'SPI;
- Il pin che stabilisce la tensione di riferimento (AREF, Analog REFerence) per tutti gli input analogici. Essa è necessario per stabilire il range di valori che l'AD Converter produce sulla base dei 10 bit a disposizione (in pratica esso fornirà un valore numerico compreso tra 0 e 1023, in corrispondenza ai valori di tensione da 0 a AREF Volts);
Inoltre, la board mette a disposizione due segnali di alimentazione in uscita a 3,3V e 5V che possono essere utili per alimentare uno o più dispositivi esterni con i quali comunicare, un segnale di RESET e soprattutto un LED a bordo che utilizzeremo per la nostra prima applicazione "Hello World".
L'unica connettività diretta con il mondo esterno è caratterizzata da un connettore USB che possiamo sfruttare per il collegamento al nostro PC di sviluppo. Come vedremo, il PC avrà a disposizione una porta seriale per poter comunicare con la "Arduino Uno", grazie a degli opportuni driver da installare ed al convertitore "USB-to-serial" di cui la board è dotata (in pratica il microcontrollore non ha un'interfaccia nativa USB ma utilizza sempre la comunicazione di tipo seriale).
Evitare di bruciare la scheda al primo tentativo
Un'importante considerazione da fare, per evitare di bruciare la nostra scheda al primo "esperimento", è che il microcontrollore ha una tensione operativa di 5V (massimo tollerabile su tutti i pin) ma possiamo utilizzare un alimentatore esterno tra i 6 ed i 20V. Inoltre, la corrente massima supportata su tutti i pin è pari a 40mA.
La cosa interessante è che, trattandosi di hardware open source, tutti gli schemi elettrici sono disponibili online sul sito ufficiale di Arduino, per cui la scheda è assolutamente "replicabile" in casa; esistono, infatti, tantissime board "Arduino-like" non ufficiali.
Come reperire una board Arduino
Per quanto riguarda l'acquisto delle board Arduino, sono numerosi i siti online che ne hanno la disponibilità, partendo dai grandi distributori di materiali elettronico come Mouser e RS).
In particolare, per i lettori di HTML.it, il distributore Robot-Domestici ha messo a disposizione il codice "html.it
" per aver a disposizione uno sconto del 3% su tutto il materiale acquistato nel corso dell'anno.
È da sottolineare che gli esempi utilizzati in questa guida sono compatibili con tutte le board Arduino e con la Intel Galileo.
Intel Galileo
Con questo primo articolo, abbiamo introdotto il progetto Arduino e la prima nata nella numerosa famiglia delle board. Nello sviluppo "embedded", prima di poter scrivere del codice è necessario conoscere abbastanza bene l'hardware che si andrà ad utilizzare per non incorrere in spiacevoli inconvenienti. Dal prossimo articolo, partiremo con lo studio dell'IDE che sarà il nostro compagno di viaggio nella realizzazione dei cosiddetti "sketch" Arduino !