Einfacher Aquariencomputer (gelöst!)

  • Einfacher Aquariencomputer mit Raspberry Pi


    (Stichworte: Raspberry, Aquarium, Steuerung, Regelung, Heizung, Nachtabsenkung, Beleuchtung, CO2, Nachfüllen, Tagesdünger, Dosierung)


    Warum beschreibe ich dieses Projekt? Es gibt doch schon reichlich Anleitungen für Aquarien-Computer mit Raspberry Pi!


    • Viele der Projekte steigen mit sehr hohen Anforderungen ein. Da soll dann Licht, Temperatur, Heizung, Leitwert, ph-Wert, CO2-Gehalt, Wasserstand, Luftdruck usw. kontrolliert, graphisch aufbereitet, ins Netz gestellt und auf dem Handy per Schieberegler eingestellt werden, natürlich Webcam usw., um nur einiges zu nennen.
    • Auch wenn so ein Pi das wahrscheinlich von seinen Möglichkeiten her locker kann, brechen doch viele der so gestarteten Projekte nach 3 bis 4 Posts ab, weil die Wünsche eben doch größer waren als die Zeit und das Durchhaltevermögen, die nötig sind, um so ein Projekt fertig zu stellen.


    Solche Posts sind frustrierend, und viele interessierte Aquarianer wenden sich vermutlich abgeschreckt ab, weil ihnen so ein Projekt zu kompliziert erscheint. Dabei ist es gar nicht so schwer, einen funktionierenden Anfang zu setzen, auf dem man später aufbauen kann.


    In diesem Beitrag möchte ich ein Aquarienprojekt beschreiben, das auch normal versierte Bastler in überschaubarer Zeit fertigstellen können. Die funktionierende Anlage kann dann natürlich beliebig erweitert werden. Aber wir haben erst mal etwas, das funktioniert!


    Diese Anleitung ist sicher nicht der einzig mögliche oder auch nicht der optimale Weg. Vermutlich gibt es viele Möglichkeiten das anders, besser, vielleicht einfacher zu machen als ich das getan habe, das steht auch nicht im Vordergrund. Ziel war es, einen vernünftigen Funktionsumfang mit überschaubaren Mitteln und in überschaubarer Zeit umzusetzen und das Projekt abzuschließen. Dies Projekt ist nicht nur eine Idee oder ein Wunsch, sondern wurde in überschaubarer Zeit erfolgreich umgesetzt und funktioniert.

    Was soll das Projekt können?



    Wichtig ist immer erst mal, dass wir uns darüber klar werden, was wir am Ende wollen. Wir könnten uns z.B. die Basisanforderungen einer Aquariensteuerung vornehmen:


    • 3 Lampen unabhängig voneinander ein- und ausschalten
    • Eine Temperaturregelung mit Boden- und Stabheizer darstellen
    • CO2-Zufuhr ein- und ausschalten
    • Eine Dosierpumpe mit Tagesdünger schalten
    • Eine Pumpe für eine Nachfüllautomatik schalten
    • (Futterautomaten klammern wir mal aus, da diese Geräte i.d.R. bereits mit Steuerung kommen, sonst wäre das auch eine Anforderung)

    Daneben wollen wir die Steuerung über externe Computer oder Tablet/Smartphone im Heimnetz ansprechen können (soll kein eigenes Keyboard und Display benötigen).


    Die Steuerung muss fehlersicher sein, d.h. zum Beispiel, dass sie nach einem Stromausfall automatisch wieder in einen stabilen Betriebszustand findet.


    Und wir wollen den „Gesundheitszustand“ der Steuerung im Vorbeigehen erkennen können, ohne dass wir an einem PC einloggt sein müssen (Visuelle Rückmeldung: Steuerungsprogramm läuft und Temperatur ist im Zielbereich).


    Ein so ausgestattetes Becken darf man sicher als technisch auf einem guten Stand bezeichnen. Natürlich kann man so etwas auch mit diskreten Komponenten (einzelnen Zeitschaltuhren und Thermostaten) darstellen, aber eine Pi-Lösung ist am Ende billiger, eleganter und erweiterungsfähig (und macht auch mehr Spaß).


    Was brauchen wir an Material?


    • Raspberry Pi (ich habe einen Pi-2), am besten mit Gehäuse
    • Netzteil 5V, min 2A
    • Einen USB-WLAN-Adapter
    • Ein Adapterkabel HDMI auf DVI (nur nötig, wenn Euer Monitor keinen HDMI-Eingang hat)
    • Eine micro SD-Karte, 8 GB oder mehr
    • Eine 8-fach Relais-Zeile von Sainsmart (oder Nachbau)
    • Einen Temperatursensor DS1820 + einen 4.7 kohm Widerstand
    • Einen Satz I/O-Kabel (Stecker weiblich-weiblich)
    • Ein paar LEDs und 330 ohm Widerstände

    Für den Pi gibt es Sets, die alles obige bis auf den Temperatursensor, die Relaiszeile und die I/O-Kabel beinhalten für ca. 70 € im Netz zu kaufen. Alle anderen genannten Teile gibt es ebenfalls beim großen Versandhändler. Abhängig davon, wie lange man warten kann, kommen die Relaiszeile und die T-Sensoren direkt aus China oder aus Europa. Alles zusammen sollte aber für 75 – 90 € zu beschaffen sein.
    Keyboard und Maus setzen wir mal als vorhanden voraus, brauchen wir, ebenso wie das Monitorkabel auch nicht dauerhaft am Pi.


    Was brauchen wir an Werkzeug?

    Ein Lötkolben und Schrumpfschlauch ist hilfreich beim Konfektionieren des T-Sensors oder von Kontroll-LEDs.
    Ein Vielfach-Messgerät wäre gut.
    Daneben das übliche Bastelwerkzeug, Zangen Schraubenzieher etc.


    Welche Kenntnisse sind nötig?

    Um dies Projekt erfolgreich fertig zu stellen, muss man kein Hacker sein, aber man muss sich an neue Dinge herantrauen. Etwas Erfahrung mit Linux ist hilfreich, ebenso darf man keine Angst vor einer Konsole und einigen Terminal-Befehlen haben. Der Python-Code, den ich hier veröffentliche, funktioniert erst mal, aber wenn man ihn für eigene Bedürfnisse anpassen will, dann muss man sich etwas mit der Programmiersprache Python beschäftigen.
    Ich werde hier natürlich auch nicht alles nochmals beschreiben, was bei der Inbetriebnahme und Konfiguration eines Raspi schon zig mal im Netz steht, aber ich werde die Links zitieren, die bei MIR funktioniert haben (es gibt leider auch ziemlich viel Zeug im Netz, das zumindest mal nicht aktuell ist).
    Etwas Vertrautheit mit Elektronik und einem Lötkolben hilft definitiv. Sonst kann das schwer werden, z.B. den Sensor zu konfektionieren. Und wer am Ende 230 V-Verbraucher an seine Relaiszeile anschließt, muss auf jeden Fall wissen, was er tut! 230 V sind genug, um sich daran ernsthaft zu verletzen oder schlimmeres. Hierzu kann ich nicht mal eben in 5 Zeilen eine Anleitung schreiben. Da muss sich jeder selbst einschätzen, ob er das kann. Im Zweifel immer einen Fachmann befragen!


    Schritt 1: Raspi aufsetzen und starten

    Dies ist im Netz hinreichend beschrieben. Ich habe Raspbian als Betriebssystem benutzt. Als Sofortmaßnahme muss man den Mouse-Lag beseitigen, damit man arbeiten kann, Die ersten Gehversuche habe ich mit dem Raspi mit angeschlossenem Monitor und Keyboard gemacht, später habe ich über VNC auf den Raspi zugegriffen. Zum Modifizieren des Codes benutzen wir Idle3, das bereits im Raspbian vorinstalliert ist.


    Schritt 2: Raspi an den Router anbinden

    Das ist aus zwei Gründen wichtig. Zum einen holt sich der Raspi selber die aktuelle Uhrzeit aus dem Netz und zum zweiten wollen wir ihn später über VNC remote ansprechen. Also erst mal dafür sorgen, dass der Raspi über Kabel oder den WLAN-Stick am Router angemeldet ist. Dann im Betriebssystem die korrekte Zeitzone einstellen, damit localtime uns später die korrekte Zeit im Programm liefert.


    Schritt 3: Temperatursensor konfektionieren und anschließen

    Der Anschluss eines DS1820 ist hier


    http://www.netzmafia.de/skript…rojekt-Onewire/index.html


    sehr gut erklärt. Ich habe den Sensor mit Schrumpfschlauch geschützt. Zur Temperaturmessung im Aquarium wird er dann einfach mit Tesafilm von außen an die Scheibe geklebt und auf der Rückseite mit etwas Schaumfolie isoliert, damit er nur (oder weit überwiegend) von der Temperatur im Becken beeinflusst wird. Wir schließen den Sensor korrekt an und nehmen die Einträge in den Dateien im Betriebssystem so vor, wie im Link oben beschrieben. Wer der Beschreibung im Link gefolgt ist, der weiß dann auch bereits, ob sein Sensor korrekt angesprochen wird.


    Schritt 4 : Sich mit dem Python Code vertraut machen, Schaltzeiten und Temperaturschwellen einstellen.


    Das Programm befindet sich in der Datei „Aquarium.py“ und ist vollständig kommentiert, sollte also in weiten Bereichen selbsterklärend sein. Welcher GPIO für welche Funktion zuständig ist, steht alles im Source file.
    Was macht das Programm?


    • Licht:

    Es sind 3 Lampen vorgesehen. Für jede Lampe sind aktuell 2 Schaltintervalle definiert, d.h. man kann z.B. morgens x Stunden beleuchten, dann eine Pause von einigen Stunden machen und abends wieder für y Stunden beleuchten. Wenn man nur eine Beleuchtungsphase haben will, einfach beide Intervalle gleich einstellen.


    • CO2:

    Für das CO2 gilt das Gleiche wie für das Licht, wir schalten ja mit 230 V ein Magnetventil.


    • Heizung:

    Für die Heizer werden Schwelltemperaturwerte mit einer Hysterese von ca. 0.3 °C eingestellt, also z.B.


    Heizer an , wenn kälter als 24.0 °C
    Heizer aus, wenn wärmer als 24.3 °C


    Für den Stabheizer werden die Schaltschwellen ca. 0.2 ° tiefer eingestellt als für den Bodenheizer. Meist ist der Bodenheizer viel schwächer und nicht in der Lage, die Heizung komplett zu übernehmen. Er soll aber immer an sein (wenn es nicht insgesamt zu warm ist). Fällt die Temperatur weiter, obwohl der Bodenheizer an ist, wird der Stabheizer zugeschaltet. Er wird wieder ausgeschaltet, bevor der Bodenheizer seine Abschaltschwelle erreicht, übernimmt also weitgehend die eigentliche Temperaturregelung, während der Bodenheizer immer an ist, aber bei zu hoher Temperatur (beispielsweise im Sommer) natürlich ebenfalls automatisch ausgeschaltet wird.


    • Temperatur-Anzeige

    Es werden dazu Temperatur-Warnschwellen definiert. Befindet sich die Temperatur innerhalb der Warnschwellen, wird mittels GPIO 5 eine LED eingeschaltet, ist die Temperatur außerhalb der Warnschwellen, wir die LED ausgeschaltet. Laufen wir am Pi vorbei, können wir also ohne weitere Info anhand der LED sehen, ob die Temperatur in Ordnung ist. Leuchtet sie, ist alles klar, leuchtet sie nicht, müssen wir nachsehen, was los ist. Idealerweise sind die Warnschwellen 0.1°größer/kleiner als die größten/kleinsten Schaltschwellen der Heizer.
    Natürlich werden im Terminal des Pi die aktuellen Temperaturwerte ausgegeben, aber wir gehen davon aus, das nicht ständig ein Display angeschlossen ist, und der Regler soll das auch hinbekommen, ohne dass wir alle 5 Minuten auf ein Display schauen müssen.


    • Tagesdünger:

    Einmal am Tag können wir zu einer einstellbaren Zeit eine Dosierpumpe für x (einstellbar) Sekunden einschalten, um Tagesdünger aus einem Kanister zu dosieren.
    Bau der Dosierpumpe ist hier beschrieben


    http://www.amazon.de/Pollin-Zahnrad-Wasserpumpe-mit-Motor-RS-360SH/dp/B00F2DJS4O/ref=sr_1_3?ie=UTF8&qid=1457158093&sr=8-3&keywords=zahnradpumpe (Affiliate-Link)


    • Nachfüllen:

    Einmal am Tag können wir zu einer einstellbaren Zeit eine Nachfüllpumpe für y (einstellbar) Sekunden einschalten, um verdunstetes Wasser aus einem Kanister zu dosieren.
    Bau der Nachfüllpumpe ist an gleicher Stelle wie die Dosierpumpe beschrieben.
    Ungenutzte Ausgänge:
    Wer kein CO2, bzw. keine Tagesdüngung und Nachfüllung nutzt, kann die Ausgänge einfach ins Leere laufen lassen oder für andere Dinge nutzen (Futterautomat,…)


    • Läuft unser Programm?

    Das Programm läuft in einer Endlosschleife mit einer Zykluszeit von ca. 1 sec. Wir wollen natürlich auch im Vorbeigehen sehen können, ob unser Pi „lebt“, d.h. sein Programm brav abarbeitet.
    Das lösen wir dadurch, dass wir mit jedem Schleifendurchlauf eine LED (GPIO 5) an- und ausschalten. Läuft unsere Schleife ordnungsgemäß, blinkt diese LED gleichmäßig mit einer Periode von ca. 1 sec. Läuft unser Programm nicht, blinkt sie nicht. Diese LED ist also ein „health indicator“, ob unser Programm ordnungsgemäß zykelt, ohne dass wir uns dazu auf dem Pi einloggen müssen.


    • Festlegen der Schaltzeiten und Temperaturschwellen etc.:

    Alle Variablen werden im Programm „fest“ im Code vorgegeben. Wenn wir sie ändern wollen, wird der Python Code in der Datei Aquarium.py geändert. Nicht sehr elegant? OK, wie oft wollen wir an einem eingelaufenen Becken an diesen Variablen spielen…..? Für den Start ist das komfortabel genug.


    Programmablauf:

    • Am Anfang werden die GPIOs definiert und die Variablen gesetzt bzw. initialisiert.
    • Danach geht es in eine Endlosschleife, in der folgendes passiert:
    • Abfrage, ob die aktuelle Uhrzeit in einem definierten „Ein-Fenster“ liegt
    • Wenn ja, Lampe bzw. CO2 einschalten
    • Wenn nein, Lampe bzw. CO2 ausschalten
    • Variable für den Ausgang dem Schaltzustand entsprechend setzen
    • Temperatur von Sensor auslesen
    • Mit den gesetzten Temperaturgrenzen für Boden- und Stabheizer vergleichen
    • Wenn zu warm oder zu kalt, Heizer aus- oder einschalten
    • Variablen mit Schaltzustand entsprechend setzen
    • Prüfung, ob Temperatur im Zielbereich
    • Setzen/Ausschalten der LED für „Temperatur = OK“
    • Abfrage, ob Uhrzeit für Dosierung des Tagesdüngers erreicht
    • Wenn ja, Dosierpumpe für die definierte Zeit einschalten
    • Abfrage, ob die Uhrzeit für die Nachfüllung erreicht
    • Wenn ja, Nachfüllpumpe für die definierte Zeit einschalten
    • Am Ende die Schaltzustände aller Lampen, Heizer und CO2 ausgeben
    • Schaltzustand der „Health-LED“ ändern
    • Eine halbe Sekunde warten
    • Die Endlosschleife erneut starten


    Schritt 5 (optional): Test-Setup mit LEDs

    Wer sich ein Komplettset mit einem Breadboard zum Experimentieren gekauft hat, der kann dies mittels des Flachbandkabels anschließen und die GPIO-Ausgänge im Code (das sind GPIO 5,6,12,13,16,19,20, und 21) jeweils mit einer LED (Polung beachten) und 330 ohm Widerstand gegen Masse legen. Dann können wir sehen, welche Ausgänge gerade beschaltet sind (LED an). Auf diese Weise können wir das Programm erst mal im Testmodus laufen lassen und sehen, ob die Einstellungen, die wir vorgenommen haben, funktionieren, das Programm also das macht was wir wollen.


    Schritt 6: Programm starten

    Wir kopieren die Programmdatei ins Verzeichnis /home/pi.
    Dann öffnen wir ein Terminal und geben ein


    python Aquarium.py



    Mit angeschlossenem Temperatursensor und LEDs an den GPIOs startet unser Programm, gibt folgende Daten im 1-Sekunden-Takt aus und schaltet die entsprechenden LEDs.


    13:35
    Lampe 1 an
    Lampe 2 aus
    Lampe 3 aus
    CO2 an
    Temperatur 24.35 °C
    Bodenheizer an
    Stabheizer aus


    Stimmt irgendwas nicht? Dann mal die Parameter im Code prüfen und die Anschlüsse der LEDs, ob das alles richtig gesteckt ist.


    Schritt 7: Anschluss der Relaiszeile

    Um Leistung zu schalten, brauchen wir Relais, die die I/O-Signale des Pi für Verbaucher „nutzbar“ machen. Zum Anschluss der Sainsmart Relaiszeile, die wir hier verwenden, gibt es einen wahren Glaubenskrieg im Netz. Es gibt Leute, die sagen „einfach anschließen und geht“ und solche, die meinen, dass man seinen Raspi zerstört, wenn man das Board nicht über Treiber-Transistoren anschließt. Wirklich verwirrend….
    Was stimmt nun?


    Ich bin dem Beitrag eines Amazon-Kunden gefolgt, der das Board einfach mal wie folgt durchgemessen hat:
    Wenn wir es stand alone an 5V anschließen, passiert erst mal nix, kein Relais schaltet. Dann können wir mal die In-Pins gegen Masse messen, die zeigen 3.0 V (Raspi GPIOs 0 bzw. 3.3 V). Wenn wir dann über ein Amperemeter einen der In-Pins gegen Masse legen, zeigt das Instrument 1.9 mA, das entsprechende Relais schaltet durch und die LED des Eingangs leuchtet. 1.9 mA sind kein Strom, der einen I/O des Raspi zerstört, von daher droht also keine Gefahr.


    Jetzt bleibt noch die Stromversorgung des Boards. Jedes Relais zieht im durchgeschalteten Zustand ca. 90 mA, d.h. wenn alle 8 Relais schalten, zieht das Board ca. 720 mA, also nicht unerheblich Strom. Geht das über das Pi-Netzteil und die on-board Sicherung des Pi? Ich habe das Board einfach über die 5V-Pins des Pi angeschlossen und über mehrere Wochen so betrieben. Mein 2A-Netzteil ist nicht heiß geworden und auch mein Pi lebt noch.



    Daher: Versuch macht klug! Trauen wir doch unseren Beobachtungen. Bei mir funktioniert es fehlerfrei, die Relaiszeile direkt an den Pi anzuschließen. Hierzu sind die I/O-Kabel (weiblich-weiblich) da. 5V an VCC, GND an GND, die Pins IN1 bis IN8 des Relais-Boards mit den ausgewählten GPIO des Raspi verbinden, den Jumper VCCJD-VCC habe ich stecken lassen.


    Wie gesagt, wer Manschetten hat, die Relaiszeile direkt an den Pi zu stecken, der bemüht am Besten mal ein Messgerät und macht sich sein eigenes Bild.



    Nun sind die Eingänge der Relaiszeile invertiert, das heißt, wenn der Eingang auf Masse liegt, schaltet das Relais durch und die zugehörige LED auf dem Relaisboard geht an. Wie gehen wir damit um? Alle Relais sind Umschalter, d.h. wir können in jedem der Schaltzustände Durchgang verkabeln.


    Ich habe den Pi so programmiert und verkabelt, dass meine Verbraucher eingeschaltet sind, wenn das Relais durchgeschaltet hat, also die LED leuchtet und der Eingang auf Masse liegt. Das heißt, wenn ein Verbraucher eingeschaltet werden soll, legen wir den entsprechenden Pin auf Masse (GPIO auf „False“). Warum das am besten ist, klären wir gleich bei den Fehlerzuständen.


    Schritt 8: Fehlerzustände:

    Wenn alles „normal“ läuft, starten wir unser Programm, die Endlosschleife startet und läuft bis in alle Ewigkeit weiter. So die Theorie und der Normalzustand, aber in der Wirklichkeit müssen wir uns mit den Fehlerfällen und deren Auswirkungen beschäftigen, damit es nicht zu unangenehmen Überraschungen kommt.


    Was kann uns alles dazwischen kommen?


    • Ein kurzfristiger Stromausfall (hohe Wahrscheinlichkeit)

    Wenn das passiert, ist der Raspi, die Relaiszeile und alle Verbraucher aus.
    (Kein Wunder, ist ja kein Strom da….)
    Wenn der Strom wieder eingeschaltet wird, dann soll der Raspi aber wieder automatisch in den geordneten Betriebszustand zurückkehren und alles ein- und ausschalten wie es soll.
    Das beschreibe ich gleich noch, wie das geht


    • Das Netzteil des Pi (und damit auch der Relaiszeile) könnte sterben (mittlere Wahrscheinlichkeit)


    In diesem Fall müssen alle Verbraucher ausgeschaltet werden (d.h. wenn die Relais abfallen, müssen die Verbraucher AUS sein)
    Andernfalls bliebe die Heizung an, das Becken würde zu warm mit den entsprechenden Folgen. Außerdem würde sich der komplette Tagesdünger und Nachfüllvorrat in den Kanistern ins Becken entleeren. Das dauerhaft brennende Licht würde den Pflanzen auch auf Dauer nicht gut tun, richtet aber keinen kurzfristigen Schaden an.


    • Die Relaiszeile als Ganzes könnte sterben (mittlere Wahrscheinlichkeit)

    In diesem Fall gilt das Gleiche wie beim Ausfall des Netzteils des Pi.


    • Der Pi könnte „durchdrehen“ wg. Programmfehler (geringe Wahrscheinlichkeit)

    In diesem Fall würde unkontrolliert geschaltet.
    Wg. des eher einfachen Programms ist dies nicht wirklich zu erwarten.


    • Ein Relais könnte im Einschaltzustand kleben (geringe Wahrscheinlichkeit)

    Wirklich desaströs wäre das nur beim Stabheizer und vielleicht noch beim Tagesdünger.
    Den Stabheizer fangen wir ab, indem wir den mechanischen Thermostat im Heizer etwas höher als unsere im Pi eingestellten Werte setzen, also z.B. auf 26 °. Eben so, dass er im Normalbetrieb nicht in die Regelung eingreift. Das wäre dann die „Notbremse“ für den Heizer bei klebendem Relais.
    Das Becken sollte auch so befüllt sein, dass es notfalls noch den gesamten Vorrat aus Nachfüllbehälter und Tagesdünger aufnehmen kann, ohne überzulaufen. (so 10 l Platz lassen).
    Ein klebendes Relais kann im Übrigen auch bei Zeitschaltuhren und elektrischen Thermostaten auftreten, hier unterscheidet sich unsere Pi-Lösung vom Fehlerrisiko nicht von der konventionellen aus Einzelkomponenten.


    Hier sehen wir aber, das wir alles so programmieren müssen, dass bei sterbendem Pi-Netzteil und/oder Relaiszeile die Verbraucher nicht auf Dauer-Ein geschaltet werden (D.H. GPIO auf low bedeutet Relais durchgeschaltet). 100 % Sicherheit gibt es nicht, aber wir stellen uns so auf, dass die wahrscheinlichsten Fälle korrekt abgefangen sind.


    (Es sei nicht verschwiegen, dass eine Transistor-Treiberstufe vor der Relaiszeile auch die Invertierung dreht, dann wäre bei GPIO True (=high) auch das Relais durchgeschaltet. Das würde einen sterbenden Pi bei gleichzeitig noch lebender Relaiszeile noch besser abfangen. Aber dann dürfen wir auch die Transistorstufe nicht auf dem Steckbrett zusammenstöpseln, das wären m.E. zu viele wackelige Kontaktstellen.)


    Schritt 9: Automatischer Reboot

    Um sicherzustellen, dass wir nach unfreiwilligem Reboot nach einem Stromausfall wieder im Programm landen, habe ich die Variante über einen Eintrag in die Datei /etc/rc.local gewählt
    Ist hier beschrieben:


    https://raspberry.tips/raspber…nd-programmen-einrichten/


    Dort trägt man am Ende der Datei vor „exit 0“ ein:


    python /home/pi/Aquarium.py


    Wenn man jetzt den Pi kurz vom Stromnetz trennt, bootet er nach dem Wiederherstellen der Stromversorgung direkt wieder in unser Programm. Das Booten dauert ca. 30 sec, d.h. während dieser 30 sec. sind unsere GPIOs nicht wirklich in definiertem Zustand. Ich habe beobachtet, dass die LEDs der Relaiszeile so leicht glimmen, aber die Relais nicht durchgeschaltet sind. Die GPIOs sind also in einem undefinierten Zustand, die Relais alle „Aus“. Das ist erst mal gut, aber auch wenn es nicht so wäre, in 30 sec. beim Reboot passiert nicht viel Unheil, wenn wir dann sicher in einem definiertem Zustand im Programm landen.


    Vermouthstropfen dieser Lösung: Das Programm startet bevor die graphische Benutzeroberfläche geladen ist, d.h. wir erhalten keinen Output im Terminal. Unsere „Health-LEDs“ geben aber Auskunft, ob alles OK ist.
    Ich denke, das ist verschmerzbar, wenn wir uns wirklich einloggen und den Output verfolgen wollen und wir stellen fest, dass offenbar ein automatischer Reboot stattfand, machen wir das über die Kommandos:


    sudo killall python
    python Aquarium.py


    Dann sind wir wieder im Terminal unterwegs und erhalten jede Sekunde die Schaltzustände und Temperatur gedruckt.
    Aber Hand aufs Herz: Wir wollen ja einen AUTOMATEN, der unser Becken steuert, und da wollen wir ja (nach einer Einlaufphase) nicht jeden Tag 20 x schauen, ob alles läuft, oder?.
    Im Normalfall starten wir das Programm im Terminal, wenn es keinen Output mehr gibt, dann war da ein Störfall dazwischen.


    Schritt 10: Ansprechen des Pi über VNC

    Wenn der Pi in unserem Heimnetz angemeldet ist, können wir ihn von jedem Rechner (egal ob Windows, Mac, Tablet oder Smartphone oder Linux) über VNC ansprechen und Parameter ändern. Dazu installiert man sich den VNC-Server auf dem Pi und einen VNC-Client auf dem Rechner, mit dem man den Pi ansprechen will. VNC clients gibt es für alle o.g. Geräte. Wie das geht, ist sehr gut hier beschrieben:


    http://www.codeclinic.de/de/20…spbian-einrichten-teil-1/


    Schritt 11: Inbetriebnahme am Aquarium

    So, wenn alles oben Beschriebene funktioniert und eine Weile im Test auf dem Tisch gelaufen ist, ist es soweit, die Steuerung kann an der echten Hardware am Aquarium installiert werden. Hierzu müssen wir die Komponenten noch in einem Gehäuse oder auf einer Montageplatte montieren und sauber verkabeln Wie gesagt, Vorsicht mit 230 V, sauber arbeiten oder vom Fachmann helfen lassen!
    Wenn wir das Programm im Terminal starten wollen stoppen wir das automatisch im Hintergrund gestartete und starten es im Terminal neu (s.o. Schritt 9)


    Schritt 12: Erweiterung

    Jetzt seid Ihr dran. Die Basics funktionieren, und nun können weitere Ideen hinzukommen. Wichtig war mir, erst mal die Grundfunktionen eines Aquarien-Pi erfolgreich zum Laufen zu bringen. Der Pi ist damit nicht mal zu 2 % seiner Rechenleistung ausgelastet. Also, was immer Euch einfällt, setzt es um!


    Am Ende: Der Code hängt als Datei an


    Viel Spaß, wenn Ihr Euch entschließt, das nachzubauen!

  • Eben habe ich den Go-Life gemacht und das Aquarium mit dem Raspi verkabelt. Ab jetzt steuert er wirklich alle Funktionen :D . Noch habe ich das Breadboard drin, weil ich den Raspi ab und zu noch rausnehmen muss, ist aber schon sehr nahe an der End-Ausbaustufe. Vor die Relaiszeile gehört noch eine Plexi-Platte, um das Ganze elektrisch fingersicher zu machen. Der Raspi hängt deutlich ÜBER Beckenhöhe (in etwa auf Augenhöhe) damit keine Gefahr besteht, dass da mal Wasser dranspritzt. Die Steuerung hängt sowieso auf der Rückseite einer Kellerwand (Becken steht auf der einen Seite im Flur, die Technik habe ich auf der anderen Seite versteckt.). Alle Relais und Verbaucher tun das, was sie sollen. Das Testprogramm hat das schon alles gut simuliert. Ein bisschen Fine-Tuning an den Zeiten wird noch kommen, aber erst mal geht alles :thumbs1: . Alle Zeitschaltuhren und Thermostate sind durch den Raspi ersetzt !


    Die rote LED auf dem Breadboard ist die "Alive-LED", die bei jedem Zyklus der Schleife blinkt, die gelbe LED zeigt an, dass die Temperatur im Zielbereich ist. Die LEDs auf dem Relaisboard sind an, wenn der jeweilige Verbraucher eingeschaltet ist.


    Die Relaiszeile aus China für 5 € funktioniert einwandfrei, bei den Klemmen muss man etwas aufpassen, dass man die Schrauben nicht durchdreht, die sind nicht dafür gemacht, das man da jeden Tag 5 mal Verbraucher an- und abklemmt.


    Das Python-file enthält den Code, der aktuell an meinem Aquarium läuft. Funktioniert alles bestens, Die Temperaturregelung läuft auf 0.2 °C genau. (Man könnte ja jetzt leicht eine Nachtabsenkung oder Temperaturkurve programmieren... ;) )

  • Hai


    ich bastel mir grad auch einen AQ Raspberry zusammen. Bin bislang auch gut vorran gekommen bislang, bin aber so langsam am Ende mit meinem Latein und brauche Input und zwar für Leitwertmessung und pH Wert. Ich benötige eine Vorschaltelektronik, pH muss ich messtechnisch triggern und hab noch keinen Plan welches Board ich dafür verwenden kann. Sonden liegen hier rum mit BNC Anschluss aber ich bräuchte mal einen Anschupser wie ich jetzt weiter machen soll. Ich hab deinen Beitrag hier verfolgt, meine Schaltung weicht leicht ab. Ich steuere Gembird Steckdosenleisten und will auch irgendwann auf die 8Kanal Karte wechseln. Bislang laufen die Gembird fehlerfrei. Temperaturmessung und Steuerung läuft über GPIO und DS18B20 Sensoren. Ferner hab ich noch eine Videoüberwachung mit eingebaut sowie Wasserstandsregelung per Schwimmerschalter, meine Nachfüllautomatik läuft auch darüber.
    Ein Alarmsystem hab ich mir geschrieben welches mir einen SMS schickt falls Werte aus dem Ruder laufen.
    Jetzt liegen die Sonden hier und weiß jetzt noch nicht wie ich weiter machen soll. Welches Board brauch ich die Leitwert und pH Sensoren welches mit dem Pi funtkioniert? Hat irgendjemand ein Beispielskript für mich?


    viele Grüße

  • Hallo,


    Hört sich interessant an. Kannst Du mal Deinen Code posten ? Die Alarmfunktion mit mail und die Einbindung der Camera würde mich auch interessieren.


    Wie hast Du bei der Nachfüllautomatik dafür gesorgt, dass Du Deine Bude nicht unter Wasser setzt? Kommt das Wasser aus einem Kanister oder direkt aus der Leitung? Bei letzterem hätte ich Angst vor Fehlfunktion des Sensors oder des Ventils. Da müsste man m.E. mindestens mit redundantem Sensor UND Absperrventil rangehen.
    Ich mache das derzeit aus dem Kanister und habe die Dosierzeit schlicht ausprobiert. Da der Kanister nir 10 l fasst und ich immer Platz im Becken für 10 l habe, kann da nix schiefgehen. Wenn so eine direkt gespeiste Automatik versagt, ist das Schadenspotential halt sehr groß...


    Bei ph-Sensor habe ich mal geschaut, aber noch keine einfache Anbindung an den Pi gefunden. Das wäre in Zusammenhang mit dem CO2 eine gute Möglichkeit zur Regelung. Aber hier habe ich auch noch keine Lösung ...


    Viele Grüsse

  • Hallo zusammen,


    erstmal großen Respekt, schön durchdachtes Projekt.


    Bin selber auch ein bisschen am basteln mit einem AquaPi wenn man mal die Zeit dazu hat (daher auch erst Temperaturmessung bisher... :D ).
    Habe mich auch eine Zeit lang über PH-Messung mit dem Pi erkundigt und die einzig zufriedenstellende Lösung die ich gefunden habe ist die von Atlas-Scientific.
    175 Dollar für das Hobby ist mir dann für einen Messwert den ich sowieso nicht großartig beeinflussen werde doch zu teuer (Leitungswasser Werte sind vollkommen ok für meine Tiere).


    Aber Atlas-Scientific bietet auch direkt Beispielcode für den Pi und Arduino an.


    MfG

  • Hallo,


    Erstmal danke für den Tip, das sieht wirklich so aus, als könnte man da eine Glaselektrode direkt an den Pi anschliessen. Aber175$ sind natürlich auch eine Hausnummer, die dafür aufgerufen werden...


    Das werde ich auch nicht mal eben so investieren. Für das Geld kann ich eine Menge Wassertests kaufen, und so instabil ist mein ph-Wert nicht. Ist für mich nice to have, aber keine Basis-Ausstattung.


    Mal sehen, vielleicht findet sich noch eine andere Lösung.


    Trotzdem Danke für den Post!

  • Hallo zusammen , ich habe mir einen nachbau dieses Aquarien Computers gemacht , bis dato lauft er so einigermassen ..


    ich habe die datei Aquarium27 genommen gpio pins alles abgeändert nun habe ich aber volgende probleme ...


    1. lampe 1 klappt wie eingestellt , von 09-22 uhr
    2. lampe 2 klappt nicht vom 22-09 uhr
    3. lampe 3 klappt nicht von 21-10 uhr


    und ich komme nicht hinter den fehler


    habe auch mal lampen zeiten 1-2 gedreht hat auch nicht geklappt
    ich wollte diese ausgange 2-3 für nacht beleuchtung nehmen


    könnt ihr mir helfen wo hier mein fehler liegt ?
    Desweiteren habe ich probleme wenn ich als temparatur genau 29 grad soll haben möchte dann schalten heizung nimmer ab wenn sie mal eingeschalten haben , so wie es nun in der dprogramm datei steht läuft es aber derzeit


    aber das licht problem ::(


    und zu termostat abfrage hätte ich noch eine frage ,
    ich würde gerne 2 temparaturen ausgeben , im terminal
    derzeit wenn ich zwei am pi habe reagiert das program auf beide
    und ich möchte die raum temparatur noch mit in der ausgabe stehen haben


    ich danke euch im vorraus
    und hoffe auf hilfe für den neu einsteiger in die welt des pi


  • Hallo,


    diese erste einfache Version kann nicht über Mitternacht rechnen (dann gilt die Bedingung nicht, dass die Einschaltzeit immer kleiner ist als die Ausschaltzeit).


    Deswegen funktioniert das nicht (aber warum willst Du von 22 bis 9 Uhr Licht brennen lassen ?)


    Natürlich habe ich den Code in der Zwischenzeit "etwas weiterentwickelt", die ersten Gehversuche funktionieren, aber sie sind wenig elegant. Ich kann Dir den neuen Code gern posten, aber mir fehlt derzeit die Zeit, den sauber zu dokumentieren. Vieles ist jetzt nicht mehr so allgemein, sondern genau für mich gestrickt.


    Ich habe noch zwischenzeitlich einen Futterautomaten für Tabletten mit einem Servomotor aus dem Modellbau, der bei mir in der Schubade rumflog angestrickt (Pulsweitenmodulation an einem GPIO).


    Außerdem bezieht der Raspi alle Einschaltzeiten jetzt aus deinem Parameterfile, die sind also nicht im Code hart codiert, sondern in dem file änderbar.


    Ich kann über das Parameterfile "Wetter" machen. Die Intensität und Farbe des Lichts ändern sich über den Tag, so wie in den Tropen ja auch erst Sonne kommt, dann Bewölkung und später Gewitter und dann wieder Sonne. Das kann man leicht simulieren. Manche nennen das Spielerei, ist es vermutlich auch, aber ich spiele eben gern.


    Die Temperatur folgt über den Tag einem Sinus mit +/- 1 Grad (auch im Parameterfilem hinterlegt).


    Dann logge ich noch einiges mit, berechne den Energieverbrauch, und der Raspi schickt mir jeden Tag einen Statusreport per email, ob alles OK ist (bzw. eine Fehlermeldung, wenn was schief läuft)


    Die Stromversorgung habe ich durch ein echtes 5V Netzteil gelöst, und dann hängen da parallel 4 NiMh AA Akkus (in Reihe geschaltet) als unabhängige Stromversorgung dran. Bei einem Stromausfall halten die ca. 1h durch, d.h. der Raspi läuft weiter.


    Die Lampen haben Betriebsstundenzähler, da habe ich keine Unsicherheit mehr, wann ich die tauschen muss.


    Wie gesagt, den Code poste ich gern, aber dann musst Du Dich da selber reinwühlen.


    Grundsätzlich funktioniert das System aber jetzt seit 1 Jahr sehr zuverlässig. Die Freiheitsgrade, die man durch den Raspi bei der Steuerung bekommt, sind erheblich und wirken sich bei mir positiv auf das Wachstum der Pflanzen aus. Ich versorge einen Kollegen regelmäßig mit dem Überschuss, wenn es zu voll wird.


    Stay hungry, stay foolish! Keep on playing!


    Viele Grüße


    Scooper

    Edited once, last by Scooper ().

  • ist das eine typische 5V Arduino Relaisplatine am PI ohne Treiber?


    der arme PI, würde ich so nicht nachbauen oder veröffentlichen ohne genaue Daten der Relaisplatine!


    Welche Spannung liegt am unangeschlossenen IN der Relaisplatine? (Relaisplatine mit VCC aber versorgt)
    Welcher Strom fliesst von IN nach GND gebrückt? (Relaisplatine mit VCC aber versorgt)

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo Jar,


    Ich weiss, um dieses Thema wird heftig in den Foren gestritten. Viele sagen, dass man seinen Pi damit grillt, andere sagen: "Anschließen und gut is".


    Deshalb habe ich das vorher selber durchgemessen.


    Schau mal weiter oben im ersten Post, da habe ich schon ein paar Messergebnisse dazu veröffentlicht. Vielleicht hast Du die noch nicht gelesen.


    Die IN-Pins der Relaisboards haben (natürlich bei angeschlossener Versorgungsspannung und ohne Verbindung zum Pi GPIO) 3V. Und wenn man die IN Pins auf GND legt so dass das Relais anzieht, fließen 1.9 mA.


    Ich kann da nicht erkennen, wo der Pi at risk sein sollte. Weder die 3V auf GPIO Eingang noch die 1.9 mA, wenn der GPIO auf Masse zieht, sollten dem Pi gefährlich werden.


    Und wie gesagt, bei mir funzt das seit 1 Jahr ohne Probleme.


    Also, ich schließe mich damit der Fraktion "Anschließen und gut is" an.


    Oder gibt es noch ein Risiko, was ich übersehen habe?

    Edited once, last by Scooper ().

  • Hallo,


    zum Thema Temperatur:


    Da das ein 2-Punkt-Regler ist (der kennt nur AN oder AUS), muss der Heizer unterhalb einer bestimmten Temperatur EIN und oberhalb einer bestimmten Temperatur AUS schalten.
    Diese Temperaturen können nicht gleich sein. Die Temperatur bleibt dann im aufgespannten Bereich. Das ist eine Hysterese.


    Du kannst die Temperaturen 0.2 Grad auseinander setzen, was sicher genau genug ist, aber gleich dürfen sie nicht sein.


    Grüße


    Scooper

    Edited once, last by Scooper ().


  • Ich kann da nicht erkennen, wo der Pi at risk sein sollte. Weder die 3V auf GPIO Eingang noch die 1.9 mA, wenn der GPIO auf Masse zieht, sollten dem Pi gefährlich werden.
    Oder gibt es noch ein Risiko, was ich übersehen habe?


    bei deinem Modul scheinbar nicht, es gibt aber Daten die weisen auf 10mA hin und wenn die Opto LED 1,2V + die Signal LED 2V in Reihe liegen brauchts schon mal mit Rv über PI Spannung 3,3V da besteht erstens die Gefahr das der PI aus 5V was abbekommt oder die LEDs nicht richtig schalten bzw. die Relais, dieses Flattern haben schon einige hier abbekommen.


    Deswegen ist es wichtig die sogenannte Relaisplatine genau zu beschauen.


    Es gibt zwar ausgewiesene PI Platinen, aber meist wird billigst Arduino und PI in einem Topf geworfen auch bei den China Händlern, denen ist es doch egal ob der PI qualmt


    Arduino 5V 10mA no Problemo
    PI 5V 10mA kann der Übel nehmen

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • ja es gibt beliebig viele Relaiskarten und der Unbedarfte User der einfach nur eine aus dem riesigen Angebot kauft dem kann folgendes passieren:


    http://www.forum-raspberrypi.d…eiss?pid=274646#pid274646


    Deswegen weise ich ja immer wieder darauf hin,


    erst lernen dann messen und wenns nicht passt einen/mehrere Transistoren oder ULN2803 vorschalten zwischen GPIO und Relaisplatine IN
    Die GND PI zu GND Relaisplatine nicht vergessen, optimal die Relaisplatine mit eigener Stromversorgung.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • OK, verstanden, dann war das mit dem Messen vorher instinktiv richtig, und meine Karte passte dann offensichtlich für den Pi.


    Wenn ich die nächste bestelle, werde ich die auch vorher durchmessen. Aber wenn die Werte so, wie bei meiner sind, dann ist es ohne Treiberstufe schon einfacher....