Upcycling: Lichtschranke aus alter Fernbedienung und IR-Empfänger

Seit einiger Zeit habe ich eine neue Wohnung mit Balkon auf der der Straße abgewandten Seite. Das Schlafzimmer dagegen liegt auf der Straßenseite. Logisch, dass man da im warmen Sommer lieber die Balkontür offen lassen will als die Fenster auf der lauten Straßenseite. Problem dabei: man würde es nicht mitbekommen, wenn nachts jemand über den Balkon ins Haus käme.

Die Lösung ist im Prinzip recht einfach: man bringt eine Lichtschranke an der Balkontür an, die bei Unterbrechung einen Alarm auslöst.

Mein erster Gedanke war, sich eine Laserdiode und ein passendes Empfänger-Modul zu besorgen. Doch dann brachte mich mein Freund Hannes auf eine bessere Idee: Warum nicht einen IR-Empfänger aus einem ausgedienten Unterhaltungselektronik-Gerät und eine ausgediente Fernbedienung zweckentfremden?

Die Vorteile liegen auf der Hand: die IR-Empfänger sind fertige Schaltkreise mit nur wenigen mA Stromaufnahme. Die Fernbedienung braucht auch weniger Strom als eine Laserdiode. Und die Teile bekommt man mit etwas Glück kostenlos aus dem Elektro-Schrott.

Verbindung des Empfängers

Zunächst habe ich mal wieder einen Raspberry-Pi installiert, dazu die notwendigen Python-Bibliotheken, um mit den GPIO arbeiten zu können. Dann auf einem Steckbrett den IR-Empfänger mit dem Raspberry verbunden – das geht ohne weitere elektronische Bauteile. Ich habe hierzu den Masse-Anschluss (GND) des Empfängers mit Pin 6 (oder einem anderen Massepin) des Raspberry verbunden. Den VS-Anschluss habe ich mit Pin 4 (oder 2) des Raspberry verbunden, da der Empfänger eine Versorgungsspannung von 5V benötigt. Den Signalausgang des IR-Moduls habe ich mit Pin 7 des Raspberrys verbunden. Hier sollte im Prinzip auch jeder andere GPIO funktionierten; während meines Probeaufbaus auf einem Breadboard verwendete ich Pin 12. Das Verbindungsschema ist in der linken Hälfte des Bildes zu sehen.

Test des Empfängers

Um den Aufbau bis dahin zu testen, habe ich ein kleines Python-Programm genutzt, welches den Pegel des GPIO-Pins ausgibt:

#!/usr/bin/python

import time
import RPi.GPIO as GPIO

# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)

# Pin 12 auf Input setzen
GPIO.setup(12, GPIO.IN)

state=1
# Dauersschleife
while 1:
    read=GPIO.input(12)
    if read != state:
        state=read
        if state:
            print '#####################################'
        else:
            print '-------------------------------------'
    time.sleep(0.001)

Wenn man dieses Programm ausführt, sollte man
------------------------------------- als Ausgabe sehen, bis man eine Fernbedienung auf den Empfänger richtet. sobald man dies tut, sollten abwechselnd Strichchen und Rauten ausgegeben werden.

Wenn dies funktioniert kann man

einen IR-Sender aus der Fernbedienung bauen

Das ist auch relativ simpel: Ich habe meine alte Fernbedienung geöffnet und die beiden Pole eines Tasten-Feldes (Bild 4) mit einem angelöteten Draht überbrückt (Bild 5). Meine Fernbedienung hatte eine CR2032-Batterie, wird also mit 3V gespeist. Entsprechend habe ich die Spannungsversorgung der Fernbedienung mit dem 3.3V-Anschluss (Pin 1) des Raspberry verbunden (Bild 1, rechte Seite). Die Fernbedienung sendet nun bei vorhandener Betriebsspannung permanent.

Reagieren auf Unterbrechung

Der IR-Empfänger hat intern einen Pull-Up-Widerstand, d.h. wenn kein Infrarot-Signal ankommt, liegt der Raspi-GPIO-Pin ein HIGH-Signal an. Erreicht dagegen das Signal der Fernbedienung den Empfänger, werden die "Morsecodes" der Fernbedienung an Pin 7 abgeliefert, d.h. der Zustand wechselt recht schnell zwischen HIGH und LOW.
Um eine Unterbrechung des Lichtstrahls zu detektieren, muss man also softwaremäßig untersuchen, ob für eine längere Zeit ein HIGH-Signal am Pin anliegt. Dies macht der folgende Code:

#!/usr/bin/python

import time
import RPi.GPIO as GPIO

# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)

# Pin 7 auf Input setzen
GPIO.setup(7, GPIO.IN)

count=0
# Dauersschleife
while 1:
    read=GPIO.input(7)
    if read:
        count=count+1
    else:
        count=0
    if count>330:
        break
    time.sleep(0.0005)

Nach dem Initialisieren des Pins wird in sehr kurzen Abständen geprüft, ob ein LOW-Pegel anliegt. Immer wenn dies der Fall ist, wird ein Zähler auf Null gesetzt. Überschreitet dieser Zähler den Wert 330 (experimentell ermittelt), so wird das Programm beendet. Das bedeutet, das Programm läuft genau so lange, bis bei 330 Überprüfungen in Folge kein LOW-Pegel gemessen wird.
Dieses einfache Python-Programm kann innerhalb von anderen Scripten verwendet werden, um die Ausführung zu blockieren, bis die Lichtschranke unterbrochen wird.

Einstellung

Im Vergleich zu einer Laserdiode streut die IR-Diode der Fernbedienung das Licht sehr stark. Gleichzeitig ist der Empfänger sehr empfindlich, was dazu führt, dass auch bei Unterbrechung der direkten Sichtlinie zwischen Sender und Empfänger der Empfänger Signale vom Sender empfängt. Dies ist natürlich bei Fernbedienungen erwünscht. In unserem Anwendungsfall ist das aber sehr unpraktisch, da ein Einbrecher einfach durch die Lichtschranke gehen kann, ohne das Signal zu unterbrechen. Um dies zu vermeiden, habe ich einfach ein Stück schwarze Gummiisolierung (Bild 6) von einem Kabel über die IR-Sende-Diode gesteckt, so dass dieser weniger streut.

Außerdem wurden zur Spannungsstabilisierung noch RC-Glieder bei Sender und Empfänger verbaut.

Fazit:

Mit minimalem Material-, Schaltungs- und Programmier-Aufwand kann aus alten Komponenten eine einfache Lichtschranke gebaut werden. Diese ist weniger präzise als ein Modul mit Laserdiode, hat aber auch einen deutlich geringeren Stromverbrauch. Mittels einfacher Kappen auf Empfänger und/oder Sender konnte die Streuung soweit reduziert werden, dass eine ausreichende Präzision für die Nutzung als Lichtschranke erreicht wird.

Neuen Kommentar hinzufügen

Eingeschränktes HTML

  • Erlaubte HTML-Tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Website- und E-Mail-Adressen werden automatisch in Links umgewandelt.