Articolo introduttivo che presenta la scheda Arduino UNO Rev.3: caratteristiche tecniche, pinout, connettori Power/Analog/Digital e comunicazione seriale, I2C e SPI.

Arduino UNO è probabilmente la scheda di sviluppo più famosa tra i giovani maker e studenti. Grazie all'ambiente di sviluppo (IDE) molto facile da utilizzare, al basso costo, al linguaggio semplificato e all'essere completamente open-source, la piattaforma Arduino si è diffusa rapidamente a livello mondiale nel mondo maker, artistico, scientifico e in generale tra gli sviluppatori.
Con Arduino UNO è possibile prototipare velocemente progetti elettronici con estrema semplicità, come ad esempio sistemi automatizzati che includono sensori e attuatori, comunicando anche con altri dispositivi elettronici. Questa scheda "entry-level" è indicata per chi si avvicina per la prima volta al mondo dell'elettronica e della programmazione e desidera realizzare progetti di bassa-media complessità.
Il linguaggio di programmazione semplificato e intuitivo si chiama Wiring ed è un derivato del C/C++. La programmazione della scheda avviene per mezzo di programmi sorgente chiamati "sketch", che si elaborano e si caricano direttamente dall'IDE (compilatore), scaricabile gratuitamente dal sito ufficiale.
Essendo sin dall'inizio un progetto open-source, dal 2005 si è creata un'enorme comunità di sviluppatori che ha permesso di avere una vastissima quantità di progetti e librerie online (sorgente: WikiPedia).
Sito web: www.arduino.cc
Due grandi connettori sono presenti su un lato: uno per l'alimentazione e uno per il collegamento con il PC.

Sulla parte superiore, la scheda presenta 4 connettori principali per la connessione delle periferiche e, in generale, di altro hardware (shield). I quattro connettori possono essere divisi per tipologia: alimentazione, input analogici, input/output digitali e serial bus.

Altri due connettori sono presenti sulla scheda, ma poco utilizzati: un connettore ICSP per l'aggiornamento/caricamento del bootloader, e un altro connettore ICSP per l'aggiornamento del chip driver USB.
Per impostazione predefinita, questo connettore riporta 6 ingressi analogici definiti come A0÷A5, dove è possibile collegare un segnale con tensione variabile tra 0÷5V. Il valore analogico viene letto e convertito internamente dal microcontrollore tramite la funzionalità analogico-digitale (ADC) e convertito in un numero con range 0÷1023 (essendo un ADC a 10 bit).
Dal punto di vista del software, per la lettura del valore presente su ciascun ingresso si può utilizzare la funzione della libreria standard Arduino analogRead(x), dove x è il numero del pin che si desidera leggere. Questa funzione restituisce un valore numerico, intero e lineare, con range 0÷1023 in funzione della tensione presente all'ingresso.
Di seguito un esempio di lettura del valore analogico del pin A0:
1unsigned int val;2val = analogRead(A0);
Il valore di riferimento massimo (Vreference) del convertitore ADC interno è per impostazione predefinita regolato a 5V, ma è possibile modificarlo tramite la funzione analogReference() e tutte le sue possibili opzioni. Il pin AREF può essere l'ingresso di una sorgente di alimentazione usata come riferimento del convertitore. L'esempio seguente mostra l'impostazione del convertitore ADC interno con una Vref di 3.3V esterna, prelevata dal pin AREF. Questo presuppone che si debba collegare, per mezzo di un cavo, il pin AREF con il pin +3.3V.
1analogReference(EXTERNAL);
I pin A4 e A5 assolvono anche la funzione di comunicazione digitale I2C, tramite la libreria wire:
A4 -> SDAA5 -> SCLNel caso in cui si dovesse utilizzare il bus I2C, non è possibile usare contemporaneamente questi due pin anche per la lettura analogica.
Tutti i pin analogici A0÷A5 possono inoltre essere impiegati come pin digitali, utilizzandoli nello stesso modo di questi ultimi, tramite le funzioni digitalRead() e digitalWrite().
Le funzioni di gestione dei pin digitali sono digitalRead() e digitalWrite().
Il connettore digitale è composto da due connettori distinti, con pin numerati da 0 a 13 (che noi chiameremo D0÷D13). I pin hanno un passo standard da 2.54mm, dove è possibile collegare cavi comunemente chiamati "Dupont". Tutti i pin digitali sono ovviamente controllabili singolarmente tramite le funzioni Arduino standard digitalRead() e digitalWrite(), mentre la direzione INPUT/OUTPUT si imposta con la funzione pinMode().
La funzione pinMode definisce la direzione del pin digitale, che può essere INPUT o OUTPUT. Salvo nei casi in cui un pin digitale deve cambiare il suo stato durante l'esecuzione del programma (nella funzione loop()), l'impostazione della direzione viene solitamente definita una sola volta all'inizializzazione delle periferiche (nella funzione setup()).
Esempio di direzione del pin D2 come INPUT semplice:
1pinMode(2, INPUT);
Esempio di direzione del pin D2 come OUTPUT:
1pinMode(2, OUTPUT);
Ciascun pin digitale da 0 a 13 prevede, singolarmente, l'attivazione di una resistenza di "pull-up" interna al microcontrollore, in caso di uso come INPUT. Funzione molto utile, ad esempio, in caso di collegamento di pulsanti dove lo stato logico a riposo deve essere alto (HIGH). La resistenza interna di pull-up ha un valore compreso tra 20kΩ e 50kΩ (datasheet ATMEGA328).
Di seguito un esempio di utilizzo della funzione pinMode con attivazione della funzione di pull-up:
1pinMode(2, INPUT_PULLUP);
Invece, in questo esempio viene spiegato l'uso della funzione INPUT_PULLUP in abbinamento a un pulsante.
Alcuni pin digitali, contraddistinti con il simbolo della tilde (~), sono adibiti anche all'uso della funzionalità PWM. Questa particolare modalità permette di programmare in OUTPUT un segnale a onda quadra con duty-cycle variabile tra 0 e 100%. Funzione molto utile per poter "modulare", ad esempio, la luminosità di un LED oppure la velocità di un motore. L'impostazione del PWM è possibile eseguirla con la funzione analogWrite(), specificando il numero del pin e la percentuale del duty-cycle usando un valore compreso tra 0 (sempre OFF) e 255 (sempre ON). La frequenza del segnale ad onda quadra varia in funzione del modello della scheda Arduino.
Esempio di utilizzo del pin D3 come PWM con duty-cycle del 50%:
1analogWrite(3, 127);
SDA e SCL, e replicata sui pin A4 (SDA) e (SCL)In Arduino Uno la porta seriale è condivisa con i pin digitali D0 (RX) e D1 (TX): in caso di utilizzo della porta seriale come "serial monitor" non è quindi possibile utilizzare D0 e D1 come pin digitali.
Il serial monitor è uno strumento dell'IDE che permette di visualizzare/inviare caratteri dalla scheda. Spesso viene impiegato per fare debug del programma, inviando i risultati e gli status al PC per mezzo della porta seriale. In modo del tutto simile, è possibile stabilire una comunicazione seriale con il PC o altri dispositivi (es. GPS), inviando e ricevendo informazioni attraverso la porta USB oppure usando i pin D0 e D1, in conformità al protocollo RS232 ma con livelli logici 0÷5 volt.

È importante sapere che la porta seriale si deve inizializzare con Serial.begin(), riportando la velocità (bit per second) desiderata; la periferica collegata deve essere configurata nello stesso modo, al fine di poter inviare e ricevere caratteri con lo stesso protocollo. Per questo motivo, sia l'impostazione all'interno dello sketch che l'impostazione nel monitor seriale dovranno avere lo stesso valore.
1Serial.begin(9600);
Le funzioni Serial.read() e Serial.write() sono le funzioni di base per la ricezione e l'invio di caratteri da/per la porta seriale, mentre la funzione Serial.available() restituisce il numero di caratteri in attesa di essere letti dal buffer.
Per tutte le altre funzioni messe a disposizione dalla libreria standard Arduino, fare riferimento a questo link.
Arduino Uno dispone di una porta seriale I2C (TWI) utilizzabile tramite la libreria wire.
Moltissimi dispositivi, come ad esempio sensori di temperatura, luminosità, pressione e di movimento, utilizzano il bus I2C. Il bus I2C funziona con solo due fili, denominati SDA e SCL, e un sistema di indirizzamento univoco (address) che punta sullo specifico dispositivo collegato per lo scambio dei dati, anche in modo bidirezionale. Con questo sistema è possibile (teoricamente) collegare fino a 127 dispositivi in cascata.
I due pin SDA e SCL sono riportati alla fine del connettore dei pin digitali e replicati sui pin A4 e A5.
Arduino Uno dispone di una porta SPI, utilizzando i pin D10 (SS), D11 (MOSI), D12 (MISO) e D13 (SCK) e la libreria SPI.
I dispositivi SPI hanno il vantaggio di poter comunicare con più periferiche in modo molto veloce su brevi distanze. Il collegamento tipico di uno o più dispositivi SPI verso il master è quello di condividere le linee MISO, MOSI e SCK, mentre la linea di attivazione (SS) deve essere distinta per ciascun dispositivo.
Un esempio tipico di dispositivi che utilizzano il bus SPI sono le memorie SD card, i display LCD (anche con touch-screen), ecc.
Il reset della scheda può essere effettuato tramite l'apposito tasto, oppure mettendo temporaneamente basso (LOW) il pin RESET.
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.
A5D10 (SS), D11 (MOSI), D12 (MISO), D13 (SCK)