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

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/centralina-alba-tramonto-arduino-potenziometro-quarta-parte.html

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.