Zu hell – zu dunkel – Batterien alle.
Die typischen Probleme bei einem “g’scheiten” Nachtlicht.
Die Lösung: ein Arduino Nano mit ein paar LEDs und einem Diffusor.
Als technisches Highlight: Touch-Bedienung für die Leuchtstärke.
Bei dieser Schaltung wird der interne millis()-Counter genutzt, um die verstrichene Zeit zu messen. Über die Touch-Taster können die beiden Helligkeitsstufen: hell und dunkel angesteuert werden. Wird die Dunkel-Taste länger gedrückt, erlischt das Licht.
Ich habe hier gelbe und rote LEDs genommen, das ergibt ein schönes, warmes Licht. Zu Beginn ist das Licht eher gelb und wird gegen Ende dann rötlich.
Im Programmcode lassen sich die Timer-Werte und die Anfags- und End-Helligkeiten für gelb und rot festlegen. Ist der Timer zu kurz, das Licht zu dunkel oder zu hell, dann wird einfach mal kurz ein neues Software-Update aufgespielt.
So kann das Licht den individuellen Bedürfnissen schnell angepasst werden.
Es gibt auch einen Haupt An- und Ausschalter. Der millis()-Counter reicht nur bis 24 Tage, zwischendurch sollte das Teil also auch mal ausgeschaltet werden.

Die Anteuerung der LEDs erfolgt über einen Transistor, damit können mehrere LEDs an einem Schaltausgang am Arduino betrieben werden. Ich nutze hier einen Arduino Pro mini, ohne USB-Port. Klein und preiswert.

Hier die Bauteile:

Zusammengebaut mit den Tastern.

Und das wird das Gehäuse.

So schaut das Nachtlicht dann fertig aus.

Betrieben werden kann es an jedem USB-Netzteil. Der Anschluss erfolgt über eine Micro-USB-Buchse.

Hier der Programm-Code:

int LEDgelb = 10;          // PWM-Pins mit 490Hz
int LEDrot = 11;

int Key1 = 3;             // Anschluss Touch-Taster
int Key2 = 4;

boolean longPress = false;
boolean pressed = false;
long keyTimer = 0;
long keyPressed = 3000;

long myTimer = 0;
long myDelay = 36000;      // Intervall zur Verdunkelung

int gelbhell = 255;
int gelbdunkel = 50;
int gelbstep = 5;
int gelbactual = gelbhell;

int rothell = 200;
int rotdunkel = 80;
int rotstep = 5;
int rotactual = rothell;

  

void setup() {
  
  pinMode(LEDgelb, OUTPUT);
  pinMode(LEDrot, OUTPUT);

  pinMode(Key1, INPUT);
  pinMode(Key2, INPUT);
}

void loop() {

  // schalte LEDs auf den aktuellen Wert
  analogWrite(LEDgelb, gelbactual);
  analogWrite(LEDrot, rotactual);

  // check die Taster
  if (digitalRead(Key1) == HIGH) {          // wieder hell
    gelbactual = gelbhell;
    rotactual = rothell;
    longPress = false;
  }
  if ((digitalRead(Key2) == HIGH) && (longPress == false)) {         // abgedunkelt
    gelbactual = gelbdunkel;
    rotactual = rotdunkel;
  }
  
  if (digitalRead(Key2) == HIGH) {           // langes Drücken
    if (pressed == false) {
      keyTimer = millis();
      pressed = true;
    }
    if (millis() > keyTimer + keyPressed) {
      longPress = true;
    }
  }
  else {
    pressed = false;
  }
  
  if (longPress == false) {
    if (millis() > myTimer + myDelay) {     // Timer abgelaufen
      myTimer = millis();
      gelbactual = gelbactual - gelbstep;   // und dunkler
      rotactual = rotactual - rotstep;
      Serial.println("Dunkler");
      if (gelbactual < gelbdunkel) {        // Minimalwert erreicht
        gelbactual = gelbdunkel;
      }
      if (rotactual < rotdunkel) {
        rotactual = rotdunkel;
      }
    }
  }
  else {
    gelbactual = 0;
    rotactual = 0;
  }

}

Viel Spaß beim Nachbauen.

Ein stimmungsvolles Nachtlicht

Beitragsnavigation


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert