Controllare molti led RGB con arduino

Perdonate la mia intromissione, sono nuovo qui! Ho una scarsissima conoscenza di Arduino e per questo (ma comunque direi! XD) chiedo il vostro aiuto!
Suppongo che su questo argomento si sia già parlato, io mi sono documentato però alla fine mi sono un po' perso. In particolar modo ci sono delle cose specifiche che vorrei chiedervi. In ogni caso, se ritenete che vada eliminato, eliminatelo!!
Ma tornando a noi, il mio progetto è questo:
sto realizzando un modellino di un teatro. Mi si è quasi subito posto il problema di realizzare le luci, per questo ho pensato di utilizzare di LED RGB. In particolare il mio "teatro" deve comandare delle luci di sala (led gialli ai quali controllare l'intensità) e 9 file di LED RGB.
Vorrei intanto parlare dell'hardware. Siccome i led dovrei comandarli con pin PWM, avrei bisogno di accrescere le uscite PWM fino a 28 (27 per i led rgb, 1 per le luci di sala). Teoricamente dovrei avere 13 ingressi analogici per il controllo dell'intensità (7 pin) e del colore ( gli altri 6). Ho visto che mi basta un solo ingresso analogico per led qui Utilizzo led RGB con Arduino - YouTube .
Ecco, ora pensavo che si potessero controllare tramite pc, anzi, il progetto originario era non via cavo ma via bluetooth, ma comunque a quello ci si pensa dopo.

Ecco, perdonate il mio pazzo progetto, attendo il vostro aiuto!

Usa degli shifte register come il 74HC595 che normalmente ti espande i pin di output digitali (http://arduino.cc/en/Tutorial/ShiftOut)..
Usando questa libreria con quel componente puoi usare quei pin aggiuntivi come fossero pin di output PWM: http://www.elcojacobs.com/shiftpwm/
EDIT: Occhio a fare distinzione tra ingressi e uscite (input e output) :wink:
Per comandare tutto da pc potresti usare la comunicazione seriale..

Ciao,
volevo sapere se i led RGB avranno tutti lo stesso colore o se li vuoi pilotare a gruppi con colori diversi.
Anche per i led gialli per la sala: vuoi separarli in zone o si illumineranno tutti con la stessa intensità contemporaneamente?
Parli infatti di 13 ingressi analogici per la regolazione ma non ho capito l'assegnazione ai gruppi di led.
Potresti essere più preciso.

Per aumentare il numero delle uscite puoi utilizzare degli integrati come il TLC5947 --> Adafruit 24-Channel 12-bit PWM LED Driver - SPI Interface [TLC5947] : ID 1429 : $14.95 : Adafruit Industries, Unique & fun DIY electronics and kits

Avevo visto che rispondevate velocemente ma.. non mi aspettavo così presto!! :smiley: grazie davvero!
Vi do subito maggiori informazioni: allora le luci di sala verranno controllate tutte assieme. Ok, mi sono accorto di aver contato male (continuo ad aggiungere e a togliere): ci sono 9 gruppi di luci RGB da comandare separatamente, ognuna con due ingressi, uno per il colore e l'altro per l'intensità, quindi 18 + 1 per l'intensità delle luci di sala.

MrJacko:
Usa degli shifte register come il 74HC595 che normalmente ti espande i pin di output digitali (http://arduino.cc/en/Tutorial/ShiftOut)..
Usando questa libreria con quel componente puoi usare quei pin aggiuntivi come fossero pin di output PWM: http://www.elcojacobs.com/shiftpwm/

Quindi io potrei mettere 4 di quelli ottenendo le mie 28 uscite PWM, alle quali forse conviene mettere un transistor perché controllerei diversi led (ma ditemi voi).

Per la comunicazione seriale:
è possibile far comunicare arduino con il computer con un programma differente da quello di arduino, cioè, dico, "homemade", o si deve far comunicare il programma homemade con il comunicatore seriale di arduino?
Gazie ancora!!

talpaone:
Per la comunicazione seriale:
è possibile far comunicare arduino con il computer con un programma differente da quello di arduino, cioè, dico, "homemade", o si deve far comunicare il programma homemade con il comunicatore seriale di arduino?

La comunicazione seriale è gestita da quasi tutti i linguaggi di programmazione (dico quasi perchè ci sono dei casi apparte XD), quindi per rispondere alla tua domanda: Sì! :stuck_out_tongue:

Ti ricordo che per usare gli shift register devi avere led RGB ad anodo comune (non si sa mai) e che hanno 3 catodi, uno per ogni colore (R-G-B).
Devi spiegarci meglio il numero di gruppi di led e da quanti led sono composti e soprattutto che tipo di led usi: sono tutti RGB?

MrJacko:
La comunicazione seriale è gestita da quasi tutti i linguaggi di programmazione (dico quasi perchè ci sono dei casi apparte XD), quindi per rispondere alla tua domanda: Sì! :stuck_out_tongue:

Ti ricordo che per usare gli shift register devi avere led RGB ad anodo comune (non si sa mai) e che hanno 3 catodi, uno per ogni colore (R-G-B).
Devi spiegarci meglio il numero di gruppi di led e da quanti led sono composti e soprattutto che tipo di led usi: sono tutti RGB?

Grazie per il sì!
Allora, ho in totale 10 gruppi led:
LS - luci di sala: sono led gialli ai quali va solamente regolata l'intensità per diminuire la luminosità.
L0 - sono situate sulle colonne di palchi di proscenio, e sono led RGB
L1/L2a/L2b - sono le luci del boccascena, situate ai lati (L1) e sopra (L2a/b). Sono divisi in due gruppi perché il 'b' ha solamente 3 led, uno centrale e due laterali mentre l' 'a' ha luci lungo tutto l'americana. Sono led RGB.
L3a/b - L4a/b - L5 - sono americane pendenti, per le quali vale sempre la divisione a/b. Sono tutti led RGB

Dite che forse è meglio togliere qualche gruppo?

talpaone:
Allora, ho in totale 10 gruppi led:
LS - luci di sala: sono led gialli ai quali va solamente regolata l'intensità per diminuire la luminosità.
L0 - sono situate sulle colonne di palchi di proscenio, e sono led RGB
L1/L2a/L2b - sono le luci del boccascena, situate ai lati (L1) e sopra (L2a/b). Sono divisi in due gruppi perché il 'b' ha solamente 3 led, uno centrale e due laterali mentre l' 'a' ha luci lungo tutto l'americana. Sono led RGB.
L3a/b - L4a/b - L5 - sono americane pendenti, per le quali vale sempre la divisione a/b. Sono tutti led RGB

Dite che forse è meglio togliere qualche gruppo?

Ecco come penso che potresti risolvere:
LS - basta un mosfet adeguato collegato ad un pin PWM Arduino, così comandi la luminosità di tutto il gruppo
L0 - ti serve usare degli shift registers con ogni catodo (R-G-B) collegato a un pin di esso..nota che gli shift registers possono essere collegati in cascata: di solito i pin di output sono in questa sequenza: D0-D1-D2-D3-D4-D5-D6-D7, in cui puoi collegare il D7 al D0 dello shift register successivo
L1/L2a/L2b - L3a/b - L4a/b - L5 - anche qui shift registers XD
Ora l'unica cosa da fare è contare quanti led RGB devi usare in totale, moltiplicare il numero per 3 (R-G-B) e dividere per 8 (il numero di uscite di ogni shift register, essendo i 74HC595 a 8 bit) e ti ritrovi il numero di shift registers da acquistare :slight_smile:
P.S. costano sui 0.30-0.40€ l'uno

MrJacko:
Ora l'unica cosa da fare è contare quanti led RGB devi usare in totale, moltiplicare il numero per 3 (R-G-B) e dividere per 8 (il numero di uscite di ogni shift register, essendo i 74HC595 a 8 bit) e ti ritrovi il numero di shift registers da acquistare :slight_smile:
P.S. costano sui 0.30-0.40€ l'uno

Ma non potrei con 3 in PWM (rgb) comandare direttamente una fila di led?
I led RGB invece ho visto che costano di più.. :frowning:

Per ogni gruppo di led RGB ti serviranno 3 pin PWM. Un solo pin PWM per il gruppo dei led gialli.
Quindi in totale ha bisono di 9x3 + 1 di 28 pin PWM.

Io ti consiglio 2 di questi --> http://www.robot-italy.com/it/adafruit-16-channel-12-bit-pwm-servo-driver-i2c-interface-pca9685.html
Sono forniti, come tutti i prodotti di Adafruit, di lebrerie per l'immediato utilizzo.

Manca adesso la parte di potenza, ovvero devi collegare i gruppi di led in parallelo e comandarli tramite transistor.
Oppure puoi pensare a delle strip led da pilotare tramite appositi driver

talpaone:
I led RGB invece ho visto che costano di più.. :frowning:

Tu hai detto che devi utilizzare led RGB e io ti ho dato la soluzione per quelli..se poi vuoi controllare strip di led RGB è un altro discorso (non pensavo che ogni gruppo si dovesse illuminare allo stesso modo invece di comandare i singoli led :roll_eyes:)

PaoloP:
Io ti consiglio 2 di questi --> http://www.robot-italy.com/it/adafruit-16-channel-12-bit-pwm-servo-driver-i2c-interface-pca9685.html
Sono forniti, come tutti i prodotti di Adafruit, di lebrerie per l'immediato utilizzo.

Manca adesso la parte di potenza, ovvero devi collegare i gruppi di led in parallelo e comandarli tramite transistor.
Oppure puoi pensare a delle strip led da pilotare tramite appositi driver

Secondo me converrebbe usare gli shift registers con libreria ShiftPWM, costano molto di meno e sono più reperibili..

MrJacko:
Tu hai detto che devi utilizzare led RGB e io ti ho dato la soluzione per quelli..se poi vuoi controllare strip di led RGB è un altro discorso (non pensavo che ogni gruppo si dovesse illuminare allo stesso modo invece di comandare i singoli led :roll_eyes:)

Secondo me converrebbe usare gli shift registers con libreria ShiftPWM, costano molto di meno e sono più reperibili..

Scusatemi tanto! :frowning:
in pratica, tendenzialmente, userei le strisce per gli RGB dei gruppi a e quelli senza gruppi e led RGB per i gruppi b.
Si possono comunque utilizzare gli shift registers anche per controllare le strisce, giusto?

Ah ecco, un'altra cosa:
sto cercando di fare uno schemino con fritzing, che differenza c'è tra un MOSFET P-Channel e uno N_Channel?

Comunque pensandoci dovrebbero andare bene transistor pnp

MrJacko:
Comunque pensandoci dovrebbero andare bene transistor pnp

Perdoni la domanda, anzi, le domande: i pnp come si connettono?
E l'anodo a cosa va collegato?
ora faccio un circuito corto, senza riprodurre troppe volte e glielo mostro!

Un transistor si connette così:
Gain ad un pin Arduino;
Source al catodo (positivo) dell'alimentazione;
Drain all'anodo;
In pratica è come un relè

Per gli schemi di collegamento guarda qui --> http://forum.arduino.cc/index.php/topic,146152.0.html
Ti consiglio di imparare ad utilizzare Eagle Cad --> Guida Eagle in italiano | Michele Maffucci

PaoloP:
Per gli schemi di collegamento guarda qui --> http://forum.arduino.cc/index.php/topic,146152.0.html

:astonished: mai viste fino ad ora!
Ma come faccio a visualizzarle con una risoluzione maggiore per ingrandirle?

MrJacko:
:astonished: mai viste fino ad ora!
Ma come faccio a visualizzarle con una risoluzione maggiore per ingrandirle?

Io le ho ritrovate qui! http://www.robot-italy.com/it/blog/tutorial_ita/475 in pdf belle grandi

Ora vi metto la foto, le ho messe in parallelo, credo, seguendo l'immagine che mi avevate postato. In questo modo però ogni shift controlla due e due terzi luci, ovvero deve prendere comunque il comando di altri. Forse mettendoli a cascata viene meglio?

Le puoi scaricare da sito dell'autore. Trovi il link in fondo al primo topic, oppure eccolo qui --> http://www.pighixxx.com/ --> Reference.

EDIT
--> http://www.instructables.com/id/RainBoard-RGB-LED-Rainbow-Fader/?ALLSTEPS

no no scherzavo, l'immagine è sbagliata!!! comunque collegando il pin D7 al D0 va bene, giusto?