|
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);
}