Hauptmenü

Aquariencomputer

Begonnen von akibaba88, 08 August 2018, 23:23:15

Vorheriges Thema - Nächstes Thema

akibaba88

Hallo,

ich lese hier bei euch schon seit einiger Zeit mit.
Viele Themen haben mir schon sehr geholfen, aber zurzeit komme ich nicht mehr weiter.

Erstmal zu meinem Projekt:

Ich habe mehrere Aquarien, diese sollen automatisch geregelt werden.
Es soll die Temperatur, die Strömung-pumpen und das Licht gesteuert bzw. geregelt werden.

Zur Hardware:
Benutzt wird ein Raspberry Pi 1 B, eine Relaiskarte mit 8 Ausgängen, DS18B20 1-Wire Sensoren und ein PCA9685 mit zusätzlichen Endstufen.

Was ich genau von dem Projekt erwarte:

Die Temperatur soll auf einen bestimmten Wert geregelt werden.
Wird es zu kalt, soll der Heizstab eingeschaltet werden, wird es zu warm, gehen die Lüfter an.

Das Licht soll an das Sonnenlicht von Rio Negro angepasst werde.
Es soll der Sonnenaufgang/-untergang, sowie die Bewölkung berücksichtigt werden.
Es soll dann auf die Deutsche Zeit angepasst werden.

Es wird noch ein Moonlight dazukommen, diese soll weich zum Sonnenuntergang eingeschaltet
und zum Sonnenuntergang ausgeschaltet werden.

Die Strömung-pumpen sollen zum Abend gedrosselt werden.

Was bisher funktioniert:

Die Temperaturregelung funktioniert soweit.
Das Relais für den Heizstab wird eingeschaltet, wenn die definierte Temperatur unterschritten wird.

Das Licht wird bei Sonnenaufgang eingeschaltet und bei Sonnenuntergang abgeschaltet.
Also 100% und 0%.
Abgerufen werden die Daten über "SUNRISE_EL" inkl. Zeitanpassung (10800 Sekunden)

Die Strömung-pumpen funktionieren soweit ganz gut.
Zum Abend wird die Leistung auf etwa die Hälfte reduziert.

Was nicht funktioniert:
Das Licht soll passend zum Sonnenstand und Wetter geregelt werden.
Es soll morgens langsam hochfahren und abends langsam herunterfahren.
Wenn es bewölkt ist, soll das Licht dem entsprechend gedimmt werden.

Wenn es möglich ist, soll eine Gewittersimulation dazukommen.
D.h. Licht soll auf 50% oder weniger gedimmt werden, es sollen dann Blitze mit voller Leistung in zufälligen Abständen erfolgen.

Das Moonlight soll gegenläufig zum normalen Licht schalten, auch per PWM.

Das Kühlen funktioniert leider nicht sehr elegant, da es über ein Relais läuft.
Es soll über PWM gesteuert werden.
Bei einer Abweichung von 0,1 Grad soll es z.B. mit 50% laufen, bei einer höheren Abweichung entsprechend mehr.

Es soll noch ein Zustand "Wasserwechsel" eingefügt werden.
Dabei soll die Temperaturregelung deaktiviert werden und die Strömung-pumpen ausgeschaltet werden.

Von der elektronischen Seite das ganze aufzubauen ist kein Problem, da ich Elektroniker bin.
Mit der Programmierung komme ich leider nicht ganz zurecht.

Ich hoffe, ihr könnt mir ein wenig bei dem Projekt helfen.

Viele Grüße
Akibaba88

Wernieman

1. Ich würde die Temperaturregelung nicht über einen Rechner, sondern über eine Direkte Steuerung durchführen.
Nicht das der Rechner abschmiert und es dann "Fischsuppe" gibt (sorry für die Direktheit)

2. PWM Steuerung der Lüfter:
Da must Du wohl mit einem Transi arbeiten. Relais geht nicht. Ist aber eigentlich sehr einfach. z.B. mit einem MOSFET
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

akibaba88

Zu Punkt 1:
Für die Sicherheit sorge ich damit, dass das Thermostat 1°C höher eingestellt ist, als die gewünschte Temperatur.
Bei einem Ausfall würde die Temperatur nur gering ansteigen.

Zu Punkt 2:
Ich habe insgesamt 16 PWM Kanäle (mit Endstufe), somit wäre dies kein Problem. Relais habe ich zur Kühlung eingesetzt, da ich die Relaiskarte zuerst hatte. Später kam die PWM-Karte dazu.


rabehd

Bleiben wir mal beim Licht. Ja, das geht alles und läuft bei mir teilweise schon. Der Rest ist bei mir in Planung.
Für konkrete Tipps fehlen mir aber Infos zu Deiner Beleuchtung und deren Anbindung an FHEM.
Hast Du mal die Forensuche bemüht?
Auch funktionierende Lösungen kann man hinterfragen.

akibaba88

Das Licht im Hauptbecken wird momentan noch extern geschaltet. Es sind momentan noch Leuchtstoffröhren. Wird aber auf LEDs umgebaut. Es werden insgesamt 6 LEDs je 10W sein. Diese würde ich gerne jeweils auf einen Kanal hängen.
Also insgesamt 6 Kanäle. Die Dimmung soll zeitlich leicht verzögert von Kanal zu Kanal sein. Um somit den Wolkenverlauf zu simulieren. (Ob es sinnvoll ist oder nur eine Spielerei ist, ist eine andere Frage)
Die LEDs hängen dann am PCA9685.(https://fhem.de/commandref_DE.html#I2C_PCA9685)
An jedem Ausgang ist auch ein MOSFET.

Im Garnelenbecken sind LEDs verbaut, mit diesen könnte man es probieren. Wenn es klappt dann später an das große Becken anpassen.

In der Forensuche und bei Google habe ich schon viele Stunden verbracht. Leider ohne Erfolg.
Da ich nicht weiterkomme, suche ich Hilfe bei euch.

Tedious

Klemm die LEDs doch an einen Sonoff 4ch (brauchst halt 2, oder setzt je 2x2 in einer Gruppe, denn tuts einer...). Denn kannst Du die alle einzeln ansteuern und/oder blitzen lassen. Tasmota drauf und per FHEM steuern. Ohne groß drüber nachgedacht zu haben sollte das mit dem Astro-Modul und einer Hand voll DoIfs einfach zu realisieren sein... WLan setze ich einfach mal voraus ;)
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

rabehd

#6
Ich habe eine LED-Leiste Tageslicht und eine Leiste Blau.
Jede Leiste hängt bei mir an einem Homematic-Dimmer. Der hat 3 Eingangskanäle ( Sonne, Wetter, Sonderfall), diese werden logisch verknüpft (nicht nur AND).
Damit kann ich alles umsetzen.
Die Kanäle werden durch DOIF... angesteuert.
Das Astro-Modul und Wetterground liefern mir die Infos zu Sonne und Wolken.
Auch funktionierende Lösungen kann man hinterfragen.

akibaba88

Zitat von: Tedious am 09 August 2018, 09:49:31
Klemm die LEDs doch an einen Sonoff 4ch (brauchst halt 2, oder setzt je 2x2 in einer Gruppe, denn tuts einer...). Denn kannst Du die alle einzeln ansteuern und/oder blitzen lassen. Tasmota drauf und per FHEM steuern. Ohne groß drüber nachgedacht zu haben sollte das mit dem Astro-Modul und einer Hand voll DoIfs einfach zu realisieren sein... WLan setze ich einfach mal voraus ;)

Die Beschaltung über Sonoff wäre in meinem Fall nicht ziehführend. Darin sind nur Relais verbaut, somit ist ein Dimmen nicht möglich. Da es Netzspannung schaltet, bräuchte ich auch für jede LED ein separates Netzteil.
Ich habe ein 12V 30A verbaut, dieses sollte genug Leistung für alles liefern.

akibaba88

Zitat von: rabehd am 09 August 2018, 09:59:56
Ich eine LED-Leiste Tageslicht und eine Leiste Blau.
Jede Leiste hängt bei mir an einem Homematic-Dimmer. Der hat 3 Eingangskanäle ( Sonne, Wetter, Sonderfall), diese werden logisch verknüpft (nicht nur AND).
Damit kann ich alles umsetzen.
Die Kanäle werden durch DOIF... angesteuert.
Das Astro-Modul und Wetterground liefern mir die Infos zu Sonne und Wolken.

Ich würde gerne alles mit der vorhandenen Hardware laufen lassen. Handbetrieb läuft ja soweit. Die Steuerung mit sunrise und sunset funktioniert auch. Nur fehlen die Zwischenschritte. Momentan hat das Licht einen Wert von entweder voll an oder komplett aus.

Wernieman

PCA9685 mit passenden MOSFet dahinter .. passt.

Habe hier zwar kein Quarium, sondern eine LED-Leiste, allerdings als "Host" einen esp8266. Da geht es super. Per PI??? weiß ich nicht
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

rabehd

Zitatwürde gerne alles mit der vorhandenen Hardware laufen lassen.
Mit Relais und Leuchtstoffröhren? Da bin ich raus. 
Auch funktionierende Lösungen kann man hinterfragen.

akibaba88

Zitat von: Wernieman am 09 August 2018, 10:56:56
PCA9685 mit passenden MOSFet dahinter .. passt.

Habe hier zwar kein Quarium, sondern eine LED-Leiste, allerdings als "Host" einen esp8266. Da geht es super. Per PI??? weiß ich nicht

Der PCA9685 hängt per I2C am pi und bekommt Befehle von diesem. (Z.B. set PWM Port 0 4095).
Diese Befehle sollen kontinuierlich erfolgen, also bei jeder Änderung der Lichtverhältnisse.
An diesem Punkt komme ich nicht weiter.
Dass er zu einem bestimmten Zeitpunkt auf einen bestimmten Wert schaltet, funktioniert ja soweit.

akibaba88

Zitat von: rabehd am 09 August 2018, 11:08:09
Mit Relais und Leuchtstoffröhren? Da bin ich raus.
Ich habe mich falsch ausgedrückt.
Die Leuchtstoffröhren werden abgebaut.
Es wird alles nur mit LEDs beleuchtet.

bugster_de

#13
Hi,

ZitatRelais, Mosfet, etc
wenn Du selber basteln möchtest kann ich dir als Transistor den BCD432 empfehlen. Kann direkt von 3,3 V oder 5V angesteuert werden. Einfach nur 1 kOhm Pull-Up Widerstand an den Raspberry Pin, der den Transistor schaltet. Ausgangsseitig kann der bei 12V ohne Kühlung bis zu 28A, was für dein Projekt sicher zu viel ist aber somit Reserven bietet. Mit Kühlung sogar noch mehr. Er hat auch einen Diagnose Pin, den man an den Raspberry zurück führen kann um Kurzschluß oder Kabelbruch zu erkennen. Einzig wichtig ist: es handelt sich um einen High-Side Switch, sprich er kommt auf die 12V Seite und die zu schaltende Last dann im Pfad gen Masse. Er hat auch eine integrierte Freilaufdiode, so dass du damit auch induktive Lasten (Lüftermotor) schalten kannst.
Allerdings muss der GND Level zwischen Raspberry und BCD432 gleich sein. Sprich die sollten am besten aus dem gleichen Netzteil versorgt werden, so dass man den GND gemeinsam hat
Ich habe mit dem Teil bei mir schon Autozündspulen befeuert.

ZitatDiese Befehle sollen kontinuierlich erfolgen, also bei jeder Änderung der Lichtverhältnisse.An diesem Punkt komme ich nicht weiter.
Bin mir jetzt nicht ganz sicher, ob ich das richtig verstanden habe, aber FHEM ist im Prinzip ein System, welches auf events reagiert. Sprich du brauchst ein Event, damit du dich da dran hängen kannst.
Somit entweder einen Lichtsensor, der kann aber ja nur auf das Licht bei Dir zu Hause reagieren, was ja eher nicht Rio Negro ist.
Was aber geht: die nimmst das Modul Twilight, definierst dort als Standort Rio Negro. Im Modul hat es Readings für Sonnenaufgang und Untergang auch abhängig vom Wetter vor Ort sowie die im Moment dort herrschenden Helligkeitsverhältnisse mit Werten zwischen 0 (dunkel) bis 6 (volles Sonnenlicht). Dann setzt du dir einen notify auf z.B. das Sonnenaufgangsreading und steuerst die Beleuchtung damit.
https://wiki.fhem.de/wiki/Twilight

Also als Pseudo code ungefähr so
define Rio_Negro Twilight lat long
define Sonnenaufgang notify Rio_Negro:sr.* set meineLED on


Wenn Dir damit der Sonnanaufgang zu "digital" ist, dann sollte der notify oben lieber ein Funktion anwerfen, die den Sonnenaufgang simuliert. Zur Inspiration und zum Einlesen z.B. sowas:
https://forum.fhem.de/index.php?topic=67645.0

Cooles Projekt übrigens. Ich habe zwar kein Aquarium aber der Grund eines anzuschaffen wäre für mich definitiv, dass ich genau sowas dann basteln kann :-) Was ich dann aber mit dem Aquarium mache, wenn das alles läuft weiß ich auch nicht so genau.




akibaba88

Zitat von: bugster_de am 09 August 2018, 13:38:50
Hi,
wenn Du selber basteln möchtest kann ich dir als Transistor den BCD432 empfehlen. Kann direkt von 3,3 V oder 5V angesteuert werden. Einfach nur 1 kOhm Pull-Up Widerstand an den Raspberry Pin, der den Transistor schaltet. Ausgangsseitig kann der bei 12V ohne Kühlung bis zu 28A, was für dein Projekt sicher zu viel ist aber somit Reserven bietet. Mit Kühlung sogar noch mehr. Er hat auch einen Diagnose Pin, den man an den Raspberry zurück führen kann um Kurzschluß oder Kabelbruch zu erkennen. Einzig wichtig ist: es handelt sich um einen High-Side Switch, sprich er kommt auf die 12V Seite und die zu schaltende Last dann im Pfad gen Masse. Er hat auch eine integrierte Freilaufdiode, so dass du damit auch induktive Lasten (Lüftermotor) schalten kannst.
Allerdings muss der GND Level zwischen Raspberry und BCD432 gleich sein. Sprich die sollten am besten aus dem gleichen Netzteil versorgt werden, so dass man den GND gemeinsam hat
Ich habe mit dem Teil bei mir schon Autozündspulen befeuert.
Bin mir jetzt nicht ganz sicher, ob ich das richtig verstanden habe, aber FHEM ist im Prinzip ein System, welches auf events reagiert. Sprich du brauchst ein Event, damit du dich da dran hängen kannst.
Somit entweder einen Lichtsensor, der kann aber ja nur auf das Licht bei Dir zu Hause reagieren, was ja eher nicht Rio Negro ist.
Was aber geht: die nimmst das Modul Twilight, definierst dort als Standort Rio Negro. Im Modul hat es Readings für Sonnenaufgang und Untergang auch abhängig vom Wetter vor Ort sowie die im Moment dort herrschenden Helligkeitsverhältnisse mit Werten zwischen 0 (dunkel) bis 6 (volles Sonnenlicht). Dann setzt du dir einen notify auf z.B. das Sonnenaufgangsreading und steuerst die Beleuchtung damit.
https://wiki.fhem.de/wiki/Twilight

Also als Pseudo code ungefähr so
define Rio_Negro Twilight lat long
define Sonnenaufgang notify Rio_Negro:sr.* set meineLED on


Wenn Dir damit der Sonnanaufgang zu "digital" ist, dann sollte der notify oben lieber ein Funktion anwerfen, die den Sonnenaufgang simuliert. Zur Inspiration und zum Einlesen z.B. sowas:
https://forum.fhem.de/index.php?topic=67645.0

Cooles Projekt übrigens. Ich habe zwar kein Aquarium aber der Grund eines anzuschaffen wäre für mich definitiv, dass ich genau sowas dann basteln kann :-) Was ich dann aber mit dem Aquarium mache, wenn das alles läuft weiß ich auch nicht so genau.

Erstmal danke für deine Hilfe.
Als Endstufe habe ich den IRLZ44N angeschlossen. Diese hängen nicht direkt am PI, sondern am PCA9685.
Mein PI hat nur einen PWM Ausgang, das wäre zu wenig für mein Projekt.
Der PCA9685 hat 16 PWM Ausgänge mit einer Auflösung von 12bit.
Mit dem IRLZ44N als Endstufe funktioniert es ganz gut, er wird nur minimal warm.
Zur Sicherheit habe ich jeweils einen kleinen Kühlkörper an jedem MOSFET.

Ich habe mal mit Twilight "twilight_weather" gelogt.
Mit diesen Werten kann man was anfangen.
Der Wert ist in Prozent angegeben und ist zusammengesetzt aus Sonnenstand und Wetterverhältnis.
Somit erfolgte der Sonnenaufgang heute innerhalb von ca. 60 Minuten.

Jetzt weiß ich nicht, wie der Befehl lauten soll.
Es soll jede Minute aktualisiert werden und der PWM-Wert neu berechnet werden.

Der Befehl zum manuellen setzen lautet ja z. B.:
set PWM Port0 4095

Dieser Befehl soll jede Minute oder bei Änderung von twilight_weather erfolgen und folgende Rechnung beinhalten:
4095 * Wert von twilight_weather / 100

An diesem Punkt komme ich leider nicht weiter, hier bräuchte ich eure Hilfe.