Espandere gli I/O analogici di Arduino

Come già accennato in precedenti post in questi mesi sto svolgendo una serie di attività di prototipazione rapida di sistemi di rilevazione ambientale presso la facoltà di Agraria di Padova e l’esigenza di espandere la quantità di ingressi analogici di Arduino è una necessità reale che può essere superata agevolmente con pochissimi euro (per la precisione 1€ 🙂 ) utilizzando l’integrato 4051 Multiplexer/Demultiplexer analogico ad 8 canali in grado appunto di ampliare il numero di I/O di Arduino.
Esigenze di questo tipo si presentano spessissimo, ad esempio nel caso voi vogliate collegare più sensori analogici ad un ESP che dispone di un solo ingresso analogico, o più semplicemente andare oltre i 6 pin analogici di Arduino UNO R3, situazione che si presenta ad esempio nel caso in cui si stanno occupando i pin analogici A4 e A5 per la comunicazione I2C  per altri dispositivi.

L’integrato 4051 viene realizzato da diverse aziende vi allego i datasheet corrispondenti alla versione prodotta da Philips e Texas Instruments, identici nelle funzionalità:

All’interno trovate tutte le indicazioni necessarie per poterlo usare che vi riassumo nelle righe che seguono.

Piedinatura dell’integrato

01-4051

Dove:

  • Z: pin input/output (connesso agli Input/Output Arduino )
  • E: pin di enable (attivo basso, cioè attivo su LOW da connettere a GND)
  • VEE: tensione di alimentazione negativa (da connettere a gnd)
  • VSS: terra (0 V)
  • A0-A1-A2: pin di selezione input (connessi a tre pin digitali di Arduino) – A0 bit meno significativo (LSB), A2 bit più significativo (MSB)
  • Da Y0 a Y7: pin di inputs/outputs
  • VDD: tensione di alimentazione positiva (da 3V a 5v)

Tabella di verità

02-4051

Dalla tabella si evince che per poter far funzionare l’IC è necessario connettere E (Enable) a GND.

Il 4051 è un integrato in tecnologia CMOS dotato di 8 ingressi (nominati Y) che può accettare segnali analogici compresi tra 0V e 5 V, tali segnali possono essere selezionati mediante tre pin di selezione nominati: A0, A1, A2 ed inviati direttamente ad un pin analogico di Arduino per la successiva elaborazione.

La selezione del canale Y scelto (in altre parole del segnale analogico che si desidera leggere o scrivere) può essere fatta sfruttando lo stesso Arduino mediante 3 pin digitali, sui 3 pin si comporrà il numero binario corrispondente all’ingresso analogico Y scelto.

A titolo di esempio, ricordando che con tre bit possiamo rappresentare tutti i numeri tra 0 e 7 (2^0 = 1; 2^1 = 2; 2^2 = 4):

  • Se A0 = 1, A1 = 1 e A2 = 0 allora l’uscita selezionata sarà la Y3
    (2^1 + 2^1 + 2^0 = 2 + 1 + 0 = 3)
  • Se A0 = 1, A1 = 0 e A2 = 1 allora l’uscita selezionata sarà la Y5
    (2^1 + 2^0 + 2^2 = 2 + 0 + 4 = 5)

Per chiarirne il funzionamento analizziamo le due modalità operative:

  • Input: lettura di segnali analogici presenti sugli ingressi Y del 4051
  • Output: invio di un segnale analogico su una delle 8 uscite Y del 4051

4051 usato come multiplexer con Arduino
Lettura di segnali analogici presenti sugli ingressi Y del 4051

In questa modalità utilizzeremo Arduino per selezionare uno degli 8 ingressi Y a cui collegheremo 8 sensori, nell’esempio 8 LDR e per la lettura dei valori letti dai sensori utilizzeremo un solo ingresso analogico di Arduino.

Circuito

Lista componenti:

  • Arduino UNO R3
  • n. 8 LDR
  • n. 8 Resitori da 1KOhm
  • IC: 4051

arduino-input-4015

03-4051

Di seguito due Sketch di esempio che producono la medesima lettura però sono stati realizzati con funzioni differenti. Nel primo viene utilizzata la funzione bitRead() mentre nella seconda viene utilizzato l’operatore di shift bit a sinistra “<<“. Entrambe le modalità sono utili da conoscere in quanto l’esecuzione dei calcoli matematici realizzati con gli operatori al bit risultano più veloci.

Il funzionamento di ogni parte del codice con i relativi collegamenti tra i vari dispositivi viene dettagliato come commento all’interno dello sketch in modo che risulti più agevole la modifica e l’integrazione con le vostre note.

Sketch v01

Sketch v02

Valori letti

04-4051

4051 usato come demultiplexer con Arduino
Invio di un segnale analogico su una delle 8 uscite Y del 4051

Circuito

arduino-output-4015

05-4051

Così come svolto per la modalità precedente vi propongo due versioni che funzionano in maniera analoga usando funzioni diverse.

Nei commenti la spiegazione del funzionamento del codice.

Sketch v01

Sketch v02

Per semplificare ancor di più l’utilizzo del 4051 è possibile utilizzare la libreria Analog MuxDemux di cui trovate indicazioni sull’utilizzo nel link indicato.
Installata la libreria, all’interno potete trovare una cartella di esempi che ne illustra l’utilizzo.
Nei commenti all’interno degli sketch trovate la descrizione del funzionamento delle funzioni introdotte dalla libreria.

Uso della libreria Analog MuxDemux
4051 usato come multiplexer con Arduino
Lettura di segnali analogici presenti sugli ingressi Y del 4051

Uso della libreria Analog MuxDemux
4051 usato come demultiplexer con Arduino
Invio di un segnale analogico su una delle 8 uscite Y del 4051

Bene!
A questo punto siamo liberi di espandere le possibilità di Arduino.

Buona sperimentazione a tutti.

Articoli simili:

Questa voce è stata pubblicata in arduino, i miei allievi e contrassegnata con , , , , , , , . Contrassegna il permalink.

2 risposte a Espandere gli I/O analogici di Arduino

  1. Mirco Lasagni scrive:

    Esempi ed esercizi sempre molto utili e soprattutto ben spiegati. L’integrato in questione già lo conoscevo e l’ho anche usato, ma non sapevo dell’esistenza di una libreria. C’è sempre da imparare!!!!!!!!!!! Poi con un insegnante così…Peccato che sono troppo distante altrimenti mi avrebbe fatto piacere incontrarLa e conoscerLa di persona.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.