Bewegungssensor mit Neopixel

Guten Abend an alle.
Ich habe ein Arduino UNO mit dem ich seit Kurzem experimentiere.
Da bin ich auf eine Idee gekommen.
Folgendes möchte realisieren:
In der Küche wird ein 3m langer WS2812b strip als indirekte Beleuchtung angebracht.
In der nähe der Tür soll ein Bewegungsmelder/Lichtschranke angebracht.
Szenario 1: Ich komme in die Küche, der Sensor erfasst den Durchgang = LED-Streifen leuchtet im zB. Hellgrün.
Gehe ich aus der Küche raus, der Sensor erfasst den Durchgang = LED- Streifen geht aus.
Szenario 2: Ich bin in der Küche und brauche Dauerlicht, betätige den touchsensor = LED-Streifen leuchtet Weiß.

Hier im Forum habe ich schon nach ähnlichen Projekten gesucht, bin nur auf einen Thread gestossen, der mir leider nicht weiter geholfen hat.

Als Bewegungssensor habe ich einen E18-D80nk

und als touchsensor habe ich diesen:

Für den Bewegungssensor folgenden Code:

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN_LED 9 
#define NUMPIXELS 24
Adafruit_NeoPixel pixel = Adafruit_NeoPixel(NUMPIXELS, PIN_LED, NEO_GRB + NEO_KHZ800);


int i = 0;
int var,x=0;

void setup()
{
  pinMode(13, OUTPUT);   
  pinMode(3, INPUT_PULLUP); 
  pinMode(PIN_LED, OUTPUT);
  Serial.begin(9600);
  #if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  pixel.begin();
  pixel.show();
  
}

 void loop()   
{

  if (digitalRead(3) == LOW && x==0) 
  {
    digitalWrite(13, LOW);
    x=1;
    Serial.println(var);
  }
    else 
  {
    delay(10);
  }


 if (digitalRead(3) == HIGH && x==1) 
  {
  digitalWrite(13, HIGH);
  x=2;
  Serial.println(var);
  }
    else 
  {
    delay(10);
  }


 if (digitalRead(3) == LOW && x==2) 
  {
  digitalWrite(13, HIGH);
  x=3;
  Serial.println(var);
  }
    else 
  {
    delay(10);
  }


 if (digitalRead(3) == HIGH && x==3) 
  {
  digitalWrite(13, LOW);
  x=0;
  Serial.println(var);
  }
    else 
  {
    delay(10);
  }
  
 if (digitalRead(13) == HIGH && digitalRead(3) == HIGH)
 { 
   for(int i = 0; i<NUMPIXELS;i++)
  {

   pixel.setPixelColor(i, pixel.Color(160,50,60)); 
   pixel.show();
  }
 }
   else
 { 
   for(int i = 0; i<NUMPIXELS;i++)
  {

   pixel.setPixelColor(i, pixel.Color(0,0,0)); 
   pixel.show();
  }
 }
}

für den touchsensor diesen:

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define LED_PIN  9
#define NUMPIXELS     24
Adafruit_NeoPixel pixel = Adafruit_NeoPixel(NUMPIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

int delayval = 150; // delay for half a second
const int TouchPin = 6;

int i = 0;

void setup() {

  pixel.begin();  

}

void loop() {
  int sensorValue  = digitalRead(TouchPin);
  i=0;
  if (sensorValue == 1)  
  {
    pixel.setPixelColor(i, pixel.Color(0, 150, 0)); 
  } else {
    pixel.setPixelColor(i, pixel.Color(0, 0, 0)); 
  }
   
    pixel.show(); 

    delay(delayval); 
}

was mir nicht gelingt ist, diese 2 codes zu kombinieren.
Vielleicht ist jemand hier, der versteht was ich vorhabe und mir einen Tip geben?!

Das ist noch nicht zuende überlegt. Wenn die 2. Person rein geht, stehen beide im Dunkeln.
Du musst versuchen über 2 Lichtschranken die Bewegungsrichtung zu erfassen und zählen wieviele Leute drin sind.

Gruß Tommy

Bist du sicher, das das ein Bewegunssensor ist ?
Für mich sieht es wie ein "Näherungssensor aus, der auch eine geringe Reichweite hat.
Poste mal ein Datenblatt davon

Tommy56:
Das ist noch nicht zuende überlegt. Wenn die 2. Person rein geht, stehen beide im Dunkeln.
Du musst versuchen über 2 Lichtschranken die Bewegungsrichtung zu erfassen und zählen wieviele Leute drin sind.

Gruß Tommy

Ach, stimmt ja :fearful: daran hab ich wirklich nicht gedacht.
Eine zweite Lichtschranke habe ich noch da.
Wie stelle ich das mit dem Zählen an?

HotSystems:
Bist du sicher, das das ein Bewegunssensor ist ?
Für mich sieht es wie ein "Näherungssensor aus, der auch eine geringe Reichweite hat.
Poste mal ein Datenblatt davon

Datenblatt E18-D80nk

laut Datenblatt: Sensing range: 3cm to 80cm (depends on obstacle surface)

Das ist etwas wenig

Die Richtung der Personen siehst Du (wenn sie einzeln vorbeigehen):

Sensor 1 löst vor dem Sensor 2 aus: Person geht hinein. Anzahl Personen um 1 erhöhen

Sensor 2 löst vor Sensor 1 aus Person geht raus; Anzahl Personen um 1 vermindern.

Grüße Uwe

Ok, das ist kein Bewegungssensor.
Könnte aber mit der Reichweite funktionieren, je nachdem wie er montiert wird.

Mit einem echten Bewegungssensor hättest du evtl. weniger Probleme.

Wenn die Personen haufenweise auftreten hilft nur ein Drehkreuz.
Grüße Uwe

HotSystems:
Mit einem echten Bewegungssensor hättest du evtl. weniger Probleme.

Kommt drauf an wie kurz der den Ausgang schaltet. 2 Personen im Abstand von 1 m Sollten die Sensoren schon außeinanderhalten können.

Grüße Uwe

uwefed:
Wenn die Personen haufenweise auftreten hilft nur ein Drehkreuz.
Grüße Uwe

Oder RFID-Eingangskontrolle.

uwefed:
Kommt drauf an wie kurz der den Ausgang schaltet. 2 Personen im Abstand von 1 m Sollten die Sensoren schon außeinanderhalten können.

Grüße Uwe

Da würde ich den Ausgang auf eine praktikable Zeit stellen.
Das mache ich bei uns im Flur mit einer Zeit von ca. 20 sek und das funktioniert optimal.

Je nachdem wie groß die Küche ist, kann man ja auch 2 Bewegungsmelder installieren.
Die Personen, die sich aufhalten sind ja nicht komplett Bewegungslos, das reicht doch immer

Hallo,

Tip Aufgabe in Teilaufgabe aufteilen und Schrittweise erweitern.

Lass das mit dem "Rausgehen" erst mal sein und mach das wie es ein normaler Bewegungssensor auch macht.

Bewegung erkannt -> Licht geht an und nach z.B 2 Minuten wieder aus. Mach die Zeit nicht mit delay() sondern mit millis() damit das mit dem nächsten Schritt etwas werden kann.

Wenn das klappt kannst Du einen Zweiten Bewegungssensor dazu nehmen und den Sketch so ändern das du erkennst ob jemand hinein oder herausgekommen ist.

Sensor A wird vor Sensor B erkannt -> es geht jemand hinein
Sensor B wird vor Sensor A erkannt -> es geht jemand hinaus

Wenn dann keiner mehr im Raum ist lässt Du die LED ausgehen.

Wenn das klappt nimmst Du den Touch dazu und und überlegst Dir die Logik dazu. Das kannst Du bis hier hin erst mal alles mit der LED an pin 13 testen. Das mit dem LED Streifen ist ja nur ein Nebenschauplatz den Du später ganz leicht in je einer Funktion unterbringen kannst.

Heinz

Hier noch eine kleine Anregung zum IR-Bewegungsmelder, so wie ich ihn in meinen Projekten einsetze.

WOW! Mit soviel Input habe ich nicht gerechnet. Vielen lieben Dank erst einmal. Habe gerade in meine Bastelkiste geschaut, Bewegungsmelder und Lichtschranken bis 6m Reichweite gefunden. Ein Drehkreuz war leider nicht mit dabei :stuck_out_tongue:
Werde erstmal die ganzen Ideen verarbeiten.

HotSystems:
Da würde ich den Ausgang auf eine praktikable Zeit stellen.
Das mache ich bei uns im Flur mit einer Zeit von ca. 20 sek und das funktioniert optimal.

Je nachdem wie groß die Küche ist, kann man ja auch 2 Bewegungsmelder installieren.
Die Personen, die sich aufhalten sind ja nicht komplett Bewegungslos, das reicht doch immer

Ah Du meinst die Bewegungsmelder nicht für die Persoenzählerei zu verwenden sondern ob jemand im Raum ist.

Mir gefällt schon nicht wenn man im WC pinkelt und dann mitten in der Arbeit plötzlich im Dunkeln steht weil beim Zielen man sich zu wenig für den Bewegungsmelder bewegt.

In der Küche sehe ich ein Ähnliches Problem; nicht mit dem Zielen sondern mit dem ruhig herumsitzen.

Man liest ja schon mal ruhig die Zeitung und da sitzt man schnell im Dunkeln.

Grüße Uwe

Die 6 m Lichtschranke müßte reichen.
Grüße Uwe

uwefed:
Ah Du meinst die Bewegungsmelder nicht für die Persoenzählerei zu verwenden sondern ob jemand im Raum ist.

Ja, genau…

Mir gefällt schon nicht wenn man im WC pinkelt und dann mitten in der Arbeit plötzlich im Dunkeln steht weil beim Zielen man sich zu wenig für den Bewegungsmelder bewegt.

Dann muss der Bewegungsmelder anders moniert werden. :wink:

In der Küche sehe ich ein Ähnliches Problem; nicht mit dem Zielen sondern mit dem ruhig herumsitzen.

Man liest ja schon mal ruhig die Zeitung und da sitzt man schnell im Dunkeln.

Dafür soll ja noch ein Taster an die Technik ran.

Und wenn, es sind alles nur Ideen/Gedanken, die dem TO helfen sollen.

uwefed:
Die 6 m Lichtschranke müßte reichen.
Grüße Uwe

Fürs WC ? ? ?
:grin:

Rentner:
Hallo,

Tip Aufgabe in Teilaufgabe aufteilen und Schrittweise erweitern.

Lass das mit dem “Rausgehen” erst mal sein und mach das wie es ein normaler Bewegungssensor auch macht.

Bewegung erkannt → Licht geht an und nach z.B 2 Minuten wieder aus. Mach die Zeit nicht mit delay() sondern mit millis() damit das mit dem nächsten Schritt etwas werden kann.

Wenn das klappt kannst Du einen Zweiten Bewegungssensor dazu nehmen und den Sketch so ändern das du erkennst ob jemand hinein oder herausgekommen ist.

Sensor A wird vor Sensor B erkannt → es geht jemand hinein
Sensor B wird vor Sensor A erkannt → es geht jemand hinaus

Wenn dann keiner mehr im Raum ist lässt Du die LED ausgehen.

Wenn das klappt nimmst Du den Touch dazu und und überlegst Dir die Logik dazu. Das kannst Du bis hier hin erst mal alles mit der LED an pin 13 testen. Das mit dem LED Streifen ist ja nur ein Nebenschauplatz den Du später ganz leicht in je einer Funktion unterbringen kannst.

Heinz

Das ist ein guter Ansatz. Das mit Millis hab ich mir auch schon angeguckt. Verstehe die Millisfunktion, aber leider nicht wie man es anwendet. Da muss ich mich erstmal reinlesen. Vielen Dank

kucko:
Das ist ein guter Ansatz. Das mit Millis hab ich mir auch schon angeguckt. Verstehe die Millisfunktion, aber leider nicht wie man es anwendet. Da muss ich mich erstmal reinlesen. Vielen Dank

Das lernen von millis() ist sehr wichtig.
Baue es erst mal mit delay() auf und schau ob es funktioniert, dann direkt auf millis() umstellen.