Effetto alba e tramonto con i led

Ciao sono nuovo del forum,
è da un po' che uso arduino e (anche se non in maniera eccelsa) me la cavo, da poco sto allestendo un altro acquario e avevo intenzione di unire le 2 passioni facendo una plafoniera con effetto alba e tramonto.
Nel forum ho trovato un sacco di persone che ci hanno provato e hanno ottenuto grandi risultati (anche se ben diversi da quelli che voglio ottenere io).
Il mio progetto è abbastanza semplice: grazie ad un mofset ( riesco a controllare tutti i led della mia plafoniera come se fosse uno solo agli occhi di arduino. :slight_smile:
Ho a disposizione il DS1302 come modulo RTC e uno schermo 16x2 (sullo schermo volevo solo vedere l'orario e qui non c'è problema) volevo far durare l'alba e di conseguenza il tramonto circa 1 ora ma per la dimmerazione sono uno 0 :confused: . Da quello che sono riuscito a capire posso dimmerare i led grazie a questo mofset comandandolo in pwm ma oltre a questo non so nient'altro.
Chiedo solo di aiutarmi a capire questo problema della dimmerazione con arduino.
Premetto con non ho fretta perciò sono tutto orecchi grazie in anticipo a chi mi risponderà. :slight_smile:

Dal punto di vista hardware, il MOSFET (tipo logic level ) lo colleghi ad una uscita digitale di Arduino abilitata per il PWM (3, 5, 6, 9, 10 11) tramite un resistore da 200 ohm con il source collegato a ground e il drain collegato al ai LED a loro volta collegati alla alimentazione dei LED tramite un resistore di limitazione corrente.

Invece, per il software devi usare l'istruzione analogWrite(pin, PWM) ove PWM è un valore tra 0 e 255.

Che potenza complessiva hanno tutti i led, e che mosfet usi ?

Collegandomi al consiglio di Cyberhs sull’uso del PWM nei PIN abilitati, implementerei su arduino una sorta di allarme, una sveglia, a più intervalli che piloti i led in base all’orario;

faccio un esempio:

ore 6:00 > PWM = 1
ore 6:05 > PWM = 2
ore 6:10 > PWM = 5
… etc fino all’ora in cui tu desideri che i led siano completamente accesi (PWM 255)

Al contrario per il tramonto rigiri il codice, e diminuisci il pwm.

Basta cercare sul forum di arduino per un “ds1303 alarm clock” o con gli analoghi ds1307 più comuni.

Vorrei aiutarti di più ma ho perso il modulo ds1307 con cui volevo giocarci ancora prima di cominciare :frowning:

ciao grazie per le dritte sono riuscito a scrivere il programma :

#include <LiquidCrystal.h>
#include <DS1302.h>
DS1302 rtc(2, 3, 4);
int canale1 = A1;
int valoreFade = 0;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void setup()
{
rtc.halt(false);
rtc.writeProtect(false);
lcd.begin(16, 2);
Serial.begin(9600);
rtc.setDOW(FRIDAY);
rtc.setTime(12, 0, 0);
rtc.setDate(6, 8, 2010);
pinMode(canale1, OUTPUT);
}
void loop()
{
lcd.print(“Plafoniera Angelo Puzzo”);
if (rtc.getTimeStr == 10, 0, 0){
lcd.print(“ALBA”);
for (valoreFade = 0 ; valoreFade < 228; valoreFade++) {
analogWrite(canale1, valoreFade);
delay(10000);
}
}
if (rtc.getTimeStr == 11, 36, 1){
lcd.print(“MATTINA”);
}
if (rtc.getTimeStr == 13, 21, 0){
for (valoreFade = 228 ; valoreFade < 255; valoreFade++) {
analogWrite(canale1, valoreFade);
delay(10000);
}
}
if (rtc.getTimeStr == 13, 30, 0){
lcd.print(“MEZZOGIORNO”);
}
if (rtc.getTimeStr == 16, 30, 1){
lcd.print(“POMERIGGIO”);
for(valoreFade = 255 ; valoreFade > 228; valoreFade–) {
analogWrite(canale1, valoreFade);
delay(10000);
}
}
if (rtc.getTimeStr == 18, 30, 1){
lcd.print(“TRAMONTO”);
for(valoreFade = 228 ; valoreFade > 0; valoreFade–) {
analogWrite(canale1, valoreFade);
delay(10000);
}
}
lcd.print(“NOTTE”);
}
(scusate se lo ho scritto così ma non so come inserirlo correttamente) solo che mi da questo tipo di errore : error: invalid use of member (did you forget the ‘&’ ?)
ho cercato su internet ma non c’è nulla, secondo me è un errore sintattico ma non riesco a capire dove sbaglio.
grazie in anticipo

cgyui:
Ciao sono nuovo del forum,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

cgyui:
ciao grazie per le dritte sono riuscito a scrivere il programma :

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Ciao ringrazio nid per avermi spiegato come inserire il programma, comunque sapete cosa vuol dire quell'errore?? Perchè non riesco a venirne a capo, eventualmente che altra soluzione potrei adottare?? È possibile che dipenda da alcune librerie?? Non so cosa pensare su google scrivendo tale errore ci sono ben 0 risultati!!! Sono scioccato, eppure non è un programma complicatissimo. Grazie in aticipo alla benevola anima che mi vorrà aiutare. :smiley:

Sei sicuro che questa impostazione sia corretta?

if (rtc.getTimeStr == 11, 36, 1) ...

Direi proprio che è erratissimo.
Qui un esempio di uso corretto: