Status vom Baumhaus Projekt

Nachdem ich letztes Jahr mal eine Art Zwangspause hingelegt habe, ist auch das Baumhausprojekt für mich pausiert gewesen. Ich hab als Abschluss noch eine Dokumentation geschrieben wie man den Code auf den Arduino flasht und die Platine testet und den Steuerkasten verkabelt. Anfang diesen Jahres haben wir dann einen neuen Betreuer hinzugewonnen. Er ist nun Rentner und war früher im Elektronik Bereich unterwegs. Nachdem er die Möglichkeiten vom JFZ gesehen hat, war er begeistert. Dank seiner Hilfe hat sich dann auch wieder jemand gefunden, der uns im Bereich der Elektronik unterstützt. Das hat dann endlich dazu geführt, dass wir im Frühjahr diesen Jahres eine funktionsfähige Kiste hatten und diese im Baumhaus in Bad Herrenalb eingebaut haben.
Durch ihn haben wir auch einen neuen Mitarbeiter gefunden. Und es gab auch immer wieder neue Ideen, was noch im Arduino Code verbessert werden kann.
So gibt es nun zwei Sondertasten, die auf die Schnelle die Uhrzeit ausgeben oder die Temperatur vom Zeitchip (der kann auch die Umgebungstemperatur messen). Außerdem kam die Idee auf, dass die notwendigen Baumhaus Daten einmalig in den EEPROM des Arduinos geschrieben werden. So kann der allgemeine Baumhaus Source Code recht einfach aktualisiert werden ohne jedes Mal auf die Baumhaus spezifischen Daten Rücksicht nehmen zu müssen. :)
Unser Website Programmierer hat die notwendigen Daten sowieso in der Datenbank, da er den Code generieren muss. Also hat er auch gleich ein Skript geschrieben, welches das EEPROM Arduino Programm generiert. So muss dieses Programm nur noch einmalig auf den Arduino geflasht werden und ab da kann dann recht einfach das generalisierte Programm geflasht werden. Alles nur weil ein Jugendlicher die Idee hatte und es selbst ausprobiert hat. Wunderbar.
Als weitere Idee stand noch die Verbindung zwischen einem Raspberry Pi und dem Arduino auf der Liste. Daran hat ein junger Forscher nun die letzten Mittwochabende verbracht und hat sogar angefangen ein eigenes Protokoll dafür zu schreiben. Mit i²c wollte es einfach nicht gescheit funktionieren.
Wir haben uns aber nun dazu entschlossen, dass wir den Arduino aktuell so lassen wollen wie er ist und nur noch dazu erweitern wollen, dass er Status Daten an den Raspberry Pi sendet. Das Empfangen von Daten gestaltet sich leider schwierig, da der Arduino Code an unterschiedlichen Stellen kleine delay() Funktionen verwendet, welche den Prozessor kurz anhalten. Die Stellen sind aber so ungeschickt, dass ein Umbau auf millis() in diesem Fall zu aufwendig ist.

Den Raspberry Pi können wir dann recht einfach erweitern. Zum Beispiel um WLAN für Gäste bereitstellen. Oder einen kleinen Rauchgas Sensor ansteuern. Oder einen Reedkontakt für ungewöhnliche Bewegungen an der Tür einbauen. So kann anhand der Uhrzeit ein Manipulationsversuch festgestellt werden. Kurzum wir wollen uns mehr auf den Raspberry Pi konzentrieren und damit das Schloss weiterentwickeln.

Löten und Basteln mit jungen Menschen

Am 20. September habe ich nun das erste Mal auch wieder mit einem anderen Betreuer eine eigene Makernight mitgemacht. Bilder und genaue Infos finden sich in diesem Blogpost vom C-Hack. Ich fand das Ganze mal wieder erfrischend anders und hat auch Spaß gemacht. Selbst das Löten hab ich notgedrungen wieder erlernt. Es war aber guter Lötzinn mit gutem Flussmittel, da ging das auch recht gut.
Sonst komme ich immer nur Mittwochabends vorbei und sehe die gleichen Leute vom Baumhausprojekt. Da habe ich mittlerweile den Arduino Code ziemlich ausgereizt.

Erster Baumhaus Elektronik Kasten fertig

Nach beinahe jahrelangen Entwicklungen an der Schaltung für die Platine haben wir nun endlich einen ersten finalen Stand erreicht. Die Schaltung sitzt nun in einem Standard Elektro Kasten inklusive Solarladeregler und fertien Anschlüssen. Die Platine sitzt auf einem Arduino und führt alle Anschlüsse nach außen.
Die Bedieneinheit ist mit einem Standard 15-poligen Sub-D Steckverbinder mit dem Elektrokasten verbunden.

Der Arduino Code ist soweit durchgetestet, dass nun jeder am Bedienelement Dinge eingeben kann und es immer korrekt ausgewertet wird. Zuletzt gab es hier noch ein Problem mit zu hohen Zahlen. Doch nun wird es korrekt ausgewertet und bei Falscheingabe muss der Kunde 5 Sekunden warten.
Wir haben nun auch für jedes Baumhaus einen eigenen Eingabe Code erstellt. Mit etwas Aufwand und Kenntnis des Quellcodes kann man sich zwar immer noch mit überschaubarem Aufwand den Türcode knacken. Allerdings kann auch jeder genauso gut eine Brechstange nehmen und das Baumhaus aufbrechen. :)

Selbst unser Buchungssystem ist nun laut Aussage unseres Programmierers fertig.

Gerade bin ich dabei alle relevanten Schritte in einer übersichtlichen Dokumentation zusammen zu fassen. Bisher sind es 21 Seiten. Mal schauen, wie viele es am Ende werden. Man kann ja alles selbst machen. Die Kunst ist es so zu dokumentieren, dass es später auch andere Leute machen können! Das gilt geschäftlich und erst recht bei Hobby Projekten!

Arduino und Strings - besser ein char[]

Ich hab mir die letzten Tage meine letzten Haare ausgerissen, weil ich meinen String nicht auf "null" setzen konnte. Das war sehr nervig. Selbst die String.remove(0) Methode hat in Arduino nicht wirklich geholfen.
Aber nun hab ich die ultimative Methode gefunden:

char[4] = key_eingabe;
String key_eingabestr = String(atoi(key_eingabe));

Zuerst speicher ich mir alle Key Eingabe in das key_eingabe Array. Danach wandle ich das gesamte Array in einen Integer "atoi()" und danach in einen String "String()". Damit stelle ich sicher, dass ich nur den Inhalt vom Char Array im String habe und keine anderen Zeichen. Beim direkten Wandeln mit "String()" werden auch EOL Zeichen eingefügt, die ich eher nicht brauchen kann. :)

Weiterführend kann man sagen: Strings und Arduino ist eher keine gute Idee.

Arduino 1.0.6 hat bessere String Funktionen als 1.0.5

Wenn ich hier über Arduino schreibe und darüber, dass ich immer noch Arduino in der 1.0.x Version nutze, komm ich mir vor wie "Opa erzählt vom Krieg". :)
Der einzige Grund warum ich immer noch die 1.0.5 Version lange Zeit verwendet habe, war die Tatsache, dass ich vor zwei Jahren mit dem GSM Modul angefangen habe zu experimentieren und dieses im Zusammenspiel mit der Keypad Library in der Version 1.0.6 gegeben hat. Deshalb hab ich dann auch alle meine anderen Programmierungen fürs Baumhaus Schloss auf der Version 1.0.5 gemacht.
Damit hat es ja eigentlich auch ganz gut funktioniert. Nun komm ich aber an den Punkt, indem ich immer wieder auch einen String zurücksetzen muss. Das typische

key_eingabe = "";

funktioniert leider nicht richtig und die remove Funktion aus dem String Objekt kam dann erst in einem Backport aus 1.5.x in die Version 1.0.6 (Releasenotes) rein.
Da ich sowieso nach meinen erfolglosen Anfangsversuchen (damals hatte ich noch nicht die Polling Idee zur Abfrage des Keypads und SMS Eingang) nicht mehr das GSM Modul verwende, hab ich nun wieder auf die Version 1.0.6 gewechselt und freu mich, dass ich nun doch wieder die besseren String Funktionen nutzen kann.

Generell ist es sowieso meistens ratsam immer die aktuellsten Versionen zu verwenden. Die sind einfach ausgereifter und haben oftmals auch mehr Funktionen zur Verfügung. Für Arduino UNO reicht aber trotzdem noch die 1.0.6, außerdem findet man für diese Version auch meistens mehr alte Libraries. :) Die Oberfläche ist mir trotzdem weiterhin egal, da ich nach wie vor das alte Stino Plugin für Sublime Text 2 verwende.
Wem sein Code mit der Zeit zu groß wird, kann ihn auch einfach in mehrere Dateien aufteilen. Ich hab dazu als Hauptdatei die .ino Datei und in weitere .h Headerdateien meine anderen Funktionen eingebaut. Natürlich sind Header Dateien eigentlich der falsche Weg. Aber das ging am einfachsten für mich. So hat die einzelne Datei dann keine 200 Zeilen mehr, sondern nur noch 100 Zeilen Code und es ist etwas strukturierter. Wer es richtig machen will, hätte vermutlich eine .ino Datei und für weitere logisch zusammengehörende Funktionen eine .h und eine .cpp Datei erstellt. Aber Warum alle Funktionen nochmal ausgliedern, wenn ich sie auch direkt in der .h Datei beschreiben kann? Ich hoffe einfach mal, dass meinen Code nie jemand findet und nutzen muss.