Kennt ihr das? Die bessere Hälfte ist schon im Bett und man tappst mit dem Licht vom Smartphone dann später ins Bett? Ich hab mir aus einem Bewegungssensor, einem Arduino und einer LED-Leiste ein kleines Nachtlicht gebaut. Zusätzlich noch mit einem Potentiometer für die Farbeinstellung. Nichts großes, aber hilft.

Was braucht man für das Projekt:

Alle Links zeigen auf Amazon. Bitte schaut euch die Anzahl und die Preise an und entscheidet selber, welche Komponenten für euch in Frage kommen. Natürlich können die Komponenten auch wesentlich günstiger aus China bezogen werden!

  • Arduino (z.B. Nano als Nachbau)
  • PIR-Bewegungssensor HC-SR501
  • LED-Streifen z.B. WS2812B
  • 220 Ohm Widerstand
  • ELKO, 1000 µF

Noch eine Info bzgl. dem LED-Streifen: Wenn nur weißes Licht gewünscht ist, kann der Aufbau noch weiter vereinfacht werden und dann ist auch eine günstigere Lösung möglich. Ich hatte halt einen WS2812B LED-Streifen ungenutzt hier liegen.

An Werkzeug braucht ihr natürlich Löt-Equipment (Lötkolben, -zinn, Entlötpumpe, Präzisionszange, Schrumpfschlauch, Draht/Litze, Lochrasterplantine usw.), Schraubenzieher – nichts besonderes, aber einen gewissen Grundstock. 

Einfach die Kappe abziehen (ist nur drauf gesteckt), dann sieht man auch welcher Pin für VCC, OUT und GND ist.

Der PIR-Sensor den ich einsetze, hat noch zwei Poti um zwei Dinge einstellen:

  • Haltezeit wie lange bei einer Bewegung OUT auf HIGH gesetzt wird
  • In welchem Bereich die Bewegung ermittelt werden soll

Schaubild:

Jetzt noch die Programmierung:

Wie in einem anderen Beitrag bereits erwähnt, versteht die Programmierung bitte als grobe Orientierung. Meist ist es so, dass die Skripte für mich gut funktionieren, aber wenn Ihr andere Bauteile verwendet, können Anpassungen notwendig sein!

Für dieses Projekt benutze ich die FastLED – Bibliothek: http://fastled.io/
Leider unterstützt die Seite noch kein https – aber kann über die Verwaltung in der Arduino-IDE einfach heruntergeladen und eingebunden werden.

#include <FastLED.h>

#define ANZAHL_LEDS 36
#define COLOR_POT A3
#define LED_PIN 3
#define PIR_PIN 4
    
CRGB leds[ANZAHL_LEDS];

int pir_status = 0;
int color = 0;

void setup() {
  delay(3000); // Falls wir irgendeinen Quatsch machen...
  Serial.begin (9600); 
  FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, ANZAHL_LEDS);
  pinMode(PIR_PIN, INPUT); 
}

void loop() {
  pir_status = digitalRead(PIR_PIN);
  // Serial.print("Status: ");
  // Serial.println(pir_status);
  if (pir_status == HIGH) {
    FastLED.clear();
    // War eine Idee, um das Flackern in bestimmten Positionen vom Poti
    // zu kompensieren - aber mir war es nicht wichtig genug... ;-)
    // color = 0.6 * color + 0.4 * analogRead(COLOR_POT);
    // daher lesen wir den Poti jetzt direkt aus:
    color = analogRead(COLOR_POT);
    color = map(color, 0, 1023, 0, 255);
    fill_solid(leds, ANZAHL_LEDS,  CHSV(color, 255, 255));
    FastLED.show();
  } else {
    FastLED.clear();
    FastLED.show();
  }

  delay(1000);

}

Demo (unterm staubigen Bett):