eridano bertini
Timer luci scale con PREAVVISO
Tutorials -
Martedì 21 Dicembre 2010 15:08
Scritto da eridano bertini

Abitando al quarto piano di  un palazzo di sette mi capita spesso di scendere le scale a piedi e spesso e volentieri di trovarmi a metà rampa con la luce che si spegne senza nessun preavviso.

Si rimane completamente al buio, con il rischio di mettere un piede in fallo e finire

a rotoloni le scale restanti.

Da qui la ‚Äúluminosa‚ÄĚ idea.

Perché non dotare i temporizzatori, di un sistema che avvertano quando il tempo sta per finire  ????

Non avremmo forse trovato il modo per evitare qualche dispiacere all’ignaro Condomino ??!!!!

 

Detto e fatto. Ho pensato… prendo il mio amico ARDUINO lo metto nella tromba delle scale, e lui con un fischio mi avverte che il tempo sta per finire.

Scherzi a parte, è vero che sono ricorso ad ARDUINO ma per realizzare un temporizzatore che avesse quello che agli altri manca. Il PREAVVISO.

Infatti con questo temporizzatore si può programmare a piacimento la durata del tempo totale e del PREAVVISO, che in sostanza consiste in questo.

Prima che il tempo finisca completamente, perciò alcuni secondi prima (circa 10) la luminosità  si abbassa e continua ad abbassarsi gradualmente e lentamente, fino al completo spegnimento, dando cosi il tempo al nostro Condomino di premunirsi e riarmare il timer senza rotolare per le scale

Il tempo totale è impostabile, con un dip switch a quattro contatti, fino ad un massimo di 15 minuti con  n.15 step di un minuto ciascuno.

Il tempo di PREAVVISO è impostato a 10 secondi, ma nessuno ci vieta di poterlo aumentare.

Il materiale impiegato è facilmente riscontrabile esaminando lo schema elettrico allegato:

 

Le resistenze tutte da ¬ľ di Watt, il condensatore da 100n poliestere.

Il TRIAC √® un 400V. con gli Amp. proporzionati al carico applicato e debitamente ‚Äúrefrigerato‚ÄĚ

sostituibile con un RELE’ Solid State opportunamente dimensionato.

 

Confrontare il codice con quello in formato .doc allegato ed eventualmente correggere.

CODICE

/*
TIMER LUCI SCALE
Realizzato da Eridano Bertini 2010
*/

#define out 11    //Pin PWM uscita
#define start 2   // pin dei pulsanti tutti in parallelo
#define set1 3    // Pin  Dip Switch
#define set2 4    // Pin  Dip Switch
#define set3 5    // Pin  Dip Switch
#define set4 6    // Pin  Dip Switch

int state = 0;    // variabile di stato 0 = Luci spente e 1 = Luci accese
int i =0;         //contatore
int time1=0;      //variabile dove conservo lo stato del Dip Switch
int time2=0;      //variabile dove conservo lo stato del Dip Switch
int time3=0;      //variabile dove conservo lo stato del Dip Switch
int time4=0;      //variabile dove conservo lo stato del Dip Switch
int sec =0;       //variabile per il conteggio dei secondi
int val = 0;      // variabile per conservare lo stato del  pin di input
int temp_totale =0;//variabile dove conservo la somma dei tempi

void setup()                   
{
Serial.begin(9600);       
pinMode(start, INPUT);    // setto il pin del pulsante come input
pinMode(set1, INPUT);     // setta il pin del Dip come input
pinMode(set2, INPUT);     //
pinMode(set3, INPUT);     //
pinMode(set4, INPUT);     //
pinMode(out, OUTPUT);     // setto il pin di uscita come OUT   
}

void loop() {

val = digitalRead(start);         //legge il valore dell'input e lo conserva su val
if (digitalRead(set1) == HIGH){   // contatto del dip switch  chiuso vale 60 secondi
time1=60;}
if (digitalRead(set2) == HIGH){   // contatto del dip switch  chiuso vale 120 secondi
time2=120;}
if (digitalRead(set3) == HIGH){   // contatto del dip switch  chiuso vale 240 secondi
time3=240;}
if (digitalRead(set4) == HIGH){   // contatto del dip switch  chiuso vale 480 secondi
time4=480;}
temp_totale=(time1+time2+time3+time4); //sommo i tempi relativi ai dip chiusi

// controllo se è stato premuto un pulsante
if (val == HIGH){
state = 1 ;
delay(10);} //antirimbalso

if (state == 1){
sec = sec + 1;
delay(950);
digitalWrite(out, HIGH);} // accende le lampade

if(sec > (temp_totale -30)){
for(i =200; i >30; i --){  //ciclo per stabilire la durata del preavviso
analogWrite(out,i);
delay(65);}
digitalWrite(out, LOW);
state = 0;
sec = 0;
}
Serial.print(temp_totale); 
Serial.print("   ");
Serial.println(sec);
}

 

Gioblu Robotics ¬© 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi