Ein Aquariencontroller entsteht
Automate all the things!
06. May. 2014
Schon lange ist geplant ein Aquariencontroller zu bauen. Viele unfertige Schaltpläne liegen in EAGLE und viele Ideen wurden schon gesammelt. Jetzt ist es endlich so weit. Die ersten Schritte sind getan und es geht langsam aber stetig voran.
Momentan finden die ersten Tests auf dem Breadboard statt
Der Controller soll als Platine zum Aufstecken auf einen Arduino Leonardo (als sog. Shield) realisiert werden. Einerseits spare ich mir so die Beschaltung des Mikrocontrollers selbst und andererseits ist der Controller somit leichter nachbaubar. Zum Schreiben und Kompilieren der Software kommen jedoch nicht die Arduino Tools zum Einsatz, sondern Eclipse mitsamt AVR Plugin, welches die AVR-GCC Toolchain nutzt.
Konzept
Von Anfang an stand eine große Flexibilität im Fokus. Die Flexibilität soll einerseits durch eine Erweiterbarkeit durch Module, anschließbar am I²C Bus, und andererseits durch eine flexible Softwarestruktur realisiert werden. Die Software soll auf Kanälen und Ereignissen basieren. Ein Kanal ist beispielsweise ein Düngekanal oder Lichtkanal. In der Software ist ein Kanal also eine Zusammenfassung von Eigenschaften (z.B. Füllstand oder Fördermenge) die zu einem Port oder einer I²C Adresse gehören. Ein Ereignis kann z.B. das ein- oder ausschalten eines Lichtkanals, eines Schaltkanals oder das Düngen sein. Jedes Ereignis ist mit einem Kanal verbunden.
Ein Beispiel: Täglich soll um 10:00 Uhr 2,5 ml eines Düngers gedüngt werden. Dazu wird ein Ereignis gespeichert, das die gewünschte Menge, den Tag und die Tageszeit enthält. Außerdem enthält es eine Referenz auf den entsprechenden Kanal. Der Kanal enthält die Information, an welchem Port die Dosierpumpe hängt, deren Durchflussmenge pro Minute und den Füllstand der Flasche. So kann die Einschaltdauer der Dosierpumpe berechnet werden. Die Kanäle und Ereignisse sollen im EEPROM gespeichert werden und über USB mittels einer PC-Software programmierbar sein.
Features
Hier eine kurze Zusammenfassung der Hauptfeatures:
- Hardware (+x deutet eine Erweiterbarkeit über I²C an)
- 7+x Düngekanäle zum direkten Ansteuern von Düngepumpen
- 8+x Schaltkanäle (z.B. zum schalten von Steckdosen)
- 4+x PWM Ausgänge (auch 1-10V für EVG)
- 4x20 LC-Display
- 4 Temperatursensoreingänge
- Summer als Alarmgeber
- Software
- Anzeige der heute noch anstehenden Ereignisse des Tages (Düngen, Licht, Schalten) auf dem LCD
- Anzeige der Sensorwerte auf dem LCD
- Alarm beim über-/unterschreiten bzw. verlassen eines Bereichs eines Messwertes eines Sensors
- Flexible Programmierung der Ereignisse eines Tages
- So viele Ereignisse programmierbar, wie es die Kapazität des internen EEPROM zulässt
- Programmierte Kanäle und Ereignisse werden im EEPROM gespeichert und gehen demnach bei Stromausfall nicht verloren
- PC-Software
- auf Basis von Qt5 zum einstellen des Controllers über USB
- Sonstiges
- Open Source Hard- und Software
Fortschritt
Die Animation zeigt, wie durch die Sensorwerte (momentan noch der rohe ADC Wert) und die anstehenden Ereignisse gewechselt wird
Momentan ist der Controller noch auf Steckbrett aufgebaut. Die Software ist in Arbeit und die vorgestellten Konzepte werden auf ihre Machbarkeit überprüft. Wie man sieht ist die Anzeige der Daten auf dem Display bereits realisiert. Auch das Speichern und Laden der Ereignisse und Kanaleigenschaften im EEPROM funktioniert. Das Schalten der Düngepumpen funktioniert ebenfalls. Alles andere muss noch realisiert werden.
Erster Entwurf der PC-Software
Von der PC-Software steht bisher nur der erste Entwurf. Die Oberfläche wurde mit Qt Creator erstellt. Es handelt sich bisher nur um die Oberfläche, die keinerlei Funktionalität hat. Es ist also mehr eine Spielewiese zum Ausprobieren wie meine Ideen tatsächlich aussehen würden.
Sonstiges
Zuerst habe ich geplant eine DS1307 als Real Time Clock (RTC) einzusetzen. Ein Vorteil wäre, dass die Uhr nach einem Stromausfall nicht neu gestellt werden muss. Des Weiteren stünde ständig das Datum zur Verfügung anstatt nur der Wochentag. Damit könnten monatliche Ereignisse programmiert werden. Bisher ist mir jedoch noch kein Nutzen dafür eingefallen. Der Größte Vorteil wäre demnach die Uhrzeit nicht neu stellen zu müssen nach einem Ausfall der Stromversorgung. Besonders nützlich ist das beispielsweise während man sich im Urlaub befindet und sich auf den Controller verlässt. Vorerst enscheide ich mich gegen eine RTC, vielleicht kommt diese in einer der nächsten Revisionen.