zondag 14 december 2014

Een testprogramma voor de trap

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.

Afstandbediening met vier knoppen. Midden de ontvanger en rechts de antenne

PIR-sensor in het hekwerk
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:

Dit is de loop die eindeloos herhaald wordt

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.

Werken aan de schakelkast van de trap

De schakelkast van de trap vordert langzaam want steeds bedenk ik weer wat en dan heb ik onderdelen van Conrad nodig en dat duurt dan weer een paar dagen.

Zo had ik bedacht dat een draadloze afstandbediening wel leuk zou zijn. Dus ééntje besteld, maar die deed het niet. Duurde weer even voordat ik een werkende had.

Afstandbediening

Printje met connector voor de afstandbediening. Rechts de hoofdzekering.

En ik had mooie PIR-sensoren gekocht voor in het hekwerk. Maar de sensor zat niet recht voor de print en daardoor paste hij niet in mijn 3D-geprinte behuizing.

Fout uitgelijnde sensor en print
Ik kreeg nieuwe van de leverancier www.hobbyelectronica.nl en wel de volgende dag. De sensoren zitten nu in de traphekken.

PIR sensor


De sensoren vallen niet erg op
Verder heb ik bedacht dat het toch wel handig zou zijn wanneer de kast geheel met stekkers zou zijn aangesloten. Waarschijnlijk moet hij nog wel een paar keer naar de werkplaats. Dus een connector (40 polig) besteld en geprobeerd de vijf netwerkkabels er in te krijgen. De connector is bedoeld voor lintkabel, dus dat ging mis en nu wacht ik op de volgende connector....

Ook had ik een kortsluiting in de bekabeling, met als gevolg dat een netwerkcontactdoos gesmolten is. Dat krijg je er van wanneer je je lampjes even leuk aansluit voor de kerst, de zekering vergeet en een 10 Ampère voeding zichzelf begrenst op 10 ampère bij kortsluiting. Dus een nieuwe doos besteld en een automatische zekering... En weer wachten....


Zo ziet de kast er nu uit
De onderkant met van links naar rechts:
12V lampvoeding, lampenconnector, RJ45 sensorconnector,
USB-aansluiting Arduino, 7V computervoeding Arduino

Zucht...

Maar het zal ooit lukken. In ieder geval ziet de kast er al indrukwekkend complex uit.......

Leuningen voor de traphekken

De afgelopen week heb ik de eikenhouten leuningen gemonteerd op de traphekken.

De leuningen zijn als profiel aangeleverd, op maat gemaakt en gelakt.

Rechte leuning


Bovenste leuning

De drie geknikte leuningen zijn met deuvels verbonden.

Geknikte leuning

De leuningen zijn met zwarte 6 x 40 torx schroeven aan het hekwerk bevestigd.


N.B. Zoals je ziet is het hek helemaal in kerstsfeer!