7602684102_ac3884cade_k

GPIO, Projekte

Überwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais

Neben Überwachungskamera und Bewegungssensoren ist für ein selbst gebautes Überwachungssystem auch die Auskunft über geöffnete Fenster und Türen interessant. Eine Überprüfung mit Infrarot Lichtschranken oder anderen Methoden wäre zwar sicher auch denkbar, ist aber in diesem Falle um einiges komplizierter.

Wie man ganz einfach mit einem Magnetschalter z.B. den Status des Fensters überprüfen kann wird in diesem Tutorial gezeigt.



 

Zubehör

Glücklicherweise ist nicht viel nötig um den Schalter anzubringen und die meisten Teile sind wahrscheinlich in den meisten Basterkisten bereits vorhanden. Diese Bauteile habe ich verwendet:

 

Aufbau

Der Aufbau ist wie im Bild zu entnehmen. Als Input Pin verwende ich GPIO 17 (Board Pin 11):

magnet kontakt_Steckplatine

 

Magnetschalter

Das verkabelte Modul lässt durch den dazugehörigen Magneten eine Spannung fließen-

Welches der beiden Kabel des Magnetschalters an die Basis des Transistors angeschlossen wird, spielt dabei keine Rolle. Dabei sollte das freie Ende am Fenster/Tür befestigt werden und jenes mit Kabel am besten an den festen Tür-/Fensterrahmen.

Falls die beiden Teile zu weit voneinander entfernt sind kann es sein, dass nur ein sehr geringer Strom durch den Transistor fließt, der nicht ausreicht, um zu schalten. In diesem Fall kannst du versuchen statt 3.3V den 5V Anschluss des Pi’s zu nehmen, aber solltest dann unbedingt einen Widerstand zwischen Transistor-Emitter und GPIO setzen.

Man könnte diese Schaltung natürlich auch als Pull-Up Widerstand aufbauen und hätte dadurch erst bei geöffnetem Fenster ein HIGH Signal.

 

 

Steuerung

Die Ansteuerung ist sehr simpel und kann in dieser Form in vielen Projekten zum Einsatz kommen. Statt meinem nachfolgendem Python Code kann ein ähnlicher Code auch z.B. in C++ (mit Hilfe von WiringPi) erstellt werden.

Nun aber zum Code:

sudo python

Solange das Fenster und damit auch der Magnetschalter geschlossen ist, wird am Pin eine 1 angezeigt. Sobald der Kontakt unterbrochen wird schaltet der Transistor nicht mehr und damit wird am GPIO eine Null angezeigt. Damit kannst du abfragen, ob ein Fenster/Tür geöffnet ist oder nicht.

Wer darauf warten möchte, bis sich der Zustand ändert, kann die folgende Funktion verwenden:

Wobei in diesem Fall eine Funktion mit dem Namen my_callback() vorhanden sein muss, die dann aufgerufen wird. Hierbei sind auch die Zustande GPIO.RISING und GPIO.FALLING statt GPIO.BOTH möglich.

 

 

Bild: Toby Golding/Flickr(CC BY 2.0)


, , , ,


16 Kommentare

  1. Spike sagt:

    Hallo,

    super Tutorial danke!

    Ich würde gerne mehre Magnetschalter an den MCP23017 hängen. Kann ich den Aufbau aus dem anderen Tutorial einfach übernehmen? Also den Taster gegen einen Magnetschalter tauschen?

    Mir ist es egal ob geschlossen high oder low ist, würde es dann entsprechend im Skript anpassen oder gibt es da Empfehlungen bezüglich „Belastung“ des Chips oder Stromverbrauch…?

    • Felix sagt:

      Auch wenn der MCP23017 bis zu 5.5V verträgt, solltest du wegen den GPIOs nicht mehr als 3.3V an den Magnetschalter hängen. Ansonsten kannst du den MCP23017 wie die GPIOs verwenden (außer, dass der Aufruf nicht direkt stattfindet, aber dafür kannst du ja eine Hilfsfunktion bauen).

  2. Jasmin sagt:

    Hallo,
    Ein super Tutorial/Projekt. Ich habe mich dazu entschlossen, dies für die Schule zu nehmen. Jedoch ist mir nich nicht klar, was die rote 17 in Zeile 5 soll. Es wäre nett, wenn ich schnell eine Antwort bekäme.
    LG Jasmin

    • Felix sagt:

      Meinst du die Farbe oder die Bedeutung? Die Farbe ist vollkommen unwichtig und soll nur den Code lesbarer machen.

  3. Stefan sagt:

    Hallo,

    kannst du mir erklären, warum du mit einem Transistor arbeitest? Würde das auch mit einem reinen Widerstand funktionieren oder würde man dann zu oft „Fehlalarm“ bekommen?

    Gruß Stefan

    • Felix sagt:

      Wenn das Magnet Relais nicht nah genug am Magneten ist kann es sein, dass die Treshold Spannung der GPIOs nicht überschritten wird und daher nicht erkannt wird. Der Transistor hat eine geringere Schaltspannung, wodurch sichergestellt wird, dass der Input GPIO 3.3V angelegt bekommt. Ein reiner Widerstand hätte einen gegenteiligen Effekt.

  4. Stefan sagt:

    Hallo Felix,

    ich habe das ganze jetzt mal nachgebaut. Ich habe es mit einem Event Dedect auf einen fallenden Pegel angegeben.

    An meinem neuen Raspberry Pi 2 läuft das ganze auch wunderbar Er löst ein Event aus und fertig. Baue ich es allerdings an meinen alten Rapberry Pi B Modell (26GPIOs) erhalte ich ständig Events, das der Pegel fällt.

    Kannst du mir da ggf. weiterhelfen, was ich machen könnte?

    Viele Grüße
    Stefan

    • Stefan sagt:

      Nach gefühlten tausenden Messungen habe ich herausgefunden an was es liegt. Beim alten Pi, habe ich am Transistor eine geringe aber schwankende Spannung anliegen obwohl der Magnet geöffnet ist. Keine Ahnung wie er dann Spannung bekommt, aber das ist der Auslöser.

      Ich habe jetzt anstelle des Transistors einen Optokoppler verwendet. Der löst trotz der anliegenden „Phantomspannung“ nicht aus. Dadurch liegt am 2 Stromkreis dauerhaft 0V an.

      Viele Grüße
      Stefan

  5. Stefan sagt:

    Hallo und Guten Tag!

    Klasse Tutorial!
    Es währe wohl auch möglich z.b. diesen Reed Schalter zu verwenden..

    http://www.pollin.de/shop/dt/NDgyOTc1OTk-/Haustechnik/Sicherheitstechnik/Melder/Magnet_Reedkontakt_MK_10NC.html

    Grüße und einen schönen Tag
    Stefan

  6. Tim A. sagt:

    Bei mir ist GPIO 17 schon belegt. Ich habe in der unteren Reihe den 6,7 Pin belegt. Kann man auch einen anderen GPIO verwenden? Ich gehe davon aus ja, aber welchen? Ich hab Angst was kaputt zu machen 🙁

  7. Jan sagt:

    Moin,

    ich habe gerade diese Anleitung gefunden (bitblokes.de/2015/06/das-raspberry-pi-als-wassersensor-benutzen-e-mail-als-benachrichtung) da ich die abe grausam finde dachte ich ob es nicht möglich ist. Den Magnetschalter durch ein Kabel zu ersetzen, damit möchte ich ein Signal bekommen ob meine Regenwassertonne im Garten voll ist.

  8. Patrick sagt:

    Wirklich sehr knackige Darstellung, vielen Dank für das Tutorial.

    Da ich nicht so der Elektronik Freak bin, ich die Schaltung aber sehr gerne verstehen würde, haben sich mir bei Fragen gestellt.

    Der Transistor verstärkt ja den Strom (dieses Modell wohl 200fach). Durch den 10k Widerstand zwischen Emitter und Erde fließt dort, wenn überhaupt, nur ein sehr kleiner Strom von 0,3 mA*200 = 60mA, oder?
    Aber welcher Strom fließt in den Input Pint 17, wenn der Magnetschalter den Stromkreis schließt? Welcher Widerstand herrscht dort, heißt, geht der komplette durch den Transistor verstärkte Strom dann auf GPIO Input Pin 17? Kann dieser Strom nicht den Raspberry Pi zerstören?
    Handelt es sich (vom Emitter abgehend) um eine Parallelschaltung?

    Leider hab ich wohl gerade ein Brett vorm Kopf….

    LG
    Patrick

    • Felix sagt:

      Es wird oft nur die maximale Stromstärke angegeben, was aber nicht bedeutet, dass diese auch genutzt wird. Vielleicht kommt dir das Beispiel mit einem Fluss bekannt vor, in dem die Spannung (U) die Schnelligkeit des Flusses darstellt und die max. Stromstärke (I) dessen Breite.
      Bspw wenn du eine LED hast, welche 2.0V und 2mA braucht, allerdings deine Stromquelle 3.3V liefert, dann musst du die restliche Spannung mit einem Widerstand „vernichten“. Dabei gilt die Regel U=R*I bzw. R = U/I also R = 1.3/0.002 = 650Ohm.
      Bei den GPIOs ist ebenso wichtig, dass nicht mehr als 3.3V ankommen. Solange du also nicht den 5V Pin nutzt, stellt es keine Gefahr für den Raspberry Pi da. Du könntest den Transistor sogar komplett weglassen, wenn du einen Pull Down Widerstand nimmst.

Schreibe einen Kommentar

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

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!