Lampada da tavolo RGB

Altro progettino terminato. Questa volta si tratta di una lampada da tavolo con led RGB.
Il circuito si basa su un Atmega328P a 16 MHz che pilota 5 led bianchi ad alta luminosità (20000 mcd) e 5 led RGB ad anodo comune ad alta luminosità (8000 mcd).
I led bianchi sono pilotatati tramite un semplice transistor NPN 2N2222 collegato ad un pin PWM dell'Atmega mentre i led RGB sono pilotati utilizzando un integrato TCL5940. La cosa divertente del circuito è l'utilizzo di un sensore capacitativo per cambiare lo schema di illuminazione dei led, grazie al quale è stato possibile alloggiare il circuito all'interno di una lampada da tavolo in vetro senza forare nulla. Come alimentazione ho riciclato un caricabatteria di un cellulare: 550 mA@5V, più che sufficienti per il mio progetto dato che ho usat comunissimi led ad alta luminosità.
Ho usato un micro a 16 MHz perché la funzione PWM di Arduino non funziona bene a velocità inferiori e poi perché non ho necessità di risparmiare energia.
In allegato trovate un pacchetto contenente lo schema Eagle e la bozza del codice che esegue già alcuni schemi di colore.
Librerie utilizzate:
CapSense - Arduino Playground - HomePage
Tlc5940Mux - Google Code Archive - Long-term storage for Google Code Project Hosting.

EDIT:
nello schema trovate un pulsantino sul pin di reset dell'Atmega328. Tale pulsantino è opzionale (è un rimasuglio del primo schema che avevo costruito, riferito al circuito assemblato su breadboard) ed io non l'ho messo dato che il circuito è all'interno della lampada e quindi non facilmente raggiungibile. R8 è da 20K e serve per limitare la corrente dei led RGB collegati al TLC5940. Se non avete una resistenza di tale valore potete mettere in serie 2 R da 10K l'una, come ho fatto io. Ricordate che il valore di 20K è calcolato per limitare la corrente a 20 mA per canale, se i vostri led hanno un valore differente, dovete ricalcolare tale valore (il datasheet dell'integrato riporta la formula per farlo). R1..R5 sono da 82 ohm e sono calcolate per dare 20 mA ai led bianchi LED6..LED10. Tale valore è calcolato sul tipo di led che ho acquistato. Controllate quelli che avete e calcolate le resistenze in base alle caratteristiche dei vostri led.

R9 è da 8,2 Megaohm. Ho visto che questo valore era quello più indicato per "sentire" le fluttuazioni di capacità di un semplice filo volante. Forse usando una lamina di metallo le cose cambiano.
L'autore della libreria CapSense suggerisce anche di usare un condensatore: a me ha dato più problemi che altro, per cui non l'ho utilizzato. Fate però molte prove su questo fattore prima di realizzare il circuito perché il sensore capacitativo è la parte più delicata dell'interno schema e non c'è, secondo me, una regola che valga per tutti.

Lampada_Rgb.zip (434 KB)

Bellino :slight_smile:
Il problema di farsi le lampade poi è sempre quello di trovare un contenitore adatto =(

ratto93:
Bellino :slight_smile:
Il problema di farsi le lampade poi è sempre quello di trovare un contenitore adatto =(

Difatti io prima mi sono comprato la lampada e poi ho fatto il circuitino. La 1000fori è precisa precisa per entrare nel cilindro in vetro :slight_smile:

Mi piace!

dove hai preso i led RGB?

volevo metterne un po lungo una parete del mio laboratorio che ho ritinteggiato da poco ed è completamente bianca! per dare colore! ma le strip costano troppo!

Li ho presi su Ebay, non mi ricordo il venditore ma vengono sicuramente dall'Italia. E' facile trovarli, ne trovi a migliaia di annunci. Io ho preso questi che erano ad alta luminosità e ad anodo comune (altrimenti non potevo usarli con il Tcl5940).

Bella Leo complimenti :)!! Ma il contenitore potevi farlo a mano :stuck_out_tongue_closed_eyes:

Una lampada pagata meno di 10€ in vetro a mano? XD

Bella leo, lavoro preciso ed efficiente come sempre; una sola cosa sulla logica: lo spegnimento lo fai con una pressione più lunga, non credo che devi fare tutto il giro dei colori :fearful:?

Stavo per chiedere anche io, sarebbe figo fare lo spegnimento con due tocchi :smiley:

Sì, si può fare anche come dici tu.
D'altronde, questo è un protocodice, quindi lo si può sviluppare come uno vuole, secondo i propri gusti.
Ci sono difatti un paio di giochi di luce che in pratica sono quasi uguali, li ho scritti senza neanche provarli dal vivo :sweat_smile:

leo72:

[quote author=Michele Menniti link=topic=109147.msg820116#msg820116 date=1339194077]
Bella leo, lavoro preciso ed efficiente come sempre; una sola cosa sulla logica: lo spegnimento lo fai con una pressione più lunga, non credo che devi fare tutto il giro dei colori :fearful:?

Sì, si può fare anche come dici tu.
D'altronde, questo è un protocodice, quindi lo si può sviluppare come uno vuole, secondo i propri gusti.
Ci sono difatti un paio di giochi di luce che in pratica sono quasi uguali, li ho scritti senza neanche provarli dal vivo :sweat_smile:
[/quote]
no, no, come detto era solo una semplice curiosità, immaginando che uno deve uscire di fretta alla fine la lascia accesa se per spegnerla deve prima riempirla di un buon numero di ceffoni :grin:

La lampada non è nata per stare collegata fissa alla rete. Il consumo c'è. Va messo un interruttore sul filo di alimentazione oppure, meglio ancora (come faccio io), va scollegato l'alimentatorino da parete in modo che neanche il trasformatore interno consumi corrente.

Perché?
La lampada "spenta" è in realtà una lampada che non accende i led, ma non c'è nessuno sleep o altro. Il micro resta ben sveglio altrimenti non potrebbe leggere il sensore capacitativo e capire se qualcuno avvicina la mano per "accenderla". Non so se mi sono spiegato.

bello il sensore capacitivo! ti legge anche attraverso il vetro? micidiale!

z3us:
bello il sensore capacitivo! ti legge anche attraverso il vetro? micidiale!

Come puoi vedere dal video... sì.
E' fatto con una semplice spirale di filo, niente foglio di metallo.
Il ritardo che vedi è voluto: ho messo un delay per evitare che il sensore leggesse 2 volte la prossimità della mano.

leo72:
La lampada non è nata per stare collegata fissa alla rete. Il consumo c'è. Va messo un interruttore sul filo di alimentazione oppure, meglio ancora (come faccio io), va scollegato l'alimentatorino da parete in modo che neanche il trasformatore interno consumi corrente.

Perché?
La lampada "spenta" è in realtà una lampada che non accende i led, ma non c'è nessuno sleep o altro. Il micro resta ben sveglio altrimenti non potrebbe leggere il sensore capacitativo e capire se qualcuno avvicina la mano per "accenderla". Non so se mi sono spiegato.

Il sensore capacitivo non è in grado di agire su un interrupt? :roll_eyes:

Il sensore lavora in modo un po' complicato.
Un pin viene impostato su un determinato stato e poi il codice legge il tempo che ci mette un altro pin collegato al primo ad assumere lo stesso stato. E' una lettura che usa anche il trascorrere del tempo (millis) per cui non può essere fatta all'interno di un interrupt.

Una lampada pagata meno di 10€ in vetro a mano?

Beh ma vuoi mettere la soddisfazione di averla fatta mano :stuck_out_tongue_closed_eyes:

Scherzi a parte, Leo, domanda da neofita usando

Atmega328P a 16 MHz

lo standalone è costruito seguendo la guida di @menni e successive revisioni dovute all'aggiornamento dell'ide oppure essendo a 16MHz ha bisogno di qualche componente/accorgimenti diversi?

Te lo chiedo perché devo fare anch'io uno standalone che usa i pwm e ho letto che avevi scritto:

Ho usato un micro a 16 MHz perché la funzione PWM di Arduino non funziona bene a velocità inferiori

Grazie.

lo stand-alone quello è e non ci sono revisioni o modifiche, ed è a 16MHz, poi abbiamo visto come usare il micro col clock interno abolendo il quarzo ed i due condensatori; le problematiche a cui ti riferisci riguardano la programmazione software, ma in un modo o nell'altro il micro si programma

La programmazione software? tipo?

critical:
Te lo chiedo perché devo fare anch'io uno standalone che usa i pwm e ho letto che avevi scritto:

Ho usato un micro a 16 MHz perché la funzione PWM di Arduino non funziona bene a velocità inferiori

Grazie.

Premetto che io uso l'IDE 0022 per cui non so se la cosa è stata modificata sulla successiva versione 1.0.
Il core dell'Arduino imposta il timer per generare il segnale PWM senza effettuare verifiche sul clock del micro per cui se hai un circuito con l'Atmega a 8 MHz avrai una frequenza di PWM dimezzata.

+1