EDNPN Lezione 1 – Arduino, l’ide blink di un led e altri strumenti utili

Iniziamo questa nuova serie di articoli partendo dalle basi. In questa lezione installeremo l’ambiente di sviluppo di arduino e scriveremo alcuni sketch per far blinkare un led, introducendo così il linguaggio di programmazione utilizzato da arduino, e illustreremo alcuni strumenti utili.

Cosa ci serve per questa lezione:

  • Una board arduino UNO (o compatibile)
  • Un Led
  • Una resistenza da 220 ohm (o un valore vicino).
  • Arduino Ide
  • Una BreadBoard (se non volete intrecciare resistenza e led! 🙂 )

Per l’installazione dell’ide (se gia non lo avete installato) vi suggerisco di scaricare quello disponibile direttamenet dal sito, invece di usare quello disponibile per la vostra distribuzione, questo perchè in più di un occasione mi sono trovato con versioni non aggiornate che avevano dei problemi a far funzionare alcuni tipi di skteches. La versione sul sito non ha bisogno di alcuna dipendenza, in quanto sono tutte contenute all’interno del pacchetto.

Quindi andate su http://arduino.cc/en/Main/Software#toc2 e scaricate la versione specifica per il vostro OS.

Se avete scelto la versione linux, il file scaricato avrà un estenesione .tgz, aprite una finestra del terminale (anche se probabilmente potrete farlo comodamente da gui, vi illustro comunque i comandi per installarlo e lanciarlo da command line), portatevi nella cartella dove avete scaricato l’ide e date il seguente comando:

tar xzf arduino-1.0.6-linux64.tgz -C /destination

Ovviamente sostituite il nome del file tgz con quello che avete scaricato voi. A queto punto se vi portate nella cartella dove lo avete installato, e date:

./arduino

Vi si dovrebbe aprire la finestra dell’ide arduino:

Arduino Ide

Anche se probabilmente gia conoscete questa schermata, vi spiego brevemente cosa sono i pulsanti della toolbar (partendo dal primo a sinistra)

  • Il primo lancia la compilazione dello sketch (senza caricarlo sulla board)
  • Il secondo invece carica lo sketch sulla board, dopo averlo compiato
  • Di seguito abbiamo i pulsanti per new, open e save
  • In fine il pulsante che si trova da solo sulla destra apre il monitor seriale (che mostra i dati inviati dai nostri sketch arduino sulla seriale, usato spesso anche per un pò di debugging).

I progetti arduino sono chiamati sketch, e i files creati hanno estensione .ino. Quando salviamo un nuovo sketch viene creata una cartella con il nome che gli assegnamo.

All’interno dell’ide vengono forniti inoltre anche un vasto insieme di esempi, dai più semplici per i principianti, a progetti più avanzati (come per esempio dei server web). Fra gli esempi degni di nota (che probabilmente vedremo in una delle lezioni future ci sta ArduinoIsp che permette di trasformare il nostro arduino in un programmatore per processori Atmega).

I nostri progetti verranno mostrati all’interno dello sketchbook, raggiungibile dal menu file.

Normalmente non dovreste avere problemi nel caricare il firmware sull’arduino. Se dovreste avere dei problemi di tipo permission denied, provate ad aggiungere il vostro utente ai seguenti gruppi: plugdev, dialout, uucp, riavviate (o fate logout e login di nuovo) e provate a lanciare di nuovo arduino.

Questa volta non dovreste avere problemi.

Ora vediamo come  è fatto uno sketch arduino nella sua versione minimale più estrema:

 

void setup(){
  //setup stuff here
}
 
void loop(){
  //your loop code
}

Anche se probabilmente i nomi delle due funzioni sono autoesplicativi, vediamo a cosa servono:

  • La funzione setup come suggerisce il nome stesso conterrá tutto il codice relativo all’inizializzazione delle varie componenti di arduino, sia interne che esterne (quali board esterne, shield, etc). Questa funzione viene chiamata una sola volta all’avvio della scheda arduino (o dopo un reset).
  • La funzione loop invece contiene la logica vera e propria del nostro sketch, quindi in questo caso tutto il codice atto a far funzionare il nostro dispositivo.

Chiaramente si possono aggiungere funzioni customizzate, importare librerie esterne, etc.

Prima di iniziare a scrivere codice, vediamo da vicino cosa ci offre una scheda arduino, e quali sono le comoponenti principali (almeno quelle che andremo a utilizzare nel nostro progetto):

Arduino Board

Quella che vedete di sopra, è la scheda Arduino R3 (quella più diffusa), chiaramente esistono anche altri tipi di schede (Nano, Mega, Leonardo, etc.)

Vediamo le componenti principali di questa scheda:

  • Ci sono 13 porte digitali (che utilizzeremo per controllare il nostro LED (alcune delle quali supportano la PWM), inoltre i primi due pin digitali (0 e 1) sono utilizzabili anche per la comunicazione Seriale.
  • Ci sono 5 porte analogiche (alcuni componenti/sensori andranno letti tramite porte analogiche)
  • Il bottone in alto a sinistra è per il reset della board.
  • La porta USB serve per collegarla al computer e/o alimtentare la board (vi è anche un connettore per alimentatori 5 volt). Inoltre la board può fornire ad altri dispositivi o 5 volt o 3,3 volt.
  • Sul pin 13 è collegato anche il led identificato dalla lettera L

N.B. I pin analogiche si possono anche utilizzare come normalissimi pin digitali

Come primo progetto arduino, come già detto faremo lampeggiare un Led. Per questo esperimento semplice, se non avete tutto il necessario (la resistenza più il led) non vi allarmate, potete sempre far blinkare il blink collegato sul pin13

Spendiamo anche due parole sul led, che per chi non lo sapesse sta per Light Emitting Diode, quindi si tratta di un “Diodo”, e questo permette alla corrente di viaggare nel verso che va dall’anodo (+) al catodo (-). Ora in un led per distinguere l’anodo dal catodo ci sono due modi:

  • Se si guarda il led ha uno dei due connettori più corto, quello è l’anodo
  • Oppure se si guarda dentro il led, si può notare una specie di taglio diagonale fra i due connettori, il taglio parte dall’altro del’anodo e arriva in basso al catodo.

Vediamo ora il circuito arduino che andremo a creare:

ledarduino_bb

 

Se vi state domandando del perchè della resistenza del led, vi consiglio di leggere questa guida che spiega abbastanza bene a cosa serve la resistenza, con anche una utile tabella delle tensioni di riferimento per i più comuni tipi di led: http://playground.arduino.cc/Italiano/Led

Comunque brevemenet, la resistenza serve per impedire al led di bruciarsi, in quanto un pin arduino produce in output circa 5v mentre un led lavora intorno ai 3v, quindi la resistenza serve a filtrare la tensione che arriva sul Led.

Passiamo ora a vedere il codice che servirá per far blinkare il Led, a livello concettuale quello che dobbiamo andare a fare è:

  1. Configurare il pin 13 come pin di output (SETUP)
  2. Inviare il segnale di accensione al led sul pin 13 (LOOP)
  3. aspettare mezzo secondo (LOOP)
  4. Inviare il segnale di off sul pin 13 (LOOP)

Fra parentesi ho indicato in quale parte del codice andranno effettuate queste operazioni. Partiamo quindi dalla fase di inizializzazione, ovvero configurare il pin 13 come di Output.

In arduino (o meglio nei processori ATMEGA, e in generali in tutti i microcontrollori) un PIN digitale in un dato istante può essere solo di input o solo di output (gli possiamo comunque cambiare stato in qualsiasi momento), introduciamo quindi la prima funzione che utilizzeremo nel nostro sketch:

pinMode(portnum, type);

Questo metodo permette di configurare il pin, gli argomenti passati sono il numero del pin (ovvero quello a cui andremo a collegare il led) e il tipo, per questo useremo una delle due costanti predefinite di arduino OUTPUT o INPUT. Quindi la nostra funzione setup sará come la seguente:

void setup(){
  pinMode(13, OUTPUT);
}

E questo è tutto quello che serve nella fase di setup.

Passiamo ora a vedere il loop. Che ricapitolando deve accendere il led, aspettare, spegnere il led, per accendere e spegnere il led useremo la funzione digitalWrite che scrive un valore alto (HIGH) o Basso (LOW) sul pin, che per noi corrisponderanno a 1 o 0. In practica se scriviamo il valore HIGH il voltaggio sul pin verrà messo a 5v, mentre sarà 0v se lo mettiamo a LOW. La sintassi per questa funzione è:

digitalWrite(portnum, value);

Dove value ripeto che può esser o HIGH o LOW.
Per maggiori informazioni su digitalWrite vi rimando alla documentazione ufficiale di arduino: http://arduino.cc/en/Reference/DigitalWrite

Mentre per far aspettare il mezzo secondo abbiamo la comodissima funzione delay:

delay(millis);

che prende come argomento il numero di millisecondi da aspettare, in questo caso 500.

Quindi a questo punto la nostra funzione loop avrá la seguente forma:

void loop(){
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);

Unendo il tutto avremo:

/**
 * Blink a led
 * Questo codice viene utilizzato come esempio nelle lezioni 
 * di Arduino per niubbi su www.italialinux.com
 */
#define LED_PIN 13
 
void setup(){
  pinMode(LED_PIN, OUTPUT);
}
 
void loop(){
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
}

Notate che ho aggiunto una define per LED_PIN, solo per comoditá e per rendere il codice un pò più leggibile (in realtá è anche una buona pratica :P).

Prima di terminare, vi indico anche alcuni strumenti, e siti che vi torneranno utili per iniziare a muovere i primi passi in questo mondo:

  • Chiaramente per la documentazione su arduino, vi rimando al sito www.arduino.cc che ha una documentazione scritta molto bene e molto chiara.
  • Fritzing – Una suite per disegnare circuiti, molto semplice e intuitiva da usare, contiene la maggior parte delle componenti ufficiali di arduino, e molto altro. Rispetto ad altri cad di questo tipo è molto semplice da usare. Qualche anno fa scrissi un breve articolo su questo programma, magari oggi è un pò datato, ma se vi interessa qui trovate l’articolo: http://www.italialinux.com/2011/06/fritzing-disegnare-circuiti-per-arduino-e-non-solo/ Fritzing è disponibile su tutte le maggiori piattaforme: Windows, Linux e MacOS
  • KiCad un altra ottima suite per linux per il disegno di circuiti, PCB, etc. Risulta un pò meno intuitiva di fritzing, ma comunque ottima da usare.

I sorgenti di questa lezione, insieme al file .fzz per fritzing li potete trovare nel repository github di italialinux: https://github.com/inuyasha82/ItalialinuxExample alla cartella LezioniEDNPN.

Qui potete acquistare un Arduino: http://goo.gl/BBlfxO

Inoltre se volete una lettura veramente introduttiva a questa scheda vi consiglio il libro “Arduino la guida ufficiale” che potete comprare  qua scritta direttamente dall’ideatore di Arduino, Massimo Banzi.

Leave a Reply

Your email address will not be published. Required fields are marked *