Kabellose Überwachung von Fenstern und Türen mit der Raspberry Pi
Inhaltsverzeichnis
Matriel & Hardware
Empfänger
- 1x Raspberry Pi mit SD Karte + Raspbian
- 1x Transreciever Modul – RFM12Pi V2 (Jetzt rfm69pi v3)
Sender
- 1x TinyTx3 PCB (10 Stück in China (iteadstudio.com) fertigen lassen [SHOP] )
- 1x RFM12B Modul 433MHz
- 2x Kerko 100nf Keramikkondensator oder REICHELT
- 1x Schaltdraht 0,80mm für die Antenne
- 1x ATTINY84A – PU
- 1x Sockel, IC Fassung 14-polig
- 1x Magnetkontakt/Reedkontakt
- 3x AAA 1,5V 1250mAh
- 1x Batterie Halter/Gehäuse 3xAAA mit Schalter
- 1x Printstecker, Einzelstecker, gewinkelt, 2-polig
- 2x Kupplungs-Leergehäuse, Crimptechnik, 2-polig
- 1 Satz PSK-KONTAKTE
Sonstiges
- 1x Arduino Uno Rev3 R3
- Stiftleisten
- diverses Werkzeug zum Löten und Abisolieren usw
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:
- Arduino Uno über USB Kabel mit PC verbinden
- Arduino IDE starten
- Unter Datei –> Beispiele -> ArduinoISP auswählen
- Unter Tools –> Board -> Arduino UNO auswählen
- Unter Programer -> AVR ISP auswählen
- 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! ;-)
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
![]() |
![]() |
In folgendem Muster werden die Werte übertragen:
Pir Bewegungssensor: HC-SR501
HC-SR501 bitte wie folgt anschließen:
![]() |
![]() |
Das Tutorial, Bilder und Informationen wurden freundlicherweise von www.forum-raspberrypi.de zur Verfügung gestellt. Vielen Dank hierfür.