Come controllare una luminaria natalizia a piacere... 

ANTEFATTO:

Ho comprato per pochi euro presso una nota catena di discount una luminaria di Natale di 5 metri a LED, alimentata con 4 batterie stilo AA. Nel solido contenitore di plastica (riutilizzabile) c'è la catena di luci vera e propria collegata ad un barattolino bianco in cui sono alloggiati il portabatterie a 4 posti e un circuitino stampato, che porta il controller e il pulsante per cambiare la sequenza di accensione (8 possibilità). I LED hanno 4 colori e si accendono a coppie: giallo e rosso, verde e blu, variando anche l'intensità a seconda della sequenza attiva.

Nel fare alcune prove ho sbadatamente sovralimentato il circuito, che purtroppo ha smesso di funzionare. Ovviamente ho cercato di recuperare il possibile: il controller è andato, ma barattolino, portapile, pulsante e catena di luci sono ancora buoni e utili per usi futuri.

Non volevo rinunciare però ad addobbare la ringhiera di casa mia con queste luci.

PRIMA SOLUZIONE:

Osservo che la catena di luci è formata da un filo con due soli capi. Immagino perciò che per poter gestire indipendentemente due coppie di colori si sfrutti la direzionalità dei diodi stessi. Infatti, i LED abbinati sono montati in antiparallelo: gli anodi dei gialli e rossi sono in parallelo ai catodi dei verdi e blu. Invertendo perciò il verso della corrente si seleziona la coppia di colori da accendere.

Allora prendo un semplice trasformatore con uscita a 6 V in alternata e lo collego alla catena di LED interponendo una resistenza limitatrice da 27 ohm, come quella che c'era sul defunto controller, e le luci si accedono alla grande.

CONTROLLO ATTIVO DELLE LUCI:

Volendo controllare separatamente le due coppie di colori, occorre agire sulle due semionde della corrente alternata, per cui la soluzione di base è di inserire in serie fra trasformatore e catena due diodi rettificatori in antiparallelo, ciascuno in parallelo ad un interruttore.

Se entrambi gli interruttori sono aperti i diodi non fanno passare né l'una né l'altra semionda e le luci restano tutte spente, se si chiude uno solo degli interruttori "passa" una sola semionda e si accende una coppia di colori, se si chiudono entrambi gli interruttori si accendono entrambe le coppie.

Come azionare però gli interruttori per creare una ben definita sequenza? Si potrebbero usare dei relé pilotati dalle uscite di un Arduino, a sua volta programmato ad hoc, ma non durerebbero certamente molto a lungo...

L'equivalente elettronico del relé è l'SCR: se si invia sul Gate una opportuna tensione continua (circa 0,8V), esso passa in conduzione e vi resta finché non si azzera la corrente tra Anodo e Catodo (il che avviene quando la semionda AC passa per lo zero). Quando l'SCR è in conduzione esso equivale ad un relè con i contatti in chiusura, ma ha il vantaggio di poter commutare molto più velocemente. Ho pensato perciò di mettere un SCR in antiparallelo a ciascun diodo rettificatore.

Occorre però creare un punto di riferimento di tensione comune tra il circuito in alternata e quello di pilotaggio dei due SCR, il che non è un problema, visto che il circuito in alternata è disaccoppiato dalla rete grazie al trasformatore.

Quello che segue è il circuito definitivo.

I tre terminali in basso vanno collegati ad una scheda Arduino: il GND va collegato al ground, gli altri a due adatti piedini di I/O digitale. Questo un programmino minimale di controllo; variando i delay e la sequenza dei comandi si possono ottenere tantissimi effetti.

/*
 * Lampeggiatore luci di Natale in alternata
 * dicembre 2019
 * pilotaggio su 7 e 8
 */
 const int luci1 = 7;
 const int luci2 = 8;
 
void setup() {
  // put your setup code here, to run once:
pinMode(luci1,OUTPUT);
pinMode(luci2,OUTPUT);
digitalWrite(luci1, LOW); // luci1 spente
digitalWrite(luci2, LOW); // luci2 spente
}

void loop() {
  // put your main code here, to run repeatedly:
  // inizio entrambe on per 1 secondo
  digitalWrite(luci1, HIGH); // luci1 accese
  digitalWrite(luci2, HIGH); // luci2 accese
  delay(1000);
  digitalWrite(luci1, LOW); // luci1 spente
  digitalWrite(luci2, LOW); // luci2 spente
  delay(1000);
}