Introduzione ad Arduino Uno (Rev.3)


Arduino UNO è probabilmente la scheda di sviluppo più famosa tra i giovani Makers e studenti. Grazie al l’ambiente di sviluppo (IDE) molto facile da utilizzare, il basso costo, il linguaggio semplificato e tutto open-source, la piattaforma Arduino si è diffusa rapidamente a livello mondiale nel mondo Maker, artistico, scientifico ed in generale tra gli sviluppatori.

Con ARDUINO UNO è possibile prototipare velocemente progetti elettronici con estrema semplicità come ad esempio sistemi automatizzati che includono sensori ed 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 ed 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) gratuitamente scaricabile dal sito ufficiale.

Essendo sin dall’inizio un progetto open-source, dal 2005 si è creata una enorme comunità di sviluppatori che hanno permesso di avere una vastissima quantità di progetti e librerie on-line (sorgente: WikiPedia).

Caratteristiche generali

Microcontrollore: Microchip ATMEGA328 (datasheet)
Memoria Flash (programma): 32 Kbyte
Memoria RAM: 2 Kbyte
Memoria EEPROM (user data): 1 Kbyte
Velocità di clock: 16 Mhz
Alimentazione: 7-12 Vdc tramite jack 2.5mm
Dimensioni (LxA): 68.6×53.4mm
Led integrato: su pin D13

Sito Web

www.arduino.cc

Pinout e Connettori

Due grandi connettori sono presenti su di un lato, uno per l’alimentazione e uno per il collegamento con il PC.

Alimentazione: Connettore Jack diametro=2.1 mm (con + al centro)
Porta USB: connettore USB tipo B

Sulla parte superiore, la scheda presenta 4 connettori principali per la connessione delle periferiche e in generale, di altro hardware (shields). 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.

Il Connettore “Power”

VIN – Ingresso/uscita alimentazione che corrisponde al pin centrale (+) del connettore Jack di alimentazione principale. Tramite questo pin (+) e il pin GND (-) è possibile alimentare la scheda nella stessa maniera in cui si alimenta tramite il jack da 2.5mm

GND – Pin di GROUND alimentazione

5V – Pin di uscita alimentazione a +5v fornito dal regolatore LDO interno o dalla porta USB. E’ consigliato di non prelevare più di 200-300 mA di corrente da questo punto di alimentazione.

3.3V – Pin di uscita alimentazione a +3.3v fornito da un piccolo regolatore interno. E’ consigliato di non prelevare più di 20mA di corrente da questo punto di alimentazione. (specifica)

RESET – Pin di RESET microcontrollore. Impostando temporaneamente questo pin a livello logico basso (Low) si esegue il RESET della scheda.

IOREF – Riporta la tensione di riferimento (digitale) per le schede collegate (shields) al fine di potersi adattare. In Arduino Uno (rev.3) questo pin è collegato internamente al pin +5V.

Il Connettore Analogico

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 micro-controllore tramite la funzionalità Analogico-Digitale (ADC) e convertito in un numero con range 0÷1023 (essendo un ADC a 10-bit).

Sotto il 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:

unsigned int val;
val = 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 di seguito riportato dimostra 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.

analogReference( EXTERNAL );

I pin A4 e A5 assolvono anche la funzione di comunicazione digitale I2C, tramite la libreria ‘wire‘.

A4 -> SDA
A5 -> SCL

Nel 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 quest’ultimi, tramite le funzioni ‘digitalRead()‘ e ‘digitalWrite()‘.

Il Connettore Digitale

Le funzioni di gestione dei pin digitali 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 s’imposta con la funzione ‘pinMode()‘.

La funzione pinMode()

La funzione pinMode definisce la direzione del pin digitale, che può essere INPUT o OUTPUT. Salvo in 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 con INPUT semplice:

pinMode( 2, INPUT);

Esempio di direzione del pin D2 come OUTPUT:

pinMode( 2, OUTPUT);

La funzione Pull-up

Ciascun pin digitale da 0 a 13 prevede, singolarmente, l’attivazione di una resistenza di ‘pull-up’ interna al micro-controllore, 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.

pinMode( 2, INPUT_PULLUP );

Invece in questo esempio viene spiegato l’uso della funzione INPUT_PULLUP in abbinamento ad un pulsante.

La funzione PWM (Pulse With Modulation)

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 ad 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%:

analogWrite( 3, 127 );

Comunicazione digitale

  • 1 Porta seriale RS232 condivisa con la porta USB (utilizzata anche per il caricamento degli sketch)
  • 1 Porta I2C – Tramite due pin sul connettore digitale SDA e SCL e replicata sui PIN A4 (SDA) e A5 (SCL)
  • 1 Porta SPI – Tramite i pin digitali D10 (SS), D11 (MOSI), D12 (MISO), D13 (SCK)

La porta Seriale

In Arduino Uno la porta seriale è condivisa con i pin digitali D0 (Rx) e D1 (Tx), quindi in caso di utilizzo della porta seriale come ‘serial monitor’ non è 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.

E’ importante sapere che la porta seriale si deve inizializzare con ‘Serial.begin()‘ riportando la velocità (Bit-Per-Second) desiderata e 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.

Serial.begin(9600);

Le funzioni read(), write() e available()

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 della libreria standard Arduino, fare riferimento a questo LINK

La porta I2C (TWI)

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 nel connettore dei pin digitali e replicati sui pin A4 e A5.

La porta SPI (Serial Peripheral Interface)

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, display LCD (anche con touch-screen), ecc..

Per ulteriori informazioni sulle funzionalità SPI di Arduino vedere il questo LINK.

RESET

Il RESET della scheda può essere effettuato tramite l’apposito tasto, oppure mettendo temporaneamente basso (LOW) il pin RESET.

Tool di sviluppo software

Compilatore (IDE) ufficiale: scaricabile dal sito di Arduino per Windows, Mac, Linux
PlatformIO: Plug-in scaricabile dal sito di PlatformIO, per Windows, Mac, Linux

USB Driver: Integrato nell’IDE ufficiale.

Dove Acquistare

Store ufficiale Arduino: https://store.arduino.cc/
Amazon:

Per approfondire

Non perderti nessuna novità!

Non inviamo spam! Leggi la nostra Informativa sulla privacy per avere maggiori informazioni.

Articoli simili

Lascia un commento