«

»

Dic 29

Stampa Articolo

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

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

28 comments

Vai al modulo dei commenti

  1. emanuele

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

    Ma posso utilizzare anche un arduino mini?

    1. Mauro Alfieri

      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.

      1. Fabio

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

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

          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. Roberto

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

      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.

      1. Roberto

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

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

  3. Emanuele

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

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

  4. giuseppe

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

      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.

  5. giuseppe

    Grazie

  6. giuseppe traversa

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

      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.

  7. giuseppe traversa

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

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

  8. giuseppe traversa

    grazie per il tuo interessamento

  9. Marco

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

      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.

  10. Lino

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

      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.

  11. Alberto Tricio

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

      Ciao Alberto,
      uso un 10Kohm.

      1. Alberto Tricio

        grazie mille

  12. rudy

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

      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 🙂

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>