Noch ein DIY Controller

MajorMadness

Active Member
China clons sind keine Piraterie. Schaltpläne und qurlcode sind offen imd dürfen nachgebaut werden, nur halt nicht unter dem offiziellen Brand.

Die schaltrelays haben vor und Nachteile. Ich selber verbaue die ja auch in meinen Projekten.

Wenn du nur led dimmen willst solltest du dir https://github.com/MajorMadness/AquaGrowMicroLED das ansehen, ist ne Auskopplung zur reinen led dimmung.

Aber wir schweifen zu sehr vom eigentlichen Projekt ab...
 

thisischris

New Member
Relays habe ich mir zuerst auch angesehen, ich wollte aber (zumindest in dieser Weinkisten-Prototyp-Phase) überhaupt keine offenen 220V im Projekt haben. Bei den Relays sind die Schraubkontakte mit etwas Geschick beim Basteln im Unterschrank ja doch recht leicht zu berühren. Zudem ist die Relaylösung schwieriger zu verbauen und zu erweitern, also auch eher bei guter Planung geeignet.

Für ein besser verbautes Projekt wären die Relays wohl etwas schneller in der Ansteuerung als die RC Switches, deren Ansteuerung ja jedesmal einige Mikrosekunden frisst.

Zuverlässig waren meine billigst-Switches bisher, bin gespannt auf den Langzeitbetrieb.

Chris
 

thisischris

New Member
Hier noch ein Update zu meinem Projekt: LCD und die Saugströme.

Mein erklärtes Ziel ist es ja, dass der Arduino notfalls für sich alleine stehen kann, ohne äussere Hilfsmitteln. Ohne Anzeige (und vielleicht ein paar Tasten?) geht das nicht wirklich. Dem Arduino Starter Kit liegt ein LCD-Display bei, und auch einige Buttons, doch eine auf dieser Basis selbst gebaute Lösung hat den Nachteil, dass sie sehr viele Pins des Arduinos belegt. Ich habe mich deshalb einmal mehr für eine Lösung von Adafruit entschieden:

http://www.adafruit.com/products/714

Eine schöne Lötarbeit! Dieses LCD Shield kommuniziert wie die Echtzeituhr via I2C mit dem Arduino und belegt so eigentlich keinen einzigen PIN, denn I2C kann ja eine grosse Zahl von Geräten aufnehmen. Als Bonus habe ich das Shield nicht auf den Arduino aufgesteckt, sondern mit vier Kabeln (+, -, SDA, SCL) angeschlossen und auf meine Weinbox aufgeschraubt. Sieht gut aus, irgendwie futuristisch. Ein paar Zeilen Code (mitgelieferte Library) und, oh Wunder, die gemessene Temperatur im Aquarium ist um 2°C gestiegen. Habe ich da etwa eine neue Form der Instant-Aquarienheizung via LCD erfunden?

Offensichtlich reagiert der Temperatursensor sehr empfindlich auf Stromverbraucher, die auf "seiner" Seite des Breadboards angeschlossen sind. Ich bin sicher, dafür gibt's eine völlig rationelle Erklärung (vielleicht von Moritz, der hiervon viel mehr versteht?). Für mich reicht im Moment die Erkenntnis, dass starke Verbraucher getrennt von den Sensoren am Arduino hängen müssen, weil die Verbraucherströme sonst die Messwerte (z.B. des Temperatursensors) beeinflussen. Klüger wurde ich bisher nicht, bezüglich solcher Schaltkreise fehlt mir schlicht das Wissen (und diese Kombination von Elektronik, Sensorik und Mikroprocessing macht Arduino-Projekte so komplex). Die Beobachtungen rund um den LCD haben mich auch darauf gebracht, dass die beiden Status-LEDs auf den AtlasScientific Stamps ebenfalls die Temperaturmessung beeinflussen (sie verbrauchen 2x30mA). Deshalb habe ich diese LEDs nun abgeschaltet.

Auf Git können Interessierte verfolgen, wie ich meinen Code noch etwas weiter optimiert habe, dass ich nun auf eine Temperatur-Kalibrierung der pH und O2-Sensoren verzichte (die Messwert-Unterschiede sind zu gering) und dass ich meine Funksteckdosen nun mit Pulsen von 325 Mikrosekunden (anstatt 350 Mikrosekunden) ansteuere, weil ich mehr über den Chip zu meinen Dosen erfahren konnte, den HX2262.

Beste Grüsse

Chris
 

MajorMadness

Active Member
Temp kann ich dir ganz grob kurz erklären da ich Grade auf nem Festival bin...

Du benutzt nem analogen Sensor und misst den Strom am analoge port. Dieser kann aber abweichen durch die angeschlossenen Verbraucher und damit die exakte Spannung. Dafür ist der Vergleich zu aref pin da um dies zu kompensieren. Wie du bereits merktrst reichen minimale Abweichungen von 30mA um die Messung zu verfälschen. Unter dem gleichen Nachteil leiden auch ph Sensoren und andere die über die analogeRead angesprochen werden.
Kompensieren kannst du das wenn du kleine und größere elkos zwischen bastelst.

Kleiner tip: schmeis den Sensor weg und nimm nen digitalen wie den DS18B20. Der leidet nicht unter dem Nachteil da er nicht vom aref abhängig ist.
 

thisischris

New Member
Ein kurzer, wie mir scheint aber wichtiger Update zur Programmierung meines Controllers: der Wachhund, oder: nie mehr einfrieren. In den letzten Wochen habe ich damit begonnen, etwas mit den Buttons rumzuspielen, die beim LCD-Shield dabei waren und einen sehr einfachen "Maintenance Mode" zu programmieren (einen Modus, den ich brauche, wenn ich am Aquarium arbeiten möchte).

Ich konnte der Sache noch nicht ganz auf den Grund gehen, aber anscheinend gibt es in der Library, die die Buttons liest einen Bug. Jedenfalls hängt sich mein Arduino nach längerer Laufzeit neuerdings "spontan" auf. Und das nicht wie bisher gewohnt mit einem fulminanten Reboot, sondern einfach, indem er still und leise stehen bleibt. Solche "Einfrierer" sind viel weniger angenehm als spontane Reboots. Ich habe ja schon früher meine Angst davor zum Ausdruck gebracht: Alles bleibt so stehen, wie es war, das Licht bleibt an (oder aus), die Düngerpumpe pumpt dauernd (oder nie wieder). Nicht gut fürs Aquarium.

Selbstverständlich ist es wichtig, solchen Einfrierer auf den Grund zu gehen und sie zu beheben. Wir können aber nie ganz sicher sein, dass unser Projekt nach einigen Tagen Laufzeit nicht plötzlich stehenbleibt. Z.B. stösst der millis() Zähler nach 49 Tagen an seine Grenzen, oder ein Sensor schickt plötzlich unerwartete Daten - was passiert dann?

Glücklicherweise hat der Mikrocontroller des Arduino einen eingebauten Mechanismus, um Einfrierer zu erkennen und den Arduino neu zu starten. Der kleine Aufpasser heisst passenderweise "Watchdog" (Wachhund) und leider ist er im Arduino-Projekt gar nicht so gut dokumentiert. Dennoch ist die Integration in einem ersten Schritt ganz einfach. Die nötigen Definitionen erhält man durch den Import folgender Library:

Code:
#include <avr/wdt.h>

In setup() kann der Wachhund dann scharf gemacht werden:

Code:
wdt_enable(WDTO_8S);

Die Konstante (WDTO_8S) sagt, wie lange der Wachhund eine ausbleibende Antwort des Arduino tolerieren soll, bevor er einen Reset auslöst (in meinem Fall probehalber mal 8 Sekunden). Andere Werte finden sich online.

Nun muss der Arduino seinem Wachhund natürlich regelmässig sagen, dass er noch zuverlässig arbeitet. Am Besten mit dieser Programmzeile an erster Stelle im Loop:

Code:
wdt_reset();

So, nun sollte der Controller nicht mehr stehen bleiben, geschehe was wolle. Ich berichte dann :). Hier ein gehaltvoller Beitrag zum Watchdog und zu den vielen Möglichkeiten, die er sonst noch bietet.

Beste Grüsse

Chris
 

Martin92

Member
Hallo,
sehr interessant zu lesen eure Beiträge. Bin recht neu hier im Forum und sauge gerade Information auf, wo es nur geht. Bin auf deinen Beitrag gestoßen, weil ich ursprünglich nach einem Düngercontroller mit einem Rasperry PI gesucht habe. Dass ich das besser lassen sollte, erscheint mir nun verständlich. (Und dass ich mir neben meinem Studium ein Arduino Projekt nicht auch noch aufhalsen will, nun auch :p ) Werde wohl zunächst noch manuell düngen, wünsche aber noch gutes Gelingen für dein Projekt!


Gruß Martin
 

NatroN

Member
Ich habe das gleiche PH Kit wie du im Einsatz - zwar noch nicht im Echtbetrieb, aber ich programmiere damit und habe erste Tests abgeschlossen. Im Moment wächst der Code schnell (ca. 2500 Zeilen) und ich denke ich kann bald was präsentieren.

Deswegen denke ich mittlerweile auch langsam über Befestigung des Equipments nach. Wie tief hast du die PH Elektrode eingetaucht? Und vllt irgendwie "geschützt"? Ich will sie vllt in inem dunklen Kunststoffrohr (mit vielen Löchern) oder gar einem schwarzen Schwamm betreiben und möglich kein Licht (und damit keinerlei Algen) auf der Elektrode wachsen zu lassen. Spricht was dagegen? Könnte das Ergebnis deiner Meinung nach verfälscht werden?
 

thisischris

New Member
Lieber Mathias oder Mari

Ich war länger nicht mehr hier und habe Deine Frage erst jetzt gesehen. Die Spitze der Elektrode hängt bei mir etwa auf halber Höhe im Becken. Sie hat mittlerweile etwas "Patina" angesetzt, das scheint die Messwerte aber nicht zu beeinflussen. Wenn ich Probleme mit den Messwerten hatte, dann immer im Zusammenhang mit irgendwelchen Fehlströmen (Filter, Heizung, Lüftung etc.). Meine Sauerstoffelektrode zickt hingegen seit ca. einem Monat. Aufsteigende Sauerstoffblasen die sich am Ende der Elektrode sammeln könnten das Problem sein, ich war aber bisher zu faul um dem nachzugehen.

Solange Du für gute Wasserzirkulation sorgst sehe ich kein Problem damit, die Elektrode mit einem "Käfig" zu schützen.

Chris
 

NatroN

Member
Hallo,

habe heute erste Tests mit meiner Elektrode gemacht. Während ich in einer Plastikflasche immer sehr genau messe schwanken die Werte im Becken selbst sehr stark.

Ich nehme an es geht um irgendwelche Fehlströme aus dem Heizstab. Aber wie werd ich die los. Das Becken einfach nur zu erden (Kabel an Schucko GND anschliessen und ins Wasser hängen lassen) brachte keine Veränderung.

Irgendeine Idee?

Seltsamerweise tritt das komische Verhalten sogar auf, wenn Pumpe, Heizstab, Licht abgesteckt sind. Ich sehe keinerlei Verbindung zwischen Aquarium und Stomnetz
 

Ähnliche Themen

Oben