Arduino (hardware)
Arduino è una piattaforma hardware per il physical computing, creata in Italia nel 2005, e basata su una semplicissima scheda di I/O e su un ambiente di sviluppo che usa una libreria Wiring pre semplificare la scrittura di programmi in C e C++ da far girare sulla scheda.
Arduino può essere utilizzato per sviluppare oggetti interattivi stand-alone o può interagire, tramite collegamento, con un software residente su un computer, come Adobe Flash, Processing, Max/MSP, Pure Data, SuperCollider).
La piattaforma hardware Arduino è distribuita agli hobbisti solo attraverso la rete e viene spedita in versione pre-assemblata, ma le informazioni sul progetto hardware sono disponibili per chiunque volesse costruirsi un Arduino con le proprie mani.
Il team di Arduino è composto da Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, e David Mellis.
Il progetto ha preso avvio in Italia, nel 2005, con lo scopo di rendere disponibile agli appassionati di robotica fai da te un device per controllare robot auto-costruiti, in maniera più economica rispetto ad altri sistemi di prototipazione disponibili all'epoca. I progettisti riuscirono nell'intento di creare una piattaforma di semplice utilizzo e che, al contempo, permettesse un significativo taglio di costi rispetto a molti prodotti concorrenti.
A ottobre 2008, erano state venduti più di 50.000 esemplari di Arduino in tutto il mondo.
Piattaforma
Hardware
Una scheda Arduino consiste in di un microcontroller a 8-bit AVR prodotto dalla Atmel, con dei componenti complementari per facilitarne l'incorporazione in altri circuiti. Gli Arduino ufficiali hanno usato chip della serie megaAVR, nello specifico i modelli ATmega8, ATmega168, ATmega328, e ATmega1280. Ma i suo cloni si sono servito di una mnaciata di altri processori. Molte schede includono un regolatore lineare di tensione a 5-volt e un a 16MHz oscillatore a cristallo (o un risonatore ceramico in alcune varianti), sebbene alcune implementazioni, come LilyPad, girino a 8Mhz e fanno a meno dello stabilizzatore di voltaggio a causa delle specifiche restrizioni al fattore di forma. Inoltre, il controller Arduino è pre-programmato con un bootloader che semplifica il caricamento dei programmi nella memoria flash incorporata nel chip, rispetto ad altri device che richiedono, solitamente, un programmer esterno.
A livello concettuale , tutte le schede sono programmate attraverso un porta seriale RS-232, ma il modo in cui questo è implementato nell'hardware varia da versione a versione. Le schede seriali Arduino contengono un semplice circuito inverter che permette la conversione tra il livello della RS-232 e il livello dei segnali TTL.
Le attuali schede Arduino sono programmate tramite USB, grazie a un'implementazione che usa dei chip adattatori USB-seriale come gli FT232 della FTDI. Alcune varianti, come la Arduino Mini e la versione non ufficiale Boarduino, usano una scheda o un cavo adattatore USB-to-serial staccabile.
La Arduino mostra molti dei connettori di Input/Output per microcontroller usati da altri circuiti. La Diecimila, ora soppiantata dalla Duemilanove, per esempio, offre 14 connettori per l'I/O digitale, 6 dei quali possono produrre segnali PWM, e 6 dedicati a input di segnali analogici. Questi pin sono disponibili sulla parte superiore della scheda, mediante connettori femmina di 0.1 pollici. Inoltre, sono disponibili commercialmente molte schede applicative plug-in, note come "shields".
Le Barebones e Boarduino, compatibili con la Arduino, sono fornite di connettori maschio sul lato inferiore del circuito in modo da poter essere connessi a una breadboard senza saldature.
Software
Lo IDE di Arduino è una applicazione multipiattaforma scritta in Java, ed è derivata dallo IDE creato per il linguaggio di programmazione Processing e per il progetto Wiring. È concepita per introdurre alla programmazione artisti e altri neofiti, privi di pratica nello sviluppo di software. Include inoltre un editore di testo per il codice dotato di particolarità come il syntax highlighting, il controllo delle parentesi, e l'indentazione automatica, ed è inoltre in grado di compilare e lanciare il programma eseguibile in una sola passata e con un singolo click. In genere non vi è bisogno di creare dei Makefile o far girare programmi dalla riga di comando.
L'ambiente di sviluppo integrato di Arduino è fornito di una libreria software C/C++ chiamata "Wiring" (dall'omonimo progetto Wiring), che rende molto più semplice implementare via software le comuni operazioni input/output. I programmi di Arduino sono scritti in C/C++, ma, per poter creare un file eseguibile, all'utilizzatore non è chiesto altro se non definire due funzioni:
- setup() – una funzione invocata una sola volta all'inizio di un programma e può essere utilizzata per i settaggi iniziali
- loop() – una funzione chiamata ripetutamente fino a che la scheda non viene spenta.
Un tipico programma per iniziare la pratica con un microcontroller è quello che permette semplicemente di far accendere ripetutamente un LED. Nell'ambiente di sviluppo di Arduino, l'utilizzatore potrebbe farlo con un programmino come il seguente:
#define LED_PIN 13
void setup () {
pinMode (LED_PIN, OUTPUT); // abilita il pin 13 per l'output digitale
}
void loop () {
digitalWrite (LED_PIN, HIGH); // accende il LED
delay (1000); // aspetta 1 secondo (1000 millisecondi)
digitalWrite (LED_PIN, LOW); // spegne il LED
delay (1000); // aspetta un secondo
}
Il codice precedente non sarebbe visto dal compilatore come un programma valido, così che quando l'utilizzatore clicca sul bottone di comando "Upload to I/O board" nello IDE, una copia del codice viene scritta in un file temporaneo con un extra include header all'inizio e una semplicissima funzione main() in basso:
#include "WProgram.h"
#define LED_PIN 13
void setup () {
pinMode (LED_PIN, OUTPUT); // abilita il pin 13 per l'output digitale
}
void loop () {
digitalWrite (LED_PIN, HIGH); // accende il LED
delay (1000); // aspetta 1 secondo (1000 milliseconds)
digitalWrite (LED_PIN, LOW); // spegne il LED
delay (1000); // aspetta 1 secondo
}
int main(void)
{
init();
setup();
for (;;)
loop();
return 0;
}
"WProgram.h" è lo header file principale per la libreria Wiring, e la funzione main() effettua solo tre distinte chiamate: init(), definita nella stessa libreria, e le funzioni setup() e loop(), definite dall'utente.
Lo IDE di Arduino usa la GNU toolchain e la AVR Libc per compilare i programmi, mentre usa avrdude per caricarli sulla scheda.