La scheda di input per Arduino
La scheda di input – Come far rilevare fino a 128 input alla scheda ARDUINO utilizzando integrati MCP23016 e il bus I2C
La prima versione della scheda di input per Arduino prevedeva diversi integrati 74hc165 in cascata per rilevare gli ingressi. La trasmissione dei dati alla cpu principale avveniva in seriale (un bit alla volta) e quindi la trasmissione dei risultati all’arduino era molto lenta.
A questa lentezza si aggiungeva il ritardo del ciclo di debouncing (antirimbalzo) per filtrare in modo software i dati ricevuti, spesso erano falsati da impulsi elettrici transitori (o disturbi elettrici).
Tra questi i fulmini e molto piu’ frequentemente gli spike dei relè che lo stesso sistema comandava. Era meno di un evento al giorno, ma comunque troppo frequente per un sistema affidabile.
Così ho realizzato la versione con integrati MCP23016. Questi inviano lo stato dei propri ingressi via I2C all’arduino. Dato che i suoi pin possono essere istruiti come input o output, inizialmente pensavo di utilizzare questo integrato anche per le schede di uscita.
Ma di questi integrati su un bus I2C ne potevano coesistere soltanto 8 e quindi mi sarei ritrovato con un numero di ingressi o uscite limitato. Nello specifico scegliendo 6 integrati per l’input e 2 per gli output avrei ottenuto 6*16=96 input e 2*16=32 output. Un numero di pin di input sufficienti ma senza possibilità di ampliamento e un numero di output completamente al di sotto del minimo necessario per il progetto.
Da qui l’idea di relegare tutti gli integrati MCP23016 come input e trovare altra soluzione per la scheda di output.
Così la scheda di ingresso è una ripetizione di un modulo che vede al suo interno come componente principale un integrato MCP23016. Ogni MCP23016 gestisce 16 ingressi e quindi le due schede visibili in figura, grazie ai 6 integrati MCP23016 riescono a gestire ben 96 ingressi.
Come accennato l’integrato MCP23016 può gestire i suoi pin sia come input o come output. Nel progetto descritto in questo sito, tutti i pin di tali integrati sono in input. Dato che al massimo si possono mettere 8 integrati MCP23016 sullo stesso Bus è possibile ottenere 8 * 16 pin = 128 input totali. Ogni integrato ha il suo indirizzo I2C impostabili collegando a massa o a VCC tre pin (da cui il massimo numero di combinazioni è 8).
Nella scheda di output è ricostruito in modo software la possibilità di indirizzare gli arduino tramite tre pin (analogici) alla stessa stregua degli MCP23016.
La scheda Hardware
Guardando la scheda si noti che ogni mcp23016 dispone di 16 input e 3 pin da collegare a 0 e 1 per impostargli l’indirizzo I2C. Ogni ingresso è protetto da 2 diodi e mantenuto a 0 o 1 a secondo di come si collega la resistenza da 22k ed infine limitato dalla resistenza da 1k e, se inserito, filtrato anche dal condensatore (semplice debouncing). Tuttavia all’atto pratico ho constatato che questo condensatore non era necessario.
Per finire il filtro sull’alimentazione composto dal gruppo di tre condensatori e l’immancabile condensatore da 10.000 pf il piu’ possibile vicino all’integrato contro eventuali autooscillazioni.
Il circuito è nel file *.pcb. Chi lo volesse realizzare può scaricarlo, e riprodurre la circuiteria utilizzando una basetta millefori oppure farlo realizzare direttamente alla società che ha realizzato il software ExpressPCB.
Il circuito è ben testato, mentre scrivo è in funzione dal 2009 ed ha sempre funzionato anche sotto condizioni estreme come quelle rappresentate da temporali con lampi vicini e fortissimi.
Un momento della costruzione dell’insieme dove due schede di input piu’ una scheda di output e un Arduino 2009, vengono fissati su un pannello di plexyglass trasparente.