Programma arduino traplooplicht

Beste CO,
Sommige weten al iets over de hardware die ik heb gemaakt voor het looplicht. Nu ik toch even aan het wachten ben op de materialen ben ik alvast begonnen met wat prullen op mijn breadboard en arduino

Project: Het is een traploop licht dat per trede om de zo veel seconde aan gaat afhankelijk van welke kant je komt.

Ik heb 2 sensoren 1 boven, 1 onder aan de trap. Ik heb 13 trap tredes Ik heb een 74HC595 schuifregister gebruikt omdat ik 1 io te weinig had. maar deze kunnen we even weglaten in het programma want mijn test opstelling heb ik gemaakt met 2 drukknoppen ( sensoren ) en 5 ledjes

Doel: Als de persoon van de begane grond naar de 1ste verdieping detecteerd sensor 1 de persoon en zal de leds om de 250ms van onder naar boven aan laten gaan ( ben er al achter gekomen, flade gaat niet omdat niet alle uitgangen PWM zijn ). Komt de persoon vervolgens langs sensor 2 dan moeten de leds OOK van onder naar boven uitgaan om de 1500ms, Stel sensor 1 is gedetecteerd maar sensor 2 is na 1 minuut nog niet gedetecteerd moet en de leds om de 100ms automatisch uitgaan.

Komt de persoon van de 1ste verdieping en gaat naar de begane grond zal de sensor 2 als eerste detecteren en zullen de leds van boven naar onder om de 250ms aangaan. vervolgens komt de persoon dus langs sensor 1 en zullen de leds van boven naar onder uitgaan om de 1500ms Stel sensor 2 is gedetecteerd maar sensor 1 is na 1 minuut nog niet gedetecteerd moet en de leds om de 100ms automatisch uitgaan.

Ik heb wat zitten proberen met het programma het werkt in het eerste zicht wel maar als ik niks doe dan gaat hij de leds automatisch uit doen.

Programma is niet heel professioneel geschreven :P

c code:

int button1Pin = 2;  
int button2Pin = 3;
int led1Pin =  8; 
int led2Pin =  7;
int led3Pin =  6;
int led4Pin =  5;
int led5Pin =  4;


void setup() {
  pinMode(button1Pin, INPUT);
  pinMode(button2Pin, INPUT);
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
  pinMode(led3Pin, OUTPUT);
  pinMode(led4Pin, OUTPUT);
  pinMode(led5Pin, OUTPUT);
}

void loop()   { if(digitalRead(button2Pin) == HIGH)
  {
  digitalWrite(led1Pin, HIGH);
  delay(250);
  digitalWrite(led2Pin, HIGH);
  delay(250);
  digitalWrite(led3Pin, HIGH);
  delay(250);
  digitalWrite(led4Pin, HIGH);
  delay(250);
  digitalWrite(led5Pin, HIGH);

if (digitalRead(button1Pin) == HIGH)
  
  digitalWrite(led1Pin, LOW);
  delay(1500);
  digitalWrite(led2Pin, LOW);
  delay(1500);
  digitalWrite(led3Pin, LOW);
  delay(1500);
  digitalWrite(led4Pin, LOW);
  delay(1500);
  digitalWrite(led5Pin, LOW);
  }
  
    if(digitalRead(button1Pin) == HIGH)
  {
  digitalWrite(led5Pin, HIGH);
  delay(250);
  digitalWrite(led4Pin, HIGH);
  delay(250);
  digitalWrite(led3Pin, HIGH);
  delay(250);
  digitalWrite(led2Pin, HIGH);
  delay(250);
  digitalWrite(led1Pin, HIGH);
  
  if (digitalRead(button2Pin) == HIGH)
  
  digitalWrite(led5Pin, LOW);
  delay(1500);
  digitalWrite(led4Pin, LOW);
  delay(1500);
  digitalWrite(led3Pin, LOW);
  delay(1500);
  digitalWrite(led2Pin, LOW);
  delay(1500);
  digitalWrite(led1Pin, LOW);
  
  }

}

[Bericht gewijzigd door Sjoerd K op woensdag 27 maart 2013 01:24:39 (32%)

Kopieer het schuifregister programma maar vd arduino site.. of ga een cursus programmeren doen. Dit mag je niet eens een programma noemen

Dit schreeuwt om for loops
Of gebruik op zn minst 'else if'

Succes verder

Je heb led1pin - led5pin respectievelijk van 8 naar 4 staan.
door het gebruik van loops(FOR loop idg) wordt de code een stuk korter en met veel code dus ook overzichtelijker.

dan kan je dus gewoon:

c code:


void loop(){ 
  // If button 2 high turn on Leds on from 1 to 5
  IF(digitalRead(button2Pin) == HIGH){
    FOR (int i = 8; i>=4; i--){  
      digitalWrite(i, HIGH);
      delay(250);
    }
  } 

   IF(digitalRead(button1Pin) == HIGH){
    FOR (int i = 4; i<=8; i++){  
      digitalWrite(i, LOW);
      delay(250);
    }
  } 
}

kijk ook naar het verschil in inspringen tussen jou code en mijn code. Door het inspringen per ingesloten code (door FOR loop, WHILE loop, IF enz)wordt het veel makkelijker lezen.

vergeet ook niet dat in jou geval(als je de haakjes kloppend maakt), als je voorbij sensor 1 loopt hij eerst uit gaat en dan gelijk weer aan... Je zult dus moeten onthouden welke sensor eerst hoog werd.

succes en veel plezier

spel en denk fouten voorbehouden moet even snel typen zit op mijn werk.

jeroen

Hey jeroen,

Bedankt voor dat stukje code je hebt me er enorm me geholpen. Ik ben al een stuk verder gekomen ik heb je programma wat aangepast

werking:
drukknop 2 = sensor 1ste verdieping
drukknop 1 = sensor beganegrond

als drukknop 2 gemeld en drukknop 1 ook dan gebeurt er niks. als drukknop 2 als eerste gemeld word gaan de leds van boven naar onder snel aan en als vervolgens drukknop 1 gemeld is gaan de leds van boven naar onder langzaam uit.

als ik drukknop 1 als eerste meld gaan de leds van onder naar boven snel aan en vervolgens als drukknop 2 gemeld is gaan de leds van onder naar boven langzaam uit

Dingen waar ik nog aan moet werken:
als ik drukknop 1 meld en hem in blijf houden gaan de leds dus snel van onder naar boven aan en gaan dan direct van boven naar onder langzaam uit, het zelfde is als ik het bij drukknop 2 doe. Op mijn breadboard heb ik nu drukknoppen genomen maar straks worden het 2 PIR sensoren ik kan deze instellen als de pir sensor gemeld is dat de output van de pir gedurende tijd hoog blijft of dat de output van de pir alleen hoog blijft zolang er gedetecteerd word.

vervolgens moet ik nog instellen als er 1 minuut niks is gemeld dat de leds dan uitgaan

c code:

void loop(){ 
 if(digitalRead(button2Pin) == HIGH && digitalRead(button1Pin) == LOW && digitalRead(led1Pin) == LOW){
    for (int i = 8; i>=4; i--){  
      digitalWrite(i, HIGH);
      delay(150);
    }
  } 
 
   if(digitalRead(button1Pin) == HIGH && digitalRead(button2Pin) == LOW && digitalRead(led5Pin) == HIGH){
    for (int i = 8; i>=4; i--){  
      digitalWrite(i, LOW);
      delay(1500);
    }
  } 
  
   if(digitalRead(button1Pin) == HIGH && digitalRead(button2Pin) == LOW && digitalRead(led5Pin) == LOW){
    for (int i = 4; i<=8; i++){  
      digitalWrite(i, HIGH);
      delay(150);
    }
  } 
 
   if(digitalRead(button2Pin) == HIGH && digitalRead(button1Pin) == LOW && digitalRead(led1Pin) == HIGH){
    for (int i = 4; i<=8; i++){  
      digitalWrite(i, LOW);
      delay(1500);
    }
  }
}

Met dat probleempje van dat als ik de drukknop inhield dat hij aan ging en direct weer uitging had ik aan gedacht om het met lastbutton satement te doen uit dit filmpje https://www.youtube.com/watch?v=_LCCGFSMOr4&list=ECA567CE235D39FA8… rond de 12 minuten heeft hij het over een lampje aan en uit maken met 1 drukknop

maar het lukt me niet om het in het programma in te voegen.

[Bericht gewijzigd door Henry S. op woensdag 27 maart 2013 21:38:48 (8%)

Ik ben toevallig met hetzelfde bezig gegaan van het weekend. Ik heb wel een manier gevonden om elke traptrede te laten faden dmv PWM.

Ik heb een 74HCT154 (4 to 16 DEMUX)op de PWM output van mijn uC zitten en kan mijn pwm dus adresseren via de A0 t/m A3. Dan naar een NOR poort en op de andere ingang van mijn NOR komt de 74HC595 uitgang te zitten.

Het idee is dus dat de 74HC595 de LED overneemt als hij in of uitgefade is. Best slim idee dacht ik zelf, maar zal vast niet de eerste zijn die dit bedenkt.

Don't build anything you can't take apart

Goedendag, ik ben hier nu toevallig ook zelf pas aan begonnen, maar heb helaas voor jullie weinig nuttigs toe te voegen. Ik wilde eigenlijk alleen informeren naar eventuele vorderingen en of iemand bereid was dit delen. Dat scheelt mijzelf een hoop uitzoekwerk. Ik vond de in/uitfadende trapverlichting een gaaf project worden.

Beste vincent,

Ik heb dit topic gestart met een succes vol einde. Ik heb een mooi printplaatje ontwikkelt voor onderandere een trap verlichting

  • Je kunt er 16 leds of eventueel ledstrips op aansluiten ( er zit al een voorschakelweerstand op voor de leds, deze kun je ook uitschakelen met de schuifschakelaars )
  • Je kunt er 2 LDR's op aansluiten voor detectie als het donker is
  • Er zijn nog 4 Digital outputs waar op je bvb 2 bewegings melders ( je hebt dan maar 2 outputs nodig ) of eventueel 2 ping sensoren ( dan heb je wel 4 uitgangen nodig, hangt er van af welk type je hebt
  • Print is volledig te programmeren met de arduino uno, Je kunt er de gekste loop patronen mee maken
  • Reden waarom ik deze print ontwikkelt heb is omdat ik PWM gestuurde leds wou hebben en de arduino uno heeft maar 7 PWM uitgangen, Deze print heeft 16 PWM uitgangen

*PWM heb je nodig als je je leds wil dimmen*

Hij is te koop bij niels
Traplooplicht shield
Arduino uno

Beste Sjoerd, bedankt voor je snelle reactie. ik ga er meteen mee aan de slag!