INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Treppenlicht
28.09.2014, 11:17
Beitrag #1
Treppenlicht
Hallo an alle!

Habe nun das Forum schon lange durchlesen aber nix konkretes gefunden bezüglich meiner Treppenlicht-Steuerung.
Zum Einsatz kommen WS2812-LED-Module, ein Arduino UNO oder NANO, zwei PIR-Sensoren oder ähnliche Lichtschranken, ein Lichtsensor.

Funktionieren tut im Moment folgendes:
Person betritt die Treppe oben --> Stufen werden einzeln von oben zeitversetzt beleuchtet und gehen nach einer bestimmten Zeit (leider "delay-Befehl") wieder nacheinander von oben beginnend aus.
Person betritt Treppe von unten --> Stufen werden von unten nach oben zeitversetzt beleuchtet und entsprechend wieder abgeschaltet. Soweit ganz gut, aber:

Betritt von oben eine Person die Treppe und kurz drauf eine Person von unten, so steht die untere Person im Dunkeln, da der untere PIR inaktiv ist. Ist die Zeit abgelaufen dann werden die LEDs abgeschaltet und leider könnte somit die Person welche als zweites die Treppe betreten hat im Dunkeln stehen.... Voll dämlich.

Hoffe Ihr könnt mir weiter helfen....

Code:
int PIR001=10;
int PIR002=11;
int LIGHT=A0;
int PHOTO=0;
int MOVEMENT001=0;
int MOVEMENT002=0;


//
#include <Adafruit_NeoPixel.h>

#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(20, PIN, NEO_GRB + NEO_KHZ800);
//



void setup() {
  Serial.begin(9600);

  pinMode(PIR001, INPUT);
  pinMode(PIR002, INPUT);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'

}

void loop() {
  MOVEMENT001=digitalRead(PIR001);
  MOVEMENT002=digitalRead(PIR002);
  PHOTO=analogRead(LIGHT);

  if ( MOVEMENT001 == HIGH && PHOTO <= 820)         //wenn Treppe von unten betreten
  {    
    colorWipe(strip.Color(255, 0, 0), 500);         //LED nacheinander an / von unten nach oben
    delay(5000);
    colorWipe(strip.Color(0, 0, 0), 500);           //LED nacheinander aus
  }
  
  else if (MOVEMENT002 == HIGH && PHOTO <= 820)   //wenn Treppe von oben betreten
  {      
    colorWipe2(strip.Color(0, 255, 0), 500);      //LED nacheinander an / von oben nach unten
    delay(5000);
    colorWipe2(strip.Color(0, 0, 0), 500);        //LED nacheinander aus
  }

// folgende Abfrage beider PIR funktioniert nicht
else if (MOVEMENT001 == HIGH && MOVEMENT002 == HIGH && PHOTO <= 820)
  {      
    colorWipe2(strip.Color(0, 0, 255), 500);
    delay(5000);
    colorWipe2(strip.Color(0, 0, 0), 500);
  }

Serial.print(" - PHOTO ");
Serial.println(PHOTO);
Serial.print(" Sensor unten ");
Serial.println(MOVEMENT001);
Serial.print("  Sensor unten ");
Serial.println(MOVEMENT002);
  


}
void colorWipe(uint32_t c, uint8_t wait) {
   for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
         }
       }

void colorWipe2(uint32_t c, uint8_t wait) {
  for(uint16_t i=strip.numPixels(); i>0; i--) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 11:57
Beitrag #2
RE: Treppenlicht
Hi,
mach Dich mal mit "Blink without delay" vertraut. Außerdem müsstest Du Dir genau überlegen, wie das Verhalten sein soll, wenn die zweite Person ankommt.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 12:55
Beitrag #3
RE: Treppenlicht
Hab gerade nochmal überlegt..... Woher weiß denn der zweite PIR dass eine neue Person kommt? Verdammt, schaltet er dann das Licht wieder aus weil die erste Person die Treppe verlässt oder das Licht an weil ein zweite Person hinzu kommt....?
Okay, also ohne Steuerung zum Ausschalten, dafür aber sollte die zweite Person (egal von wo sie kommt) erkannt werden und entsprechend die Zeit für das "Licht löschen" verlängern oder die LEDs von der anderen Seite her dazu schalten....
"Blink without delay" habe ich schon angesehen , werde mal umdenken, DANKE Thorsten..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 13:51 (Dieser Beitrag wurde zuletzt bearbeitet: 28.09.2014 13:57 von Thorsten Pferdekämper.)
Beitrag #4
RE: Treppenlicht
Bau doch Drucksensoren in die Stufen ein ;-)

Mal ne andere Frage: Was für ein LED-Strip ist das denn, bei dem 20 LEDs für ein Treppenhaus ausreichen?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 14:04 (Dieser Beitrag wurde zuletzt bearbeitet: 28.09.2014 14:08 von ledshit4u.)
Beitrag #5
RE: Treppenlicht
(28.09.2014 13:51)Thorsten Pferdekämper schrieb:  Bau doch Drucksensoren in die Stufen ein ;-)

Grins.... nette Idee...

Aber ernsthaft: es geht ja nicht darum jede Stufe entsprechend zu beleuchten wenn jmd drauf tritt sondern geht darum wenn der untere Sensor ein Signal liefert sollten trotzdem der untere und der obere Sensor weiterhin Signale liefern dürfen:

Anders eventuell mit SwitchCase ausgedrückt:

IF ( SensorUnten == HIGH ) dann Timer1 BEGINN & case=1
IF ( SensorOben == HIGH ) dann Timer2 BEGINN & case=2
IF (Timer1 Abgelaufen UND Timer2 Abgelaufen) dann case=3

switsch(case)
case1: LEDs an von unten nach oben
case2: LEDs an von oben nach unten
case3: LEDs aus

So in etwa denke ich...... Puh...

(28.09.2014 13:51)Thorsten Pferdekämper schrieb:  Bau doch Drucksensoren in die Stufen ein ;-)

Mal ne andere Frage: Was für ein LED-Strip ist das denn, bei dem 20 LEDs für ein Treppenhaus ausreichen?
Gruß,
Thorsten
Es handelt sich um WS2812-ICs welche 6LEDs bedienen, also 6 LEDs pro Stufe....
schaust du: LEDs
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 14:10 (Dieser Beitrag wurde zuletzt bearbeitet: 28.09.2014 14:11 von Thorsten Pferdekämper.)
Beitrag #6
RE: Treppenlicht
Hi,
wie gesagt, Du musst erstmal die delays loswerden. Vorher hast Du kaum eine Chance.
...und welcher Strip ist das?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 14:11
Beitrag #7
RE: Treppenlicht
Jep ich bin dabei...... Millis() und zwei Timer, einer von oben einer von unten... und jede Menge IF-Anweisungen.... lach......
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 14:28
Beitrag #8
RE: Treppenlicht
Hi,
ich baue mir für sowas immer eine eigene Funktion handleLights() oder so, die den ganzen Kram übernimmt. Die wird dann zyklisch aus loop() aufgerufen. Dann wirds etwas übersichtlicher, wenn auch noch Sensorabfragen dazukommen.
Ausserdem würde ich mir ein globales Array machen, in dem für jede LED die Einschaltzeit drinsteht. Ausserdem eine Variable für die gemeinsame Ausschaltzeit.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste