Pilotare 22 led distinti

Su una macchina contabile Olivetti BCS 2025 (1969), non funzionante, vorrei rianimare le 22 spie presenti sulla console (attualmente lampadine), sostituendole con dei led per poter essere accese direttamente da arduino senza bisogno di transistor/rele.
Le spie saranno accese con sequenze programmate tipo quelle dell'albero di natale.
Il mio arduino nano ha però solo 14 uscite digitali (5V, ognuna da 40mA), come faccio ad aumentarne il numero?
Grazie,

Se vuoi espandere le porte di arduino puoi usare gli MCP23008 (8 porte I/O) oppure gli MCP23017 (16 porte I/O). Entrambi si interfacciano via I2C e ne puoi collegare 8 in cascata, ottenendo così fino ad un massimo di 128 porte aggiuntive.
In base a se altri pin sono in uso o meno puoi scegliere quello da 8 e arrivi a 22 precisi precisi, altrimenti puoi potare per quello da sedici o per due da otto in cascata

Ma poi scusa il nano non ha 22 pin digitali e 8 analogici? Gli analogici li puoi usare come digitali se serve sempre a patto che il totale dei led accesi (se sono giochi di luce ci può stare come no) non superi i valori di corrente massima erogabile da singolo pin o totale (circa 200mA ma tieniti lontano da questo valore massimo)

Charlieplexing?

Non puoi superare 40mA per singolo pin, 150mA per 8 pin e 200mA complessivi.
Devi usare dei transistor oppure un integrato per il pilotaggio dei led.

A me il Charlieplexing piace

brunello22:
A me il Charlieplexing piace

e quindi così, usando solo 6 uscite digitali, riesco a pilotare 22 led, giusto?
potreste postarmi uno sketch d'esempio di pilotaggio dei pin?

ma se rimango entro i 200mA per tutti i led ho bisogno di transistor?

fabpolli:
Ma poi scusa il nano non ha 22 pin digitali e 8 analogici? Gli analogici li puoi usare come digitali se serve sempre a patto che il totale dei led accesi (se sono giochi di luce ci può stare come no) non superi i valori di corrente massima erogabile da singolo pin o totale (circa 200mA ma tieniti lontano da questo valore massimo)

Il nano ha 14 digitali e 8 analogiche, ma non so se le 8 analogiche possono essere usate per il mio scopo...

fabpolli:
Se vuoi espandere le porte di arduino puoi usare gli MCP23008 (8 porte I/O) oppure gli MCP23017 (16 porte I/O). Entrambi si interfacciano via I2C e ne puoi collegare 8 in cascata, ottenendo così fino ad un massimo di 128 porte aggiuntive.
In base a se altri pin sono in uso o meno puoi scegliere quello da 8 e arrivi a 22 precisi precisi, altrimenti puoi potare per quello da sedici o per due da otto in cascata

Ho dato un'occhiata al charlieplexing, con 6 pin diventa un groviglio di fili. Forse la soluzione migliore è il MCP23017, è possibile con questo accendere contemporaneamente i 16 led pilotati?
Grazie,

La butto là… ma non faccio prima a comprare qui un arduino mega compatibile, che ha più di 50 porte digitali a soli 12 euro?
So che non è così che si risolvono i problemi, ma io vorrei evitarli, data la mia inesperienza…

Certo, molto più semplice, affidabile ed espandibile

Condivido con te
Le soluzioni proposte servivano per evitare transistor o relè

maverich:
Il nano ha 14 digitali e 8 analogiche, ma non so se le 8 analogiche possono essere usate per il mio scopo...

Solo 6 dei 8 entrate analogiche possono essere usati come Pin digitali (no il A6 e A7)

Ciao Uwe

Perché non usi dei WS2812 o similari (ci sono anche compatibili nel involucro tondo tilp LED da 5 o 8mm).
Sono pilotabili in RGB singolarmente.

Il cablaggio é semplice a tutti va 5V e massa e i dati da uno al successivo.

Ciao Uwe

uwefed:
Perché non usi dei WS2812 o similari (ci sono anche compatibili nel involucro tondo tilp LED da 5 o 8mm).
Sono pilotabili in RGB singolarmente.

Il cablaggio é semplice a tutti va 5V e massa e i dati da uno al successivo.

Non ho bisogno di colori differenti, la maschera della console è già colorata, è giusta una luce bianca.

Anche se ti serve solo il bianco usare i led WS2812 è una soluzione ottimale in quanto hai solo tre fili da portare in giro, i due di alimentazione a 5V, per 22 led accesi assieme di colore bianco serve un alimentare da un paio di Ampere, va benissimo un caricatore per telefonino, e il cavo del segnale di controllo che si collega al IN del primo led e dal OUT di questo al IN del secondo led, così via per tutti i 22 LED.
Per Arduino trovi librerie pronte per gestire questi led facilmente, p.e. quella di Adafruit.

e quanta corrente posso prelevare, in totale, dai 22 led connessi ad altrettante porte digitali? considerando che i led ad alta intensità bianchi lavorano a 3v, se voglio farli lavorare a 9mA devo mettere una resistenza da 220 ohm ((5-3)/220). Così riuscirei a rimanere nei 200mA totali.
Posso mettere una sola resistenza da 220ohm 1w verso massa per tutti i led?

No, ogni led deve avere la sua resistenza se vuoi accenderli tutti, puoi solo una resistenza in comune esclusivamente se accendi un led per volta, oppure usi il multiplexing per accendere più led assieme, però questo comporta una perdita di luminosità.
La corrente massima te l'ha scritta Brunello qualche post dietro, e sono valori massimi in assoluto da cui è meglio tenersi lontani, ovvero non più di 20 mA per pin, non più di 100 mA per tutto l'Atmega, non più di 80 mA per singolo port.
Tieni presente che quasi tutti i led con 10 mA emettono una luce più che sufficiente per il tuo scopo, pertanto con una Mega2560, in questo caso la corrente massima complessiva è 400 mA, puoi pilotare direttamente tutti i 22 LED.
Non scartare a priori la soluzione con i WS2812, nella versione in case led classico, perché ti semplifica molto i collegamenti, solo tre fili invece di 23, e non servono le resistenze in quanto i led integrano al loro interno l'elettronica di controllo, non ultimo il vantaggio di poter regolare da software la luminosità per trovare quella ottimale.
Per capirci sto parlando di questi led.

astrobeed:
No, ogni led deve avere la sua resistenza se vuoi accenderli tutti, puoi solo una resistenza in comune esclusivamente se accendi un led per volta, oppure usi il multiplexing per accendere più led assieme, però questo comporta una perdita di luminosità.
La corrente massima te l'ha scritta Brunello qualche post dietro, e sono valori massimi in assoluto da cui è meglio tenersi lontani, ovvero non più di 20 mA per pin, non più di 100 mA per tutto l'Atmega, non più di 80 mA per singolo port.
Tieni presente che quasi tutti i led con 10 mA emettono una luce più che sufficiente per il tuo scopo, pertanto con una Mega2560, in questo caso la corrente massima complessiva è 400 mA, puoi pilotare direttamente tutti i 22 LED.
Non scartare a priori la soluzione con i WS2812, nella versione in case led classico, perché ti semplifica molto i collegamenti, solo tre fili invece di 23, e non servono le resistenze in quanto i led integrano al loro interno l'elettronica di controllo, non ultimo il vantaggio di poter regolare da software la luminosità per trovare quella ottimale.

sinceramente i ws2812 mi sembrano sprecati per quello che devo fare... inoltre il cablaggio è già riunito in un connettore, userei quello originariamente previsto da Olivetti. Con 7 euro compro 100 led ad alta luminosità...
Sei sicuro che sia necessaria una resistenza per ogni led?

Dipende da quanto spesso intendi cambiare led e arduino

Se ogni pochi minuti, va bene anche senza resistenza…