Good morning everyone, I'm a beginner and I use Arduino mainly for the movements of the nativity scene. I ask if it is feasible to vary the lights (using 220V incandescent lamps) to simulate sunrise/day/sunset/night with Arduino. I currently use Arduino as a simple timer combined with a 4 relay module but I would like to improve the system by making it more pleasing to the eye. The Arduino module also sends the day/night signal to some individual modules to start them up or stop them during the night.
My only problem is having to use 220V, I tried to buy this 2-channel dimmer to do some tests but I can't get results https://it.aliexpress.com/item/32972336897.html?spm=a2g0o.order_list.order_list_main.25.463c3696f2RteZ&gatewayAdapt=glo2ita
I moved your topic to an appropriate forum category @ivodtt.
In the future, please take some time to pick the forum category that best suits the subject of your topic. There is an "About the _____ category" topic at the top of each category that explains its purpose.
also seeing the problem of maintaining maximum brightness on the D1 I tried to reduce from 100% to 95% by modifying the program in this way. the final result does not change: incandescent lamps, D1 works correctly while D2 flashes in a loop and does not finish the program.
#include <TimerOne.h>
// Dichiarazione dei pin
const int triacPin1 = 5; // Pin digitale per il dimmer D1
const int triacPin2 = 6; // Pin digitale per il dimmer D2
const int zcPin = 2; // Pin digitale per il rilevamento dello zero crossing
volatile int dim1 = 0; // Livello di dimmer per D1
volatile int dim2 = 0; // Livello di dimmer per D2
volatile bool zcDetected = false; // Flag per indicare il rilevamento dello zero crossing
void setup() {
pinMode(triacPin1, OUTPUT);
pinMode(triacPin2, OUTPUT);
pinMode(zcPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(zcPin), zeroCrossingISR, FALLING); // Configura l'interrupt per lo zero crossing
Timer1.initialize(10000); // Timer1 inizializzato con un periodo di 10000 microsecondi (10ms)
Timer1.attachInterrupt(timerISR, 10000); // Configura l'interrupt del timer
Timer1.stop(); // Ferma il timer all'inizio
Serial.begin(9600); // Inizializza la comunicazione seriale per il debug
}
void zeroCrossingISR() {
zcDetected = true;
Timer1.start(); // Avvia il timer quando viene rilevato lo zero crossing
}
void timerISR() {
if (zcDetected) {
// Calcola il ritardo per il dimming
if (dim1 > 0) {
delayMicroseconds(dim1);
digitalWrite(triacPin1, HIGH);
delayMicroseconds(10); // Pulse width to trigger the triac
digitalWrite(triacPin1, LOW);
}
if (dim2 > 0) {
delayMicroseconds(dim2 + 20); // Aggiungi un piccolo offset per evitare interferenze tra i canali
digitalWrite(triacPin2, HIGH);
delayMicroseconds(10); // Pulse width to trigger the triac
digitalWrite(triacPin2, LOW);
}
zcDetected = false;
Timer1.stop(); // Ferma il timer fino al prossimo zero crossing
}
}
void loop() {
// Spento per 5 secondi
Serial.println("Starting loop...");
delay(5000);
// Aumento della luminosità di D1 da 0 a 100% in 5 secondi
for (int i = 0; i <= 95; i++) { // Limita il valore massimo a 95%
dim1 = map(i, 0, 100, 7800, 300); // Mappa la luminosità su un ritardo per il dimming
delay(50);
Serial.print("Brightness D1: ");
Serial.println(i);
}
// Max intensità di D1 per 5 secondi
dim1 = map(95, 0, 100, 7800, 300); // Imposta la luminosità al massimo (95%)
delay(5000);
// Riduzione dell'intensità di D1 da 100% a 0% in 5 secondi
for (int i = 95; i >= 0; i--) { // Inizia da 95% anziché 100%
dim1 = map(i, 0, 100, 7800, 300); // Mappa la luminosità su un ritardo per il dimming
delay(50);
Serial.print("Brightness D1: ");
Serial.println(i);
}
// Tutto spento per 3 secondi
dim1 = 0;
delay(3000);
// Aumento della luminosità di D2 da 0 a 100% in 5 secondi
for (int i = 0; i <= 95; i++) { // Limita il valore massimo a 95%
dim2 = map(i, 0, 100, 7800, 300); // Mappa la luminosità su un ritardo per il dimming
delay(50);
Serial.print("Brightness D2: ");
Serial.println(i);
}
// Max intensità di D2 per 5 secondi
dim2 = map(95, 0, 100, 7800, 300); // Imposta la luminosità al massimo (95%)
delay(5000);
// Riduzione dell'intensità di D2 da 100% a 0% in 5 secondi
for (int i = 95; i >= 0; i--) { // Inizia da 95% anziché 100%
dim2 = map(i, 0, 100, 7800, 300); // Mappa la luminosità su un ritardo per il dimming
delay(50);
Serial.print("Brightness D2: ");
Serial.println(i);
}
// Tutto spento per 3 secondi
dim2 = 0;
delay(3000);
Serial.println("Loop complete.");
}
I state that this is a test, the complete system should have 3 channels for sunrise/day/sunset while night has no problems as it does not include any variations
Why would you need 3 channels, start at 0 rise thru sunrise to full day brightness at about noon, then slowly dim to night. All one channel. Am I missing something?
unfortunately I read English poorly and I use Google Translate, what do you mean by this? Try exchangin pin 5 and 6 is still the same triack output that flashes? I am a beginner and I have learned many things by following this forum and trying on Arduino by having Chat GPT explain the various instructions to me so that I can understand them and possibly, if they are useful to my project, apply them.
il funzionamento delle luci del presepio è gestito da arduino che controlla i relè. notte: accese le luci notturne(illuminazione case e capanna e tutti i movimenti fermi. alba: avvio movimenti e accensione della luce posta dietro le montagne sulla destra (questo è il momento in cui vorrei incrementare la luce dell'alba fino l massimo) e luce notturne ancora accese. Giorno: spegnimento luce notte ,accensione luci che illuminano tutto l'ambiente (in questo momento vorrei un aumento prograssivo della luce giorno e diminuzione progressiva della luce alba). tramonto: accensione luce tramonto posta a sinistra (diminuzione progressiva della luce giorno e aumento progressivo della luce tramonto) e quando al massimo la luce tramonto accendere le luci notte e fermare tutti i movimenti. Notte: spegnimento delle luci tramonto progressivo fino ad arrivare a notte. Attualmente questo sistema è gestito da relè ma mi piacerebbe, se possibile poter variare la luce su alba, giorno e notte per ottenere un effetto scenico, preciso che il presepio è circa 4mt x 9mt
Buongiorno a tutti, chiedo innanzitutto scusa per la prolungata assenza ma a causa di problemi gravi di salute di un famigliare ho dovuto lasciare da parte il progetto.
Ho fatto le prove che mi avete chiesto , smontato tutto l'hardware e nuovamente rimontato e tutto magicamente si è messo a funzionare sui due canali (probabilmente ho fatto una qualche connessione non proprio affidabile).
Unico problema è che il tutto è funzionante solamente con le lampade ad incandescenza mentre con le lampade a led dimmerabili funziona in aumento e diminuzione della luminosità ma quando è al massimo, e dovrebbe stare alcuni secondi, spegne la lampada e non so se il problema siano le lampade ( collegate alla luce direttamente funzionano alla perfezione) oppure il dimmer non riesce a gestirle.
Ora volevo aggiungere il terzo canale per poter completare il ciclo alba/giorno/tramonto e quindi acquistare un ulteriore dimmer per avere il completamento del progetto.
For the dimmable led lamps try reducing the maximum value form the actual 95% to 85-90% ( or even less, if it is not enough ), incandescent lamps are pure resistive loads, probably dimmable leds are not.
ok, I had already initially tried to reduce the value from 100 to 95 without having solved the problem, then I gave up because I concentrated on the flashing of triac 2. I'll try to reduce it gradually to see if it works. Thank you!