Ein essentieller Teil unseres Alarmsystems stellen die über Funk ansteuerbaren Sensoren und Aktoren dar. Orientiert haben wir uns an der Open Source Hardware von Nathan Chantrell (https://nathan.chantrell.net/tinytx-wireless-sensor/), welcher schon eine, speziell für diesen Anwendungsfall, angepasste Platine entworfen hat, um Mikroprozessor sowie Funkmodul und I/O-Pins platzsparend anzuordnen. Nach Anpassung der Gerber-Dateien, um die Platine mit mehr Ground-Pins und einem größeren Pin für die Antenne (da diese sonst immer abbricht), haben wir diese für 1€ pro Stück fertigen lassen (https://www.seeedstudio.com/fusion_pcb.html) und außerdem die weiteren benötigten Hardwareteile bei Elektronik Händlern für wenige Cent bzw. Euro bestellt.

Neben der modifizierten TinyTX3-Platine haben wir uns für das RFM69CW Funkmodul entschieden, da dieses eine deutlich bessere Reichweite, eine geringere Fehleranfälligkeit und einen deutlich geringeren Stromverbrauch im Idle-Modus aufweist, als das von Nathan Chantrell vorgeschlagene RFM12B-Funkmodul. Da die Funkmodule zur gleichen Familie gehören, besitzen diese eine identische Pinbelegung. Als Antenne genügt ein Stück Draht. Die Stromversorgung kann recht flexibel gewählt werden: Die Spannung muss zwischen 2.2V und 3.9V liegen. Dafür eigenen sich beispielsweise 2 AA Batterien. Für die Programmlogik und die Steuerung des Funkmoduls wird ein Mikroprozessor benötigt. Die Platine ist zugeschnitten für den Attiny84a, welchen wir auch für unser Modul verwenden. Der eigentliche Sensor/Aktor (im Bild: Reed-Switch) wird auch mit der Platine verbunden und liegt somit direkt an I/O-Pins des Mikroprozessors.

Die Programmierung des Mikroprozessors kann am einfachsten mit der Arduino-IDE abgewickelt werden (ein Arduino selbst besteht aus fast dem gleichen Mikroprozessor, mit etwas mehr Speicherplatz). Für das Uploaden des Codes gibt es mehrere Möglichkeiten. So kann beispielsweise ein anderer Arduino dazu verwendet werden, indem die entsprechenden Pins des Mikroprozessors damit verbunden werden. Damit allerdings auch noch programmiert werden kann, wenn der Mikroprozessor auf die Platine gelötet ist, ist es am einfachten, einen IC test clip mit dem USB ASP programmer zu verwenden, wie im unteren Bild zu sehen.

Nach Hinzufügen von benötigten Libraries zur Arduino-IDE kann jetzt mit einem Klick ein Programm auf den Mikroprozessor geladen werden. Die Jeelib-Library (https://github.com/jcw/jeelib) ermöglicht einen einfachen Zugriff auf die Funkmodule, um so Daten über Funk zu übertragen oder zu empfangen. Die I/O-Pins des Mikroprozessors lassen sich genau wie die GPIO-Pins des Raspberry-Pis steuern. So können Interrupts verwendet werden und der Status problemlos gesetzt oder abgefragt werden. Relativ schwer fällt die Fehlersuche, denn leider kann nicht einfach ein Breakpoint im Programm gesetzt werden. Nicht selten schlägt die Verbindung (zum Mikroprozessor) fehl oder das Programm stürzt unwissentlich ab. Der bisher einzig funktionierende Weg, um Einblick in den Programmablauf zu erhalten, stellt die UART-Schnittstelle dar. So kann Serial.prinln() wie ein System.out.prinln() in Java dienen, nachdem die UART-Pins mit dem Raspberry-Pi verbunden werden.

Home Security: Hard- und Software der Sensoren und Aktoren

4 Kommentare zu „Home Security: Hard- und Software der Sensoren und Aktoren

  • 30. Mai 2017 um 21:56 Uhr
    Permalink

    Ich bin schwer beeindruckt, wie viel Mühe Sie sich mit dem Hardwarepart machen. 😎 Eine Frage, die ich mir gestellt habe, ist wie der Raspberry Pi damit umgeht, wenn mehrere Sensoren gleichzeitig Daten senden. Gibt es eine Art Demultiplexing, um die gleichzeitig empfangenen Bytes den richtigen Datenpaketen zuordnen zu können?

    • 31. Mai 2017 um 2:20 Uhr
      Permalink

      Darum müssen wir uns gar keine Gedanken machen, denn das wird vom Funkmodul (RFM69CW) selbst erledigt. Dieses ist in der Lage ein gültiges Datenpaket zu erkennen. Bei erfolgreichem Dateneingang wird ein ACK zurückgeschickt. Auf Senderseite wird zur Sicherheit der Sendevorgang wiederholt wenn kein ACK innerhalb weniger Millisekunden zurückkommt.

      • 31. Mai 2017 um 22:05 Uhr
        Permalink

        Cool. Wie groß ist eine Nachricht typischerweise, bzw. welche Daten enthält sie?

  • 2. Juni 2017 um 15:22 Uhr
    Permalink

    Die Jeelib-Library unterstützt bis zu 66 Bytes in einer Nachricht. Unsere Nachricht enthält in der Regel SensorId, Data und Voltage, jeweils als Integer-Wert. Der Attiny arbeitet mit 2 Byte Integers -> 6 Byte Nachricht.

Kommentare sind geschlossen.