Domotica Verlichting
De verlichting is gestuurd via een Arduino (microcontroller).
Doel : Met twee parallel geschakelde drukknoppen de verlichting schakelen in verschillende sequenties.
De verlichting is gestuurd via een Arduino (microcontroller).
Doel : Met twee parallel geschakelde drukknoppen de verlichting schakelen in verschillende sequenties.
Doel : met één drukknop de verschillende lichten sturen.
Mogelijke acties : Zie bijlage Sequenties
Lang drukken
Kort drukken
2 x kort drukken
Timer actie : al het licht uit na één uur
Hoe werkt het :
"Kort drukken" laat het licht aan gaan in drie mogelijke sequenties : eten, recreatie of koken, afhankelijk van hoe het de laatste keer is uitgegaan. Bij een volgende "kort drukken" ga je naar de volgende sequentie.
Bij "lang drukken" gaat het licht uit. behalve als alles uit is, dan gaat bij "lang drukken" alles aan.
"2 keer kort drukken" initieert de indirecte verlichting onder de tafel / bed combinatie, en als je dit nog eens doet, krijg je en ook de led strip achteraan bij.
Na één uur gaat al het licht uit
Om de relais schakeling te voeden gebruiken we deze omvormer.
De drukknoppen in de camper worden aangesloten volgens het pull-down principe. Gebruik makend van de inwendige schakeling van de Arduino
Principe schema van de schakeling : Arduino uitgang <> relais
Hier onder vind je het programma voor de "Arduino Uno"
Zie ook de download sectie bovenaan
/* Domotica Camper -- programma Arduino
Doel : met één drukknop de verlichting sturen
van dk naar
------------------------------------------
alles uit lang alles aan
alles uit kort herneem laatste sekw. kort
alles uit 2xkort ga naar indirect 1
alles aan lang alles uit
alles aan kort herneem laatste sekw
alles aan 2xkort ga naar indirect 1
sekw 2 2xkort ga naar indirect 2
sekw x lang alles uit
sekw x kort sekw x+1
sekw x 2xkort ga naar indirect 1
Lay out woongedeelte camper
------------------------------------------
| TL2:b7 TL1:b8
|
| Ledstrip2:b8 ledstrip1:b7
|
| TL5:b5 TL6:b4 TL7:b3
|
|
|
| TL3:b7 TL4:b6
------------------------------------------
Let op : TL2 en TL3 zijn verbonden
*/
const int Dk = 2; // drukknop naar gnd (pullup)
int lamp[] = {4,5,6,7,8,9,10,11}; // pin lampen toewijzen
int i= 0; // indexvariabele
int stat = 0; // status sekwenties
int laststat = 4; // laatste status sekwenties
int DkTeller = 0; // teller van de flanken
int DkStatus = 0; // status drukknop
int DkStatusVorig = 0; // vorige status
int BouncingDelay = 40; // delay om bouncing te vermijden
int Pause = 300; // Pause
unsigned long temp = 0; // temp variabele voor tijdsmeting
unsigned long cyclus = 500; // cyclus waarin gemeten
unsigned long tijd_in_bedrijf = 0; // lampen branden
unsigned long timeout = 3600000; // timout tijd (na deze tijd gaat het licht altijd uit) 3600 000 = 1 uur
// sekwenties :
int sekwenties[7][8] = {
{1,1,1,1,1,1,1,1}, //alles uit
{1,1,0,0,0,0,0,0}, //alles aan
{1,0,1,1,1,1,1,1}, //indirect1 ledstrip1
{0,0,1,1,1,1,1,1}, //indirect2 ledstrip1 + ledstrip2
{1,1,1,0,0,1,1,1}, //eten TL5 + TL6
{1,1,1,1,1,1,0,1}, //recreatie TL2 + TL3
{1,1,0,0,1,0,1,1} //koken TL4 + TL6 + TL7
};
int maxs = 6; //laatste sekwentie
void setup() {
pinMode(Dk, INPUT_PULLUP); // Dk is een input
for(i = 0; i <= 7; i++)
{
pinMode (lamp[i],OUTPUT); //lampen als output definieren
}
sekwentie(stat); //initiele toestand : alle lampen uit
Serial.begin(9600); // initialize serial communication:
}
void loop() {
DkStatus = 1-digitalRead(Dk); //lees de status van Dk (let op : Pullup)
if (DkStatus != DkStatusVorig) { //verschillend van vorig?
if (DkStatus == HIGH) { //overgang van 0 naar 1
if (DkTeller == 0) { // eerste flank van 0 naar 1
temp = millis(); //temp is de tijd op 1e schakelmoment(wordt gemeten met millis)
tijd_in_bedrijf = millis();
DkTeller = 1;
}
else {
DkTeller++; //teller plus 1
}
Serial.print("aan ");
Serial.println(DkTeller);
}
else {
if (DkTeller > 0) {
DkTeller++;
Serial.print("uit ");
Serial.println(DkTeller);
}
}
}
if ((millis() - tijd_in_bedrijf) > timeout) { // check timeout cyclus
stat = 0; // alles uitzetten want de tijd is verlopen
Serial.print("timout : ");
Serial.print(stat);
Serial.print("-");
sekwentie(stat);
Serial.println();
tijd_in_bedrijf = millis();
}
if ((millis() - temp) > cyclus) { //check cyclus
if (DkTeller > 0) { //als er flanken gedetecteerd zijn binnen de cyclus
Serial.print("Totaal :");
Serial.println(DkTeller);
switch (DkTeller) {
case 1:
Serial.println("Lang");
if (stat >= 1) { //alles uit
stat = 0;
}
else { //alles aan
stat = 1;
}
break;
case 2:
Serial.println("Kort");
if (stat <= 3) { //alles aan of alles uit -> herneem laatste sekw
stat = laststat;
}
else { // opnieuw
if (stat >= maxs) {
stat = 4;
}
else { //volgende sekwentie
stat = stat+1;
}
}
break;
default:
Serial.println("2 X Kort");
if ((stat < 2)||(stat > 2)) { //ga naar stand 2
stat = 2;
}
else { // opnieuw
stat = 3;
}
break;
}
Serial.print("sekw : ");
Serial.print(stat);
Serial.print("-");
if (stat >= 4) {
laststat = stat;
}
sekwentie(stat);
Serial.println();
delay(Pause); //wacht ebekke
}
DkTeller = 0; //reset teller
}
DkStatusVorig = DkStatus; // leg huidige status vast
delay(BouncingDelay); //bouncing vermijden
}
void sekwentie(size_t stat) {
patroon(sekwenties[stat]);
}
// wegschrijven van de sekwentie naar de lampen
void patroon(int seq[]) {
for(i = 0; i <= 7; i++){
if (seq[i]==1) {
digitalWrite(lamp[i], HIGH);
Serial.print(1 );
}
else {
digitalWrite(lamp[i], LOW);
Serial.print(0 );
}
}
Serial.println();
}