LED Küchenbeleuchtung mit berührungslosem Schalter

 · 3 min read
 · Markus
Table of contents

Warum?

Nachdem unsere sicher 30 Jahre alte Beleuchtung der Küchenarbeitsplatte auf Neonröhrenbasis mit einem lauten Knall seinen Geist aufgegeben hat, musste ein Ersatz her. Die erste Idee: Neue Beleuchtung von IKEA. Leider werden da inzwischen unheimlich viele Einzelteile benötigt und bei Funkschaltern sehe ich persönlich keinen Mehrwert. Deshalb war mein neuer Plan: Selbst bauen.

Ziele

  • Gleichmäßige Beleuchtung über die gesamte Arbeitsfläche
  • Links und rechts getrennt schaltbar
  • Schalter ohne Berührung (zum Beispiel bei nassen Händen)
  • Beim Einschalten soll das Licht langsam angehen und beim Ausschalten langsam ausgehen
  • Bisschen Wert auf Nachhaltigkeit: Alles kann wieder rückgebaut und woanders weiterverwendet werden

Benötigte Komponenten

Verschaltung

Code

Einfachheitshalber beschreibe ich den Code hier nur in Auszügen, größtenteils sollte dieser nach dem Lesen der Kommentare selbsterklärend sein.

In der setup()-Methode werden die Pins definiert, an denen der AO-Anschluss des Infrarot-Modules und der Trigger-PIN des MES-Fet-Moduls angeschlossen sind.

pinMode(leftIRSensorPin,INPUT);
pinMode(leftLedPin,OUTPUT);

Im der loop()-Methode werden nun in regelmäßigen Abständen die Sensoren ausgelesen. Sollte ein definierter Wert für eine definierte Zeit überschritten werden, werden die LEDs geschaltet (an wenn aus, aus wenn an).

leftIRSensorValue = analogRead(leftIRSensorPin);
if(leftIRSensorValue < iRSensorValueLimit) {
    if(leftStartMillis==0) {
        // Startzeit merken
        leftStartMillis==millis();
    }
    if(millis()-leftStartMillis > minimalSwitchPressDuration) {
        if(not leftLedIsOn) {
            // schalte die LEDs langsam an
            for (int i=0; i <= 255; i++) {
                analogWrite(leftLedPin, i);
                delay(5);
            }
            leftLedIsOn = true;
        } else {
            // schalte die LEDs langsam aus
            for (int i=255; i >=0; i--) {
                analogWrite(leftLedPin, i);
                delay(5);
            }
            leftLedIsOn = false;
        }
    } 
} else {
    leftStartMillis=0;
}

Den kompletten Sketch könnt ihr hier herunterladen.