I/O EXPANDER I - ElettronicaIn

Arduino
I/O EXPANDER I C
2
CONTROLLATO
DA BLUETOOTH
degli ingg. TOMMASO E ALESSANDRO GIUSTO
Espandiamo le risorse
digitali di Arduino con
uno shield I2C bus e
controlliamole tramite
collegamento bluetooth
attraverso uno smartphone
Android.
T
utte le schede Arduino
dispongono di un certo
numero di contatti di ingresso e
uscita digitali. Per i progetti più
semplici, tali risorse sono più
che sufficienti, però in quelli
dove servono parecchie linee di
controllo, la dotazione “di serie”
può non bastare, anche perché alcuni pin sono condivisi
con risorse interne di Arduino
oppure vengono dedicati alla
gestione di shield esterni.
In questi casi una possibile soluzione è passare a versioni più
potenti di Arduino (per esempio la Mega, che dispone di più
Elettronica In ~ Febbraio 2014
81
Schema funzionale
))))))))
scheda
RN-42
Arduino
UNO
Shield
Relé 1
I/O delle classiche Duemilanove e Uno) oppure utilizzare
appositi shield di espansione.
In questo articolo vi presentiamo proprio uno shield che
permette di aggiungere I/O
e che nativamente può essere
gestito da Arduino tramite un
canale dati a bus I²C; lo shield
è un I/O expander generico in
grado di aggiungere otto uscite
a relé ed altrettanti ingressi a
livello TTL.
Ognuno di voi può farne l’uso
che ritiene più opportuno, tuttavia l’applicazione di queste
pagine si propone non solo di
aggiungere I/O ad Arduino,
ma anche di permetterne il controllo in wireless mediante un
collegamento Bluetooth, quindi
tramite uno smartphone Android nel quale verrà installata
un’apposita App che descriveremo più avanti.
Cosa ancor più interessante,
è che la struttura proposta è
modulare, nel senso che su
Arduino si possono montare
più shield, fino ad ottenere un
massimo di 64 input e 64 uscite
a relé.
LO SHIELD I/O EXPANDER
A basso livello, la gestione del
componente avviene tramite bus di comunicazione I²C,
implementata, nello shield,
dall’integrato MCP23017 di
Microchip.
Come molti di voi sanno, il bus
I²C è un canale di comunicazione standard utilizzato per l’interconnessione a breve distanza
tra un’unità Master e più Slave;
82
Febbraio 2014 ~ Elettronica In
Shield
Relé 8
tipicamente il Master è una
MCU, mentre le unità Slave
sono periferiche di vario genere
che non richiedono microprocessori o microcontrollori, ma
normali interfacce I²C-Bus
come il componente Microchip
da noi usato o il PCF8574 Philips/NXP.
Il bus è composto da tre fili, di
cui uno è la massa comune e gli
altri due sono SCL (clock che
scandisce la comunicazione) e
SDA (linea dati seriale bidirezionale); il protocollo I²C-Bus
prevede l’inizio di ogni sessione di comunicazione da parte
della sola unità Master (le unità
Slave si limitano a rispondere
all’interrogazione della Master),
la quale invia comandi composti da 8 byte, uno dei quali
contiene l’indirizzo della Slave
cui è diretto. Essendo, l’address,
espresso mediante un byte, si
può dire che l’I²C-Bus supporti
128 periferiche (in realtà solo
112, perché 16 address sono
riservati).
Solitamente l’identificazione
delle singole unità Slave si
realizza impostando l’opportuna combinazione logica sulle
apposite linee di cui ogni integrato è provvisto; la gran parte
degli integrati ha solo tre linee,
che consentono 8 combinazioni.
Nel nostro caso, la possibilità di
definire la destinazione dei comandi su I²C-Bus ci permette di
collegare contemporaneamente
(uno sopra l’altro) più shield
I²C I/O Expander; siccome ogni
scheda di espansione dispone
di 8 uscite a relé ed altrettanti
ingressi digitali, è possibile
ottenere un totale di 64 uscite a
relé e 64 input digitali.
Al sistema, realizzabile dotando
Arduino di un certo numero di
shield I/O Expander, abbiamo
deciso di abbinare il controllo
da Bluetooth, in modo da gestire da smartphone, per esempio,
un certo numero di utilizzatori
e di ingressi digitali. Per la comunicazione wireless abbiamo
aggiunto uno shield Bluetooth
RN-42, mentre lato Android
abbiamo sviluppato un’apposita App che permette di visualizzare a display lo stato di tutte
le risorse digitali ed inviare dei
comandi di attivazione delle
uscite.
Essendo il sistema modulare
(cioè possono essere aggiunti o
rimossi shield I2C I/O Expander a piacimento) e versatile, sia
il firmware Arduino che la App
sono stati pensati e realizzati in
modo che si auto-adattino alla
situazione applicativa. In particolare, il firmware Arduino è in
grado di rilevare quanti e quali
shield Expander sono presenti;
la App riceverà tali informazioni da Arduino e di conseguenza
adatterà la propria interfaccia
grafica.
La App dispone di una pagina
di configurazione in cui è possibile impostare le etichette di
testo da utilizzare per la descrizione delle risorse I/O, permettendo così di adattarla alla
configurazione hardware scelta.
Infine, è presente una pagina