HARM

Crystal Clear action run.png
H.A.R.M.

Status: stable

Harm cat img.jpg
Beschreibung Arduino Homecontrol
Autor: schinken
Flattr Flattr HARM
PayPal Spenden für HARM


Beschreibung

H.A.R.M steht für "Home Arduino Remote Module", und kümmert sich um generelle Schaltaufgaben im Space. Hier stehen 14 Digitale I/O-Pins, 6 Analoge Inputs und 6 PWM-Ausgänge zur Verfügung. Die Hardware befindet sich in unseren Serverschrank auf einem Rackblech zwischen Lounge und Hinterraum.

Die momentane Belegung von H.A.R.M. ist wiefolgt:

Pin A/D/P Zweck
8 Digital Tür-Taster
12 Digital Türschloss
13 Digital Türrahmen
5 PWM Warpcore LED Blau
6 PWM Warpcore LED Cyan

Hardware

Als Hardware wurde ein Arduino Uno r3 verwendet, da eine ältere Version unter Linux Probleme mit der USB-Konnektivität hatte. Nachdem einmal eine Verbindung mit dem Arduino hergestellt und wieder getrennt wurde, konnte erst durch Ab- und Anstecken eine erneute Verbindung hergestellt werden. Das USB-Gerät wurde zwar korrekt im dmesg erkannt, dennoch kam keine Serial-Verbindung zustande. Es wurde versucht die Bootloader-Firmware zu updaten, aber leider brachte dies keine Besserung.

Die Hardware wurde per USB an der Flepo angeschlossen, welche sich im Space um generelle Schaltaufgaben kümmert. Der Arduino wird ausserdem noch mit 12V aus einem kleinen Schaltnetzteil versorgt. Für diverse Schaltkontakte wurde noch eine kleine Platine mit Pullup-Widerständen auf einer Lochrasterplatine aufgebaut.

Software

Als Software wurde auf dem Prozessor die Firmata-Firmware in der Version 2.3 verwendet. Diese Firmware wird mit der Arduino-IDE ausgeliefert, und kann einfach über das Menü "File > Examples > Firmata > StandardFirmata" geflashed werden.

Für die ersten Versuche zum Ansteuern von Firmata wurde python verwendet. Hierfür existieren bereits 2 Bibliotheken, pyfirmata und python-firmata. Allerdings können diese Libraries nur mit älteren Versionen der Firmware kommunizieren. Aus diesem Grund musste eine alternative gefunden werden.

Per Zufall wurde eine node.js-Version für Firmata gefunden, mit welcher auf Anhieb alles funktionierte. Die Javascript-Library ermöglicht es sehr komfortabel auf I/O-Statusänderungen zu reagieren.

Ein einfacher Digital-Port kann mit folgendem Code abgefragt werden:

 board.pinMode( 1, board.MODES.INPUT );
 board.digitalRead( 1, function( value ) {
    console.log("My value changed to:", value );    
 });

Bei jeder Änderung des I/O-Pins wird er selbe Callback erneut aufgerufen.

Da die angeschlossenen Taster und Reed-Kontakte nicht "sauber" schalten, mussten diese Eingänge entprellt werden. Hierfür wurde die Bibliothek mit einer digitalDebounced-Funktion erweitert. Den Code dazu findest du hier: Firmata-Utils

Der Code für die komplette Steuerung findest du hier: H.A.R.M Source

Aufgaben

Türkontakte

Tür-Taster

Damit wir den Status unserer Tür genau kontrollieren können, wurden 2 Reed-Kontakte in der Tür verbaut. Der erste befindet sich im Türrahmen, um zu erkennen, ob die Tür geschlossen ist. Der zweite Kontakt befindet sich im Schloss selbst, um abfragen zu können ob die Tür korrekt abgesperrt wurde. Die Kontaktänderungen werden zudem auch in einer MySQL-Datenbank abgespeichert. Die Verkablung wurde über unseren Hausbus vorgenommen, mit welchem eine Verbindung zwischen Lounge und Serverschrank hergestellt werden konnte.

Des weiteren wurde auch ein Schalter neben der Tür montiert, um die Tür mit einen einfachen Tastendruck absperren zu können. Hierfür muss zuerst die Tür geöffnet werden und der Taster betätigt werden. Sobald die Tür nun geschlossen wird, schickt die Software ein Schließ-Befehl an das Spaceportal.

Warpcore

Auch unser Warpcore wird über diesen Arduino angesteuert. Hierfür wurden 2 PWM-Ausgänge verwendet, um die LEDs zu dimmen. Die Software für den WarpCore wurde auch komplett in Javascript umgesetzt.