Un sabato speciale con Arduino

Non è mai un sabato qualsiasi quando ci si trova, ci si diverte e si torna a casa avendo imparato qualcosa!

Se c’è una cosa certa, una caratteristica esclusiva ed eccezionale, è che Ardulab è un gruppo eterogeneo, intergenerazionale e spontaneo: avanti tutta con il braccio robotico e alla prossima!

Demultiplexer: come espandere le porte PWM di Arduino

Arduino UNO è senza dubbio capace di grandi cose, può gestire segnali analogici e digitali, sia in Input che in Output ma la quantità di ingressi e uscite è limitata, e non è mai abbastanza. 😉

Quindi sorge spontanea una domanda molto intelligente fatta spesso da parte di chi frequenta i nostri corsi di Arduino:

Come posso avere più porte analogiche o digitali in ingresso o in uscita con Arduino UNO? E nello specifico, come posso pilotare una marea di LED usando un solo Arduino?

Se la risposta “acquista una scheda Arduino più potente e più costosa, come l’Arduino Mega” non ci soddisfa, siamo incuranti del pericolo e vogliamo risparmiare (per comprare milioni di LED, appunto), questo articolo fa al caso nostro!

Immaginiamo di voler gestire 8 Diodi LED, cambiando la loro luminosità. Il nostro Arduino UNO non é in grado di gestire 8 uscite PWM, poiché ne possiede solamente 6 (azz…) e ora?

In Elettronica esiste un integrato (in gergo un circuito integrato è tipicamente una specie di ragnetto piccolo dotato di un package da cui escono ingressi e uscite) chiamato Demultiplexer (DEMUX), il quale fa un mestiere molto semplice: prende un ingresso E e lo collega ad una delle 4 uscite sulla destra a seconda della parola digitale che c’è nei due ingressi in basso.

Il suo inverso é il Multiplexer (MUX) che converte tanti ingressi in un’unica uscita. Questa configurazione può risultare utile nel momento in cui si debbano ottenere molti segnali analogici in ingresso (quindi basterà un singolo pin Analog per gestire tutti gli ingressi!).

In questo articolo useremo un Demultiplexer a 8 canali (uscite a dx nella figura sopra) per gestire 8 Diodi LED con solamente 3 pin digitali (gli ingressi in basso nella figura sopra) e 1 pin PWM (l’ingresso a sx nella figura sopra).

La logica é semplice. Avendo a disposizione 3 pin digitali, ciascuno dei quali può assumere valori LOW e HIGH, le possibili combinazioni sono 2^3 = 8, pertanto con soli 3 ingressi riusciremo a gestire ben 8 uscite!

Per questo progetto ho usato l’integrato CD74HC4051E. Il datasheet lo si può trovare qui.

Il Fritzing é questo:

demultiplexer_bb

Sono stati usati i pin 7,8 e 12 come selettori e il pin 3 come pin di ingresso PWM comune.

Per selezionare un singolo LED serve impostare una combinazione di selettori appropriata.

Screenshot

Nota bene: il pin PWM é indipendente dalla selezione del LED. Infatti lui genera una tensione che sarà applicata al LED corrispondentemente scelto tramite i selettori!

Lo sketch di prova:

Il principale svantaggio dell’utilizzo di un Demultiplexer é l’asincronia di commutazione. Le uscite vengono selezionate in maniera consecutiva ed esclusiva, questo significa che una volta cambiata un’uscita tramite i selettori, le altre uscite del demultiplexer vengono collegate a massa, perdendo la loro tensione. Questo effetto é decisamente poco notabile se stiamo trattando dei LED, ma in progetti più elaborati, come il pilotoaggio di motori Servo, é più evidente.

Per risolvere questo problema, in parte, si possono percorrere due strade: o si ottimizza il codice, rendendo le commutazioni più veloci, oppure si utilizza un Demultiplexer con DC Switching maggiore (corrente che determina il tempo di commutazione).