All’Interaction Design Institute Ivrea (IDII) gira una scheda a microcontrollore, chiamata Arduino, con gli schemi elettrici pubblicati sotto una licenza che ne consente la copia. Monta un Atmel ATmega8, si programma da un ambiente derivato da Processing e costa, in componenti, meno di trenta euro. Ho ricostruito le scelte tecniche che la distinguono dalle piattaforme didattiche che ho usato finora.
Contesto
IDII è la scuola di interaction design aperta a Ivrea nel 2001 con i fondi Olivetti/Telecom Italia. Forma persone che lavorano a cavallo tra elettronica, programmazione e progetto d’uso, e che quindi devono prototipare oggetti interattivi senza un percorso da ingegnere elettronico alle spalle.
Il problema pratico lo conosce chiunque abbia tenuto un laboratorio: gli strumenti che esistono chiedono una spesa che lo studente non tecnico non riesce a giustificare. Il BASIC Stamp di Parallax è semplice da programmare ma caro per board, e il suo interprete PBASIC gira su un PIC con poche risorse. Programmare un PIC direttamente, o un AVR con lo STK500 di Atmel, vuol dire mettersi a combattere con toolchain, programmatori dedicati e datasheet. Lo scalino tra “ho un’idea” e “vedo il LED lampeggiare” è troppo alto.
Architettura
Il cuore della scheda è l’ATmega8, un microcontrollore AVR a 8 bit. Dal datasheet Atmel: 8 KB di flash programmabile, 1 KB di SRAM, 512 byte di EEPROM, un convertitore A/D a 10 bit, funzionamento fino a 16 MHz. Intorno al chip ci sono un regolatore, un quarzo, i connettori per i pin di I/O digitali e per gli ingressi analogici, e un’interfaccia seriale per caricare il codice.
La parte che mi interessa di più è il bootloader. Sul chip è già scritto un piccolo programma residente che all’avvio ascolta per un istante la porta seriale: se arriva un nuovo sketch lo scrive in flash, altrimenti passa il controllo al programma utente. Il protocollo è quello dello STK500, che gli strumenti AVR già conoscono. Risultato: per caricare il codice non serve un programmatore hardware esterno, basta la seriale che si ha già. Scendono insieme il costo e il numero di cose che in aula possono andare storte.
Gli schemi della scheda e il layout del circuito stampato sono pubblicati. Chi ha accesso a un laboratorio può rifare la board, modificarla, produrne una piccola serie. Qui la licenza pesa quanto l’elettronica: separa uno strumento che si compra da uno che si studia smontandolo.
Il modello di programmazione
L’ambiente eredita dal progetto Wiring, che Hernando Barragán sviluppa dal 2003 come tesi di master a IDII, con Massimo Banzi e Casey Reas relatori. Wiring a sua volta poggia su Processing, l’ambiente per il coding visuale nato nel gruppo di Reas e Ben Fry al MIT Media Lab. Da questa discendenza viene l’editor: una finestra Java con un pulsante per compilare e uno per caricare, senza un makefile in vista.
Il programma utente — lo sketch — gira attorno a due funzioni:
void setup() {
// eseguita una volta all'accensione
}
void loop() {
// ripetuta all'infinito
}
Sotto c’è C++, compilato con avr-gcc e linkato con avr-libc. L’ambiente nasconde il toolchain: chi scrive digitalWrite(13, HIGH) non deve sapere che sta scrivendo su un registro di porta, né ricordarsi il nome del registro. Per un corso di prototipazione è proprio questo il punto: si insegna il rapporto causa-effetto tra codice e mondo fisico, e l’aritmetica dei registri si rimanda.
Punto critico
La scelta che mi pare decisiva è aver separato due cose che di solito vengono vendute insieme: la facilità d’uso e la chiusura del sistema. Il BASIC Stamp è facile perché ti dà un interprete e ti nasconde tutto, compreso il diritto di guardarci dentro. Arduino nasconde la complessità in superficie — setup(), loop(), l’editor con un bottone — ma sotto resta C++ standard su un AVR documentato, con schemi aperti e toolchain libera. Chi vuole fermarsi al LED che lampeggia si ferma lì; chi vuole leggere il datasheet dell’ATmega8 e scrivere a mano sui registri trova il chip nudo sotto l’astrazione, senza muri.
Questa proprietà non viene gratis: dipende dall’aver scelto un microcontrollore con un compilatore libero maturo (avr-gcc) e una libreria C documentata (avr-libc). Su una piattaforma con compilatore proprietario o interprete chiuso, lo stesso strato di astrazione sarebbe stato una gabbia invece di una porta.
Implicazioni
Se l’esperimento di IDII regge, la cosa interessante è che il progetto della scheda sia copiabile, più della scheda in sé. Una board didattica chiusa vive finché il produttore la vende; una con gli schemi pubblicati si può rifare, adattare a un corso specifico, produrre in piccola serie da chi insegna. Per le scuole con budget rigidi e per i laboratori auto-organizzati cambia il conto: lo strumento diventa un punto di partenza modificabile, da adattare invece che da ricomprare.
Mi aspetto anche un effetto sul tipo di documentazione che circola. Quando gli schemi sono pubblici, gli esempi di codice, gli accessori che si innestano sui connettori e le note di chi ha risolto un problema diventano patrimonio condiviso, invece di restare chiusi nel supporto di un fornitore. È lo stesso meccanismo del software libero, applicato a un oggetto che si tiene in mano.
Limiti
Quanto sopra descrive la situazione di giugno 2005, e va preso con le dovute cautele. L’ATmega8 ha 8 KB di flash e 1 KB di SRAM: bastano per leggere sensori, pilotare attuatori, gestire qualche comunicazione semplice, ma non per applicazioni che chiedono molta memoria o molto calcolo. La porta seriale per il caricamento, su un computer senza seriale fisica, vuole un adattatore. L’ambiente Java è comodo ma pesante rispetto a un compilatore da riga di comando, e la sua stabilità su tutte le piattaforme resta da verificare sul campo.
Resta poi la domanda sulla tenuta: IDII attraversa difficoltà di finanziamento e la sua continuità non è scontata. Che un progetto nato dentro una scuola sopravviva alla scuola che lo ha generato è esattamente la prova che gli schemi aperti dovrebbero superare. Lo si potrà dire solo guardando chi, fuori da Ivrea, raccoglierà quei file e ci costruirà sopra.
- https://www.arduino.cc/
- http://wiring.org.co/
- http://www.processing.org/
- https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf
- http://www.nongnu.org/avr-libc/
- https://www.noze.it/insights/arduino-origini-ivrea/
Immagine di copertina: Vista dall’alto di una scheda Arduino dei primi anni con microcontrollore Atmel ATmega8, regolatore, quarzo, connettori per i pin di… — foto di DustyDingo, pubblico dominio — https://commons.wikimedia.org/wiki/File:Arduino_top-1.jpg