Centralina alba tramonto arduino sketch – terza parte

Realizzare la centralina alba tramonto arduino sketch completa la prima parte della realizzazione di una centralina per presepe

entralina alba tramonto arduino giorno

questo progetto è composto da alcuni articoli che ti accompagneranno per tutto il periodo natalizio.

Ho deciso di dividere il progetto in fasi per due motivi:

  1. renderlo più comprensibile dedicando un articolo a ciascuna fase della realizzazione partendo dai principi che mi hanno ispirato;
  2. permetterti di realizzare anche solo una parte del progetto e non tutto il progetto.

Nel primo articolo hai letto come puoi ricavare i tempi delle fasi alba-giono-tramonto-notte e come tradurre in tempi per arduino tali fasi.

Nel secondo articolo hai realizzato i collegamenti dei led in cui ciascun led simula una delle fasi del giorno e della notte stellata.

In questo articolo leggerai come da quei tempi ne consegue un grafico dell’andamento delle uscite arduino e quindi lo sketch.

Il grafico della centralina alba tramonto arduino sketch

Inizia subito guardando il grafico:

centralina alba tramonto arduino grafico

in cui ciascuna delle 4 fasi si alterna lungo la linea del tempo ( in alto ) in pratica in un ipotetico giorno che inizia dalle 5:54 si susseguono la prima fase di in cui la luna cala ed il sole sorge fino al raggiungimento della sua massima luminosità come alba e da inizio alla seconda fase alle 7:35 per continuare con le fasi successive.

Sulla base di questi tempi, e della tabella che hai già visto nel primo articolo potrai ricavare i tempi in millisecondi di durata delle singole fasi:

centralina alba tramonto arduino excel Roma 25dic2014 cicli

Lo sketch della centralina alba tramonto arduno

nello sketch tutta la giornata è riprodotta in un minuto quindi con le fasi che durano rispettivamente:

  • 4194 ms per l’alba
  • 22958 ms per il giorno
  • 4195 ms per il tramonto
  • 28651 ms per la notte

Passa allo sketch:

/**********************************************************
 * Centralina Alba-Tramonto per presepe
 *
 * Created on 12 december 2014
 * Modified on 15 decebre 2014
 *
 * by Mauro Alfieri
 * web:    mauroalfieri.it
 * Twitter: @mauroalfieri
/**********************************************************/

#define pin_down   3
#define pin_sun    5
#define pin_sunset 6
#define pin_moon   9
#define pin_starsA 10
#define pin_starsB 11

int oneminrome[4] = { 4194,22958,4195,28651 };
int oneminbtlm[4] = { 3668,25189,3668,27474 };
int timeStepOld = 0;
int timeStep = 0;

long timeCurr = 0;

byte fade[]  = {255,250,245,240,235,230,225,220,215,210,205,200,195,190,185,180,175,170,165,160,155,150,145,140,135,130,125,120,115,110,105,100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5,0}; // 52 step
byte curr   = 0;

void setup() {
  Serial.begin( 9600 );
  
  pinMode( pin_down  ,OUTPUT );
  pinMode( pin_sun   ,OUTPUT );
  pinMode( pin_sunset,OUTPUT );
  pinMode( pin_moon  ,OUTPUT );
  pinMode( pin_starsA,OUTPUT );
  pinMode( pin_starsB,OUTPUT );

  analogWrite( pin_down  ,LOW );
  analogWrite( pin_sun   ,LOW );
  analogWrite( pin_sunset,LOW );
  analogWrite( pin_moon  ,LOW );
  analogWrite( pin_starsA,LOW );
  analogWrite( pin_starsB,LOW );
  
  Serial.println("-- START --");
}

void loop() {
  timeCurr = oneminrome[curr];
  timeStep = (timeCurr/52);

  Serial.print("Current: "); Serial.println(curr);
  Serial.print("Time current: "); Serial.println(timeCurr);
  Serial.print("Time single step: "); Serial.println(timeStep);

  // down 
  if ( curr == 0 ) { 
     Serial.print("Fase: "); Serial.println("DOWN");
     for ( int i=0; i<52; i++) {
       analogWrite(pin_down,   fade[(51-i)]);
       analogWrite(pin_sun,    0 );
       analogWrite(pin_sunset, 0 );
       analogWrite(pin_moon,   fade[i] );
       analogWrite(pin_starsA, fade[i] );
       analogWrite(pin_starsB, fade[i] );
       delay( timeStep );
     }
     timeStepOld = timeStep;
  }

  // sun
  if ( curr == 1 ) {
     Serial.print("Fase: "); Serial.println("SUN");
     for ( int i=0; i<52; i++) {
       analogWrite(pin_down,   fade[i]);
       if ( fade[i] < 125) analogWrite(pin_sun,    fade[(51-i)]*2 );
       analogWrite(pin_sunset, 0 );
       analogWrite(pin_moon,   0 );
       analogWrite(pin_starsA, 0 );
       analogWrite(pin_starsB, 0 );
       delay( timeStepOld );
     }
     timeStepOld = (timeStepOld*52); // elapsed time
     timeCurr = (timeCurr - timeStepOld);
     delay( timeCurr );
  }

  // sunset
  if ( curr == 2 ) {
     Serial.print("Fase: "); Serial.println("SUNSET");
     for ( int i=0; i<52; i++) {
       analogWrite(pin_down,   0);
       analogWrite(pin_sun,    fade[i] );
       analogWrite(pin_sunset, fade[(51-i)] );
       analogWrite(pin_moon,   0 );
       analogWrite(pin_starsA, 0 );
       analogWrite(pin_starsB, 0 );
       delay( timeStep );
     }
     timeStepOld = timeStep;
  }
  
  // moon 
  if ( curr == 3 ) {
     Serial.print("Fase: "); Serial.println("MOON");
     for ( int i=0; i<52; i++) {
       analogWrite(pin_down,   0);
       analogWrite(pin_sun,    0 );
       analogWrite(pin_sunset, fade[i] );
       if ( fade[i] < 125) analogWrite(pin_moon,   fade[(51-i)]*2 );
       if ( fade[i] < 125) analogWrite(pin_starsA, fade[(51-i)]*2 );
       if ( fade[i] < 125) analogWrite(pin_starsB, fade[(51-i)]*2 );
       delay( timeStepOld );      
   }      
   timeStepOld = (timeStepOld*52); // elapsed time      
   timeCurr = (timeCurr - timeStepOld);      
   delay( timeCurr );
  }   
  curr++;
  if ( curr >= 4 ) { curr = 0; }
}

salta le prime linee che sono i commenti di intestazione del progetto e continua con:

linee 012-017: definisci i pin a cui sono collegati i led come hai letto nell’articolo dedicato ai collegamenti;

linee 019-020: sono definiti i due array di valori, uno per Roma ed uno per Betlemme al 25 dicembre 2014. Nel corso dello sketch sceglierai quali tempi utilizzare per il tuo presepe;

linee 021-022: definisci due variabili che userai per scandire i tempi di intervallo di ciascuna fase per ottenere la dissolvenza della fase corrispondente;

linea 024: imposta una variabile con cui terrai in memoria il tempo della fase corrente;

linea 026: definisci un array di 52 valori da 255 a 0 con cui ottenere la dissolvenza di ciascuna fase;

linea 027: definisci una variabile i cui valori andranno da 0 a 3 per indicare in quale fase ti trovi;

linee 034-039: imposta tutti i 6 pin in OUTPUT;

linee 041-046: porta a LOW tutti i pin corrispondenti ai led;

linea 052: in questa linea decidi se utilizzare la durata sulla base del fuso orario di Roma o quelli sul fuso orario di Betlemme. Semplicemente sostituendo il valore di oneminrome con oneminbtlm potrai variare la sequenza di durata tra le singole fasi. Il valore assegnato alla variabile timeCurr è relatico alla fase corrente ( curr ) in questo primo passaggio curr vale 0 e quindi il valore di timeCurr sarà corrispondente al primo valore dell’array oneminrome.

linea 053: dividi il valore di timeCurr per il numero di step in cui l’alba deve sorgere, come puoi vedere nel grafico sopra. Nella fase alba la prima luce dovrà partire da intensità 0 e compiere i 52 passi fino alla luminosità 255;

linea 060: se la fse è la prima ed il valore di curr è 0 esegui le righe seguenti;

linee 062: crea un ciclo di 52 valori ( ciascuno corrispondente ad uno degli indici del fade[] ) in cui l’alba inizia da 0 ed arriva a 255;

linea 063: siccome il valore di fade va da 255 a 0 ed il led dell’alba deve iniziare da 0 ed incrementarsi fino a 255 invertia il contatore i passando alla fade il valore (51-i). Otterrai che quando i = 0 fade[ 51-0 ] = fade[ 51 ] = 0 siccome gli array partono da 0 per cui 52 valori sono 0-51 indici;

linee 064-065: i relativi pin sun e sunset ( giorno e tramonto ) saranno a 0;

linee 066-068: si muovono in parallelo all’alba per ottenere il termine della notte e la fase di alba;

linea 069: il valore di tempo calcolato alla linea 053 lo usi per attendere tra le intensità di illuminazione dei singoli canali in modo che l’effetto finale osservato è una lenta fine della notte che pian piano lascia il posto all’alba;

linea 071: assegna alla variabile timeStepOld il valore di timeStep che userai nelle prossime fasi della centralina alba tramonto arduino sketch per regolare il passaggio dall’alba al giorno ed il passaggio dal tramonto alla notte;

linee 075-089: sono fondamentalmente simili alle linee precedenti se non in alcuni passaggi come ad esempio la linea 079: controllando il valore di fade[i] fino a quando scende sotto il valore 125, ritardi la fase di inizio del giorno e per recuperare questo ritardo moltiplichi per due il valore del fade ottenuto come descritto alla linea 063;

Questa elaborazione della centralina alba tramonto arduino sketch è stato necessario per compensare l’assorbimento contemporaneo da parte dei led bianchi ad alta luminosità che necessitano di più corrente per essere stabili a bassa tensione.

Con una shield ad hoc potrebbe non essere necessario applicare questa modifica software, dipende dal tipo di shield che sceglierai.

linea 086: moltiplica il valore di timeStepOld per 52 ( gli step del fade ) per conosce il valore totale trascorso nel realizzare tutti gli step del fade, questo calcolo ti serve per la linea 087;

linea 087: sottrai dal valore di timeCurr il tempo  timeStepOld appena calcolato, in questo modo sai quanto tempo deve ancora durare la fase corrente;

linea 088: attendi il passaggio del tempo fino al terine della fase;

linee 092-121: sono identiche alle precedenti linee e si preoccupano di gestire la fase di tramonto, simile a quella di alba e la fase notturna;

linea 122: incrementa il valore di curr in modo da procedere con le fasi successive;

linea 123: controlla che il valore di curr non superi il 3 e nel caso arrivi a 4 lo riporta a 0 per far iniziare nuovemente il ciclo alba-giorno-tramonto-notte;

Il video della centralina alba tramonto arduino sketch

Puoi osservare il video della centralina in funzione in due cicli successivi dall’alba alla notte:

Buon Natale !!

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/centralina-alba-tramonto-arduino-sketch.html

74 comments

1 ping

Skip to comment form

    • giuseppe traversa on 23 aprile 2015 at 18:14
    • Reply

    Ciao Mauro ho risolto il problema ho cambiato long timeCurr con unsigned short timeCurr e funziona perfettamente .
    Comunque Grazie

    1. Ciao Giuseppe,
      ho provveduto a spostare io il tuo commento nel posto corretto, in futuro ti chiedo di porre maggiore attenzione se desideri che io possa aiutarti.
      La differenza tra long e unsigned short è notevole in quanto long gestisce numeri da -2,147,483,648 a 2,147,483,647 con 4 byte, unsigned short da 0 a 65535 per cui con i 2min di impostazione può funzionare ma se aumenti a 5 min, o superiore, ritroverai il medesimo errore.

      Se riesco a fare qualche test proverò con unsigned long che ha un range da 0 a 4,294,967,295

    • andrea on 25 luglio 2015 at 18:16
    • Reply

    Ciao mauro volevo chiederti come potevo fare a aumentare il tempo del giorno e della notte ???? grazie =) aspetto tua risposta

    1. Ciao Andrea,
      é tutto descritto dettagliatamente nell’articolo, si tratta di calcoli e matrici da ricavarti in funzione dei tempi che desideri impostare.

    • soft on 20 agosto 2015 at 14:08
    • Reply

    ciao, scusa se io volessi ridurre il tempo, mi basta abbassare i valori all’interno di “oneminrome[4]={4194,22958,4195,28651}; giusto??

    1. Ciao Soft,
      si è sufficiente, controlla di utilizzare l’array corretto.

    • davide on 27 novembre 2015 at 15:48
    • Reply

    Ciao Mauro,

    secondo te è possibile realizzare questa centralina utiiizzando 6 led RGB e nello specifico WS2812, facendo le opportune modifiche al codice.

    Grazie

    Ciao
    Davide

    1. Ciao Davide,
      certo i led Neopixel o con controller integrato WS2812 sono indirizzabili per numero ma come comportamento sono dei normali led per cui puoi adattare il codice.

      • Lino on 18 dicembre 2017 at 08:44
      • Reply

      Ciao Davide, spero che sei ancora in contatto su questo blog, ti volevo chiedere se sei riuscito ad utilizzare i led ws2812 in un unica striscia led e se mi potessi dare una mano!!! grazie

      1. Ciao Lino,
        mai commento è stato più premonitore.
        Nei prossimi giorni sto preparando delle chicche per natale con i neopixel o WS2812B.
        In ogni caso ti consiglio di leggere e comprendere già tutti gli articoli dedicati a questi led .. in preparazione dei futuri sviluppi.

    • Davide on 6 dicembre 2015 at 00:25
    • Reply

    Ciao Mauro, guida perfetta. Avrei una domanda: ho provato a cambiare la durata di ogni ciclo mettendo i valori secondo la tabella che hai pubblicato nei tuoi precedenti articoli e ho notato che se importo una durata del ciclo di 15 minuti, il ciclo si blocca, appena accendo arduino non va avanti, mentre se imposto un tempo di 1 minuto oppure dei tempi casuali il tutto funziona correttamente. Per modificare il tempo di ogni ciclo ho modificato i valori sul codice “int oneminrome[4] = { 62917,344365,62927,429771 };”.
    Come mai non riesco ad impotare una durata del genere?

    Grazie.

    1. Ciao Davide,
      non ho potuto provare tutti i tempi definiti per questioni di tempo.
      Prova ad eseguire una analisi con il monitor seriale e dirmi cosa accade e cosa rilevi in modo che io possa correggere lo sketch.

    • Stefano on 7 dicembre 2015 at 12:59
    • Reply

    Ciao mauro. io volevo usare questo progetto come supporto al mio presepe che ha già un ciclo giorno notte senza alba e tramonto. Io vorrei fare un ciclo che inizia diretto dal giorno (0 s), da 30 s a 50 s ci sia tramonto, poi passa la notte e a 1 min e 20 s fino a 1 min e 35 s fa alba per poi fare ancora giorno. da qui dovrebbe poi iniziare il loop con inizio da giorno e fine a alba con tempi giorno 45 s, tramonto 25 s, notte 35 s e alba 15 s. con naturalmente dissolvenza. Come posso fare? puoi scrivermi il tuo codice modificato?

    1. Ciao Stefano,
      pubblico il codice e la descrizione per insegnare/permettere a chi vuole di eseguire tutte le modifiche che desidera mettendoci solo un po di buona volontà nel comprendere come funziona arduino ed il mio codice.
      Realizzo anche progetti su commissione di scrittura codice ma temo che a causa degli impegni già esistenti arriveremmo ben oltre il prossimo natale solo per iniziare il progetto.

    • Vale on 29 gennaio 2016 at 14:34
    • Reply

    Ciao Mauro,
    innanzitutto complimenti per il sito e il corso online, molto interessante ed appassionante.

    Premetto che sono ancora in fase embrionale, ovvero sto stilando la lista della spesa e mi stanno sorgendo delle domande:
    per il progetto alba tramonto, avendo un presepio 1200×1200 [mm]:
    1- cosa servirebbe per collegare non solo 1 led ma delle lampade? quale shield suggeriresti?
    2- sarebbe fattibile usare una striscia RGB da 1 mt e se si, servirebbe qualche scheda aggiuntiva?

    upgrade all’attuale schema potrebbe essere l’aggiunta di un motore (x rotazione di un mulino) e delle luci all’interno delle case, ma dovrebbero essere on-off nella fase tramonto (magari in random tra loro)

    3- per un altro progetto, se dovessi muovere 3 servi, con alimentazione a 9Vdc, basterebbe un regolatore di tensione L7806 per i motori?

    Grazie, per l’attenzione.

    Vale
    (Valentino)

    1. Ciao Valentino,
      per le prime due domande la risposta è si e ti serve una shield o altro driver per led in grado di supportare il carico di led che gli collegherai.
      Non esiste un unica shield che puoi usare e molto dipende dal numero/tipo/potenza di led che usi, le blog trovi una ampia narrazione dedicata ai led ed al loro utilizzo con arduino.

      Per la domanda 3 il discorso è sostanzialmente lo stesso: dipende dal tipo di servo e dalle caratteristiche di alimentazione richieste, di solito un 7806 per servo dovrebbe garantirti una corrente sufficiente, tuttavia esistono servo molto esigenti in termini di corrente.

        • Vale on 4 febbraio 2016 at 16:25
        • Reply

        ciao,
        grazie per le risposte; scusami, ma potresti cortesemente indicarmi una “lista della spesa” in riferimento alle domande 1 e 2?
        Capisco che dipenda da vari fattori, ma per 1 metro quadro da illuminare cosa mi consiglieresti? Sinceramente non saprei da dove iniziare le mie ricerche … di codici (shield o altro driver) ancora non ne conosco … sorry

        Vale

        1. Ciao Vale,
          inizia pure dal blog, troverai molti riferimenti a shield e progetti che puoi utilizzare.
          Purtroppo non saprei comporre una lista della spesa affidabile senza una adeguata analisi del progetto.
          Se di tuo interesse realizzo progetti su commissione come puoi leggere nella sezione collabora del blog.

    • Lino on 9 agosto 2016 at 09:32
    • Reply

    Ciao Mauro, bellissima guida, ma vorrei portare questa centralina alla “Vita Reale” ti spiego, ho un allevamento di uccelli, e il posto dove sono è poco illuminato, quello che vorrei fare è gestire due o tre strisce led rgb, con la funzione alba e tramonto rapportate alle ore di luce effettive di ogni giorno, mi aiuteresti?

    1. Ciao Lino,
      bella idea, io posso aiutarti con consigliandoti la lettura degli articoli del blog dettagliati riga per riga, proprio per insegnarti come usarli.
      Per la parte elettronica trovi degli articoli dedicati alle Shield che ti occorrono come la RGB Shield con cui controlli 3 strisce di led.
      Se desideri un lavoro su commissione puoi scrivermi alla casella info del blog e ti indicherò i costi e le modalità per ricevere un preventivo.

    • Pietro on 8 settembre 2016 at 19:52
    • Reply

    Buonasera Mauro, ho provato a implementare la sua guida copiando lo sketch esattamente come lo ha scritto lei e realizzando il circuito sulla breadboard come è illustrato nell’mmagine nell’altro articolo che riguarda questo progetto. Purtroppo la centralina funziona solo a metà, cioè si accendono e si spengono solo i 3 LED relativi alla fase notturna (la Luna e le 2 stelle), mentre gli altri 3 LED restano sempre completamente SPENTI. La cosa strana è che, mentre il circuito presenta questo problema, sul monitor seriale le fasi e i tempi vengono visualizzati in modo perfetto.
    Per caso potrebbe aiutarmi? Grazie mille

    1. Ciao Pietro,
      prova i singoli led con uno sketch semplice, tipo fade degli esempi arduino, per verificare se non si tratti di un collegamento o di un componente mal funzionante.

        • Pietro on 13 settembre 2016 at 22:22
        • Reply

        Ho testato uno per uno i 13 cavi, i 6 LED e la resistenza con i quali sono andato a realizzare il circuito, selezionandoli perfettamente funzionanti, e ora tutto funziona alla perfezione. Era sicuramente solo un problema di collegamenti, come lei diceva, la ringrazio molto 🙂

        1. Ottimo Pietro, il metodo che hai usato per scovare l’errore è di certo il miglior insegnamento che hai acquisito 🙂 usalo sempre e vedrai che sarà facile realizzare progetti con arduino, genuino, raspberry pi, ecc…

    • Giacomo on 22 novembre 2016 at 22:19
    • Reply

    Volendo sostituire i led per il ciclo con una striscia led e relativi transistors Pottebbe suggerirmi il codice per ottenere i rispettivi colori. Grazie

    1. Ciao Giacomo,
      a quali codici ti riferisci?

        • giacomo on 23 novembre 2016 at 21:14
        • Reply

        Centralina alba tramonto arduino sketch – terza parte
        Ho modificato il Suo sketch con questo per usare Led RGB:

        [codice rimosso in automatico]

        Funziona alla perfezione ma non riesco, malgrado vari tentativi; a far lampeggiare il Led STELLA ed inserire una dissolvenza tra i vari cicli, può darmi un aiuto, grazie e buona serata

        1. Ciao Giacomo,
          ti chiedo la cortesia di rispettare le regole del blog che trovi alla fine di ogni articolo sopratutto se si tratta di modifiche a script già presenti nel blog.
          In merito alla richiesta ti consiglio di modificare lo sketch dopo aver compreso il funzionamento dello sketch e la logica di funzionamento in modo che le tue modifiche possano consentirti di far funzionare ugualmente lo sketch.

            • giacomo on 24 novembre 2016 at 10:15

            Buongiorno,
            Premetto il mio ringraziamento per le sue risposte immediate.
            Non era mia intenzione infrangere le regole e per questo me ne scuso, ma lo stress dopo ore ad esaminare il suo sketch ed innumerevoli tentativi ho dimenticato le regole. Ho esaminato attentamente e con molto entusiasmo il suo Sketch e credo di averne capito il funzionamento, ma il problema è nato nell’utilizzare un Led RGB (o striscia Led RGB) per i cicli e un Led bianco per le stelle, con i codici colore RGB sono riuscito a creare l’effetto dell’alba(255,100,0) il giorno(255.255.255), tramonto(255,50,0) e notte(0,0,255) e il Led bianco per le stelle, tutto funzionante alla grande;Il FADE mi riesce con i normali Led, ma non riesco a farlo con le combinazioni dei colori rgb( non c’è sincronismo ); L’altro problema sta nel Led bianco(stella) volendo inserire il tremolio con il blink nel ciclo notte, il loop lo esegue con l’effetto notte e poi con il blink o non esce( penso sia a causa del Delay);
            La ringrazio per un suo eventuale contributo.

          1. Ciao Giacomo,
            comprendo la stanchezza e la frustrazione dopo ore su uno sketch. Se può esserti di conforto quando mi trovo in quelle situazioni, che capitano anche a me, mi ripeto: è un hobby, è solo un hobby l’ho scelto per divertirmi e non per fustigarmi mentalmente 🙂
            Dopo la premessa, ora mi è più chiaro ciò che hai fatto.
            1) per ottenere il fade sui led che hai controllato con 3 segnali pwm ( RGB ) devi usare un 4° pwm che controlla il pin comune ( sia esso positivo o negativo ) in modo che sia lui a imporre il fade;
            2) non ho compreso cosa accade.

            • giacomo on 26 novembre 2016 at 08:32

            Salve, riguardo al tempo ne ho abbastanza in quanto sono in pensione e quindi mi sono dedicato a questo hobby per impiegare il tempo a disposizione, pertanto più trovo difficolta e meglio passo il tempo, per il suo contributo mi siedo meglio:
            1) ho una striscia led collegata ai 12 volt esterni da usare per il ciclo alba, giorno, tramonto e notte, e fin qui tutto funziona ottenendo, con la miscellanea,i colori delle fasi, quello che non riesco ad ottenere bene e la dissolvenza tra le vaie fasi.
            2) ho dei led bianchi da 10mm da usare per il tremolio stelle con la fibra ottica nella sola fase notte, non riesco ad ottenere lo sfarfallio in quanto rimangono accese fisse.
            Nello scusarmi per la mia invadenza, La saluto

          2. Ciao Giacomo,
            1) ho già risposto nel precedente commento, la risposta sarebbe la medesima.
            2) se ciò che non vedi è lo sfarfallio potrebbe dipendere dalla velocità di risposta del led, prova ad aumentare i delay in modo da vedere un lampeggio ( es: 1000 ) e poi man mano lo diminuisci fino a rendere l’effetto desiderato.

    • Lorenzo on 6 dicembre 2016 at 14:50
    • Reply

    ciao, vorrei utilizzare il tuo progetto riportandolo sulle 24h giornaliere. cosa devo modificare? ho già calcolato i tempi in proporzione alla tabella da te pubblicata, ma non cambia nulla!!!!!
    Grazie e complimenti per il progetto.

    1. Ciao Lorenzo,
      non sono certo di aver compreso, tu vuoi che l’intero ciclo duri 24ore ?
      Hai già ricalcolato ed applicato i tempi nello sketch ?

    • Diego on 9 dicembre 2016 at 12:38
    • Reply

    Ciao Mauro, sto realizzando una centralina per il presepe della parrocchia, e sto utilizzando il tuo sketch per mancanza di tempo utile, posso interfacciare le uscite con un modulo relay a 8 canali o perderei l’effetto di dissolvenza? grazie in anticipo e buone feste!

    1. Ciao Diego,
      perdi l’effetto dissolvenza.

    • italo on 16 dicembre 2016 at 18:52
    • Reply

    GRAZIE!!! bellissimo il tutto.
    Ho provveduto a fare un taglia ed incolla e funziona.
    Gradirei sapere se e possibile inserire anche della musica che vada a tempo con le luci, per esempio, durante il giorno ascoltare del caos (mercato) e durante la notte un silenzio tombale.
    Per fare ciò cosa si dovrebbe montare?
    Grazie 1000 e BUONE FESTE!

    1. Ciao Italo,
      esistono dei piccoli riproduttori mp3 controllabili via seriale, anche io ne sto provando uno e spero nei prossimi giorni di poter pubblicare un tutorial su come utilizzarlo.

        • italo on 19 dicembre 2016 at 16:15
        • Reply

        Grazie Mauro. Aspetto tue notizie.

        1. Ciao Italo,
          ti consiglio di verificare sul blog la pubblicazione del mio articolo, considera che on posso assicurarti di riuscire a scrivere il mio articolo a breve.

    2. Ciao Italo,
      esistono dei piccoli riproduttori mp3 controllabili via seriale, anche io ne sto provando uno e spero nei prossimi giorni di poter pubblicare un tutorial su come utilizzarlo.

    • Gian Mario Longhi on 30 dicembre 2016 at 17:51
    • Reply

    ciao Mauro, Grazie mille per il tutorial io e mio figlio stiamo imparando e lo stiamo facendo grazie ai tuoi tutorial. Il tutto funziona ma a differenza del tuo video l’intensità luminosa dei nostri led è più basa di quella che si vede nel tuo video. o meglio se provo il led singolarmente l’intensità è giusta ma montato il tutto l’intensità dei led è più bassa. perchè?
    Grazie

    1. Ciao Gian Mario,
      potrebbe essere legata all’alimentazione, come stai alimentando la centralina alba tramonto ?

    • paolo on 28 maggio 2017 at 19:56
    • Reply

    Eg. sig. Mauro,
    Le riscrivo perché la mia inesperienza mi spinge a chiederLe aiuto. Come precedentemente detto, sono interessato alla centralina Alba….Tramonto, e ho copiato pari pari lo sketch che Lei ha pubblicato e incollato
    in una pagina nuova di Arduino (visto che non è previsto il download. Risultato? una infinità di righe di errore contenenti: stray ‘\240’ in progress….Come vede la mia ignoranza è enorme, e quindi non riesco a risolvere il problema, Sono certo che mi sfugge qualcosa, e che forse lo sketch non andava copiato e incollato brutalmente,
    ma fino ad ora ho solo lavorato con progetti il cui Arduino Code era disponibile in download. Può aiutarmi?
    Grazie e complimenti.
    Paolo Izzo

    1. Ciao Paolo,
      solitamente il copia e incolla dei miei sketch è sufficiente.
      Prova con un browser differente.

    • paolo on 30 maggio 2017 at 19:50
    • Reply

    buonasera sig. Mauro,
    innanzitutto, visto su come tratta i suoi argomenti, mi sarebbe piaciuto averla come insegnante, ma ormai
    ……….; mi perdoni quindi l’ignoranza e vorrei chiederLe come mai, se copio il suo sketch e lo incollo nell’IDE di Arduino, mi compare al termine della compilazione sempre lo stesso errore: stray ‘\240’ in program. Sono certo che mi sfugge qualcosa. Può cortesemente aiutarmi? Grazie e complimenti.
    Paolo Izzo

      • paolo on 30 maggio 2017 at 20:13
      • Reply

      Che Le devo dire sig. Mauro, ho provato con Fire Fox e funziona il tutto egregiamente. D’altronde non poteva essere diversamente. Sono quelle cose, come l’uovo di Colombo, che non ci pensi, e quando lo sai ti fa rabbia.
      Ne approfitto per chiederle: io vorrei applicare il progetto ad un acquario di cui ho le lampade led, i driver calcolati per il loro assorbimento (come vede ho cominciato dalla fine…) per cui mi farebbe gola, allungare i tempi e renderli reali per l’intero ciclo di 24h. E’ fattibile? Magari applicando tensione ad Arduino tramite un timer elettrico (tipo orologio per le luci delle scale, o applicando un modulo con clock ad Arduino?
      Grazie di nuovo.

      1. Ciao Paolo,
        bene per il browser.
        Per i tempi ti consiglierei di utilizzare ed integrare un modulo RTC in quanto su tempi così lunghi ( 24H ) fidarsi del solo timer di arduino è un azzardo.

    1. Ciao Paolo,
      hai provato a cambiare browser?
      Che browser stai utilizzando? Te lo chiedo anche per capire se posso fare qualcosa per migliorare il blog.

    • Giuseppe on 1 luglio 2017 at 07:28
    • Reply

    Mauro buongiorno,
    sono un ragazzo di 77 anni che da poco si è avvicinato ad Arduino sviluppando a titolo di apprendimento alcuni sketch presenti nella libreria. Poi mi sono imbattuto nel tuo progetto “Centralina alba e tramonto con Arduino” che mi ha affascinato come obbiettivo da realizzare per il prossimo Natale. Ho realizzato lo schema, ho caricato il listato del programma ma purtroppo non funziona la compilazione con il seguente messaggio di errore:
    stray ‘\303’ in program
    exit status 1
    stray ‘\303’ in program
    Ho cercato di capire dove avessi commesso l’errore controllando passo passo il listato ma invano. Vedendo i commenti che ricevi da quelli che ti scrivono, io sono ben lontano nell’apprendimento. Mi puoi aiutare a cogliere questa soddisfazione?
    Il mio sistema operativo è Windows 10 a 64 bit.
    Grazie.

    1. Ciao Giuseppe,
      dal messaggio di errore non riesco a comprendere l’errore. Puoi incollarmi tutto l’errore dalla prima linea ? Ipotizzo che ti manchi qualche libreria tipo la RTClib ma non ne posso essere certo, sto provando a prevedere con la mia sfera di cristallo 🙂

    • Giuseppe on 3 luglio 2017 at 18:01
    • Reply

    Arduino:1.8.1 (Windows 10), Scheda:”Arduino/Genuino Uno”

    Centralina_alba_tramonto_con_Arduino:2: error: stray ‘\303’ in program

    nello sketch tutta la giornata è riprodotta in un minuto

    ^

    Centralina_alba_tramonto_con_Arduino:2: error: stray ‘\250’ in program

    Centralina_alba_tramonto_con_Arduino:4: error: missing terminating ‘ character

    4194 ms per l’alba

    ^

    Centralina_alba_tramonto_con_Arduino:1: error: ‘Lo’ does not name a type

    Lo sketch della centralina alba tramonto arduno

    ^

    Z:\Documenti\Titolario\Hobbistica\Elettronica\Arduino\Sketch\Centralina_alba_tramonto_con_Arduino\Centralina_alba_tramonto_con_Arduino.ino: In function ‘void loop()’:

    Centralina_alba_tramonto_con_Arduino:58: error: ‘oneminrome’ was not declared in this scope

    timeCurr = oneminrome[curr];

    ^

    exit status 1
    stray ‘\303’ in program

    Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
    “Mostra un output dettagliato durante la compilazione”
    in “File -> Impostazioni”
    Arduino:1.8.1 (Windows 10), Scheda:”Arduino/Genuino Uno”

    1. Ciao Giuseppe,
      sembra tu abbia copiato anche le righe di descrizione prima dello sketch, lo capisci da: “nello sketch tutta la giornata è riprodotta in un minuto” che è una delle descrizioni. Lo sketch è solo quello che inizia alla linea 01 e termina alla linea 124.

    • Giuseppe on 5 luglio 2017 at 08:41
    • Reply

    Mauro è vero! Ora la compilazione è OK. Grazie per la cortesia.

    1. Bene Giuseppe, sono contento del tuo successo

    • Giuseppe on 6 luglio 2017 at 06:13
    • Reply

    Stamane mi sono apprestato al caricamento del programma che non è riuscito con questo messaggio di errore :
    “Problema di caricamento sulla scheda. Guarda http://www.arduino.cc/en/Guide/Troubleshooting#upload per suggerimenti”
    Ho provato ad esaminare il suggerimento, ma la cosa è alquanto complessa per le mie conoscenze. Magari disponi della spiegazione?
    Grazie.

    1. Ciao Giuseppe,
      hai collegato la scheda arduino ? hai selezionato la scheda e la porta nell’IDE ?
      Se una delle due cose ti manca ti consiglio di provare a leggere il mio corso arduino gratuito on-line per avere le basi necessarie a realizzare i tuoi progetti.

    • Giuseppe on 9 luglio 2017 at 10:24
    • Reply

    Hai ragione! Mi era già successo! Ho tratto la seguente conclusione, ogni volta che Windows 10 si aggiorna per faccende sue, Arduino che prima funzionava, dopo non funziona più. Quando succedeva, provvedevo a disinstallare Arduino e dopo averlo di nuovo installato, il tutto tornava a funzionare. Ho ripetuto anche stavolta la procedura ed il tutto funziona correttamente, il listato si carica ed il programma si svolge correttamente. Ha una logica?
    Comunque seguirò il tuo consiglio e leggerò attentamente il tuo corso online.
    Sempre ti ringrazio per la cortesia.

    1. Ciao Giuseppe,
      sarebbe da verificare con il forum arduino se ad altri capita e come risolvono.

    • Riccardo on 13 luglio 2017 at 19:55
    • Reply

    Ciao Mauro!
    Complimenti per il progetto, davvero molto bello. Avrei un problema, con questo sketch vorrei ricreare tutte le albe, giorni, tramonti e notti di una anno ( per un progetto più grande) che ovviamente cambiano continuamente. Potresti dirmi come modificare il codice affinche una volta terminato il ciclo di un giorno inizi il successivo che ha dati differenti?

    1. Ciao Riccardo,
      è alquanto complesso quello che desideri fare e necessita di molte e chiare info per defiire delle logiche di calcolo ed applicative alla soluzione come ad esempio, la prima che mi viene in mente, quanti sono i giorni considerati varianti prima che il codice sia ciclicamente ripetuto?
      Quale relazione esiste tra le variazioni temporali da un gioro al successivo? Le variazioni sono costanti o seguono altre regole matematiche? le variazioni tra le fasi sono uguali ( ossia alba gg 1 = 1h, tramonto gg 1 = 30m, alba gg 2 = 1.30, tramonto gg 2 = ?? ) ?

      Questo solo per iniziare, se ho compreso quello che vuoi fare, poi c’è da eseguire tutti i calcoli e le formule di relazione, in parte le ho descritte nei miei articoli.
      Considera che solo per organizzare la logica di questo articolo ci sono volute 2 settimane di studio e test.

        • Riccardo on 14 luglio 2017 at 22:29
        • Reply

        Si certo…forse dovrò lavorarci un po’ su. Volevo chiederti altre due cose. La prima: ho voluto utilizzare il tuo schema ma senza le stelle, e ho notato che dorante la dissolvenza uno dei led (quello della notte) si mette a lampeggiare invece che dissolversi in modo uniforme anche cambiano il pin. Come posso risolverlo? La seconda invece riguarda la durata della dissolvenza. Come ho già scritto nel precedente commento, vorrei appunto ricreare la durata di un giorno ( magari posticiperò ciò che riguardala durata dei singoli per quando sarò più esperto ) e ovviamente la durata di un tramonto o un’alba è molto più lunga rispetto a quella riportata nello sketch! Potresti consigliarmi un modo per allungare quindi la dissolvenza?
        Grazie mille per il tuo tempo!

        Riccardo

        1. Ciao Riccardo,
          per la prima potrebbe dipendere dal tipo di led. I led hanno una componente fisica che emette la luce che può reagire in modo non lineare alla variazione lineare del pwm. Puoi leggere i miei articoli sul lampdario a fibre ottiche in cui avevo decsritto il fenomeno.
          Per la seconda devi calcolarteli come descritto in questi articoli e puoi allungarli come preferisci.

    • giuseppe traversa on 16 settembre 2017 at 13:06
    • Reply

    Buongiorno Mauro,
    sono ben due anni che uso il tuo sketch ‘centralina alba tramonto’ con ottimo risultato e gioia dei miei nipotini.Ogni ogni anno ho aggiunto alcune modifiche tipo durante il giorno girano le pale di un mulino o la cascata,il tutto inserendo dei rele comandate da arduino. Quest’anno ho comprato DFPlayer Mini SKU:DFR0299 e vorrei sincronizzare la musica per ogni fase.Esempio durante l’alba far suonare il canto del gallo mentre il giorno essendo il tempo più lungo faccio suonare “tu scendi dalle stelle.Purtroppo il sincronismo non avviene, per ogni ciclo viene sfasato il tempo.Non so come risolvere questo problema ,forse dipende dal delay che c’è per fase.Vorrei un suggerimento come correggere il tutto.
    Grazie di tutto

    1. Ciao Giuseppe,
      sono contento del tuo risultato e della felicità che dona.
      In merito al DFPlayer mi sono ripromesso tante volte di acquistarne uno e dedicargli qualche articolo ma ad oggi non l’ho ancora fatto.
      Purtroppo non sono così bravo da rispondere su progetti che non ho ancora fatto, se il problema è il delay puoi variarlo come preferisci.

    • giuseppe traversa on 18 settembre 2017 at 17:28
    • Reply

    Comunque penso a un problema sofware e non al dfpalyer poichè io non sono tanto bravo con il linguaccio C++,mentre tu sei un professore ,potresti dare un consiglio al mio progettino ti allego una parte dello sketch

    if ( curr == 0 ) {
    Serial.print(“Fase: “); Serial.println(“DOWN”);
    mp3_play(24);
    delay(2000);
    mp3_play(17);
    mp3_play(16);
    delay(2000);
    for ( int i=0; i<52; i++) {
    analogWrite(pin_down, fade[(51-i)]);
    analogWrite(pin_sun, 0 );
    analogWrite(pin_sunset, 0 );
    analogWrite(pin_moon, 0 );
    analogWrite(pin_starsA, 0 );
    analogWrite(pin_starsB, 0 );
    digitalWrite (RELAY_PIN4,HIGH);
    digitalWrite (RELAY_PIN3,HIGH);
    digitalWrite (RELAY_PIN2,LOW);
    delay( timeStep );

    }
    timeStepOld = timeStep;

    }
    Ti ringrazio se puoi consigliarmi o se c'è un link in cui posso attingere qualche informazione

    1. Ciao Giuseppe,
      premesso, come anticipato, che non sono in grado di verificare uno sketch senza provarlo e non posso provarlo senza avere il componente che indichi, non capisco cosa volessi accadesse e cosa accade dallo sketch, ci sono modifiche che non conosco e non sono chiare le intenzioni, ad esempio: cosa significa:
      mp3_play(24);
      delay(2000);
      mp3_play(17);
      mp3_play(16);
      delay(2000);
      e perché si trova prima del for ?
      Cosa controllano questi relay:

      digitalWrite (RELAY_PIN4,HIGH);
      digitalWrite (RELAY_PIN3,HIGH);
      digitalWrite (RELAY_PIN2,LOW);

      e perché sono nel for ?
      che ciclo è quello che riporti?
      Nel mio sketch la fase collegata al curr == 0 prevede:

      analogWrite(pin_moon, fade[i] );
      analogWrite(pin_starsA, fade[i] );
      analogWrite(pin_starsB, fade[i] );

      che nel tuo caso sono stati variati a 0.

      Penso sia meglio attendere i miei test o fare altri test in autonomia.

    • giuseppe traversa on 19 settembre 2017 at 16:20
    • Reply

    Grazie per la risposta,
    il ciclo inizia direttamente con l’alba ,mp3_(24) mp3_(17),mp3(16) sono i suoni del gallo della pecora ,mentre il relè comandano la pompa della cascata il movimento dei re magi ecc.
    Attenderò con pazienza i tuoi test.

    1. Ciao Giuseppe,
      allora è corretto che parta prima il 24 e dopo 2 secondi il 17 ed il 16 per altri due secondi .. al termine di questi suoni inizia l’albeggiare.

    • Riccardo on 25 settembre 2017 at 18:01
    • Reply

    Ciao Mauro ti scrivo di nuovo. Vorrei far durare questo ciclo 24h ma mi sono accorto che nella funzione int oneminrome[4] = { 4194,22958,4195,28651 }; superando i 32000 millisecondi circa i led rimangono costantemente accesi. Sapresti dirmi il perchè? Affinchè il ciclo duri 24h consigli di usare un modulo rtc?
    Grazie in anticipo.
    Riccardo

    1. Ciao Riccardo,
      un ciclo così lungo richiede tipi di variabili maggiori, dovrai ridefinire il tipo di “oneminrome” in modo da poter inserire un valore di 24*60*60000 = 86400000 millisecondi.
      Io al tuo posto prevede un RTC che oltre ad essere più preciso, semplifica lo sketch, vedi centralina irrigazione o orto, ed in caso di reset o mancanza di alimentazione riprende all’orario e ciclo corretto.

        • Riccardo on 26 settembre 2017 at 23:18
        • Reply

        Ok grazie!

    • Alessandro on 18 giugno 2018 at 18:19
    • Reply

    ciao, intanto scusa il disturbo e se riapro una discussione gia chiusa, vista la tua ottima conoscenza in materia volevo chiederti dei consigli per quanto riguarda l’inserimento di un rtc ds1307 al progetto in quanto, prendendo spunto dal tuo programma sto costruendo una plafoniera per acquario, per quanto riguarda il “modo” in cui si sviluppa il tuo programma calza a pennello per il mio scopo l’unica pecca i tempi. come sappiamo arduino conta ma non tanto bene per questo vorrei inserire l’rtc per avere un accuratezza migliore. sapresti consigliarmi qualche passaggio o progetto semplice da dove poter prendere sunto e implementare? non mi occorrono tasti per l’inserimento della data o dell’ora la imposto direttamente prima di caricare il programma quindi una cosa molto soft.
    grazie per la disponibilità
    e complimenti ancora per il tuo blog!!!

    1. Ciao Alessandro,
      nessuna discussione o articolo su questo blog è mai chiusa anzi ogni spunto e idea è ben accetta.
      Ti consiglio di leggere, su questo blog, come collegare e un RTC1307 o un DS3231 al circuito e le librerie per leggere l’RTC che leggi.
      L’implementazione, una volta compreso come funziona un RTC e come funziona questo progetto sarà molto semplice in quanto non dovrai eseguire alcun tipo di calcolo.
      Puoi anche leggere e studiare gli articoli dedicati alle centraline di irrigazione che fanno già uso dell’RTC per attivare dei relay.

  1. […] ci sono grandi differenze con lo sketch mostrato in questo articolo, ecco le uniche […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.