Sensormodul für eine Überwachungsanlage


Beschreibung

Inhalt dieses Projekts war die Entwicklung einer Sensorplatine für die Hausüberwachung im Hinblick auf die Erkennung von Einbrüchen. Diese Sensoren bzw. Sensorplatinen können sich an Türen und Fenstern befinden oder auch an Stellen, an denen Bewegungen im Innenraum detektiert werden können. Sie melden geänderte Sensorwerte bzw. Kontaktstellungen an eine Zentraleinheit, die diese Meldungen dann per SMS weiterleitet.

alarm_sensor.png alarm_sensor_complete.png

Folgende Ziele waren Grundlage für die Entwicklung von Hard- und Software:
Die Verbindung zwischen Sensormodul und Basisstation ist besonders abgesichert:

Schaltung

Grundlage der Sensorplatine ist ein ATmega328 (ein ATmega88 würde ohne Debug-Ausgaben auf einem LCD ebenfalls ausreichen). Neben der Standardbeschaltung des ATmega inklusive Stromversorgung und Sicherung existiert eine Schaltung zur Abfrage von zwei Kontaktsensoren. Der Controller setzt die Pins SEN_DR1 und SEN_DR2 zyklisch auf High und liest den Pegel der Pins SEN_MES1 und SEN_MES2 ein, um die Stellung des Kontaktes zu ermitteln.
Die zyklische Erfassung der eigenen Betriebsspannung erfolgt mit Hilfe eines Spannungsteilers am ADC2-Pin des Controllers unter Verwendung der internen Referenzspannungsquelle von 1,1 V. Die Schaltung deckt einen Eingangsspannungsbereich von etwa 1,0...3,6 V ab. Um Strom zu sparen ist diese Schaltung nicht dauerhaft aktiv, sondern wird mittels eines MOSFETS (IRLML6402) nur kurzzeitig zur Messung aktiviert.

alarm_sensor_schematic.png

Die Platine besitzt Anschlüsse für die Programmierung des Controllers per ISP, eine Stiftleiste mit den Pins PD0...PD7 für den Anschluss eines Displays und eine Buchsenleiste für das Aufstecken eines RFM12-Moduls.

Als Taktquelle dient der interne Oszillator des ATmega mit gesetzter DIV8-Fuse, das entspricht der Konfiguration des ATmega im Auslieferungszustand. Der Takt beträgt damit 1 MHz, was ausreichend für die Verarbeitung ist und den Stromverbrauch senkt.

Quellen

Die Schaltung bis hin zu den notwendigen Dateien für die Produktion der Platine entstanden mit Hilfe von KiCAD. Die Software für die Platine ist ebenfalls verfügbar: Die Quellen enthalten bereits die Hex-Files für den ATmega328. Die ID der jeweiligen Sensorplatine ist in der Datei alarm_sensor.h durch ALARM_SENSOR_ID definiert. Diese ID bestimmt gleichzeitig auch den Schlüssel für die Verschlüsselung der Kommunikation mit der Basisstation. Die Schlüssel für die jeweiligen Sensor IDs befinden sich in der Datei encryption_keys.h.
Achtung: Die Schlüssel sollten vor Verwendung der Software unbedingt neu generiert werden, beispielsweise mit Hilfe des Bash-Skripts generatey_keys!

Derzeit sind bis zu 21 Sensorplatinen parallel betreibbar. Dies lässt sich einfach erweitern: Hinzufügen von neuen Schlüsseltabellen in der Datei encryption_keys.h und die Anpassung von ALARM_SENSOR_ID in der Datei alarm_sensor.h.

Kommunikations-Interface

Das Sensormodul kommuniziert mit einer Basisstation mittels RFM12-Modul, derzeit in der 868 MHz-Version. Es sendet zyklisch aller etwa 40 Sekunden seine Statusinformationen und im Alarmzustand (geöffneter Kontakt) aller 0,5 Sekunden, für etwa 15 Sekunden lang.

Der Inhalt der Nutzdaten ist folgendermaßen aufgebaut:
message_format.png
Zusätzlich berechnet die Software noch die 32 Bit-CRC dieser Nutzdaten. Damit stehen zwei 32 Bit-Werte zur Übertragung bereit. Vor der Übertragung werden sie allerdings verschlüsselt, in dieser Reihenfolge:
  1. CRC (32 Bit)
  2. Nutzdaten (32 Bit)
Die Verschlüsselung startet mit dem CRC-Block und nutzt Cipher Block Chaining, damit auch sehr kleine Änderungen in den Nutzdaten nach der Verschlüsselung nicht nachvollziehbar sind und zu einer komplett anderen Ausgabe führen. Die Verschlüsselung erfolgt in der Funktion sym_encrypt_buffer() in der Datei encryption.c. Ergebnis sind zwei verschlüsselte 32 Bit-Blöcke.

Das gesamte Datenpaket enthält allerdings noch einige zusätzliche Elemente wie CRC, Sensor ID (für die Entschlüsselung) und Synchronisations-Bytes für die Funkübertragung: frame_format.png

Lizenz

Alle hier veröffentlichten Quellen stehen unter der LGPLv3.

Versionsinfo

Anregungen oder weitere Informationen

Hier kann ein Kommentar hinterlassen werden:

Name:

Kommentar: