Guida per principianti assoluti che accompagna passo passo dall'installazione dell'IDE Arduino fino al primo sketch, il classico "blink" per far lampeggiare un LED.

Arduino UNO Rev.3
Sembrerà banale usare un Arduino per far lampeggiare un LED, ma nel 99.9% dei casi, quando si inizia a imparare un linguaggio di programmazione, il primo esercizio è far stampare la scritta "Hello world" sulla console. Nel caso di schede elettroniche, la scritta "hello world" corrisponde a far lampeggiare un LED.
Se sei un principiante sull'argomento e desideri iniziare a imparare l'utilizzo e la programmazione delle schede Arduino, questo articolo ti aiuterà a iniziare e approfondire i concetti fondamentali dell'utilizzo della scheda e del suo ambiente di sviluppo.
In questo articolo verranno approfonditi i seguenti argomenti:
Arduino Uno ha già un LED saldato sulla scheda. Corrisponde al pin digitale D13, quindi lo scopo di questo esercizio è quello di farlo lampeggiare. Opzionalmente è possibile collegare anche un LED esterno, con relativa resistenza per limitare la corrente che scorre al suo interno. Fate riferimento alla figura per il collegamento del LED e ricordate che il reoforo più lungo del LED è il positivo (+) da collegare a D13, e quello più corto il negativo (-) da collegare a GND.

Collegamento del led sul Pin D13
L'ambiente di sviluppo, per tutte le schede della famiglia Arduino, si scarica dal sito www.arduino.cc, sezione download. Scegliete il file d'installazione compatibile con il vostro sistema operativo e installate il pacchetto.

Download dell'IDE di Arduino sul sito web www.arduino.cc
Una volta installato e aperto l'ambiente di sviluppo, compare una nuova finestra chiamata "sketch_xxx", dove le "xxx" corrispondono alla data corrente. All'interno della finestra troverete già due funzioni pre-impostate, setup() e loop(). Queste due funzioni dovranno sempre esistere in tutti i progetti Arduino, e il loro funzionamento è descritto di seguito.

Nuovo Sketch
La scheda, oltre a essere equipaggiata con altro hardware esterno (nel caso di questo esercizio non servirà), ha bisogno anche di un software che caratterizzerà il funzionamento del nostro progetto. Tutti i software scritti e progettati per la piattaforma Arduino sono chiamati sketch. Ciascun sketch dovrà risiedere, per impostazione predefinita, nella cartella Documenti/Arduino; i file avranno estensione .ino e sono tutti organizzati in cartelle con lo stesso nome del file. Quindi, dopo aver creato un nuovo progetto dal menu File → Nuovo, la prima cosa da fare è dare un nome al progetto e salvarlo. Questo progetto lo chiameremo Blink_led.ino.
La funzione setup() è già pre-impostata in ciascun sketch. Tutto il codice contenuto al suo interno verrà eseguito una sola volta, all'avviamento e a ciascun reset.
In questa funzione dovremmo inserire tutte le istruzioni che serviranno a impostare l'hardware e/o inizializzare eventuali periferiche all'avviamento. Nel caso del nostro esercizio, l'unica impostazione da fare è indicare che il pin D13 dovrà essere utilizzato come uscita (output), perché ci sarà collegato un LED. La funzione che utilizzeremo è:
1pinMode(13, OUTPUT);
che è la funzione, facente parte della libreria di sistema, incaricata della definizione input/output dei pin della scheda.
All'interno delle parentesi, il primo parametro da indicare è il numero del pin: nel nostro caso il 13, in quanto il LED situato sulla scheda è collegato direttamente a questo pin. Il secondo parametro è la modalità con cui vogliamo impostare la direzione/utilizzo del pin. Le possibili scelte sono: OUTPUT / INPUT / INPUT_PULLUP.
OUTPUT: si seleziona quando la scheda deve controllare un hardware esterno attraverso un segnale digitale. Nel nostro caso il segnale digitale avrà ampiezza 0-5 volt (nel caso di Arduino Uno), corrispondenti al livello logico 0-1 (o LOW/HIGH). La funzione corrispondente per il controllo dei pin è digitalWrite().
INPUT: si seleziona quando la scheda dovrà ricevere un segnale dall'esterno e analizzarlo. La ricezione del segnale digitale dovrà rispettare i livelli di ampiezza 0-5 volt, corrispondenti ai livelli logici 0-1 (LOW/HIGH). La funzione da utilizzare per la lettura di un livello logico di un determinato pin è digitalRead().
INPUT_PULLUP: ha lo stesso funzionamento di INPUT, con la differenza che all'interno del microcontrollore viene attivata una resistenza denominata "pull-up", collegata tra i 5V e il pin, con lo scopo di innalzare la tensione sul pin a 5V in assenza di collegamenti esterni. Questa particolare funzione è molto utile, ad esempio, in caso di collegamento di un tasto.
Ulteriori informazioni sui pin digitali le trovate qui: https://www.arduino.cc/en/Tutorial/Foundations/DigitalPins
Anche la funzione loop() sarà presente in tutti gli sketch di Arduino, perché il programma non finirà mai di essere eseguito. Il sistema è stato progettato per eseguire sempre un codice all'infinito, qualunque esso sia. A differenza della funzione setup(), che come già detto viene eseguita una sola volta, la funzione loop() sarà ripetuta all'infinito.
All'interno della funzione loop() inseriremo il codice che cambierà lo stato logico del pin D13, invertendolo a ogni passaggio, così creeremo una sorta di "onda quadra" 0-5 volt sul pin, in modo da accendere e spegnere il LED collegato.
Finalmente siamo arrivati al nostro codice che farà lampeggiare il LED.
Il codice che segue contiene le istruzioni che serviranno a far lampeggiare il LED collegato sul pin D13.
Vediamo nel dettaglio a cosa serve ciascuna istruzione. Copiate e incollate l'intero codice nella finestra dell'IDE di Arduino.
1void setup() {2 pinMode(13, OUTPUT);3}45void loop() {6 digitalWrite(13, LOW);7 delay(500);8 digitalWrite(13, HIGH);9 delay(500);10}
Come abbiamo già visto nei paragrafi precedenti, all'interno della funzione setup() troveremo una sola riga, il richiamo alla funzione pinMode per l'impostazione del pin 13 come OUTPUT. Questa funzione non ha senso ripeterla ogni volta, quindi è corretto che si trovi all'interno di setup(). Le altre istruzioni invece dovranno essere eseguite sempre, all'infinito, e quindi si troveranno all'interno di loop().
All'interno di loop() troveremo la prima riga digitalWrite() riempita con i parametri necessari per impostare lo stato logico del pin, ovvero "13", che è il numero del pin del LED, e il relativo stato (LOW) corrispondente al livello logico "0".
Nella seconda riga troveremo la funzione delay(), che avrà il compito di arrestare l'esecuzione del programma per un tempo definito in millisecondi dall'utente. Nel nostro esempio troveremo "500", ovvero mezzo secondo, necessario a mantenere lo stato logico impostato in digitalWrite() nello stato LOW per il tempo definito in delay().
Le due righe successive non sono altro che una ripetizione delle due precedenti, con la differenza che la funzione digitalWrite() imposterà lo stato logico del pin D13 nella condizione logica HIGH o 1 (5 volt), invertendo di fatto lo stato logico precedente (LOW). La successiva istruzione delay() servirà, come nella precedente, a mantenere lo stato logico (HIGH) per il tempo definito, per poi cambiare nuovamente in LOW, in quanto il codice si ripeterà dall'inizio come già detto in precedenza.
Tutto chiaro? Allora procediamo nel prossimo paragrafo alla verifica e al caricamento del nostro sketch.
L'ambiente di sviluppo (IDE) di Arduino è stato nel tempo ampliato e migliorato per supportare tutte le schede della famiglia Arduino. Da una certa versione in poi, gli sviluppatori hanno dato anche la possibilità di utilizzarlo con hardware di terze parti, ma in questo articolo non entreremo nel merito di questa funzionalità.
Passaggio 1 — Prima di caricare uno sketch nella memoria flash della scheda, bisogna dire al compilatore con quale scheda stiamo lavorando. Per fare correttamente questa impostazione basterà selezionare il modello della scheda nel menu Strumenti → Scheda, e poi, nel nostro caso, proseguire la selezione con Arduino AVR boards → Arduino Uno.
Passaggio 2 — Impostare la porta di comunicazione. Collegate la scheda Arduino Uno alla porta USB del computer per poter visionare la presenza di una porta seriale disponibile. Il driver per supportare la scheda è già stato installato automaticamente durante l'installazione dell'ambiente di sviluppo. Il numero/nome della porta seriale può variare a seconda del vostro sistema operativo, come negli esempi di seguito:
/dev/cu.usbmodemXXXXX, dove "XXXXX" è un numero (es. /dev/cu.usbmodem-14101)COMx, dove "x" è un numero (es. COM3)Passaggio 3 — Selezionate la porta seriale nel menu Strumenti → Porta.
L'ambiente di sviluppo prevede la possibilità di verificare se il nostro sketch è corretto, ovviamente dal punto di vista della sintassi. Per eseguire la verifica basterà premere il pulsante "Verifica" in alto a sinistra, oppure dal menu Sketch → Verifica/Compila. Eventuali errori saranno visualizzati nella finestra in basso.

Pulsante Verifica
Per eseguire il caricamento (upload) del nostro sketch sarà sufficiente premere il tasto "Carica", oppure dal menu Sketch → Carica.

Pulsante Carica
Se tutto è stato impostato correttamente, dovreste vedere dei veloci lampeggi dei LED TX e RX sulla scheda, e poi finalmente il nostro LED (L) lampeggiare con una frequenza di mezzo secondo. Se avete collegato il LED esterno, anch'esso lampeggerà con la stessa frequenza di quello saldato sulla board.
Se la verifica o il caricamento non vanno a buon fine ed errori vengono visualizzati nella finestra in basso, nella maggior parte dei casi potrebbe dipendere da una o più di queste cause:
Se sei riuscito a completare tutti i passaggi e a far lampeggiare il LED, significa che hai correttamente impostato l'ambiente di sviluppo e sei pronto per i prossimi esercizi.
In questo articolo hai imparato:
Se sei arrivato alla fine di questa pagina, ci auguriamo che l'argomento sia stato di tuo interesse.
L'obiettivo di questo sito è divulgare tutorial e corsi sulle materie elettronica e programmazione, con la speranza di poter aiutare sempre più persone che desiderano aumentare le proprie conoscenze.
Tutti i tutorial e gli articoli sono scritti con cura e verificati. Per mantenere sempre alto il livello di qualità delle informazioni fornite, puoi aiutarci nei seguenti modi:
Inoltre non dimenticare di rimanere in contatto con noi attraverso i social network. Se non lo fai adesso, probabilmente non ci rivedrai più:
Facebook · Instagram · YouTube · X (Twitter)
Grazie per il tuo contributo!
Iscriviti alla newsletter per ricevere i prossimi.
/dev/ttyACMx, dove "x" è un numero (es. /dev/ttyACM0);) alla fine di una riga (obbligatorio), oppure aver usato un carattere maiuscolo al posto di uno minuscolo: il linguaggio è infatti case-sensitive, ovvero non permette che un'istruzione possa avere lo stesso significato se scritta in maiuscolo (e viceversa). Verificate il codice e riprovate.avrdude: ser_open() can't open device o stk500_recv(): programmer is not responding. Se avete più di una porta seriale nel menu Strumenti → Porta e non sapete qual è quella associata al vostro Arduino, provate a scollegare il cavo e notate le differenze rispetto a quando è collegato: la porta che compare in più è quella della vostra scheda.