Today we will be taking care of a
simple way to activate or deactivate time settings in the variable
declaration part. And add photocell checking to our switch commands
so we don't need to reprogram the timers every time the season
changes. We just leave the time frame set for the days with the least
day light time and run the switching command through a photocell
reading so in summer the lights don't switch on before it is getting
dark. Now it has to be dark and within the time frame to switch the
lights.
Lets start with activating and
deactivating single time settings. Again we start at the declaration
part of our sketch and find the following lines where we add:
//////////////////////holiday timer
settings//////////////////////
////////////Room 1 (Bed 1) ///////////
//>>>>>>>>>>addition
starts here<<<<<<<<<<<<<<<<<<<<<<<<<
byte room1MActive = 1;
//Set to 1 if you want to process
//Timer will be ignored when set to 0
//>>>>>>>>>>addition
ends here<<<<<<<<<<<<<<<<<<<<<<<<<<<
unsigned int room1OnM[2] = {5, 35};
//Time to switch on the lights 5
unsigned int room1OffM[2] = {6, 5};
//Time to switch off the lights 6
//>>>>>>>>>>addition
starts here<<<<<<<<<<<<<<<<<<<<<<<<<<
byte room1O1Active = 1;
//Set to 1 if you want to process
//Timer will be ignored when set to 0
//>>>>>>>>>>addition
ends here<<<<<<<<<<<<<<<<<<<<<<<<<<<
unsigned int room1On1[2] = {19, 35};
//Time to switch on the lights
unsigned int room1Off1[2] = {20, 15};
//Time to switch off the lights
//>>>>>>>>>>addition
starts here<<<<<<<<<<<<<<<<<<<<<<<<<<<
byte room102Active = 1;
//Set to 1 if you want to process
//Timer will be ignored when set to 0
//>>>>>>>>>>addition
ends here<<<<<<<<<<<<<<<<<<<<<<<<<<<<
unsigned int room1On2[2] = {21, 5}; //Time to switch on the lights
unsigned int room1Off2[2] = {21, 15};
//Time to switch off the lights
////////////Room 2 (Bed 2) ///////////
unsigned int room2OnM[2] = {6, 30};
//Time to switch on the lights
unsigned int room2OffM[2] = {6, 50};
//Time to switch off the lights
We declare a variable for each timer
setting like “room1MActive” for the morning switching time,
“room1O1Active” for the first evening switching time of room 1, “
room1O2Active” for the second evening switching time of room 1 and
set it to 1 if we want the time to be processed and to 0 if we want
it to be ignored. This we do for every timer setting in each room and
than we move down to the main loop again and find “////processing
the input////” and “//////holiday switching/////”. There we
add:
//////////////////processing the
input/////////////////////
//////////////Holiday
lighting/////////////////////////
if(switchState[20] == 1) {
//check if the holiday switch
//is
activated
tmElements_t tm;
//initializing RTC
if(RTC.read(tm)) {
//Reading the clock
currentHour = tm.Hour;
//passing the time into a var
currentMinute = tm.Minute;
//passing the time into a var
}
///////Room 1 (Bed 1) /////////////
if(room1MActive == 1 &&
currentHour >= room1OnM[0] &&
currentHour <= (room1OffM[0]
+ 1)){ //checking if we came passed
//the hour where the lights
//to be switched on
//checking the times
room1Lights =
checkOnTime(room1OnM[0], room1OnM[1],
room1OffM[0], room1OffM[1]);
}
if(room1O1Active == 1 &&
currentHour >= room1On1[0] &&
currentHour <= (room1Off1[0]
+1)){ //checking if we came passed
//the hour where the lights
//to be switched on
//checking the times
room1Lights =
checkOnTime(room1On1[0], room1On1[1],
room1Off1[0], room1Off1[1]);
}
if(room102Active == 1 &&
currentHour >= room1On2[0] &&
currentHour <= (room1Off2[0]
+ 1)){ //checking if we came passed
//the hour where the lights
//to be switched on
//checking the times
room1Lights =
checkOnTime(room1On2[0], room1On2[1],
room1Off2[0], room1Off2[1]);
}
if(room1Lights == 1){
//if with in the on time
lightOutput[0] =1; //switch on the lights
}
else {
lightOutput[0] = 0;
//other keep them off
}
////////Room 2 (Bed
2)//////////////
Here we add to the if-statements where
we check if we are within the time frame to activate the timer.
if(currentHour >= room1OnM[0] &&
currentHour <= (room1OffM[0]
+ 1)){ //checking if we came passed
//the hour where the lights
//to be switched on
Right in the beginning of the
if-statement we add “room1MActive == 1 &&”. Now the
statement is also checking if the “active” variable is set to 1
and the complete statement looks like this:
if(room1MActive == 1 &&
currentHour >= room1OnM[0] &&
currentHour <= (room1OffM[0]
+ 1)){ //checking if we came passed
We do the same thing with every timer
all the way down to room 9.
I know, quite a bit a typing, but it
makes the unit a little more flexible. If you want to use the same
unit in a different house or flat where you don't have windows in the
bathroom or in the kitchen for example, than there is no point in
switching on the lights when nobody can see it. Instead of going
through the whole sketch and start commenting things out or deleting
parts, you just need to change the “active status” in the
declaration part from 1 to 0 and you are done.
On this part I was planing to implement
the photocell reading to limit the time where the lights are switched
to times when they are needed to be on. Getting the readings of a
photocell right on a desk with artificial light is quite easy but
running the experiment in the garden with light levels constantly
changing is a bit of a challenge I found. Got to say, I've learned
quite a bit experimenting the last couple of days. Share all my
experiments, findings and thoughts, I decided to do all this in the
next post.
No comments:
Post a Comment