Ago 192011
 

In questa puntata prepariamo l’ambiente di programmazione Arduino e cominciamo con il primo classico esempio. Di cosa necessitiamo? Per prima cosa dobbiamo scaricarci l’ambiente di sviluppo dal sito ufficiale, per cui andate a questo link e scaricatevi la versione per la piattaforma su cui lavorate. Io personalmente ho un vecchio windows XP per cui una volta scaricato il file di installazione (86MB) è sufficiente scompattare l’archivio dove più vi aggrada. Non c’è bisogno di nessuna installazione o operazioni particolari.  Dalla figura qui vicino potete vedere la schermata dell’ambiente di sviluppo che come potete notare è decisamente semplice e minimale. Come procediamo? Per prima cosa colleghiamo la nostra scheda Arduino alla porta USB del PC. La prima volta, essendo una periferica USB, dovranno essere installati i relativi drivers. Per Mac e Linux, non a mia disposizione, vi consiglio di seguire le istruzioni dal sito ufficiale che trovate a questo indirizzo. Anche per Windows potete guardare la guida ufficiale (molto dettagliata) alla medesima pagina. Comunque, semplificando, dopo aver collegato la scheda, è sufficiente andare in “gestione periferiche” del pannello di controllo, selezionare Arduino UNO (COMxx) e con il pulsante destro scegliere “Aggiorna driver..” e selezionare ArduinoUNO.inf che si trova nella directory Drivers (e NON in FTDI USB Drivers!) del pacchetto software scompattato prima. Comunque a questa pagina trovate le immagini della guida ufficiale di tutti i singli passi (su Windows XP).

Se siete giunti a questo punto possiamo procedere. Dall’interfaccia del software dobbiamo per prima cosa indicare che tipo di scheda abbiamo collegato, per farlo andiamo su Tools->Board e selezioniamo ArduinoUNO. Ora andiamo su File->Examples->Basic->Blink e come per incanto si apre una nuova finestra con il codice già bello che pronto senza doverci nemmeno scomodare a fare copia-incolla. A questo punto ci sono delle conisderazioni da fare. Nella vecchia scheda Arduino2009 probabilmente, e dico probabilmente visto che non ne possiedo nessuna, non era precaricato nessun software per cui una volta alimentata la scheda non succedeva nulla. Il software che abbiamo appena aperto non fà altro che far lampeggiare un piccolo led giallo che si trova sulla scheda per cui una volta caricato il led cominciava a lampeggiare. Nelle schede ArduinoUNO in mio possesso, invece, questo software è già presente per cui una volta alimentata la scheda il led comincia a lampeggiare. Ciò è molto utile perchè ci fà capire che la scheda funziona, ma se carichiamo il software d’esempio non ci accorgiamo delle differenze per cui non capiamo se abbiamo effettivamente caricato il codice o meno. Per questo motivo propongo alcune modifiche al software che non fanno altro che modificare i tempi con cui il led lampeggia, accorgimento sufficiente per farci capire che il tutto funziona. Sperando di non avervi annoiato con questa lunga parentesi, passiamo ad analizzare il software con le piccole modifiche apportate:

void setup() {                
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(2000);              // wait
  digitalWrite(13, LOW);    // set the LED off
  delay(500);              // wait
}

Tanto per cominciare specifichiamo che il linguaggio di programmazione usato è il C, cosa che non è per nulla scontata. Il kit di sviluppo in realtà ci mette a disposizione delle semplificazioni, motivo per cui nel listato non trovate la funzione main(), ma le funzioni setup() e loop() che in realtà sono richiamate all’interno di una main che non ci viene visualizzata per semplificazione. Ma se non siamo esperti di C non noteremo di certo che l’ambiente di sviluppo ci propone delle semplificazioni.

La prima riga comincia con la dichiarazione della funzione setup(). Questa è una delle due funzioni fondamentali del nostro software ed è quella che viene richiamata all’inizio per effettuare tutte le inizializzazioni del caso. Nel nostro esempio è contenuta unicamente l’istruzione pinMode(13, OUTPUT); . Essa è una funzione molto importante che permette di stabilire come verranno usati i pin digitali: ricordate che possono essere configurati sia come input che come output? Con questa istruzione fate esattamente questa operazione. Nel nostro esempio il pin 13 è stato settato come Output, ossia un’uscita. Il pin non è stato scelto a caso, infatti al pin 13 è collegato un piccolo LED che permette di vedere lo stato dell’uscita. Ciò è molto utile in quanto possiamo usare il pin 13 per far accendere o spegnere il LED in modo da monitorizzare il funzionamento della scheda senza alcun componente aggiuntivo. Potrebbe essere usato anche per segnalare lo stato di funzionamento o quel che più vi aggrada.

La seconda funzione che incontriamo è loop che è obbligatoria in quanto rappresenta la struttura principale del nostro programma. Questa funzione viene richiamata all’infinito dopo la chiamata setup e finchè c’è corrente o non viene premuto il pulsante di reset presente sulla scheda. La prima istruzione “digitalWrite(13, HIGH); utilizza digitalWirte per impostare lo stato di un’uscita digitale, in questo caso pone l’uscita 13 ad HIGH (alto), ossia ad uno stato di Acceso che appunto determina l’accensione del LED. Dopodichè la delay(2000);  interrompe l’esecuzione del programma per 2000 millisecondi che corrispondono a 2 secondi. Successivamente una nuova digitalWrite riporta l’uscita 13 allo stato LOW (basso, spento), per cui il LED si spegne. Una delay(500) farà attendere mezzo secondo, dopodichè il ciclo si ripete. Con questo programma perciò il led si accende, resta acceso due secondi, si spegne, resta spento mezzo seondo e poi si riaccende continuando all’infinito questo ciclo. Ora dobbiamo compilare il nostro programma. Per farlo dobbiamo premere il primo pulsante presente in alto a sinistra, quello con il triangolino, dove compare la scritta “Verify” passandoci sopra. Dopo una discreta attesa in cui resta attiva la scritta “Compiling”, nella parte in basso uscirà il risultato “Done compiling. Binary sketch size: 1018 bytes (of a 32256 byte maximum)”, ossia che la compilazione è avvenuta con successo, che il nostro programma utilizza 1018bytes su un massimo di 32256 che sono i 32K messi a disposizione dall’Arduino UNO. Ora se sieta a questo punto non resta che inviare il software alla nostra scheda. Prima di tutto dobbiamo indiacare a quale porta seriale è collegato il nostro software selezionando Tools->Serial Port. Per conoscere la porta esatta dobbiamo investigare nella “Gestione Periferiche” di Windows. Una volta selezionata la porta corretta non dobbiamo far altro che inviare il codice binario ad Arduino con il penultimo pulsane, quello con la freccina verso destra (Upload).

Durante questa fase vedrete  la scritta “Uploading to I/O board” che sarà accompagnata da  un frenetico lampeggio su Arduino, infatti sulla linea i comunicazione in ingresso (Rx) e trasmissione (Tx) sono collegati dei piccoli LED che ci permettono di vedere l’attività della scheda su queste linee. Vi faccio notare una cosa molto importante. Sui pin digitali 0 e 1 noterete (sulla scheda) proprio le diciture Tx ed Rx. Ciò significa che questi due pin sono in comunione e quindi condivisi con la porta USB. Allo stesso modo i due pin possono essere utilizzati per creare comunicazioni seriali con altri dispositivi, cosa che approfondiremo in futuro, ma ve lo sottolineo ora così incominciamo a conoscre le funzioni accessorie dei vari pin. Sempre per lo stesso motivo, però,  se create un software che utilizza la porta USB per comunicare con il PC, non potete usare i pin digitali 0 e 1 per comandare uscite esterne e viceversa, per cui i pin realmente utilizzabili scendono a 12 sui 14 iniziali.

Una volta finito il caricamento, la scheda si riavvia spontaneamente e carica il software per cui dopo pochi istanti l’iniziale lampeggio ogni secondo cambierà con quello nuovo impostato dal nostro software.

Se siete arrivati fino a questo punto complimenti! Avete ora tutte le conoscenze basilari necessarie per cominciare a sviluppare con Arduino. Per chi conoscesse già il linguaggio C, potrebbe essere utile andare a guardare le funzioni supportate dall’ambiente di sviluppo che trovate a questa pagina, se invece non conoscete il C ne’ l’elettronica, seguiteci in queste pagine per cominciare a muovere i primi passi. Spero sempre nei vostri commenti e suggerimenti.