Centralina alba tramonto arduino potenziometro – quarta parte

Eccoci alla quarta parte per la realizzazione della centralina alba tramonto arduino potenziometro.

centralina alba tramonto arduino potenziometro lato

La prima evoluzione che puoi aggiungere alla centralina è la possibilità di definire la durata di tutto il ciclo alba-giorno-tramonto-notte (ciclo giornaliero ) in modo che duri da 1 minuto fino a 30 minuti.

In pratica potresti decidere di tenere il ciclo giornaliero della centralina alba tramonto arduino potenziometro fisso sui 30 minuto per riprodurre un effetto realistico, calmo, rilassante del presepe e di accelerare i tempi in occasione della visita di parenti e amici per mostrare quanto sia realistico il tuo presepe senza costringerli ad attendere 30 minuti per osservare l’intero effetto.

Come funzione la centralina alba tramonto arduino potenziometro

Nel primo articolo dedicato alla centralina natalizia hai letto come sono calcolati i tempi di durata di ciascuna fase del ciclo giornaliero.

Hai anche visto come ricavare la seguente tabella ad esempio per Roma il 25 dicembre 2014:

centralina alba tramonto arduino excel Roma 25dic2014 cicli

Tabella 1

a questo punto non ti resta che impostare questi tempi nella centralina alba tramonto arduino potenziometro.

Prima di passare allo sketch osserva che i valori riportati sono tutti multipli della prima serie calcolata per cui noti che l’alba dura 4194 millisecondi se tutto il ciclo giornaliero dura 1 min e dura 8389 millisecondi se il ciclo dura 2 min infatti (4194 x 2) + 1 = 8389.

Segue che tutti i valori successivi possono essere calcolati con una moltiplicazione.

Collegamenti della centralina alba tramonto arduino

I precedenti collegamenti letti in questo articolo restano validi e devi solo aggiungere un potenziometro:

centralina alba tramonto arduino shcema pot

la scelta del potenziometro è dettata dalla facilità sia dei collegamenti sia dell’utilizzo in quanto puoi dividere la scala del potenziometro in 8 spicchi ciascuno dei quali rappresenta un fattore di motiplicazione da applicare al calcolo del ciclo giornaliero:

centralina alba tramonto arduino potenziometro

 

 

ad ogni zona colorata corrisponde un valore temporale in minuti ed un range numerico letto sul potenziometro. Consiglio di stampare e applicare la scala sotto al tuo potenziometro per ottenere la leggenda di regolazione.

Infine i collegamenti del potenziometro visti direttamente sul progetto:

centralina alba tramonto arduino potenziometro pin

in particolare i due stremi del potenziometro sono collegati al pin +5v e Gnd ed il pin centrale al pin A0 di arduino:

centralina alba tramonto arduino potenziometro

Lo sketch della centralina alba-tramonto

ed eccolo sketch modificato per l’uso con la centralina alba tramonto arduino potenziometro:

/**********************************************************
 * Centralina Alba-Tramonto per presepe
 *
 * Created on 12 december 2014
 * Modified on 25 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

#define pin_pot    A0

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 );
  pinMode( pin_pot,   INPUT );

  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];

  int pot = analogRead( pin_pot ); 
  if ( 128 <= pot && pot <= 255 )  { timeCurr = (timeCurr * 2 );  }  // two min
  if ( 256 <= pot && pot <= 382 )  { timeCurr = (timeCurr * 5 );  }  // five min
  if ( 383 <= pot && pot <= 510 )  { timeCurr = (timeCurr * 10 ); }  // ten min
  if ( 511 <= pot && pot <= 637 )  { timeCurr = (timeCurr * 15 ); }  // fifteen min
  if ( 638 <= pot && pot <= 765 )  { timeCurr = (timeCurr * 20 ); }  // twenty min
  if ( 766 <= pot && pot <= 892 )  { timeCurr = (timeCurr * 25 ); }  // twenty five min
  if ( 893 <= pot && pot <= 1023 ) { timeCurr = (timeCurr * 30 ); }  // thirty min
  timeStep = (timeCurr/52);
  
  //Serial.print("Selettore: "); Serial.println(pot);
  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; }
  
}

non ci sono grandi differenze con lo sketch mostrato in questo articolo, ecco le uniche differenze:

linea 019: definisci il pin A0 come pin_pot a cui hai connesso il potenziometro;

linea 042: imposta il pin_pot in modalità INPUT;

int pot = analogRead( pin_pot ); 
if ( 128 <= pot && pot <= 255 )  { timeCurr = (timeCurr * 2 );  }
if ( 256 <= pot && pot <= 382 )  { timeCurr = (timeCurr * 5 );  }
if ( 383 <= pot && pot <= 510 )  { timeCurr = (timeCurr * 10 ); }
if ( 511 <= pot && pot <= 637 )  { timeCurr = (timeCurr * 15 ); }
if ( 638 <= pot && pot <= 765 )  { timeCurr = (timeCurr * 20 ); }
if ( 766 <= pot && pot <= 892 )  { timeCurr = (timeCurr * 25 ); }
if ( 893 <= pot && pot <= 1023 ) { timeCurr = (timeCurr * 30 ); }

linea 057: leggi il valore del potenziometro e imposta la variabile pot con tale valore, attenzione la lettura del potenziometro avviene solo all’inizio di ogni ciclo di loop() per cui superata questa fase non puoi modificare la durata prima della conclusione di tutto il ciclo giornaliero stesso;

linee 058-064: imposta, per ogni range definito delle tabelle precedenti, un valore di timeCurr moltiplicato il numero di minuti in cui il ciclo vuoi che duri;

infine la linea 065: resta identica a quella che già ho commentato nello sketch che già hai analizzato ed è il cuore del nuovo calcolo dei tempi in quanto divide il timeCurr per 52 e da inizio al ciclo di alba-giorno-tramonto-notte delle linee successive.

Buona realizzazione !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/centralina-alba-tramonto-arduino-potenziometro-quarta-parte.html

32 commenti

Vai al modulo dei commenti

    • emanuele il 21 Gennaio 2015 alle 23:21
    • Rispondi

    Spettacolare e semplice da realizzare, al prossimo presepe lo utilizzerà! !!….

    Ma posso utilizzare anche un arduino mini?

    1. Ciao Emanuele,
      si, il progetto è talmente semplice che puoi.
      Ricordati solo che le uscite arduino non riescono a far funzionare led come questi o più potenti per molto tempo senza danneggiarsi, usa un circuito o una shield per adattare il PWm al controllo dei led.

        • Fabio il 2 Marzo 2016 alle 19:44
        • Rispondi

        Bellissimo articolo, complimenti.
        Posso farti una domanda da perfetto inesperto?
        Come posso far funzionare dei led senza danneggiare Arduino? Ho trovato degli shield con relais, ma così perdo le dissolvenze?
        Non mi intendo di elettronica, c’è qualcosa che possa facilmente usare per Arduino?
        Grazie

        1. Ciao Fabio,
          dipende dai led che stai usando, se sono led tipo faretti a 12v esistono delle shield driver per led, qualcuna l’ho recensita ed usata anche io nel blog.

        2. Ciao Fabio,
          dipende dai led che stai usando, se sono led tipo faretti a 12v esistono delle shield driver per led, qualcuna l’ho recensita ed usata anche io nel blog.

    • Roberto il 29 Aprile 2015 alle 12:40
    • Rispondi

    Buongiorno Mauro, ho visto il progetto per la realizzazione della centralina e vorrei realizzarlo, poi con questo upgrade di un potenziometro la gestione dei tempi è ancor più versatile…

    Intanto complimenti e grazie per mettere a disposizione le sue competenze. Evviva le piattaforme OPEN SOURCE, ma soprattutto chi come lei permette l’utilizzo di queste, anche a chi non sarebbe in grado di sfruttarle come me…

    Vengo alla domanda:

    Mi piacerebbe utilizzare 4 uscite digitali, per esempio la 2,4,7,8, per comandare alcune opzioni aggiuntive, in corrispondenza delle fasi alba giorno tramonto e notte. Però non saprei proprio come modificare il programma. L’idea ce l’ho, ma mi mancano le competenze 🙂

    Provo a spiegarmi meglio:

    -uscita 2 (ci collegherei il suono di un gallo), vorrei fosse ON, per tutto il tempo in cui l’uscita 3 (alba) è attiva, quindi tutto il tempo di salita e discesa del pwm.

    -uscita 4 (ci collegherei eventuali movimenti ancora da ideare), vorrei che fosse ON, per tutto il tempo in cui l’uscita 5 (giorno) è al suo massimo, quindi esclusi i tempi di salita e discesa del pwm.

    -uscita 7 (ci collegherei l’illuminazione delle case), vorrei che fosse ON, per tutto il tempo in cui l’uscita 6 (tramonto) è attiva, quindi tutto il tempo di salita e discesa del pwm.

    -uscita 8 (ci collegherei un neon Wood più l’illuminazione delle case), vorrei che fosse ON, per tutto il tempo in cui l’uscita 9 (notte) è al suo massimo, quindi esclusi i tempi di salita e discesa del pwm.

    Mi sono dilungato troppo? Ho fatto una richiesta assurda? Spero proprio di no e spero che mi possa aiutare scrivendomi le righe aggiuntive di programma, che sarebbero necessarie.

    Grazie mille

    1. Ciao Roberto,
      il blog è nato proprio con l’idea di rilasciare gli sketch per insegnare a ciascuno, con buona volontà, a fare le modifiche che preferisce.
      Ti invito a leggere le mie lezioni nel corso arduino gratuito on-line e la descrizione di questo sketch per imparare a modificare da solo lo sketch.
      Se hai bisogno di chiarimenti sugli articoli che leggi, usa pure i commenti.
      Se non ci riesci a fare le modifiche che desideri posso eseguire io le modifiche su commissione.

        • Roberto il 30 Aprile 2015 alle 08:46
        • Rispondi

        Ciao Mauro, purtroppo sono a ZERO come nozioni di informatica… Avevo anche comprato un libro per imparare a programmare arduino… ma nulla più oltre la teoria… ho provato anche ad utilizzare alcuni programmini free con interfaccia grafica del tipo a blocchi… ma niente da fare!
        Non appena le cose si complicano un pò mi areno. L’unica cosa che ho costruito di mio è stato un temporizzatore che accendesse e spegnesse ciclicamente una resistenza per scaldare la birra. LAVORONE! Tra l’altro, ormai, il tempo da dedicarci è sempre meno con un bimbo piccolo che sta screscendo…

        Penso che farò prima ad utilizzare lo sketch così com’è, visto che è collaudato e sicuro ed aggiungervi un qualche sistema hardware tipo trigger di smith o flip flop per realizzare quello che vorrei.

        Grazie lo stesso per la risposta.
        Buona giornata
        Roberto

        1. Ciao Roberto,
          ti capisco sopratutto per il tempo .. anche io sono nella tua stessa condizione.

    • Emanuele il 29 Aprile 2015 alle 21:58
    • Rispondi

    Ciao mauro

    complimenti per l’effetto ottenuto!!…era proprio quello che cercavo!!
    ora ti chiedo se si riesce ad effettuare il ciclo di alba sole tramonto e luna con un led RGB e le due stelle con led singoli come sono nel tuo progetto.

    Ciao e grazie

    1. Ciao Emanuele,
      penso di si, dipende molto da che tipo di effetto vuoi realizzare e come colleghi il led RGB

  1. Ciao Mauro dopo tanto tempo ho ripreso a frequentare il tuo blob e vorrei farti una domanda : perchè quando parte il ciclo si accendono sia la funzione notte che la funzione alba quasi contemporaneamente, dopo il ciclo è normale.
    Grazie e complimenti

    1. Ciao Giuseppe,
      sono contento che tu abbia ripreso i tuoi progetti con arduino.
      Se leggi gli articoli correlati ho descritto in modo dettagliato il motivo di quello che mi chiedi, è un esercizio che ho voluto fare per rendere l’effetto più realistico possibile.
      Spiegarlo in poche righe è riduttivo.

  2. Grazie

    • giuseppe traversa il 16 Settembre 2015 alle 18:16
    • Rispondi

    Ciao Mauro oggi ho iniziato ad assemlblare il circuito della centralina utilizzando delle strisce led di colori secondo le fasi .Ho utilizzato dei mosfet IRFZ44N , ho calcolato la resistenza da mettere tra il drail e le strisce di led (80 ohm) mentre tra il gate e il pin di arduino una resistenza di 2,2 kohm.
    Non funziona restano sempre accesi mentre il monitor seriale mi dice che le fasi si susseguono.
    Ho sbagliato il tipo di mosfet ? Ho provato a togliere le resistenze ma non succede niente,cioè i led restano accesi.
    Aiuto!!!!!!!!!!! se non finisco il circuito non posso iniziare la scenografia del presepe.
    Grazie

    1. Ciao Giuseppe,
      non ho mai utilizzato il mosfet IRFZ44N ( Channel N ) ed ho fatto qualche ricerca sul Web trovando circuiti realizzati da appassionati che usano anche una resistenza di pull-down sul drain da 10K.
      Cerca su internet “mosfet IRFZ44N arduino led” e troverai tra le immagini gli schemi di cui scrivo.

    • giuseppe traversa il 16 Settembre 2015 alle 18:32
    • Rispondi

    dimenticavo di dirti che l’assorbimento totale di tutte le strisce led è di 3 A.Naturalmente non restano accesi contemporaneamente al massimo ogni fase assorbe circa 0,80 A.
    Ciao Giuseppe

    1. Ciao Giuseppe,
      il tipo di mosfet deve essere dimensionato per gestire tali correnti.
      Il resto deve essere svolto dal circuito di alimentazione.

    • giuseppe traversa il 17 Settembre 2015 alle 16:15
    • Rispondi

    grazie per il tuo interessamento

    • Marco il 31 Ottobre 2015 alle 22:59
    • Rispondi

    Salve vorrei sapere come far funzionare il seguente sistema con lampade da 220v in modo tale da illuminare un presepe di 2metri x 60cm di profondità.
    Le stelle saranno una serie di led o lucine di albero mentre il resto tutte lampadine
    Grazie

    1. Ciao Marco,
      non ho esperienza con carichi a 220v tuttavia azzardo che ti occorreranno dei TRIAC in grado di indirizzare lampade a 200v.
      Prova a cercare uno schema sul web relativo a questo tipo di componenti.

    • Lino il 6 Agosto 2016 alle 22:42
    • Rispondi

    Ciao Mauro, ho letto e realizzato molti dei tuoi progetti adattandoli alle mie esigenze…
    prima di tutto ti faccio i miei complimenti sie per le cose che riesci a creare sia per la semplicità delle spiegazioni.
    ora veniamo al mio problema, vorrei creare una centralina alba tramonto con la possibilità di accensione una lampada a luminescenza (che simula l’alba, il tramonto e la luce lunare) e un neon (che simula il sole);
    tutto questo però dovrebbe seguire il ciclo naturale del tempo; mi daresti una mano?

    1. Ciao Lino, dal punto di vista del codice non dovrebbe differire molto dal progetto che ho realizzato, le maggiori differenze le avrai sulla parte elettronica per la quale devi studiare bene i componenti che possiedi e trovare circuiti adatti al tuo tipo di hardware.
      Io non possedendolo non saprei come aiutarti.
      Cerca driver o circuiti adatti al tuo scopo con controllo PWM.

    • Alberto Tricio il 24 Novembre 2016 alle 16:53
    • Rispondi

    ciao:
    Sono interessato a rendere il vostro circuito a mio presepe. ma non riesco a trovare il numero di ohm deve essere il potenziometro. Potrebbe essere così gentile da posare che fuori. un saluto e vi ringrazio molto.

    1. Ciao Alberto,
      uso un 10Kohm.

        • Alberto Tricio il 25 Novembre 2016 alle 16:03
        • Rispondi

        grazie mille

    • rudy il 16 Settembre 2017 alle 13:04
    • Rispondi

    ciao, io ho una strip led e vorriei creare alba e tramonto per creare luce in un terrario come posso fare???
    non ho nessuna esperienza 🙁

    1. Ciao Ruby,
      sul blog trovi tutto quello che ti serve a partire dal corso base arduino gratuito on-line.
      Ciò che non posso fornirti è la voglia di imparare e scoprire cose nuove, devi mettercela tu se vuoi realizzare il progetto.

      Cmq l’idea è interessante e potrei dedicargli qualche articolo nel periodo natalizio 🙂

    • Cristian il 7 Gennaio 2021 alle 22:24
    • Rispondi

    Buonasera/Ciao, sto’ seguendo con interesse i tuoi progetti e ti ammiro per la tua “semplicità” nel farmi capire cose inerenti Arduino che fino a poco tempo fa’ trovavo un po’ complicate.
    Premetto che sono alle primissime armi con Arduino;
    Ho realizzato la prima centralina alba-tramonto (adesso voglio implementarla col potenziometro – utilissimo) e fin qua nessun problema.

    La mia idea è di applicarla ad un presepe con piu’ serie di luci che ho gia’ (incandescenza 220v) … si pero’ per Natale 2021 …..

    Cercando informazioni, ho trovato molte informazioni su triac, optotriac, ecc.. e fin qua’ ci siamo.
    Il problema è cominciato quando mi sono imbattuto nello ZeroCrossing;
    Ok, mi sono informato ed ho capito (credo) cos’è, cosa serve e che benefici porta, ma mi chiedo in questo progetto specifico è utile inserire tale rilevazione e come?

    Sul lato 220v voglio orientarmi su moduli gia’ fatti per tale scopo con ingressi PWM 3,3-5v, optoisolati, triac con dissipatore e con la rilevazione ZeroCrossing da portare su un piedino certo di Arduino (li conoscerai sicuramente).

    Spero tu possa aiutarmi a risolvere i miei dubbi ed eventualmente di quale parti di codice integrare.

    Grazie

    Cristian

    1. Ciao Cristian,
      conoscevo la funzionalità dello ZeroCrossing ma ignoro i circuiti a cui ti riferisci per connessioni con Arduino.
      Al fine del progetto, penso che, i benefici introdotti siano limitati, tuttavia, scegliere tra TRIAC optoisolati con e senza ZeroCrossing, se non incide sul budget complessivo, sia da considerare una buona soluzione scegliere i secondi.

    • salvatore il 19 Dicembre 2021 alle 21:40
    • Rispondi

    Ciao Mauro ho visto il tuo progetto e lo sto realizzando , volevo chiederti i valori ed il tipo di potenziometro da collegare ,grazie per la risposta

    1. Ciao Salvatore,
      puoi usare un comune potenziometro da 10K, al massimo dovrai variare gli intervalli di tempo leggendo i valori del tuo potenziometro.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

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