«

»

Dic 24

Stampa Articolo

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 !!


Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/centralina-alba-tramonto-arduino-sketch.html

72 comments

1 ping

Vai al modulo dei commenti

  1. giuseppe traversa

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

    1. Mauro Alfieri

      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

  2. andrea

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

    1. Mauro Alfieri

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

  3. soft

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

    1. Mauro Alfieri

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

  4. davide

    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. Mauro Alfieri

      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.

    2. Lino

      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. Mauro Alfieri

        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.

  5. Davide

    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. Mauro Alfieri

      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.

  6. Stefano

    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. Mauro Alfieri

      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.

  7. Vale

    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. Mauro Alfieri

      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.

      1. Vale

        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. Mauro Alfieri

          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.

  8. Lino

    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. Mauro Alfieri

      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.

  9. Pietro

    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. Mauro Alfieri

      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.

      1. Pietro

        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. Mauro Alfieri

          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…

  10. Giacomo

    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. Mauro Alfieri

      Ciao Giacomo,
      a quali codici ti riferisci?

      1. giacomo

        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. Mauro Alfieri

          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.

          1. giacomo

            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.

          2. Mauro Alfieri

            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.

          3. giacomo

            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

          4. Mauro Alfieri

            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.

  11. Lorenzo

    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. Mauro Alfieri

      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 ?

  12. Diego

    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. Mauro Alfieri

      Ciao Diego,
      perdi l’effetto dissolvenza.

  13. italo

    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. Mauro Alfieri

      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.

      1. italo

        Grazie Mauro. Aspetto tue notizie.

        1. Mauro Alfieri

          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. Mauro Alfieri

      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.

  14. Gian Mario Longhi

    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. Mauro Alfieri

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

  15. paolo

    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. Mauro Alfieri

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

  16. paolo

    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

    1. paolo

      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. Mauro Alfieri

        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.

    2. Mauro Alfieri

      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.

  17. Giuseppe

    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. Mauro Alfieri

      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 🙂

  18. Giuseppe

    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. Mauro Alfieri

      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.

  19. Giuseppe

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

    1. Mauro Alfieri

      Bene Giuseppe, sono contento del tuo successo

  20. Giuseppe

    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. Mauro Alfieri

      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.

  21. Giuseppe

    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. Mauro Alfieri

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

  22. Riccardo

    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. Mauro Alfieri

      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.

      1. Riccardo

        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. Mauro Alfieri

          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.

  23. giuseppe traversa

    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. Mauro Alfieri

      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.

  24. giuseppe traversa

    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. Mauro Alfieri

      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.

  25. giuseppe traversa

    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. Mauro Alfieri

      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.

  26. Riccardo

    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. Mauro Alfieri

      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.

      1. Riccardo

        Ok grazie!

  1. Centralina alba tramonto arduino potenziometro Mauro Alfieri

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>