Taal:

 

Verlichting onder de traptreden.
Verlichting onder de traptreden.

Als onderaan de trap, de PIR-sensor je ziet, gaan de ledstrips snel aan naar boven. Als het PIR-sensor je dan boven aan de trap je dan zie, fade de ledstrips van beneden naar boven langzaam uit.

en het zelfde verhaal voor boven naar beneden.

Als het te lang duurt, gaat de ledstrips ook na 30 seconde uit.

ik heb de onderstaande PIR-sensors gebruikt:
En ik heb een TIP120 gebruikt (14) voor het aansturen van de ledstrips onder de treden.

Alles gemaakt met een Arduino Mega ADK, omdat deze 15 PWM uitgangen heeft.

Programma:

int vStairSteps = 14;                                                    // aantal treden int O_nr[15] = {00, 44, 46, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};     // output nummers in een array zette int iDown = 22;                                                          // Nummer input PIR onderaan de trap int iUp = 24;                                                            // Nummer input PIR bovenaan de trap int ValFade[15];                                                         // huidige Fade waarden per tree onthouden int vUpGestart = 0; int vDownGestart = 0; int BreakCnt = 0 ; //------------------------------------------------------------------------------------------------------------------------------- void setup() {  for (int i = 1 ; i <= 15; i++) {                                       // alle PWM pinnen op output zetten    pinMode(O_nr[i], OUTPUT);  }  pinMode(iDown, INPUT);                                                 // PIR inputjes op ingang zetten  pinMode(iUp, INPUT);  digitalWrite(iDown, LOW);  digitalWrite(iUp, LOW);  Serial.begin(9600);                                                  // serieel verbinding straten voor eventueel debuggen } //------------------------------------------------------------------------------------------------------------------------------- void loop() {  int vDown = 0;  int vUp = 0;  vDown = digitalRead(iDown);  vUp = digitalRead(iUp);  //Serial.print(vDown);  //Serial.println(vUp);  if ( vUp == 1 & vUpGestart == 0 & vDownGestart == 0)  {    vUpGestart = 1 ;    trap_op_aan( 1, 150);  }  if ( vDown ==  1 & vDownGestart == 0 & vUpGestart == 0)  {    vDownGestart = 1 ;    trap_neer_aan( 1, 150);  }  if (vDown == 1 & vUpGestart == 1)  {    delay(2000);    trap_op_uit(10, 5, 20);    do {      delay(100);    } while (digitalRead(iDown) > 0 || digitalRead(iUp) > 0 );    vUpGestart = 0 ;    BreakCnt = 0;  }  if (vUp == 1 & vDownGestart == 1)  {    delay(2000);    trap_neer_uit(10, 5, 20);    do {      delay(100);    } while (digitalRead(iDown) > 0 || digitalRead(iUp) > 0 );    vDownGestart = 0 ;    BreakCnt = 0;  }  if (vUpGestart == 1)  {    delay(100);    BreakCnt = BreakCnt + 1;    if (BreakCnt > 300)    {      trap_op_uit(10, 5, 20);      vUpGestart = 0 ;      vDownGestart = 0 ;      BreakCnt = 0;    }  }  if (vDownGestart == 1)  {    delay(100);    BreakCnt = BreakCnt + 1;    if (BreakCnt > 300)    {      trap_neer_uit(10, 5, 20);      vUpGestart = 0 ;      vDownGestart = 0 ;      BreakCnt = 0;    }  } } //------------------------------------------------------------------------------------------------------------------------------- //vStart = een drempel tussen de verschillende treden..  als deze op 0 staat zullen alle treden tegelijk uitfaden... //staat deze op 50 ,zal elke tree apart uitfaden //vStep = stap grote van het uit fade //vSpeed =  wachtlus //------------------------------------------------------------------------------------------------------------------------------- void trap_op_uit(int vStart, int vStep, int vSpeed) {  int i = 1;                                                                  // tel op, zolang nog niet alle treeden uit zijn  do {    for (int j = 1; j < vStairSteps + 1; j ++)                                // starten bij tree 1    {      if ( i > (j * vStart) )                                                 // waarde teller groter als drmpel * huidige tree      {        if (ValFade[j] > 0 )                                                  // Led al uit? nee dan verlagen        {          ValFade[j] = ValFade[j] - vStep;          analogWrite(O_nr[j], ValFade[j]);                                   // Uitgang aansturen        }      }    }    i++;    delay(vSpeed);  } while ( ValFade[vStairSteps] > 0);                                        // laatste tree Uit? } //------------------------------------------------------------------------------------------------------------------------------- //vStart = een drempel tussen de verschillende treden..  als deze op 0 staat zullen alle treden tegelijk uitfaden... //staat deze op 50 ,zal elke tree apart uitfaden //vStep = stap grote van het uit fade //vSpeed =  wachtlus //------------------------------------------------------------------------------------------------------------------------------- void trap_neer_uit(int vStart, int vStep, int vSpeed) {  int i = vStairSteps * vStart;  do {    for (int j = vStairSteps; j > 0; j--)                                     // starten bij tree 14    {      if ( i < (j * vStart) )      {        if (ValFade[j] > 0 )        {          ValFade[j] = ValFade[j] - vStep;          analogWrite(O_nr[j], ValFade[j]);        }      }    }    i--;    delay(vSpeed);  } while ( ValFade[1] > 0);                                                  // laatste tree Uit? } //------------------------------------------------------------------------------------------------------------------------------- void trap_op_aan (int vStep, byte speed) {  for (int i = 1 ; i < vStairSteps + 1 ; i++ ) {                              // lus welke al de treeden afgaat (van onder(1) naar boven(14)    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += vStep) {          // lus welke de PWM output van de tree aanzet      ValFade[i] = fadeValue;      analogWrite(O_nr[i], ValFade[i]);      delayMicroseconds(speed);    }  } } //------------------------------------------------------------------------------------------------------------------------------- void trap_neer_aan (int vStep, byte speed) {  for (int i = vStairSteps ; i > 0 ; i-- ) {                                  // lus welke al de treeden afgaat (van boven(14) naar onder(1)    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += vStep) {          // lus welke de PWM output van de tree aanzet      ValFade[i] = fadeValue;      analogWrite(O_nr[i], ValFade[i]);      delayMicroseconds(speed);    }  } }