Voor de aansturing van de trap heb ik een eenvoudig programma (sketch in Arduino-taal) geschreven dat een paar lampen aanstuurt op basis van de PIR-sensoren en de afstandbediening.
In een oneindige loop kijkt het programma welke knop van de afstandbediening wordt ingedrukt (er zijn vier knoppen) en of er iemand in bereik van de PIR-schakelaar loopt.
In rood de uitleg bij het programma.
De sensoren heb ik op analoge pinnen 4 en 5 van de Arduino aangesloten.
//set up constants for PIR sensors
const int PIR1 = A4; // PIR sensor 1
const int PIR2 = A5; // PIR sensor 2
De afstandbediening heb ik op analoge pinnen A0 t.m. A3 aangesloten
// set up constants for remote control
const int RCA = A2; // Remote Control button A
const int RCB = A0; // Remote Control button B
const int RCC = A3; // Remote Control button C
const int RCD = A1; // Remote Control button D
Voorlopig stuur ik zes lamprelais aan, aangesloten op de digitale pinnen 8 t.m. 13
//set up constants for relais output to lamps
const int L1 = 13; // Lamp1
const int L2 = 12; // Lamp2
const int L3 = 11; // Lamp3
const int L4 = 10; // Lamp4
const int L5 = 9; // Lamp5
const int L6 = 8; // Lamp6
//set up blinkmodes
Ik definieer vier modussen voor het systeem: Alles uit, alles aan, alles knipperen en alleen knipperen bij aanwezigheid van een persoon
const int BM_AllOff = 0; // All lights are off
const int BM_AllOn = 1; // All lights are on
const int BM_BlinkAll = 2; // All lights blink
const int BM_PIR = 3; // Blink on PIR-sensor reading
We starten in de modus waarin alles uit is.
int BlinkMode = BM_AllOff; //
De variabele BlinkStatus gebruik ik om tussen Aan en Uit te schakelen. De variabele houdt bij of de lampen aan of uit staan.
boolean BlinkStatus = false;
// the setup routine runs once when you press reset:
Nu moeten we de pinnen configureren, dus bepalen of ze input-pinnen zijn of output-pinnen.
De Afstandbediening-pinnen zijn input-pinnen
void setup() {
// set up pins for remote control
pinMode(RCA, INPUT);
pinMode(RCB, INPUT);
pinMode(RCC, INPUT);
pinMode(RCD, INPUT);
De PIR-pinnen zijn input-pinnen
// set up pins for PIR sensors
pinMode(PIR1, INPUT);
pinMode(PIR2, INPUT);
De Lamp-pinnen zijn output-pinnen
// set up pins for lamps
pinMode(L1, OUTPUT);
//pinMode(L2, OUTPUT);
// Make the inputs for remote control a pullup resistor
digitalWrite(RCA,HIGH);
digitalWrite(RCB,HIGH);
digitalWrite(RCC,HIGH);
digitalWrite(RCD,HIGH);
Omdat ik op mijn scherm wil zien wat het systeem doet, configureer ik een communicatiekanaal
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
De onderstaande procedure zorgt er voor dat de lampen knipperen. De procedure doet één (halve) knipper. De procedure maakt de lamp-pinnen hoog of laag, afhankelijk van wat ze waren en wacht daarna een tussenpoos van 500 milliseconden.
void doBlink(){
if (BlinkStatus) {
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
}else{
digitalWrite(L1, LOW);
digitalWrite(L2, HIGH);
}
delay(500);
BlinkStatus = !BlinkStatus;
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
Kijk wat de afstandbediening aangeeft
int buttonA = digitalRead(RCA);
int buttonB = digitalRead(RCB);
int buttonC = digitalRead(RCC);
int buttonD = digitalRead(RCD);
Schakel de juiste blinkmode in afhankelijk van de ingedrukte knop
en stuur de waarde naar de serial printer zodat ik die op het scherm kan zien.
// Set blinkmode from remote control
if (buttonA == 1) {
BlinkMode = BM_AllOff;
Serial.print("BlinkMode set to BM_AllOff"); Serial.println();
}
if (buttonB == 1) {
BlinkMode = BM_AllOn;
Serial.print("BlinkMode set to BM_AllOn"); Serial.println();
}
if (buttonC == 1) {
BlinkMode = BM_BlinkAll;
Serial.print("BlinkMode set to BM_BlinkAll"); Serial.println();
}
if (buttonD == 1) {
BlinkMode = BM_PIR;
Serial.print("BlinkMode set to BM_PIR"); Serial.println();
}
De onderstaande code implementeert de knipper modussen
//Blinking routine
Alles uit, dus maak de lamp-pinnen laag
//All lights are off
if (BlinkMode == BM_AllOff){
digitalWrite(L1, LOW);
digitalWrite(L2, LOW);
}
Alles aan, dus maak de lamp-pinnen hoog
//All lights are on
if (BlinkMode == BM_AllOn){
digitalWrite(L1, HIGH);
digitalWrite(L2, HIGH);
}
Alles knipperen, dus wissel de status van de lampen met de knipperroutine
//All lights blink
if (BlinkMode == BM_BlinkAll){
doBlink();
}
Knipperen bij aanwezigheid, dus knipper wanneer één van de twee PIR-sensoren een spanning afgeeft. N.B: || = OR
// Lights blink on PIR
if (BlinkMode == BM_PIR){
if ((digitalRead(PIR1)== HIGH)||(digitalRead(PIR2)== HIGH)) {
doBlink();
}
}
delay(5); // delay in between reads for stability
}
Dit programma heb ik getest en het werkt naar behoren. Ik hoop dat het nog steeds werkt wanneer er vijf meter kabel tussen de sensor en de Arduino zit... Maar dat hoor je in een volgende blog.
In een oneindige loop kijkt het programma welke knop van de afstandbediening wordt ingedrukt (er zijn vier knoppen) en of er iemand in bereik van de PIR-schakelaar loopt.
Afstandbediening met vier knoppen. Midden de ontvanger en rechts de antenne |
PIR-sensor in het hekwerk |
De sensoren heb ik op analoge pinnen 4 en 5 van de Arduino aangesloten.
//set up constants for PIR sensors
const int PIR1 = A4; // PIR sensor 1
const int PIR2 = A5; // PIR sensor 2
De afstandbediening heb ik op analoge pinnen A0 t.m. A3 aangesloten
// set up constants for remote control
const int RCA = A2; // Remote Control button A
const int RCB = A0; // Remote Control button B
const int RCC = A3; // Remote Control button C
const int RCD = A1; // Remote Control button D
Voorlopig stuur ik zes lamprelais aan, aangesloten op de digitale pinnen 8 t.m. 13
//set up constants for relais output to lamps
const int L1 = 13; // Lamp1
const int L2 = 12; // Lamp2
const int L3 = 11; // Lamp3
const int L4 = 10; // Lamp4
const int L5 = 9; // Lamp5
const int L6 = 8; // Lamp6
//set up blinkmodes
Ik definieer vier modussen voor het systeem: Alles uit, alles aan, alles knipperen en alleen knipperen bij aanwezigheid van een persoon
const int BM_AllOff = 0; // All lights are off
const int BM_AllOn = 1; // All lights are on
const int BM_BlinkAll = 2; // All lights blink
const int BM_PIR = 3; // Blink on PIR-sensor reading
We starten in de modus waarin alles uit is.
int BlinkMode = BM_AllOff; //
De variabele BlinkStatus gebruik ik om tussen Aan en Uit te schakelen. De variabele houdt bij of de lampen aan of uit staan.
boolean BlinkStatus = false;
// the setup routine runs once when you press reset:
Nu moeten we de pinnen configureren, dus bepalen of ze input-pinnen zijn of output-pinnen.
De Afstandbediening-pinnen zijn input-pinnen
void setup() {
// set up pins for remote control
pinMode(RCA, INPUT);
pinMode(RCB, INPUT);
pinMode(RCC, INPUT);
pinMode(RCD, INPUT);
De PIR-pinnen zijn input-pinnen
// set up pins for PIR sensors
pinMode(PIR1, INPUT);
pinMode(PIR2, INPUT);
De Lamp-pinnen zijn output-pinnen
// set up pins for lamps
pinMode(L1, OUTPUT);
//pinMode(L2, OUTPUT);
// Make the inputs for remote control a pullup resistor
digitalWrite(RCA,HIGH);
digitalWrite(RCB,HIGH);
digitalWrite(RCC,HIGH);
digitalWrite(RCD,HIGH);
Omdat ik op mijn scherm wil zien wat het systeem doet, configureer ik een communicatiekanaal
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
De onderstaande procedure zorgt er voor dat de lampen knipperen. De procedure doet één (halve) knipper. De procedure maakt de lamp-pinnen hoog of laag, afhankelijk van wat ze waren en wacht daarna een tussenpoos van 500 milliseconden.
void doBlink(){
if (BlinkStatus) {
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
}else{
digitalWrite(L1, LOW);
digitalWrite(L2, HIGH);
}
delay(500);
BlinkStatus = !BlinkStatus;
}
// the loop routine runs over and over again forever:
Dit is de loop die eindeloos herhaald wordt
// read the input pin:
Kijk wat de afstandbediening aangeeft
int buttonA = digitalRead(RCA);
int buttonB = digitalRead(RCB);
int buttonC = digitalRead(RCC);
int buttonD = digitalRead(RCD);
Schakel de juiste blinkmode in afhankelijk van de ingedrukte knop
en stuur de waarde naar de serial printer zodat ik die op het scherm kan zien.
// Set blinkmode from remote control
if (buttonA == 1) {
BlinkMode = BM_AllOff;
Serial.print("BlinkMode set to BM_AllOff"); Serial.println();
}
if (buttonB == 1) {
BlinkMode = BM_AllOn;
Serial.print("BlinkMode set to BM_AllOn"); Serial.println();
}
if (buttonC == 1) {
BlinkMode = BM_BlinkAll;
Serial.print("BlinkMode set to BM_BlinkAll"); Serial.println();
}
if (buttonD == 1) {
BlinkMode = BM_PIR;
Serial.print("BlinkMode set to BM_PIR"); Serial.println();
}
De onderstaande code implementeert de knipper modussen
//Blinking routine
Alles uit, dus maak de lamp-pinnen laag
//All lights are off
if (BlinkMode == BM_AllOff){
digitalWrite(L1, LOW);
digitalWrite(L2, LOW);
}
Alles aan, dus maak de lamp-pinnen hoog
//All lights are on
if (BlinkMode == BM_AllOn){
digitalWrite(L1, HIGH);
digitalWrite(L2, HIGH);
}
Alles knipperen, dus wissel de status van de lampen met de knipperroutine
//All lights blink
if (BlinkMode == BM_BlinkAll){
doBlink();
}
Knipperen bij aanwezigheid, dus knipper wanneer één van de twee PIR-sensoren een spanning afgeeft. N.B: || = OR
// Lights blink on PIR
if (BlinkMode == BM_PIR){
if ((digitalRead(PIR1)== HIGH)||(digitalRead(PIR2)== HIGH)) {
doBlink();
}
}
delay(5); // delay in between reads for stability
}
Dit programma heb ik getest en het werkt naar behoren. Ik hoop dat het nog steeds werkt wanneer er vijf meter kabel tussen de sensor en de Arduino zit... Maar dat hoor je in een volgende blog.
Geen opmerkingen:
Een reactie posten