Aquarium WLAN Lichtsteuerung selber bauen

In meinem Beitrag Aquarium LED Beleuchtung selber bauen habe ich bereits angekündigt, eine passende Lichtsteuerung (Tageslichsimulation) bauen zu wollen. Und was soll ich sagen: Lange hat es gedauert, aber es ist vollbracht! Herausgekommen ist eine Steuerung, die man über WLAN mit dem Webbrowser konfigurieren kann und die seit neuestem auch noch die Wassertemperatur misst und im Browser anzeigt. In diesem Beitrag möchte ich den Bau und die Funktionsweise der Steuerung erklären. Der komplette Quellcode kann von Github herunterladen werden.

Updates

10.12.2017 – Version 0.5.001 – Testmodus integriert

Kein Display, dafür WLAN und Speicherkarte

Bevor ich mit dem Bau der Steuerung begonnen habe, habe ich natürlich erstmal meinen Freund google gefragt, was andere Leute bisher so gebaut haben. In den meisten Fällen stößt man da auf Arduinos mit kleinen TFT-Displays. Der Verlauf der Lichtkurve ist meistens fest einprogrammiert. Es gibt aber auch Projekte, die haben Touchdisplays oder Bedienelemente integriert, um die Helligkeiten und die Lichtverläufe einstellen zu können. Das fand ich schon eher interessant und meine ersten Versuche gingen auch in diese Richtung. Aber nach kurzer Zeit verwarf ich die Idee wieder. Das Handling mit den Displays hat mir nicht gefallen. Zusätzlich musste man noch die Eingabemöglichkeiten und das ganze UI programmieren. Das macht auf Dauer irgendwie keinen Spass und kleine Änderungen bedeuteten schnell größeren Aufwand. Also nochmal zurück ans Reisbrett und überlegen.

Was sind die Grundanforderungen?

  1. Ansteuern mehrerer LED Kanäle per PWM (bei mir sind es 5 Kanäle)
  2. Simulation von Sonnenauf- und Sonnenuntergang + Mondlicht bzw. Festlegen von Lichtverläufen
  3. Ggf. Wolkensimulation
  4. Einfaches Konfigurieren und Speichern der Einstellungen
  5. Leicht anpassbare Bedienoberfläche / GUI
  6. Erweiterbar bzw. Luft nach oben aus Anschluss- und Performance-Sicht
  7. Kostengünstig
  8. Modularer Aufbau, die Komponenten sollen leicht ausgetauscht werden können

Das sind zusammengenommen gar nicht mal so einfache Anforderungen und ich erspare uns jetzt mal die genau Analyse und Auflistung der Möglichkeiten, denn da gibt es hunderte. Hier also die Komponenten meiner Lösung.

Die Komponenten der Steuerung

  • WeMos D1 Mini – Microcontroller auf Basis des ESP8266 WLAN Chips
  • Micro SD Kartenleser – Angebunden über SPI
  • PCA9685 16 Kanal PWM Modul – Angebunden über i2c und 12 Bit PWM Auflösung
  • Echtzeituhr DS3231 – Zum genauen Messen und Speichern der Uhrzeit, auch im Falle eines Stromausfalls
  • Spannungsregeler LM2596S – Zum Bereitstellen der 5V für den Microcontroller und allen anderen Komponenten
  • Temperaturfühler DS18B20 – diesen gibt es als Wasserdichte Variante mit 3m Leitung.

Grundprinzip der WLAN Lichtsteuerung

Ich denke das Grundprinzip ist klar. Der WeMos D1 Mini ist ein ESP8266 WLAN Chip. Ihn kann man mit dem heimischen Netzwerk verbinden und quasi von überall darauf zugreifen. Die Bedienung erfolgt über den Brwoser des PCs,  Smartphones oder über das Tablet.

Mit dem Micro SD Karten Modul werden alle Einstellungen auf einer Micro SD Karte abgespeichert. Gleichzeitig liegen dort auch alle Dateien für das Webinterface. In Summe liegen folgende Daten darauf:

  • HTML Webseiten und Templates für die Weboberfläche
  • WLAN Einstellungen
  • LED Einstellungen für die einzelnen LED Kanäle

Sollte der Controller mal kaputt gehen (was mir bisher noch nicht passiert ist), so bleiben alle Einstellungen gespeichert und man muss nur einen neuen Microcontroller einsetzen. Außerdem kann man die Einstellungen auf diese Weise ohne Probleme kopieren, sichern und wieder einspielen.

Die RTC DS3231 ist nötig, um zum einen die Uhrzeit zu speichern, wenn der Strom mal komplett weggenommen wird und zum anderen dient sie der genauen Messung der Uhrzeit für den Microcontroller. Dessen interne Quarze sind leider nicht so genau und die Zeit würde innerhalb eines Tages schon um einige Sekunden vor- oder nachgehen. Nach ein paar Wochen macht sich das schon deutlich bemerkbar und das verhindern wir mit der Echtzeituhr.

Zu guter Letzt haben wir noch das PCA9685 PWM Modul. Das ist mit seinen 16 ansteuerbaren Kanälen zwar etwas überdimensioniert, aber hat dafür eine 12Bit Auflösung. D.h. man kann pro Kanal 2 hoch 12 also 4096 Helligkeitsstufen einstellen. Das mag ebenfalls etwas übertrieben klingen. Aber bei niedrigen Lichtstufen merkt man deutlich, wenn die Auflösung zu gering ist. Das Licht bzw. die Helligkeit springt dann von Stufe zu Stufe merklich sichtbar und das wollen wir ja nicht. Die Sonne soll ja schön langsam aufgehen, wie in der Natur.

Nicht unerwähnt sollte der Spannungsregler LM2596S bleiben. Ihm kann man zwischen 6V und 24V Eingangsspannung geben und die Ausgangsspannung per Potentiometer einstellen z.B. auf 5V. So kann ich die Steuerung direkt an die LED Stromversorgung hängen und benötige keine extra Steckdose oder ähnliches.

Das Funktionsprinzip

Das Funktionsprinzip sollte somit einigermaßen schlüssig sein. Der WeMos ist unser Controller. Beim Start initialisiert er das SD Karten Modul und ließt die WLAN und Lichteinstellungen von der SD Karte. Anschließend verbindet er sich mit dem WLAN und initialisiert alle anderen angeschlossenen Geräte. Danach erfolgt eine permanente Abfrage der genauen Uhrzeit. Anhand der Uhrzeit und der gespeicherten Lichteinstellungen ermittelt der Controller die Helligkeitswerte der einzelnen LED Kanäle und gibt diese zum PWM Modul aus. Die Ausgänge des PWM Moduls sind mit den Steuereingängen der Konstantstromquellen verbunden. Ich verwende die LDD700-L von Meanwell. Diese lassen sich mit einem PWM Signal zwischen 100Hz und 1kHz steuern. Die Frequenz kann man beim PMW Modul im übrigen einstellen. Auf dem WeMos D1 Mini Controller läuft außerdem ein kleiner Webserver. Gibt man die IP-Adresse des Controllers in den Browser ein, so lädt der WeMos die entsprechende HTML-Seite von der SD-Karte und gibt diese aus. Die HTML Seiten sind mit Paltzhaltern gespickt. Der WeMos erkennt diese beim Einlesen und ersetzt die Platzhalter mit den entsprechenden Werten. Beispielsweise enthält die Startseite den Platzhalter ##TEMP##. Wenn man einen Temperaturfühler angeschlossen hat, wird dieser Platzhalter mit der entsprchenden Temperatur in C° ersetzt.

Der WeMos hat im Gegensatz zum Arduino leider nicht sehr viele Pins. Allerdings ist seine Performance sehr gut und durch die WLAN Fähigkeit quasi die einzig mögliche Wahl. Der Mangel an Pins stört allerdings nicht unbedingt, da viele Module über SPI, i2c oder OneWire angebunden werden können. Vor allem mit i2c lässt sich die Anzahl der angeschlossenen Geräte quasi ohne Probleme erweitern. Aktuell habe ich alle drei Gerätetypen, also SPI, i2c und OnwWire angeschlossen und habe noch einen Digitalpin übrig.

Aufbau und Verdrahtung

Das folgende Bild zeigt die elektrische Verdrahtung der Komponenten.

Verdrahtung Schullebernd Aqua Control v1.0
Verdrahtung Schullebernd Aqua Control v1.0

Ich empfehle allerdings dringlichst, das System zunächst auf einem Steckbrett zusammenzubauen und zu testen bevor man mit dem Löten auf eine Platine anfängt. Das spart Kosten und Zeit, vor allem für die etwas Unerfahreneren und für die Fehlersuche.

Testaufbau Steckbrett Schullebernd Aqua Control ohne PWM Modul.
Testaufbau Steckbrett Schullebernd Aqua Control ohne PWM Modul.

Mein Aufbau auf einem Steckbrett sieht dann so aus.

Foto des Testaufbaus Schullebernd Aqua Control v1.ohne PWM Modul
Foto des Testaufbaus Schullebernd Aqua Control v1.0 ohne PWM Modul. Am Pin D0 hängt eine LED, die gedimmt wird.

Bitte nicht wundern, ich habe hier kein PWM Modul gesteckt, sondern steuere eine LED mit dem Ausgang D0 direkt an. Dies lässt sich sehr einfach in den Konfiguration anpassen, aber dazu später mehr.

Die gelötete Platine samt Schraubklemmen und verbauten Chips sieht dann wie folgt aus.

Fertige Platine der Lichtsteuerung
Fertige Platine der Lichtsteuerung

Wie man sehen kann, sind meine Konstantstromquellen (KSQs) unten in der Beleuchtung verbaut. Ich habe einfach ein Loch nach oben gebohrt und die Kabel für die Stromversorgung des Controllers sowie die PWM Steuerleitungen dort durchgeführt (Im Bild sieht man links, wie die Kabel hochkommen). Zur besseren Montage und Demontage habe ich kleine Schraubklemmen auf die Platine gelötet. Diese sind über Steckbrücken mit den PWM-Pins des PCA8596 Boards verbunden. Man muss nur die PWM Pins vom PCA8596 Modul verbinden. Diese müssen mit dem Dimm-Eingang der KSQs (Meanwell LDD-700L) verbunden werden. Damit das Dimmen sauber funktioniert, muss außerdem die Masse-Leitung der Steuerung mit der Masseleitung der KSQs verbunden sein. Am besten man versorgt die Steuerung mit demselben Netzteil, dass auch die LEDs versorgt bzw. an die KSQs angeschlossen ist. In meinem Fall ist das ein 24V (90W) Netzteil. Mit dem Potenziometer am Spannungsregler können die 24V auf 5V heruntergeregelt werden. So versorgen wir die Steuerung ordentlich mit 5V Spannung.

Sollte jemand neu anfangen, die Beleuchtung samt Controller zu bauen, wäre es auch möglich, die KSQs mit auf die Controller Platine zu packen.

Was ich persönlich noch sehr wichtig finde ist, dass die einzelnen Module nicht fest verlötet sind, sondern nur ihre jeweiligen Fassungen. Das lässt ein schnelles Austauschen der Komponenten zu. Vor allem beim Hauptcontroller, dem WeMos, ist das sinnvoll. Ihn kann man zwar auch im verbauten Zustand neu flashen, es ist aber einfacher, ihn abzuziehen, an den PC zuhängen und zu flashen und dann wieder einzustecken. Natürlich nur im Falle eines Firmwareupdates, denn die Einstellungen liegen ja alle auf der SD Karte.

Kostenübersicht

Eine Anforderung war ja, die Kosten so gering wie möglich zu halten. Deshalb habe ich mich auch gegen einen RaspberryPi entschieden. Außerdem ist der Konfigurationsaufwand beim Pi relativ hoch und er wäre eher überdimensioniert. Aber was kostet die gesamte Steuerung nun? Ich habe hier teilweise die billigsten Komponenten verbaut. Soll heißen, wer Zeit hat, der kauft sich die Komponenten in der Bucht aus China. Da dauert zwar die Lieferung lange, aber die Preise sind unschlagbar. Schauen wir mal auf die Einzelpreise:

  • WeMos D1 Mini 4,-€
  • PWM Modul PCA9685 2,-€
  • SD Karten Modul 3,50€
  • RTC DS3231 2,-€
  • SD Karte 5,-€
  • Spannungsregler LM2596S 1,50€
  • Temperatursensor DS18B20 3,50€

Das sind dann insgesamt 21,50€. Das ganze habe ich mir allerdings gleich zwei mal bestellt. Einmal für den Produktivbetrieb und einmal für den Testaufbau. Also selbst für 43,-€ bekomme ich noch keinen lauffähigen nackten RaspberryPi.

Was wird noch benötig?

Für den Aufbau benötigt man natürlich noch eine Lochplatine, die Pinleisten bzw. die Fassungen ( Beim WeMos waren die allerdings mit dabei), die drei Widerstände sowie genug Draht und Lötzinn. Natürlich sollte die typische Lötausrüstung und eine ruhige Hand nicht fehlen. Für den einfachen Anschluss der Steuerdrähte und der Spannung habe ich mir kleine Schraubklemmen für Lochrasterplatinen beschafft. Und am Ende wäre natürlich ein passendes Gehäuse nicht schlecht. Suma sumarum kommen nochmal ca. 10€ bis 15€ dazu.

Inbetriebnahme der Steuerung

Nachdem alle Komponenten verkabelt oder verlötet sind, kann es losgehen mit der Einrichtung. Hierfür müssen nun alle Sourcen von Github heruntergeladen werden.

Als Voraussetzung zum Kompilieren werden einige Bibliotheken benötigt. Das sind folgende:

RTC DS3231
http://github.com/JChristensen/DS3232RTC
Zum Ansteuern der Echtzeituhr.

Temperatursensor DS18B20
http://www.pjrc.com/teensy/td_libs_OneWire.html
Dies ist eine angepasste Version, die auch mit dem WeMos/ESB8266 zusammenarbeitet. Lässt sich auch über die Bibliotheksverwaltung der Arduino IDE installieren.

PWM Modul PCA9685
https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library
Treiber zum Ansteuern des PWM Servo Boards.

Datum und Zeit Funktionen
https://github.com/Schullebernd/Time
Dies ist eine von mir angepasste Bibliothek und steht nicht in der Bibliotheksverwaltung zur Verfügung.

SBAquaControl
https://github.com/Schullebernd/SBAquaControl

Das ist die eigentliche Bibliothek für die Lichtsteuerung.

Ladet euch alle herunter und legt sie im libraries Ordner der Arduino-Umgebung ab (In der Regel ist das C:\Users\Benutzername\Documents\Arduino\libraries\). Wer will kann auch den Bibliotheksmanager in der Arduino Umgebung (auch IDE genannt) verwenden.

Arduino Bibliothekmanager öffnen
Arduino Bibliothekmanager öffnen

Allerdings muss die Bibliothek für OneWire ( für den Temperaturfühler) gesondert heruntergeladen werden, da die in der Bibliotheksverwaltung Verfügbare nicht für den ESP8266 geeignet ist. Wer zum ersten Mal mit dem WeMos bzw. dem ESP8266 arbeitet, muss zusätzlich noch die Board-Pakete für den ESP8266 installieren. Dazu geht man oben in der Arduino-IDE auf den Boardmanager und installiert die ESP8266 Pakete.
ACHTUNG: Beim Verwenden der Arduino IDE bitte die ESP Version 2.2.0 verwenden. Wenn man die 2.3.0 verwendet, hängt sich der Wemos bei Start permanent auf. Sollte jemand die Umgebung Visual Micro nutzen, so ist zwingend die 2.3.0 Version nötigt. Anscheinend gibt es Unterschiede beim Compilieren zwischen Arduino IDE und Visual Micro. Leider konnte mir bisher niemand sagen, welche das sind.

Arduino Boardverwalter öffnen
Arduino Boardverwalter öffnen
ESP8266 Pakete installieren
ESP8266 Pakete installieren

Ist alles soweit heruntergeladen, kann es losgehen. Man muss nur die Arduino IDE öffnen und unter Datei > Beispiele > SQAquaControl > AquaControlSketch öffnen.
Zum Projekt gehört die Datei aquacontrol_config.h (Die liegt im libraries Ordner SBAquaControl/src/). In dieser Headerdatei wird festgelegt, welche Komponenten verwendet werden sollen und welche nicht. Die Standardeinstellung verwendet genau die Komponenten, die ich weiter oben aufgelistet habe. In diesem Fall braucht man nichts weiter anzupassen. Hat man beispielsweise kein PWM Modul, kann man die Zeile entsprechend auskommentieren. Es wird dann der freie Pin D0 vom WeMos als PWM Pin verwendet. Dort kann man direkt eine kleine LED mit einem kleinen 330Ohm Vorwiderstand anschließen. So lässt sich die Steuerung testen, ohne dass man sie an die Konstantstromquelle mit Hochleistungs-LED anschließen muss. Hier der Inhalt der Datei:

#ifndef _AQUACONTROL_CONFIG_H_
#define _AQUACONTROL_CONFIG_H_

/* Comment this out to use the on board pins to control the pwm channels.
   When using an ESP8266 then use a levelshifter from 3, 3V to 5V for connecting to a Meanwell LDD700L constant current supply.*/
#define USE_PCA9685

/* Define here what type of time keeper you want to use. */
#define USE_RTC_DS3231		// Synchronizes the time with a DS3231 RTC module. The standard i2c pins will be used
//#define USE_NTP			  // Not yet implemented - Connects to an NTP Server to get synchronize the time. This is only available if ESP8266 or EthernetShield is installed

/* Comment this out to not use the web interface functionality */
#define USE_WEBSERVER

/* Comment this out, if you do not have a DS18B20 temerature sensor */
#define USE_DS18B20_TEMP_SENSOR

#endif

Jetzt wird der WeMos bzw. der Testaufbau per USB mit dem PC verbunden. In der Arduino-IDE muss man noch das richtige Zielsystem einstellen. Unter Werkzeuge > Board wählt man, wie oben im Bild zu sehen, den den Eintrag „WeMos D1 R2 & mini“ aus. Dann klicken wir auf den „Hochladen“ Button unterhalb der Menüleiste. Hat man alles richtig gemacht, wird das Projekt fehlerfrei kompiliert und auf den WeMos gespielt. Damit wäre Schritt 1 erledigt.

Speicherkarte vorbereiten

Zum Einrichten der Speicherkarte wird ein Micro SD-Kartenleser für den PC benötigt. Ich gehe jetzt mal davon aus, das soetwas so gut wie jeder in seinem Bastelzimmer hat.

Einfach den SD-Kartenleser an den PC stecken und die MicroSD Karte neu formatieren. Wichtig ist hierbei, dass FAT32 als Dateisystem verwendet wird. Der Micro SD-Kartenleser am Controller kann nur FAT32 lesen und schreiben.

In der SQAquaControl Bibliothek ist ein Ordner namens ./extras/SDCard zu finden. Dessen Inhalt muss man auf die MicroSD Karte kopieren. Und wieder wichtig. Es muss der Inhalt und nicht der Ordner selbst kopiert werden.

Nach dem erfolgreichen Kopieren der Daten fehlt nur noch die WLAN Konfiguration. Dazu suchen wir die Datei WLAN.CFG im unterordner ./config  (auf der SD-Karte) und öffnen diese mit einem Text-Editor. Ich verwende hierfür immer Notepad++. In den entsprechenden Zeilen für die SSID und dem Passwort geben wir die Daten ein und speichern die Datei wieder ab.

/* #### MODE AP IS CURRENTLY NOT SUPPORTED ####
// set mode to client, to connect to a wlan access point
// or set mode="ap" to create an access point and let other devices connect to this ap.*/
mode="client"

// Define the SSID of the WLAN network you want to connect to or the ap mode should use as SSID
ssid="Mein WLAN Name"

// Define the password for the netzwork. Valid for mode ap and client
pw="Mein WLAN Passwort"

// Define the IP address for ap or client mode. Set IP to auto in client mode to configure ip address through dhcp server
ip="auto"

// Define the IP address of the gateway in client mode. Set IP to auto if you want to autoconfigure with dhcp server
gateway="auto"

Nun kommt der große Augenblick.

Starten der Steuerung

Zunächst wird die MicroSD Karte in das Modul gesteckt. Dann bitte nochmal überprüfen, ob alles ordnungsgemäß verdrahtet oder verlötet ist. Ich teste das immer so, dass ich die Module alle entferne und die Spannungsversorgung anschließe. Mit einem Messgerät prüfe ich dann mehrere Stellen ab, wo Spannung sein muss und wo nicht. Ist alles in Ordnung, trennen wir den Strom wieder und stecken die Module alle in Ihre Sockel.

Na dann Strom an! Oder wer das System erstmal auf einem Steckbrett zusammengebaut hat – USB ran und den Play Button in der Arduino-Umgebung drücken. Der WeMos wird nun mit dem Programm geflasht und startet. In der Arduino Umgebung sollte man den Seriellen Monitor aktivieren. Die Software gibt beim Start Statusmeldungen aus, die essentiel für die Fehlersuche sind. Außerdem wird die vom WLAN Router zugewiesene IP-Adresse ausgegeben ( wenn nicht in der wlan config eine feste IP vergeben wurde).

Die IP-Adresse nehmen wir jetzt, öffnen einen Browser und geben sie wie folgt in die Adresszeile des Browsers ein

http://ipadresse

Wenn alles funktioniert sollte nun die Startseite der Steuerung erscheinen.

SBAQC Startseite
SBAQC Startseite

Der Name der Steuerung heißt SBAQC, was soviel heißt wie Schullebernds Aqua Controller. Ein besserer Name ist mir nicht eingefallen, aber naja ein bißchen Branding kann man schon mal betreiben. Und Jaaaa – die Optik könnte schöner sein. Aber erstmal die Funktionen ausbauen und dann hübsch machen.

Soo, damit wäre es geschafft. Der Controller läuft und wartet nun auf seine Konfiguration.

SBAQC – Schullebernds Aqua Controller einrichten

Von der Startseite ausgehend kann man die Steuerung relativ leicht Parametrieren.

LED Lichtkanäle einstellen

Mit dem Klick auf einen Lichtkanal öffnet sich die Konfigurationsseite des entsprechenden Lichtkanals.

SBAQC LED Kanal bearbeiten
SBAQC LED Kanal bearbeiten

Zu Beginn sind alle Felder leer. Man kann bis zu 10 Zeitpunkte mit Prozentwerten eingeben. Ein Datensatz könnte beispielsweise lauten:
06:00 | 00
08:00 | 80
18:00 | 80
20:00 | 00

Damit würde die Steuerung zwischen 20:00 und 06:00 Uhr die Beleuchtung ausschalten (auf 0% dimmen). Zwischen 06:00 und 08:00 Uhr bzw. 18:00 und 20:00 Uhr geht die Lichtintensität kontinuierlich hoch bzw. runter (Sonnenauf- bzw. Sonnenuntergang). Zwischen 08:00 und 18:00 bliebe die Lichtstärke konstant bei 80%. Die Steuerung errechnet anhand des aktuellen Zeitpunktes den interpolierten Lichtwert und gibt das entsprechende PWM Signal aus. Das macht sie mehrmals pro Sekunde sodass auch relativ große Lichtsprünge in kurzer schön sanft vonstatten gehen.

Mit den 10 Zeitpunkten lässt sich ein schöner Lichtverlauf für den Tag einprogrammieren. Das lässt sich für jeden der 8 Lichtkanäle tun. So entsteht, wenn man möchte, ein schöner Mix aus Lichtstärken und Farben. Es lässt sich so beispielsweise ein schöner rötlicher Sonnenauf- und Sonnenuntergang, eine helle und weiße Mittagssonne und sogar die blaue Stunde abends einprogrammieren. Sicherlich muss man mit den Einstellungen etwas herumspielen, aber schon nach kurzer Zeit hat man seine Vorliebe gefunden.

Die Steuerung schreibt die LED Konfiguration auf die Micro SD Karte. Für jeden LED Kanal wird eine .CFG Datei im Unterordner ./config angelegt. Diese lässt sich auch mit einem Texteditor bearbeiten. Die Syntax ist sehr simpel. Mit einem Semikolon ; getrennt kommt erst die Zeit und dann der Prozentwert.

06:30;0
07:00;0
11:00;80
15:00;80
18:30;0
19:30;13
20:30;0

WLAN Einstellungen

Von der Hauptseite ausgehend, kann man die WLAN Einstellungen öffnen. Dort kann eine feste IP-Adresse und der Stanardgateway definiert werden. Wer davon keine Ahnung hat, lässt einfach die Felder leer. Die Steuerung versuch dann beim Start, über DHCP eine IP-Adresse zu beziehen, so wie es bei den meisten WLAN Geräten heute der Fall ist.

Wichtiger sind aber die Einstellungen für die SSID und das WLAN-Passwort. In der Regel hat man hier schon beim Vorbereiten der SD-Karte alles korrekt eingegeben (sonst könnte man ja nicht auf die Steuerung per Browser zugreifen). Wenn man hier die Einstellung ändert, werden diese erst nach einem Neustart der Steuerung aktiv. Das Passwort wird grundsätzlich nicht angezeigt (da keine Sichere Datenverbindung verwendet wird).

SBAQC WLAN-Einstellungen
SBAQC WLAN-Einstellungen

Zeit einstellen

Zum Schluss sollte man noch die Zeit einstellen, damit die Steuerung auch zum richtigen Zeitpunkt die richtigen Lichtwerte setzt. Aktuell (Stand Juli 2017) muss man die Zeit noch manuell einstellen. Es ist aber eine Funktion geplant, dass sich die Zeit automatisch mit einem NTP Server synchronisiert.

In den zwei Felder auf der Zeit-Einstellungen Seite gibt man das Datum und die Zeit im Format TT.MM.YYYY und hh:mm:ss ein. Also zum Beispiel 17.07.2017 und 18:39:20. Mit dem Klick auf Speichern wird die Zeit sofort übernommen und die Steuerung regelt die Lichtstärke entsprechend der aktuellen Zeit und LED-Kanaleinstellungen.

Fertig!

Damit haben wir es geschafft. Die Steuerung ist fertig und kann am Aquarium betrieben werden. Bei mir läuft Sie seit über einem halben Jahr stabil und regelt mein Licht im Aquarium zuverlässig Tag für Tag.

Natürlich werde ich die Funktionen von Zeit zu Zeit erweitern und/oder anpassen. Daher habe ich die Quellen auch auf github veröffentlicht. Jeder, der Verbesserungen oder Erweiterungen hat, kann sie gerne mit einem Pull-Request bei mir einreichen. Aber bitte erwartet keinen 24/7 Support von mir.

Letzter Hinweis

Alle Arbeiten an der Steuerung und an der Aquarium-Beleuchtung finden auf eigene Gefahr statt. Ich übernehme keinerlei Haftung für die korrekte Funktionsweise oder etwaige Schäden die durch den Nachbau entstehen. Und natürlich auch hier nochmal der Hinweis, dass Arbeiten mit elektrischem Strom nur von geschulten Personen durchgeführt werden sollen.

Update 10.12.2017

Seit der Version 0.5.001 gibt es den Testmodus. Hierzu muss man in der Weboberfläche einfach auf Testmodus klicken und kann dann für jeden Kanal einen Wert eingeben. Beim Klick auf „Testmodus aktivieren“ wird der Wert für alle Kanäle übernommen. Der Testmodus bleibt maximal 60 Sekunden lang aktiv, danach beendet die Steuerung den Modus automatisch. Man kann den Modus über den Button „Testmodus deaktivieren“ auch manuell verlassen.

Ausblick

Da die Steuerung durch die Nutzung einer SD-Karte und WLAN sehr flexibel ist, habe ich vor, in der nächsten Zeit noch weitere Funktionen zu integrieren:

  • Anbindung an MQTT. Ansteuerung des Controllers über MQTT und Übertragen von Messwerten vom Controller an einen MQTT-Server – Perfekt zur Integration in eine Heimautomatisierungsumgebung wie FHEM.
  • Wetter und Wolkensimulation. Wolkenflug und unterschiedliche Lichtstärken abhängig vom aktuellen Wetter oder eines simulierten Wetterverlaufs. Vielleicht mit Anbindung an Wetterdienste oder die eigene Wetterstation.
  • Zeitsynchronisation mit einem NTP-Server
  • Testmodus zum besseren Aufeinanderabstimmen der LED-Kanäle. Aktuell kann man jeden Kanal nur separat einstellen. Das kann etwas umständlich sein, wenn man den richtige Mix der unterschiedlichen LED-Kanäle finden möchte. Der Testmodus erlaubt eine live Einstellung der LED Kanäle.
    Ab Version 0.5.001 verfügbar. 
  • Mehrere Lichtprofile. Vielleicht will man im Winter einen anderen Lichtverlauf als im Sommer haben. Mehrere Profile würden das Umkonfigurieren vereinfachen.
  • Verschönerung der Weboberfläche. Zugegeben, diese ist mehr funktional als ansehnlich. Daher werde ich die Oberfläche (gerne auch mit eurer Hilfe) noch verschönern.
  • Vielleicht habt ihr ja auch noch Ideen, also zögert nicht sie mir per Kommentar oder E-Mail mitzuteilen

 

92 Gedanken zu „Aquarium WLAN Lichtsteuerung selber bauen“

  1. Hallo zusammen,
    ich bin wie viele Andere auch auf dieses Projekt gestoßen und konnte es mit ein paar Hardware Änderungen und dem erstellen einer Leiterplatte nun erfolgreich in Betrieb nehmen. Leider bin ich, was das programmieren angeht, nicht so versiert. Die HTML Seiten konnte ich bisher auf meine Bedürfnisse anpassen und optisch an meinen Geschmack anpassen. Leider gab es ja so wie es aussieht keine weiteren Updates seitens des Entwicklers. Daher meine Frage in die Runde, ob es denn evtl. jemand geschafft hat, die Wolken- /Wettersimulation und den Zeitserver zu integrieren?
    Ich wäre auch Jahre später immer noch daran interessiert dies zu nutzen. Ich freue mich über jede Antwort und auch Anregungen von euch.

    LG Daniel

  2. Hallo Bernd, ich habe beim Hochladen der SBAquaControl-master auf das WeMos folgende Fehler:
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\Webserver.cpp: In function ‚void handleTimePOST()‘:
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\Webserver.cpp:394:5: error: ‚RTC‘ was not declared in this scope
    394 | RTC.set(t);
    | ^~~
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp: In member function ‚void AquaControl::initTimeKeeper()‘:
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:398:19: error: ‚RTC‘ was not declared in this scope
    398 | setSyncProvider(RTC.get); // the function to get the time from the RTC
    | ^~~
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp: In member function ‚void AquaControl::init()‘:
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:486:17: error: ’nowMs‘ was not declared in this scope; did you mean ’now‘?
    486 | CurrentMilli = nowMs();
    | ^~~~~
    | now
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:497:31: error: use of deleted function ‚esp8266webserver::ESP8266WebServerTemplate& esp8266webserver::ESP8266WebServerTemplate::operator=(const esp8266webserver::ESP8266WebServerTemplate&)‘
    497 | _Server = ESP8266WebServer(80);
    | ^
    In file included from c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.h:25,
    from c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:12:
    C:\Users\herbe\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:92:7: note: ‚esp8266webserver::ESP8266WebServerTemplate& esp8266webserver::ESP8266WebServerTemplate::operator=(const esp8266webserver::ESP8266WebServerTemplate&)‘ is implicitly deleted because the default definition would be ill-formed:
    92 | class ESP8266WebServerTemplate
    | ^~~~~~~~~~~~~~~~~~~~~~~~
    C:\Users\herbe\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WebServer\src/ESP8266WebServer.h:92:7: error: use of deleted function ’std::unique_ptr& std::unique_ptr::operator=(const std::unique_ptr&) [with _Tp = HTTPUpload; _Dp = std::default_delete]‘
    In file included from c:\users\herbe\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\memory:83,
    from C:\Users\herbe\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/ESP8266WiFiGeneric.h:28,
    from C:\Users\herbe\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/ESP8266WiFiSTA.h:28,
    from C:\Users\herbe\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/ESP8266WiFi.h:34,
    from c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.h:23,
    from c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:12:
    c:\users\herbe\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\unique_ptr.h:469:19: note: declared here
    469 | unique_ptr& operator=(const unique_ptr&) = delete;
    | ^~~~~~~~
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp: In member function ‚void AquaControl::proceedCycle()‘:
    c:\Users\herbe\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:557:17: error: ’nowMs‘ was not declared in this scope; did you mean ’now‘?
    557 | CurrentMilli = nowMs(1000);
    | ^~~~~
    | now

    exit status 1

    Compilation error: exit status 1

    Stimmt da was mit der Datei nicht mehr, oder was mache ich falsch??

    1. Hallo Herbert,

      ich hatte das gleiche Problem.
      Aber nach kurzem überlegen, hab ich dann festgetellt, dass die eigentliche Version hier ja im Jahr 2017 gemacht wurde.
      Daher kann das Kompilieren mit den neuen Bibliotheken ev nicht funktionieren.

      Die IDE ist bei mir 1.8.5.
      Die aktuellste 1.8.XX hab ich nicht versucht.

      Ich hatte aber nur Probleme mit dem „RTC“.
      Hier habe ich dann die DS3232RTC 1.1.0 Version installiert.
      bei der Time die 1.5.0.

      Vielleicht sind bei die die anderen auch von der Version her nicht OK.

      Vielleicht versuchste das mal.

      Gruß Heiko

  3. Hallo Bernd,

    mit Interesse hab ich deinen Beitrag gelesen. sehr interessant.
    Meine Frage, wäre es auch möglich das Licht in Abhängigkeit live zu steuern? Ich denke da an eine Schnittstelle zu einem Lichsensor am Fenster oder zu einer WetterApp oder wie in meinem Fall zur Solarüberwachung.
    Bei der Solaranlage macht es Sinn über mittag am meisten Strom zu verbrauchen. Wenn man das also live steuern könnte, könnte man per skript dem system sagen das es ab einen bestimmten wert alles anmacht was geht. und bei Wolken eben entsprechend runter regelt. das wäre geil.

  4. Hallo Bernd,

    danke für die Steuerung habe sie nachgebaut. Läuft bei mir an ein Meerwasseraquarium schon eine weile Problemlos.

    Gruß Robert

  5. HalloBernd.
    Ein wirklich sehr schönes Projekt was du da gebastelt hast.
    Ich habs nachgebaut, als Beleuchtung eine umgebaute chinesische RGBW LEd Aquariumleuchte aus amazon. Funktioniert super.
    Ist denn abzusehen das die todo Liste mal weiter abgearbeitet wird ?
    Grüße aus der Altmark und schöne Feiertage.
    Matthias

  6. Hallo,

    klasse Projekt.
    Bei mir werden die KSQ, MW LCM-60 für 24 Cree XPG R5, eingesetzt. Da ich pro Leiste mit ca 74 V arbeite, ist der Aufbau meiner Lichtleiste etwas anders als bei Dir.

    Auf der Suche nach Lichtsteuerungen habe ich nichts gefunden was meine Wünsche am besten entspricht, bis auf die deinige.
    Ich werde versuchen dies auf meine Bedürfnisse umzusetzen. Da dies das Erste mal für mich ist mit einen selbst zu programmierten System, hatte ich schon Probleme das W-Lan Modul zu konfigurieren.
    https://www.youtube.com/watch?v=F6jAs4W8nn4
    hat mir bei der Grundkonfiguration geholfen.
    Werde mich nochmal melden wenn ich Fragen habe.

    Erstmal Danke

      1. Hallo Bernd,

        ich bekomme die Steuerung nicht zum laufen.
        Die Platine habe ich mehrfach überprüft und entspricht zu 100% deiner Schaltung.
        Kannst mir jemand weiterhelfen?

        Gruß

        Mathias

  7. Hallo Bernd,
    habe eine Version der Aquarium WLAN Lichtsteuerung zusammen gebaut, die ohne SD-Karte auskommt.

    Das Programm läuft auf einer NodeMCU Amica oder auf einem ESP8266 12E ohne Probleme.

    Nutze das SPIFFS Dateisystem zur Speicherung der Dateien und habe den ACE-Editor mit eingebunden, so das ich Dateien hochladen, löschen oder editieren kann.

    Den Code für SPIFFS und den ACE-Editor (https://ace.c9.io/) habe ich aus dem FSBrowser (https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer/examples/FSBrowser) übernommen und angepasst.

    Durch den Wegfall der SD-Karte sind nun die GPIO’S D5-D8 des ESP8266 frei und können genutzt werden.

    Das ganze kann nun auch mit der Version 2.72 des ESP8266 Core kompiliert werden.

    Falls Interesse besteht helfe ich gerne weiter.

    Gruß
    Karl-Walter

    1. Hallo Karl-Walter,
      kann man deinen Code ebenso irgendwo einsehen?
      mir persönlich würde ebenfalls die Sd card freie variante genügen.

    2. Hallo Karl-Walter
      Ich hätte auch Interesse an der Version ohne SD Karte.
      Jetzt die Frage hast du die irgendwo Pupliziert oder würdest du sie versenden?

      Beste Grüsse
      Christopher

  8. Hallo,
    ich habe das tolle Projekt jetzt auf Platine gebracht, Funktioniert auch fast alles so wie es soll. Allerdings habe ich das Problem, wenn ich den Lichtkanal einstelle und die Daten speichern will, bricht immer die Verbindung zum Wlan ab. Alle anderen Einstellungen, wie Zeit, Wlan usw. funktionieren, nur bei den Licht Einstellungen passiert das.
    Dann m uss ich jedes mal den Wemos resetten, der dann auch sofort wieder Kontakt zum Wlan hat. Woran könnte das liegen? Beste Grüße Markus

  9. Hallo Bernd,
    ich hoffe ich bin noch nicht zu spät und kann hier evtl noch Hilfe zu deinem tollen Projekt bekommen.
    Ich hatte bei der Kompilierung einige Fehler, die ich Dank einiger Kommentare hier auch alle ausmerzen konnte 🙂 Eine Fehlermeldung bleibt allerdings, obwohl ich den Tip mit der anderen RTC Library angewendet habe. Hier mal die Fehlermeldung.
    /home/max/Arduino/libraries/DS3232RTC-master/DS3232RTC.cpp:8:20: fatal error: Stdint.h: No such file or directory
    #include
    ^
    compilation terminated.
    exit status 1
    Fehler beim Kompilieren für das Board LOLIN(WEMOS) D1 R2 & mini.
    Das ist das bisher einzige Problem, das ich habe und ich habe bisher noch keine Lösung finden können.
    mit besten Grüßen
    Markus

    1. Alles klar, habs gefunden, weiter unten. Da ich Linux nutze, musste in der DS3232.cpp in Zeile 5 Stdint.h das große gegen ein kleines s abgeändert werden.

  10. Hallo Bernd,

    mega Steuerung mit dem PWM bin echt begeistert.
    Das Web Interface usw. läuft schon einmal, was aber
    nicht funktioniert ist die Ansterung der LED an D0 .

    Habe sie ausgeklammert in der Config mit :
    //#define USE_PCA9685

    aber jeder Kanal 1 noch Kanal 8 steuert die LED an
    wenn ich im Testmode bin kann ich ebenfalls den
    ersten oder letzten Ansteuern da tut sich nichts.

    Kurze Frage noch zum PCA9685 Controller kann ich
    hier eine Test LED an Kanal 0 / PWM -> GND anschließen

    Viele Grüße Alex

    1. habe noch vergessen dich mit der Wolkensimulation zu fragen ob du da weiter gekommen bist, ich bin über Google mit dem Suchbegriff bei dir gelandet.

      Was ich auch bräuchte wäre eine Blitz Simulation…
      Denke das könnte man am einfachsten mit einem Kanal und zwei drei LED’s machen die an gehen und nach 1 oder 2 sek wieder aus. Nur man müsste dann die Ein/Aus Schaltzeit auf Sek statt Minuten ändern oder hättest du hier eine bessere Idee ?

      Viele Grüße Alex

  11. Hallo,
    Ich habe die steuerung jetzt laufen, bei mir hat das Board aus china tatsächlich nur mit der boardverwalter Version 2.3.0 funktioniert. Bei allen anderen scheint ja die 2.2.0 die version der wahl zu sein. Bei der hat der serielle monitor allerdings nur kyrptische zeichen ausgespuckt. Mein problem ist zurzeit das die schaltung zum einen immer mal wieder aus fällt, dadurch bleibt das Licht wenn man mal länger weg ist dauerhaft an. Ich habe jetzt vor die leuchte zusätzlich noch eine Zeitschaltuhr geschaltet. Dadurch wird verhindert das es nachts versehentlich an ist. Zusätzlich schaltet die Schaltung die Lampe über den tag immer mal wieder für ne halbe sekunde aus. Hat jemand eine idee woran das liegen könnte ?
    Die Theoeraturanzeige funktioniert bei mir auch nicht. Werde da noch mal ein bisschen dran herumspielen.
    Sonst ein tolles Projekt. Habe es jetzt erst mal für meinen 60l cube gebaut. Aber sobald ich das blinken im griff habe werde ich es auch noch für ein 350 l becken Bauen.

    Viele Grüße
    Max

  12. Hallo,

    bekomme die Fehlermeldung:
    WARNUNG: Bibliothek DS3232RTC-master behauptet auf (avr) Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf (esp8266) Architektur(en) ausgeführt wird.

    Worankann das liegen?

    Danke
    Matti

  13. Hi,
    das wird, zusammen mit deiner LED-Beleuchtung und einem Selbstbau-Aufsatzkasten wohl eines meiner nächsten Projekte werden.
    Einen Verbesserungsvorschlag hätte ich da aber noch:

    Ich kann mir vorstellen, dass es von der Bedienung her einfacher wäre, nicht jeden Kanal einzeln seine 10 Zeitpunkte zu geben, sondern die Möglichkeit zu jedem Zeitpunkt alle Kanäle einstellen zu können.
    Also z.B.
    6:00 – CH1 0%; CH2 0%; CH2 0%; CH3 0%; CH4 20%; …
    6:30 – CH1 0%; CH2 0%; CH2 0%; CH3 0%; CH4 0%;…
    7:00 – CH1 20%; CH2 20%; CH2 0%; CH3 0%; CH4 0%;…
    8:00 – CH1 50%; CH2 50%; CH2 100%; CH3 0%; CH4 0%;…
    20:00 – CH1 50%; CH2 50%; CH2 100%; CH3 0%; CH4 0%;…
    21:00 – CH1 20%; CH2 20%; CH2 0%; CH3 0%; CH4 0%;…
    21:30 – CH1 00%; CH2 00%; CH2 0%; CH3 0%; CH4 0%;…
    22:30 – CH1 00%; CH2 00%; CH2 0%; CH3 0%; CH4 20%;…

    Dafür würde ich allerdings die Anzahl der möglichen Schaltpunkte hochdrehen. Ich glaube(!) das dieses System übersichtlicher zum konfigurieren ist. Insbesondere Änderungen (ich will das Licht jetzt doch erst ab 22 Uhr runterfahren und nicht 21 Uhr) sollten damit einfacher zu machen sein.
    Und was dann u.U. auch noch einfacher wäre:
    Einen, bzw. zwei bis vier der Zeitpunkte mit den Sonnen-/Mond-auf-/untergangszeitpunkt eines bestimmten Standortes verknüpfen (Aquariumstandort oder z.B. Herkunftsort der Bewohner „übersetzt“ in ME(S)Z) und dann andere Zeitpunkte relativ darauf beziehen lassen (halbe Stunde vor Sonnenaufgang anfangen rot reinzuziehen,..)

    Kür dazu wären noch:
    * Die Möglichkeit für einen Kanal keinen Wert anzugeben, dann gelten Werte die in einem der Schaltpunkte davor/danach eingegeben wurde
    * Die Möglichkeit den Kanälen Namen zu geben

    So mal als Anregung.

  14. Hallo Bernd,

    ich war leider schwer krank und komme erst jetz dazu das System
    auf zu bauen.
    Das ist die Ausgabe im Seriellen Monitor:

    18:14:55.821 -> Schullebernd Aqua Control
    18:14:55.821 -> ————————-
    18:14:55.821 -> (Version 0.5.001)
    18:14:55.855 -> Now starting up
    18:14:55.855 -> Initializing SD card… Done.
    18:14:55.855 -> Reading wlan config from SD card… Done.
    18:14:55.888 -> Connecting to zuhause1 using fixed IP 192.168.178.155………… Done.
    18:15:02.391 -> IP address: 192.168.178.155
    18:15:02.391 -> Initializing RTC DS3231…. Done.
    18:15:02.424 -> Initializing PWM channels… Done.
    18:15:02.424 -> Initializing Webserver… Done.
    18:15:02.458 -> Initializing PCA9685 module… Done.
    18:15:02.458 -> Reading LED config from SD card…
    18:15:02.558 -> Warning: Couldn’t find config file for LED channel 9
    18:15:02.591 -> Warning: Couldn’t find config file for LED channel 10
    18:15:02.624 -> Warning: Couldn’t find config file for LED channel 11
    18:15:02.659 -> Warning: Couldn’t find config file for LED channel 12
    18:15:02.659 -> Warning: Couldn’t find config file for LED channel 13
    18:15:02.692 -> Warning: Couldn’t find config file for LED channel 14
    18:15:02.733 -> Warning: Couldn’t find config file for LED channel 15
    18:15:02.780 -> Warning: Couldn’t find config file for LED channel 16
    18:15:02.780 -> Initializing DS18B20 Temerature Sensor…Done.
    18:15:02.827 -> AQC booting completed.
    18:15:04.394 -> Temperature = 25.00 Celsius.
    18:15:17.408 -> Temperature = 25.00 Celsius.

    aller dings kann ich die LED’s nicht dimmen.
    an den Ausgängen kann ich auch keine Spannungen messen.

    hast du eine Idee woran es liegt ?

    danke für deine hilfe

    1. Hallo Wolfgang,

      Sag mal wie werden die LEDs bei dir betrieben? Spannung kann man am PWM Ausgang nicht direkt messen.

      Gruß Timo

  15. Hallo Bernd,

    sehr tolles Projekt. Habe es nachgebaut und es läuft seit ca. 2 Monaten einwandfrei. Bin sehr begeistert.

    Ich suche noch eine Anleitung für Wlan Dünger-Dosieranlage, dann würde mein Aquarium voll automatisiert laufen.
    Hättest du vielleicht Interesse sowas zu erstellen?

    Gruß Andreas

  16. Hallo,
    super Sache bin dabei alles nachzubauen. Nun ist der WeMos angekommen und wollte mal das Hochladen nun bekomme ich folgende Meldung:

    Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: „WeMos D1 R2 & mini, 80 MHz, 921600, 4M (3M SPIFFS)“

    AquaControlSketch:1:21: error: OneWire.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    OneWire.h: No such file or directory

    Dieser Bericht wäre detaillierter, wenn die Option
    „Ausführliche Ausgabe während der Kompilierung“
    in Datei -> Voreinstellungen aktiviert wäre.

    Hat vielleicht jemand eine Idee? Habe auch 2.2.0 installiert. Bin Neuling und habe mir die Bibliotheken heruntergeladen und in den Ordner gelegt.

    Gruß Timo

    1. Ich bin es nochmal! Es hat nun soweit alles geklappt. Programm ist drauf und der erste Test wurde schon durch laufen. Nun geht es dran die passende Beleuchtung zu bauen. Denke das ich es Demnächst verstellen werde.
      Super Anleitung!!!
      Ps: Temperatursensor läuft auch, denke aber das es eher ein Schätzwert ist. Benutze den als Überwachung für die Technik. Da die Technik im Kasten ist.

      Mfg

  17. Hallo Bernd,

    vielen Dank für das super Projekt. Ich habe heute versucht, die Software in Betrieb zu nehmen, der serielle Monitor gibt aber leider nur kryptische Zeichen aus. Ich habe im Boardverwalter die ESP8266 Version 2.2.0 und die 2.3.0 getestet. Hast Du eine Idee an was das liegen könnte?
    Gruß Norbert

  18. Hallo kannst du mir helfen was stimmt hier nicht mit dem OneWire?

    Arduino: 1.8.2 (Windows 10), Board: „Generic ESP8266 Module, 80 MHz, Flash, ck, 26 MHz, 40MHz, QIO, 512K (no SPIFFS), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200“

    C:\Users\Christian\Documents\Arduino\libraries\SBAquaControl-master\src/AquaControl.h:36:21: error: ‚D4‘ was not declared in this scope

    #define DS18B20_PIN D4 // Defines the pin, where the data wire of the DS18B20 sensor is connected

    ^

    C:\Users\Christian\Documents\Arduino\libraries\SBAquaControl-master\src/AquaControl.h:198:25: note: in expansion of macro ‚DS18B20_PIN‘

    OneWire temp = OneWire(DS18B20_PIN);

    ^

    exit status 1
    Fehler beim Kompilieren für das Board Generic ESP8266 Module.

    Dieser Bericht wäre detaillierter, wenn die Option
    „Ausführliche Ausgabe während der Kompilierung“
    in Datei -> Voreinstellungen aktiviert wäre.

  19. Hallo Bernd,

    das ist ja mal ein super Projekt. Ich musste das sofort nachbauen. Beim Kompilieren ergibt sich jedoch habe ich ein Problem:

    Arduino: 1.8.7 (Windows Store 1.8.15.0) (Windows 10), Board: „WeMos D1 R2 & mini, 80 MHz, 921600, 4M (1M SPIFFS)“

    WARNUNG: Bibliothek DS3232RTC-master behauptet auf (avr) Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf (esp8266) Architektur(en) ausgeführt wird.
    C:\Users\Thomas\Documents\Arduino\libraries\SBAquaControl-master\src\Webserver.cpp: In function ‚void handleTimePOST()‘:

    C:\Users\Thomas\Documents\Arduino\libraries\SBAquaControl-master\src\Webserver.cpp:394:5: error: ‚RTC‘ was not declared in this scope

    RTC.set(t);

    C:\Users\Thomas\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp: In member function ‚void AquaControl::initTimeKeeper()‘:

    C:\Users\Thomas\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:398:19: error: ‚RTC‘ was not declared in this scope

    setSyncProvider(RTC.get); // the function to get the time from the RTC

    Mehrere Bibliotheken wurden für „SD.h“ gefunden
    Benutzt: C:\Users\Thomas\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.2.0\libraries\SD
    Nicht benutzt: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\libraries\SD
    exit status 1
    Fehler beim Kompilieren für das Board WeMos D1 R2 & mini.

    Hast du eine Idee, was ich falsch mache oder was noch fehlt?

    Danke.
    Gruß Thomas

    1. Hallo Thomas,
      anscheinend gab es Änderungen in der Bibliothek für die Echtzeituhr.
      Könntest du mal versuchen die folgende Bibliothek zu installieren:
      https://github.com/Tecsmith/DS3232RTC
      Damit sollte der Fehler nicht mehr auftreten.
      Ansonsten steht unten noch eine Lösung in den Kommetaren. Demnach hat die Arduino Software ein Problem mot mehreren verschiedenen Bibliotheken mit dem selben Namen und weiss nicht welche Sie nehmen soll.
      Gruß Bernd

  20. Hallo Bernd,

    habe Gestern endlich dein Projekt mit LED’s getestet, bis dahin hatte ich gedacht es läuft alles (es sah so aus). Doch was ich dann Gestern
    feststehlte, war das die LED’s nur im Testmodus komplet dunkel wurden aber im normalen Betrieb nicht.

    Hast du vielleicht eine Ahnung woran das liegen kann ?

    1. Hallo Wolfgang,
      schau mal genau in die Lichteinstellungen. Wenn du z.B. um 10:00 Uhr 0% einstellst und 12:00 Uhr 20% und es ist genau um 11:00Uhr, dann stellt die Steuerung um 11:00 die Helligkeit auf 10%.
      Wenn du es also ganz dunkel haben möchtest, muss die aktuelle Zeit zwischen zwei 0% Werten liegen.
      Wenn es also zum Beispiel gerade um 11:00 Uhr ist, dann musst du in den Lichteinstellungen z.B. um 10:00 Uhr und 12:00 Uhr 0% einstellen.
      Ich hoffe ich konnte dir helfen!
      Gruß Bernd

  21. Hallo Bernd,
    klasse Projekt! Hab mir mal ne passende Platine layoutet und alles zusammen gebaut. Nach Zusammenstellung der passenden Bibliothek-Versionen lässt sich das Programm sauber kompilieren und übertragen.
    Aber: Die Temperaturanzeige will nicht. Habe mehrere 18B20 (teils neue, teils Jahre alte) getestet, kein Erfolg.
    Gibt es hier was neues?
    Danke und Gruss, Gerd

  22. Hallo Bernd, ich habe vor einiger Zeit ebenfalls auf basis eines ESP’s einen aquarien Controller programmiert.
    Heute dann deine SelbstBau LED lösung mit angebunden,
    den aktuellen stand findest du hier: https://github.com/psych0d0g/ESP8266_FishTank
    Vielleicht kannst du ja die ein oder andere Komponente für dein Projekt gebrauchen 🙂
    pS.: ich habe mir die manuelle Programmierung von Licht-Verläufen gespart und errechne mir den täglichen sonnenauf- und untergangszeitpunkt an meinem ort und nehme diesen als Schaltzeitpunkt.

    Gruß und Danke für die DIY LED anleitung 🙂

  23. Hallo Bernd,

    habe doch noch ein kleines Problem mit DS18b20 in deinem sketch
    funktioniert er leider nicht. In einem Test sketch (DS18B20 Temperatur Webserver) mit der gleicher Schaltung funktioniert alles.

    Was über sehe ich denn ?

    1. Hallo Wolfgang,
      das ist sehr schwer zu sagen. Ich merke allerdings, das es hin und wieder mal Probleme mit dem Sensor gibt (nicht bei mir, mehr von den anderen Rückmeldungen).
      Ich werde nochmal überprüfen, ob vielleicht was an den Timings nicht ganz stimmt. Denn der Sensor wird über zwei Zyklen ausgelesen und da kann es unter umständen zu Problemen führen!
      Gruß Bernd

  24. Hallo Bernd,

    danke für die Hilfe es hat funktioniert. jetzt ist nur noch die SD-Card
    das Problem.
    Fehler ist :
    (Version 0.5.001)
    Now starting up
    Initializing SD card… Failed

    hast du da auch noch eine Idee ? Dateien liegen wie Beschrieben auf der SD-Card

    nochmals vielen vielen Dank

    1. Hallo Wolfgang,
      das kann jetzt verschiedene Ursachen haben. Prüfe hier bitte zunächst mal die verdrahtung. Das ist meistens die Lösung. Dann schau bitte nochmal, ob du die SD Karte auch mit FAT formatiert hast und nicht versehentlich mit NTFS.
      Und dann gab es hier noch einen guten Hinweis. Wenn die Karte vorher in einem Radpberry Pi war, dann muss man Sie nochmal komplett z.B. mit SD-formatter, platt machen und neu formatieren.
      Gruß Bernd

      1. Hallo Bernd,

        das hat bei mir leider alles nichts gebracht. Dier SD-Karte wird nicht erkannt. Egal was ich mache. Ich habe mehrfach formatiert und die Verkabelung geprüft, ich bekomme immer das Failed.

        Nutze ich allerdings das Beispiel („CardInfo“) allerdings mit anderen Pins (11, 12, 13, 4 – wie im Beispiel eben gefordert) liest er mir die SD-Karte problemlos, erkennst sie als FAT16 und zeigt die Dateien an.

        Hast Du eine Idee woran es liegen kann?
        Das Ich den Temp-Sensor und die RTC noch nicht dran habe sollte ja kein Pronblem sein, oder?

        Grüße, Christian

        1. Hallo Bernd,

          hat sich erledigt, ich habe es zum Laufen bekommen und es funktioniert fantastisch! Es lag daran, dass der D1 R2 auf dem es läuft aus China ist und es sich um die „retired“-Version handelt. Ich habe das in der IDE eingestellt und dann ging es.

          Ich plane dein Werk zusammen mit einem alten Smartphone einzusetzen, welches als Display neben dem Aquarium stehen soll, um Zeit und Temperatur anzuzeigen. Deshalb werde ich versuchen, das Interfase so umzubauen, dass es auf einem Smartphone gut aussieht. Ich hatte vor ein paar Jahren mal mit jQuery-mobile gearbeitet… Mal sehen…

          Ansonsten hatte ich überlegt, noch eine Lüftersteuerung zu integrieren… das sollte sich ja über ein Relais und einen wenn… dann… code gut realisieren lassen. Bin leider nur Tüftler, habe wenig Ahnung und es ist mehr probieren als Können…
          Weißt du, zufällig, wie ich die Temperatur als Variable in mein wenn, dann bekomme? Sie wird ja schon ausgelesen und angezeigt.

          Jedenfalls ein tolles Projekt! Respekt!

  25. Hallo Bernd,

    super tolles Projekt. Leider will es bei mir einfach nicht laufen, hatte
    unterschiedliche Fehler, jetzt ist es soweit das ich nur noch einen Fehler habe.
    Hier der Fehler :

    C:\Users\wolf\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp: In member function ‚void AquaControl::initTimeKeeper()‘:

    C:\Users\wolf\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:398:19: error: ‚RTC‘ was not declared in this scope

    setSyncProvider(RTC.get); // the function to get the time from the RTC

    ^

    exit status 1
    Fehler beim Kompilieren für das Board WeMos D1 R2 & mini.

    wo liegt das Problem ? wenn du mir helfen könntest wäre es echt toll.
    Das Betriebssystem ist Windows 10 und Arduino sagt 1.8.5(Windows Store 1.8.10.0)
    wer kann helfe oder hat eine Idee.

  26. Hallo,
    eine tolle Aquarium Lichtsteuerung hast Du entworfen. Ich habe keine Ahnung vom programmieren. Es ist mir trotzdem auf Anhieb gelungen die Schaltung aufzubauen und zu programmieren. Nur ein kleines Problem habe ich. Die angezeigte Temperatur stimmt nicht. Ich habe nun schon den dritten DS18B20 getestet. Leider ohne Erfolg. Einer (China) zeigt 0 Grad, einer (Conrad) zeigt 3,69 Grad und einer (Bastelkiste) zeigt auch 0 Grad an. Wenn ich die Schaltung ohne Sensor betreibe, wird auch 0 Grad angezeigt. Habe ich den verkehrten Treiber geladen? Ich habe ihn von hier: „ Latest Developments on Github„ geladen.
    Danke Marco

  27. Hallo Bernd
    ich habe alles zusammengebaut wie Du beschrieben hast aber es lassen sich die LEDs nicht dimmen und ich kann im SBAQC in den Lichtkanälen die Zeit einschreiben und es tut sich nichts gar nichts.Wer kann mir helfen bin Anfänger , was muß ich beachten oder einstellen.Danke für Deine Bemühungen.

    Grüße Reinwald

    1. Reinwald, ich habe das Ding jetzt ohne Probleme seit gut zwei Monaten im Dauertest. Von daher würde ich auf einen Verdrahtungsfehler oder Kontaktprobleme tippen. Insbesondere bei Testaufbauten auf Steckbrettern sind Kontaktfehler häufig und bringen insbesondere Anfänger gern in Schwitzen.

      Martin

      1. Hallo Martin
        muß ich irgenwas in der AquaControl.cpp für das PWM dimmen einstellen?
        Ich werde alles nochmal durchmessen.
        Grüße

  28. Ich bin am Verzweifeln. 🙁
    Nach dem Start bekomme ich „Initializing SD card… Done.“ und dann in der nächsten Zeile „Reading wlan config from SD card…error opening wlan.cfg failed“.

    Die SD card ist korrekt mit den angegebenen Dateien beschrieben. WLAN.CFG ist also da. Was mache ich falsch? Hat jemand einen Tipp für mich?

    1. Hi Martin,
      könntest du mir zeigen, wie die Ordner auf der SD liegen? Die meisten Probleme gibt es, wenn die Ordnerstruktur nicht passt oder wenn die SD Karte nicht mit FAT sondern mit NTFS formatiert wurde.
      Gruß

      1. Gern, die SD-Karte ist FAT32 formatiert. Die Dateien liegen so, wie ich das aus deiner Beschreibung verstanden habe. D.h. die htm-Dateien im Rootverzeichnis. Dazu gibt es in Root zwei Verzeichnisse sd und css. Darin liegen die entsprechenden Dateien d.h. die WLAN.CFG im sd-Verzeichnis. Ich habe WLAN.CFG zusätzlich in Root kopiert. Das ändert aber nichts.

        1. Ich habe meinen Fehler gefunden. Eigentlich ganz simpel, aber damit andere nicht auch darauf hereinfallen hier eine kurze Beschreibung.

          Ich hatte die SD-Karte früher mal in einem Raspberry PI benutzt. Dadurch existierte außer dem Hauptvolume noch zusätzlich ein kleines mit nur 45MB. Darauf griff die Steuerung zu und fand natürlich nichts. Also die Karte vor der Formatierung neu Low-Level formatiert und alles läuft so wie es soll. 😉

  29. Hallo

    Leider bekomme ich den Sketch nicht auf mein LolinNodeMCU.
    Ich habe auch versucht es mit einem Wemos d1 mini wie in der Anleitung zu Kompilieren , leider bekomme ich dort auch unter Arduino 1.8.5 eine Fehlermeldung.

    Arduino: 1.8.5 (Windows 10), Board: „WeMos D1 R2 & mini, 80 MHz, 4M (1M SPIFFS), v2 Prebuilt (MSS=536), Disabled, None, 921600“

    WARNUNG: Bibliothek DS3232RTC-master behauptet auf (avr) Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf (esp8266) Architektur(en) ausgeführt wird.
    D:\Wichtige Daten\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp: In member function ‚void AquaControl::initTimeKeeper()‘:

    D:\Wichtige Daten\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:398:19: error: ‚RTC‘ was not declared in this scope

    setSyncProvider(RTC.get); // the function to get the time from the RTC

    ^

    D:\Wichtige Daten\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp: In member function ‚void AquaControl::init()‘:

    D:\Wichtige Daten\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:497:10: error: use of deleted function ‚ESP8266WebServer& ESP8266WebServer::operator=(const ESP8266WebServer&)‘

    _Server = ESP8266WebServer(80);

    ^

    In file included from D:\Wichtige Daten\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.h:25:0,

    from D:\Wichtige Daten\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:12:

    C:\Users\Andre\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:69:7: note: ‚ESP8266WebServer& ESP8266WebServer::operator=(const ESP8266WebServer&)‘ is implicitly deleted because the default definition would be ill-formed:

    class ESP8266WebServer

    ^

    C:\Users\Andre\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:69:7: error: use of deleted function ’std::unique_ptr& std::unique_ptr::operator=(const std::unique_ptr&) [with _Tp = HTTPUpload; _Dp = std::default_delete]‘

    In file included from c:\users\andre\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\memory:81:0,

    from C:\Users\Andre\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WiFi\src/ESP8266WiFiGeneric.h:28,

    from C:\Users\Andre\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WiFi\src/ESP8266WiFiSTA.h:28,

    from C:\Users\Andre\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\ESP8266WiFi\src/ESP8266WiFi.h:34,

    from D:\Wichtige Daten\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.h:23,

    from D:\Wichtige Daten\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:12:

    c:\users\andre\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\unique_ptr.h:274:19: error: declared here

    unique_ptr& operator=(const unique_ptr&) = delete;

    ^

    Mehrere Bibliotheken wurden für „SD.h“ gefunden
    Benutzt: C:\Users\Andre\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.0\libraries\SD
    Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\SD
    exit status 1
    Fehler beim Kompilieren für das Board WeMos D1 R2 & mini.

    Dieser Bericht wäre detaillierter, wenn die Option
    „Ausführliche Ausgabe während der Kompilierung“
    in Datei -> Voreinstellungen aktiviert wäre.

    Vielleicht kann mir jemand helfen.

    Mit freundlichen Grüßen

    Andre

    1. „WARNUNG: Bibliothek DS3232RTC-master behauptet auf (avr) Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf (esp8266) Architektur(en) ausgeführt wird.“
      Habe ich weiter unten schon mal beantwortet!
      Bitte die richtige Lib verwenden. Doppelte Libs bitte vermeiden lösche die entsprechende Lib die vom Arduino mitgebracht wurde (C:\Program Files (x86)\Arduino\libraries\SD)!
      Dann nochmal probieren und schauen was geht!

  30. Hallo Bernd,
    finde dein Projekt super würde die Lichtsteuerung gerne benutzen.
    Habe alle Komponenten mir besorgt alle Sketche runter geladen und nach deiner Beschreibung alles installiert das Hochladen war erfolgreich, serieller Monitor zeigt
    ##Now starting up
    Initializing SD card… Done.
    Reading wlan config from SD card… Done.
    Connecting to WLAN-90FF55……. Done.
    IP address: 192.168.1.110
    Initializing RTC DS3231…. Done.
    Initializing PWM channels… Done.
    Initializing Webserver… Done.
    Reading LED config from SD card…
    Warning: Couldn’t find config file for LED channel 1
    Warning: Couldn’t find config file for LED channel 2
    Initializing DS18B20 Temerature Sensor…Done.
    AQC booting completed.##

    das an.
    Habe noch kein PWM Modul angeschlossen, habe die Zeile entsprechend auskommentieren.

    IP-Adresse wie beschrieben im Browser eingegeben Seite öffnet aber nicht, „Seiten-Ladefehler“.

    Habe ein anderes Programm ausprobiert, wo die HTML Seite im Sketch geschrieben ist, da wird die Seite im Browser geöffnet.

    Möchte gleich anmerken, dass ich ein Neuling in Sache Arduino bin….jetztn die frage, wo liegt der Fehler?
    Im Voraus vielen Dank für deine Hilfe!
    Gruß Klaus

  31. Guten Abend und auch von mir herzlichen Dank für das tolle Projekt.
    Ich habe heute meine Steuerung mehr oder minder erfolgreich in Betrieb genommen.
    Stand ist nun:
    -Flashen ohne Fehlermeldung
    – Uhrzeit lässt sich ändern und wird auch nach trennen und erneuter Spannungsversorgung korrekt angezeigt
    – Temperatur wird korrekt angezeigt

    aber leider tut sich nichts bei den Ausgängen an dem PCA9685 Modul. (Ausgänge gemessen und Lichtquelle mit Arduino geprüft).

    Hast du oder jemand anders evtl. eine Idee woran es liegen könnte?

    Ich werde morgen noch mal dass Modul auslöten und mit einem Arduino versuchen anzusteuern, dazu kam ich heute leider nicht mehr.
    Mit freundlichen Grüßen Niels.
    P.S.: Ja auch mit ie gibt es hier einen 😉

    1. Ich hatte das gleiche Problem und habe lange gesucht. Die Lösung habe ich erst gefunden, als ich den Debug-Output vom PCA9685 eingeschaltet habe. Die AQ-Steuerung sendet kein PWM Signal an Kanäle ohne Konfiguration. Ich wollte natürlich erstmal testen, bevor ich mir irgendwelche Uhrzeiten ausdenke und hatte dementsprechend keine Configs.
      Viele Grüße
      Basti

  32. Hallo,
    erst mal besten Dank für dieses erstklassige Projekt.
    Aber wies halt immer so ist, kommt der Appetit beim Essen. Und ich hab noch ein paar Fragen.
    Ich verwende mit meiner jetzigen Arduinosteuerung LED Steifen und Power LEDs parallel. Die Streifen hängen an Mosfets mit normalem PWM Signal und die KSQs für die Power LEDs bekommen ein invertiertes PWM Signal vom Arduino. Ich hab schon mal ein wenig im Code geschmökert, aber das sieht doch ganz anders aus als mein bisheriges Strickwerk.
    Wo genau bekommen denn die PWM Kanäle ihr Kommando? Sollte doch möglich sein bestimmten Kanälen ein invertiertes Signal zukommen zu lassen.
    Außerdem hab ich da noch Schwierigkeiten mit dem db18b20. Ich würd gern zwei davon verwenden, bekomme am Wemos aber keinen zum laufen.
    Mit dem Arduino klappt’s, aber mit dem Wemos noch nicht. Ich hab auch schon mal den Pullup auf 4,7k reduziert (so läuft’s am Arduino), aber ohne Erfolg. Das Beispiel spuckt nur „No more addresses.“ aus. Hast du da evtl. noch mal nen Tipp für mich. Über den zweiten Sensor soll dann noch ein Lüfter in der Abdeckung gesteuert werden.
    Und wenn ich dann noch die Leitfähigkeitsmessung inkl. Aufzeichnung hin bekomm, wär das ein Bomben Upgrade der jetzigen etwas wackligen Steuerung.
    Vielen Dank schon mal
    Robert

    1. Hallo Robert,
      wenn du das Ausgabesignal eines PWM-Kanals ändern möchtest, dann schau mal die Methode

      void AquaControl::writePwmToDevice(uint8_t channel){
      #if defined(USE_PCA9685)
      pwm.setPWM(_PwmChannels[channel].ChannelAddress, 0, _PwmChannels[channel].CurrentWriteValue);
      #else
      analogWrite(_PwmChannels[channel].ChannelAddress, _PwmChannels[channel].CurrentWriteValue);
      #endif
      }

      Zeile 660 in der AquaControl.cpp.
      „CurrentWriteValue“ enthält den PMW Wert, der ausgegeben wird. Ein XOR mit lauter 1er (16Bit) sollte den gewünschten Invertereffekt erzielen.

      Was den Temperatursensor angeht, so sollte er eigentlich funktionieren. Die sehr dünnen Drähte sind manchmal etwas fummelig und man bekommt nicht immer sauber Kontakt. Es gibt aber viele Beispiele im Netz. Bin mir sicher, dass du das zum Laufen bekommst.
      Beim Auslesen der Temperatur musste ich etwas, sagen wir mal, tricksen. Das Auslesen inkl. Initialisierung dauert immer 2 Sekunden. Der Sensor braucht immer etwas Zeit zwischen Init und Auslesevorgang. Da hier aber das Programm hängen würde, habe ich das Initialisieren und das Auslesen so aufgeteilt, dass bei einem Schleifendurchlauf das Initialisieren erfolgt und beim neuen Schleifendurchlauf das Auslesen erfolgt. Etwas kompliziert, aber die Steuerung läuft ja permanent in einer Dauerschleife und berechnet die aktuellen PWM-Werte für alle Kanäle und ließt eben die Temp. aus.
      Ich hoffe in komme in der nächsten Zeit mal dazu, sie noch etwas auszubauen. Die Ideen sind ja schon da. Das mit dem invertierten Signal merke ich mir aber auf jeden Fall gleich sodass man das direkt in der Weboberfläche einstellen kann.
      Gruß Bernd

      1. Hallo Bernd,
        danke für den Tipp. So sollten KSQs und Streifen jeweils das passende PWM Signal bekommen.

        #if defined(USE_PCA9685)
        uint16_t maxPWM = 4095;
        if(channel < 4)
        pwm.setPWM(_PwmChannels[channel].ChannelAddress, 0, maxPWM – _PwmChannels[channel].CurrentWriteValue);
        else
        pwm.setPWM(_PwmChannels[channel].ChannelAddress, 0, _PwmChannels[channel].CurrentWriteValue);
        #else

        Die Weboberfläche hab ich auch ein wenig überarbeitet, aber wie man den Server dazu bringt ein jpg anzuzeigen hab ich noch nicht verstanden. Evtl. hast du ja da noch nen Tipp auf Lager.
        Ich hoffe ich bin nicht zu lästig, aber das Bastelfieber hat mich grad voll im Griff.
        Gruß Robert

    2. Hallo,
      das DS18B20 Problem ist gelöst. Habe auch das Beispiel aus der OneWire Lib mit dem Wemos zum laufen bekommen. Allerdings stimmt der Pin aus dem Beispiel nicht. Bei Sensor an Pin 3 hats mit Angabe einer 0 funktioniert.
      Danach noch mal alles sauber installiert und nun gibts auch eine Temperatur.

      1. Hallo Robert, bei mir funktioniert der Temperatursensor auch nicht. Leider habe ich vom programmieren keine Ahnung. Wo muss ich etwas ändern, damit er funktioniert? Danke Marco

  33. Hallo,
    habe gerade festgestellt das bei einen Stromausfall die RTC sich die Uhrzeit zwar merkt aber die Uhrzeit stehen bleibt an dem Zeitpunkt wann der Stromausfall war. Strom wieder da Uhr läuft wieder weiter, aber es besteht eine Differenz von der Dauer des Stromausfalls.

    1. Hallo Heiko,
      das Problem hatte ich auch schon und es tritt meiner Erfahrung nach auf, wenn die Batterie leer wird und die Spannung absinkt. Anscheinend kann das Modul zwar noch die aktuelle Zeit halten aber der Timer läuft nicht mehr sauber.
      Mess mal bitte die Batteriespannung. Sie sollte bei >=3V liegen. Wenn sie geringer ist, dann wird sie leer.
      Ich empfehle außerdem keine CR2032 sondern eine LIR2032 zu nehmen. Die CR2032 ist nur eine Batterie und kann nicht wieder aufgeladen werden. Die LIR2032 ist ein Li-Io Akku und kann wieder geladen werden. Und normalerweise laden die DS3231 Module die eingesteckte Batterie(Akku) wieder auf.
      Gruß Bernd

  34. Hallo Bernd,
    Super Seite, habe ein Problem mit der Datei DS3232RTC.
    Folgender Fehler tritt auf. Bin ein Neueinsteiger und komm nicht mehr weiter. ??????

    WARNUNG: Bibliothek DS3232RTC-master behauptet auf (avr) Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf (esp8266) Architektur(en) ausgeführt wird.
    C:\Users\Netbook\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp: In member function ‚void AquaControl::initTimeKeeper()‘:

    C:\Users\Netbook\Documents\Arduino\libraries\SBAquaControl-master\src\AquaControl.cpp:398:19: error: ‚RTC‘ was not declared in this scope

    setSyncProvider(RTC.get); // the function to get the time from the RTC

    ^

    exit status 1
    Fehler beim Kompilieren für das Board WeMos D1 R2 & mini.

        1. Hallo zusammen, Tipp für Linuxer: Ich musste in der oben gegebenen Lib in der DS3232RTC.cpp in Zeile 5 das S von stdint.h klein machen. Unter Windows geht das, weil dem Dateisystem Groß-/Kleinschreibung wurscht ist.

          @Bernd, sehr cooles Projekt, vielen Dank dafür! Kämpfe gerade noch mit dem PWM-Signal, das bekomme ich aber auch noch hin 🙂

          Viele Grüße
          Basti

  35. Hallo Bernd,
    habe gerade mal Dein Projekt auf „PlatformIO“ umgesetzt.
    Dabei ist mir ein Fehler in Deiner „Time.Lib“ aufgefallen, in der „library.json“ bitte das Komma hinter Deiner E-Mail Adresse entfernen dann stimmt da auch wieder der Syntax! 😉

    Grüße, Daumen hoch und weiter so,
    Jens

  36. Hallo Bernd,
    habe es auf dem Steckbrett nach gebaut und es funtzt vom Feinsten.
    Werde alles jetzt auf eine Platine bringen und mit den High-Power LEDs verdrahten.

    Danke für das coole Projekt und Gruß, Wolfgang

  37. Hallo Bernd,

    heute habe ich mich endlich ans Zusammenbauen geben können.

    Leider aber bekomme ich die nachfolgende Fehlermeldung über den Seriellen Monitor:

    ets Jan 8 2013,rst cause:2, boot mode:(3,7)

    load 0x4010f000, len 1384, room 16
    tail 8
    chksum 0x2d
    csum 0x2d
    v3de0c112
    ~ld

    Manchmal ist es auch der boot Mode (3,6) falls das etwas ändert.

    Hast du eine Idee woran das liegen könnte?
    Ein einfaches LED Beispiel aus dem Internet hat auf meinem Wemos funktioniert.

    Vielen Dank
    Andreas

    1. Hallo Andreas,
      welche Version vom ESP8266 Bordmanager Paket nutzt du denn? Die Version 2.3.0 funktioniert seltsamerweise nicht. Man muss Version 2.2.0 nutzen.
      Kommen denn vor der Fehlermeldung irgendwelche anderen Ausgaben wie „Initialisiere SD Karte…“ oder so?
      Der Fehler den du hast, tritt in der Regel auf, wenn eine Endlosschleife läuft oder eine Funktion zu viel Zeit benötigt. Dann schlägt der Watchdog zu und resetet den ESP8266.

      1. Hallo Bernd,

        vielen Dank für die so zeitnahe Rückmeldung.
        Und ja, es hat tatsächlich an der Version 2.3.0 gelegen.
        Ich wurde etwas aufs Glatteis geführt, da zuerst die Version 2.2.0 bei mir NICHT funktioniert hat. Einfache Programme ließen sich mit der Version 2.3.0. aber erfolgreich flashen und testen.
        Daher konnte ich erstmal nicht glauben, dass es so direkt an der Version 2.3.0 liegen kann.
        Teilweise musste ich etwas mit der Uploadspeed spielen, damit es geklappt hat. Inzwischen scheint das aber keinen Einfluss mehr zu haben.

        Abschließend aber, es läuft mit Version 2.2.0 🙂

        VIELEN DANK!!!

        1. Hallo Andreas,
          sehr gut. Ich habe auf github auch einen entsprechenden Hinweis verfasst. Habe das jetzt mal intensiv getestet.
          Mit der Arduino IDE läuft die Steuerung nur mit der ESP Version 2.2.0.
          Wenn man mit Visual Micro arbeitet, läuft die Steuerung ausschließlich nur mit der 2.3.0.
          Ich habe dazu auch schon mehrere Anfragen laufen, aber bisher ohne Rückmeldung.
          Gruß Bernd

  38. Hallo Bernd,

    genau so was habe ich gesucht. Tolles Projekt, man kann die komplette Elektronik in der Leuchte verschwinden lassen und muss das Setup nicht an viel zu kleinen Displays und fummeligen Tastern durchführen.
    Meine Teile sind auch schon bestellt. Ich selber befinde mich beim programmieren erst in der „Hello World“ Phase und warte deshalb schon ungeduldig auf neue Features.
    Gruß Wolfgang

  39. Hallo,

    Danke für deine super Anleitung und den tollen Job.
    Keine kurze Frage habe ich, welche LED Stripes (Aquarium Breite 80cm) kannst du für deinen Controller incl. Mondphase empfehlen?

    1. Hallo Nils,
      danke für dein Lob.
      Ich habe bei mir keine Stripes verbaut sondern ausschließlich einzelne HighPower LEDs verwendet. Für das Nachtlicht/Mondlicht habe ich 5 Königsblaue Highpower LEDs genommen. Da diese fast immer sehr stark gedimmt betrieben werden, habe ich sehr günstige bei eBay gekauft. Mit Stripes habe ich bisher fast keine Erfahrung und kann dir daher nichts bestimmtes empfehlen, tut mir leid.
      Gruß Bernd

      1. Kannst du mir denn diese Power LED empfehlen, eventuell einen Link? Wieviele benötige ich denn für ein ca. 80cm breites Becken?
        Und welche benötige ich genau für Mondlicht, Morgendämmerung, tägliche und Sonnenuntergang.

        Grüße
        Nils

  40. Hallo Bernd,

    auf diesem Wege wollte ich mich einfach mal für diese super Beschreibung bedanken.

    Ich habe mir die benötigten Teile bereits bestellt und werde, sobald diese da sind (hoffentlich max 6 Wochen) auch gleich mit dem Nachbau anfangen.

    Danke und Gruß
    Andy

  41. Hallo Bernd,
    erstmal: sehr schönes Projekt. Nach einem Umzug und nun der Möglichkeit endlich ein 200cm Becken stellen zu können, möchte ich ebenfalls gleich die Technik mit umstellen und meine bisherige Lösung, Lichtsteuerung über TC420 + LED Balken von LEDaquaristik einmotten. Lediglich die Leuchtbalken will ich weiter verwenden (und auch deren Anzahl aufstocken).
    Dazu brauche ich allerdings – analog zum TC420 – 4 Ampere an den Ausgängen. Die von dir verwendeten LDD’s gibt’s aber nur bis 1500mA.
    Hättest Du eine Idee, welche Bauteile da gehen würden?

    1. Hallo Rolf,
      welche LED Leisten hast du denn genau? 4A erscheint mir ein wenig viel. Das klingt fast danach, als hätten die Leisten bereits KSQs integriert!

  42. Hallo!

    Erstmal Vielen Dank für das tolle Projekt.
    Funktioniert bei mir einwandfrei. Habe einen kleinen Hinweis der mir beim Hochladen auf das Board aufgefallen ist. Man sollte unbedingt beim Boardverwalter die ESP8266 Version 2.2.0 nehmen und nicht die 2.3.0 ansonsten sorgt das nur für Fehler und für abstrakte Zeichen beim seriellen Monitor.

    1. Noch eine Antowrt der Vollständigkeit halber. Das war ein sehr guter Hinweis. Man muss ganz schön aufpassen mit der ESP Version. Das ist schade und seltsam zugleich, aber ich habe dazu jetzt einen Vermerkt in der Doku und auf Github gemacht.
      Gruß Bernd

  43. Hallo Bernd,

    tolles Projekt, habe es nachgebaut. Jedoch habe ich ein Problem dabei.
    Beim hochspielen auf den WeMos bekomme ich folgende Fehlermeldung:

    sketch\AquaControl.cpp: In member function ‚void AquaControl::init()‘:
    AquaControl.cpp:471: error: ’nowMs‘ was not declared in this scope
    CurrentMilli = nowMs();
    ^
    sketch\AquaControl.cpp: In member function ‚void AquaControl::proceedCycle()‘:
    AquaControl.cpp:542: error: ’nowMs‘ was not declared in this scope
    CurrentMilli = nowMs();
    ^
    exit status 1
    ’nowMs‘ was not declared in this scope

    1. Hallo Mario,
      ich habe das Problem behoben. Ich hatte in der Time-Bibliothek eine Erweiterung gemacht, die in den Sourcen auf github fehlten.
      Habe jetzt einen Fork der Time-Bibliothek von PaulStoffregen erstellt. Bitte nutze diese Bibliothek
      https://github.com/Schullebernd/Time
      anstelle der Ursprünglichen. Dann müsste alles funktionieren (Habe meine Doku auch schon angepasst).
      Gruß Bernd

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert