Alarmanlage – Kabellose Überwachung von Fenstern und Türen mit dem Raspberry Pi

Kabellose Überwachung von Fenstern und Türen mit der Raspberry Pi

Inhaltsverzeichnis

Durch das Projekt Temperatur Funk Sensor bin ich auf die Idee gekommen einen kabellosen Tür-/Fenstersensor zu basteln. Grundgerüst ist dabei das Projekt „TinyTX Wireless Sensor„. Darauf baut dieses Projekt eigentlich zum größten Teil auf. Nach jeder Statusänderung (geöffnet o. geschlossen) soll der Raspberry Pi ein Funk Signal erhalten welches weiter verarbeitet wird. Verwendungszweck könnte sein: Tür-/Fenster Überwachung, Alarmanlage usw…

Matriel & Hardware

Empfänger

Sender

Sonstiges

Sender

Der Sender muss aus  verschiedenen Bauteilen zusammen gelötet werden. Ich habe mir 10 PCBs des TinyTX3 von iteadstudio.com (Chinesiche Firma) fertigen lassen.

Auf dieser Platine habe ich ein Sendermodul (RFM12B) , zwei Kerkos (100nf) sowie einen  14 Pin IC Sockel verlötet. Durch den Sockel kann ich den ATTINY84 zum programmieren herunter nehmen und wieder drauf stecken. Man kann den ATtiny auch fest verlöten. Vorher sollte er aber programmiert werden.

Wenn man ihn danach wieder programmieren möchte muss man sich einen „IC Test Clip“ besorgen. Damit ist es möglich auf fest verlötet Microcontroller zu programmieren.
Auf dem ATtiny läuft ein Sketch welches ebenfalls von Nathan zur Verfügung gestellt wird.


Stromversorgung: Batterien

Ich habe mir einen Batteriehalter mit Schalter (An/Aus) besorgt in dem 3 AAA Batterien (jeweils 1,5V) Platz finden. Ich habe mir noch einen PSK Stecker an die Batterien gelötet, damit der Stecker auch immer korrekt angeschlossen wird.

Empfänger Magnetkontakt

Auf Ebay habe ich günstige Magnetschalter gefunden die wirklich klasse verarbeitet sind.
Diese Schalter lösen aus, sobald sich das Gegenstück zu weit von dem eigentlichen Magnetschalter entfernt. Der Magnet wird also an dem Türblatt befestigt und der Magnetkontakt (Schalter) wird an der Zarge bzw Verkleidung angebracht.

Der Empfänger ist ein fertiges Modul für den Raspberry Pi. Es ist das RFM12Pi V2 (Jetzt rfm69pi v3). Man kann sich natürlich auch den Empfänger selber zusammen löten, was durchaus günstiger ist. Mehr dazu findet ihr im Thread von meigrafd.

Antenne

Als Antenne habe ich einen 0,8mm Kupferdraht benutzt den ich auf 165mm abgelängt habe. Dieser wird ebenfalls auf das TinyTX3 Board gelötet. Es ist auch möglich einen „Spirale“ als Antenne zu benutzten, welche vielleicht sogar im Gehäuse Platz finden kann. Das habe ich aber noch nicht ausprobiert und kann auch zu der Reichweite noch nichts sagen.

Gehäuse

Ich habe zuerst ein kleineres Gehäuse gehabt und mit einem Dremel bearbeitet. Jetzt habe ich mich für folgendes Gehäuse entschieden:
Universal-Gehäuse ABS Licht-Grau (RAL 7035) 112 x 62 x 31 Hammond Electronics
Ich habe etwas Schaumstoff zurecht geschnitten und als unterste Lage verwendet. Darauf kommt dann das TinyTx Board samt Batteriehalter. Auf dem batteriehalter und dem TinyTx habe ich zusätzlich Schaumstoff platziert damit es durch den Druck vom gehäusedeckel nicht verrutschen kann. Und das tut es auch nicht.
Damit die Kabel nach außen geführt werden könne habe ich in Gehäuse und Gehäusedeckel eine kleine Öffnung gefräst.

Derzeit habe ich 4 Sender zusammen gelötet!

Software zum empfangen

Voraussetzen ist ein Raspberry Pi mit aktuellen Raspbian. Vorab bitte per „sudo raspi-config“ das Dateisystem vergrößern.
Das Empfängermodul wird einfach nur auf die GPIO Stiftleiste aufgesteckt und schickt alle empfangenen Daten per RS232 Schnittelle an den Raspberry Pi weiter. Es muss also kein Treiber oder sonst irgendwas installiert werden.
Ich habe ein Python Script geschrieben, mit dem ich die Werte der Sender abfange und in der Konsole ausgebe.

Geht wie folgt vor:

Mit diesem Befehlen installiert ihr für Python die serielle Unterstützung und „deaktiviert“ (bzw befreit) die RS232 Schnittelle. Diese ist auf dem Raspberry Pi standardmäßig für die Konsoleneingabe konfiguriert.

Mit diesem einfachen Python Script könnt ihr nun die einzelnen Sender auslesen/empfangen:
tinyserial.py

Die Ausgabe sieht wie folgt aus:

Wenn eure Batterien allerdings mehr als 4,5 Volt liefern müsst ihr das Script hier anpassen:

Sonst werden euch falsche Werte ausgegeben.

In Zukunft möchte ich die Berechnung allerdings nicht mehr auf der Seite des Empfängers machen sondern gleich die korrekten Werte vom Sender empfangen. Dazu muss ich allerdings noch die Sender umprogrammieren. Das steht noch auf meiner To-Do Liste.

Software für die Sender

Hier findest du den Sketch der auf den ATtiny programmiert werden muss.
Wie man das ganze auf den ATtiny bekommt werde ich zu einem späteren Zeitpunkt erklären.

Sketch:

Die Sender ID legt ihr hier fest:

Sketch auf Sender(ATtiny) hochladen

Arduino und ATiny verkabeln:

Ich habe mir mit einer Lochrasterplatine ein kleines Board zusammen gelötet welches ich direkt auf den Arduino Uno stecken kann.

Schritt 1: Arduino IDE, WinAVR sowie Treiber installieren

Ardunio Uno – Treiberinstallation Windows
Als nächstes installiert ihr: WinAVR

Schritt 2: ATtiny Core installieren

Als erstes ändert ihr euer Sketch Verzeichnis auf z.B „C:Sketches

  • Arduino IDE starten
  • Datei -> Einstellungen
  • Sketchbook Speicherort auf „C:Sketches“ ändern
  • Ausfürliche Ausgabe anzeigen während: [X]Kompilierung und [X] Upload

Da die Arduino IDE standardmäßig keine ATtinys ansprechen kann, muss die ATtinyCore installiert werden.
Folgende Datei herunterladen:

Den Ordner „tiny“ kopiert ihr nun in folgendes Verzeichnis: „C:Sketcheshardware„.
Als nächstes geht ihr in den Ordner „C:Sketcheshardwaretiny“ und benennt folgende Datei um:

  • Prospective Boards.txt zu boards.txt

Nun erscheinen unter Tools -> Board viele ATtinys!

Schritt 3: Den Arduino zum ISP machen

Wir benutzten den Arduino Uno nur dazu um die ATtinys zu programmieren.
Deswegen müssen wir erst einmal den Arduino zum ISP Programmierer machen.

Das geht wie folgt:

  1. Arduino Uno über USB Kabel mit PC verbinden
  2. Arduino IDE starten
  3. Unter Datei –> Beispiele -> ArduinoISP auswählen
  4. Unter Tools –> Board -> Arduino UNO auswählen
  5. Unter Programer -> AVR ISP auswählen
  6. anschließend Sketch hochladen

Schritt 4: Benötigte libraries einfügen

Nun ladet euch folgende libraries herunter:

Nun fügt ihr den Inhalt der Archive in „C:Sketcheslibraries“ ein.
Die Ordnerstruktur muss danach so aussehen:

  • hardware
    • tiny
  • libraries
    • JeeLib
    • PinChangeInterrupt
    • PinChangeInterruptSimple
    • TinyTuner

Achtet auf die korrekten Ordnernamen. Im Archiv sind diese manchmal anders.

Schritt 5: ATtiny von 1MHZ auf 8MHZ umstellen.

Also nächstes müssen wird den ATtiny auf 8Mhz umstellen. Dazu müssen wir einen Bootloader installieren:

  • Den ATtiny korrekt (richtig herum) in die Programmiereinheit stecken
  • Tools -> Board -> ATtiny84 @8MHz (internal oscillator; BOD disabled) auswählen
  • Tools -> Programmer -> Arduino as ISP auswählen
  • Tools -> Bootloader installieren

Achtung: Bitte ändern/installiert immer erst den korrekten Bootloader. Ich habe bei einem ATtiny zuerst den Sketch hochgeladen und mich gewundert warum es nicht funktioniert hat. Als mir auffiel, dass der ATtiny noch mit 1MHz arbeitet wollte ich den Bootloader nachträglich ändern, was mit aber nicht gelang: „Fehler beim installieren des Bootloaders“
Also Erst Bootloader und dann den Sketch! ;-)

Schritt 6: Sketch hochladen

  • Sketch bzw Code im großes Fenster der Arduino IDE einfügen
  • Oben links auf den Haken (Überprpüfen) klicken.
  • Wenn kein Fehler aufgetreten ist klickt ihr daneben auf den Pfeil der nach Rechts zeigt (Upload).

Danach sollte der Sketch kompiliert und hochgeladen sein. Ihr könnt den ATtiny nun aus der Programmiereinrichtung herausnehmen (vorher den Arduino Uno stromlos machen) und in den Sockel auf eurem TinyTX stecken (achtet darauf, dass er richtig herum eingesteckt wird). Nun könnt ihr die Stomversorgung herstellen und euer Sender sollte die ersten Daten senden! ;-)

DHT Compile Error Fix

http://forum.arduino.cc/index.php/topic,116674.0.html

Erweiterung

PIR Infrarotsensor sowie mehrere Magnetkontakte an einem Sender.
Ich habe nun nach einer kleinen Pause an dem Projekt weitergearbeitet und habe nun einen PIR Bewegungssensor (HC-SR501) angeschlossen.
Außerdem kann ich nun mehrere einzelne auswertbare Magnetkontakte an den TinyTX anschließen. Das Problem, dass die Spannung nicht korrekt übertragen wird habe ich leider noch nicht lösen können, bzw weiß nicht wo der Fehler ist.

Türkontakte

Magnetkontakte bitte wie folgt anschließen:

Auf dem TinyTX sind nur 2 GNDs vorhanden. Der dritte Pin unter den GND Pins ist mit nichts verbunden. Ich habe diesen einfach über eine Lötzinnbrücke verbunden.

[Bild: p9p6qccs.jpg] [Bild: 5chwhp5y.jpg]

In folgendem Muster werden die Werte übertragen:

Pir Bewegungssensor: HC-SR501

HC-SR501 bitte wie folgt anschließen:

Zusätzlich kann an noch eine LED angeschlossen werden.
[Bild: w2gik25f.jpg] [Bild: hys4dagu.png]

Das Tutorial, Bilder und Informationen wurden freundlicherweise von www.forum-raspberrypi.de zur Verfügung gestellt. Vielen Dank hierfür.