Elektronik_Header_3Lüftersteuerung mit ESP-01

 

Zeitschaltuhr mit Dämmerungssensor

Für unsere Esszimmerleuchte verwende ich seit vielen Jahren eine programmierbare Zeitschaltuhr, die die Leuchte nachmittags automatisch einschaltet, wenn es anfängt, dämmrig zu werden.

Der Knackpunkt bei dieser Lösung ist der über das Jahr wandernde Zeitpunkt, zu dem es dunkel wird. Ich bin also alle paar Wochen damit beschäftigt, die Zeiten nachzuziehen. Die Umstellung auf Sommer- und Winterzeit kommt erschwerend hinzu.

Es ist also naheliegend, hier eine etwas cleverere Konstruktion zu installieren.

Achtung!
Die in der nachfolgenden Beschreibung aufgezeigte Schaltung arbeitet mit Netzspannung, die bei Missachtung von einschlägigen Vorschriften und Sicherheitsmaßnahmen tödlich sein kann. Wer sich also mit dem Umgang mit Netzspannung nicht auskennt, sollte vom Nachbau absehen oder sich zumindest beim Aufbau des Netzspannung führenden Teils der Schaltung sowie bei der Inbetriebnahme von jemandem helfen lassen, der die passende Ausbildung sein Eigen nennt.


Von einem anderen Projekt habe ich noch eine Handvoll ESP-01 Platinen rumliegen, die dringend eingesetzt werden wollen. Ãœber WLAN holt sich der auf dem ESP-01 verbaute ESP8266 Chip die aktuelle Uhrzeit, inklusive Sommer-/Winterzeit, das ist schon mal die halbe Miete.

Im Netz findet sich auf den Seiten von Jens Fleischer eine fertig ausprogrammierte Zeitschaltuhr in gefälligem Design für den ESP8266. Jens hat sogar Sonnenauf- und Untergangszeiten implementiert, die wandernde Dämmerung ist somit adressiert und hier wäre ich prinzipiell schon fertig.

Leider schaltet die Uhr in der bei Jens vorliegenden Implementierung den Ausgang ausschließlich genau zu den eingestellten Schaltzeiten. Wenn die Uhr zu einem beliebigen Zeitpunkt Strom bekommt, werden die eingestellten Schaltzeitpunkte ignoriert, auch wenn die aktuelle Uhrzeit innerhalb eines als aktiv gekennzeichneten Zeitfensters liegt - das Licht bleibt dann aus. Im Extremfall wird das Licht erst am nächsten Tag zur programmierten Zeit eingeschaltet.

Dieses Manko lässt sich relativ leicht beheben. Die in den Datenstrukturen der Uhr als Strings der Form „HH:MM“ gespeicherten Uhrzeiten für Einschalten und Ausschalten werden einfach in Minuten ab Mitternacht umgerechnet und schon lassen sich die Zeiten prima auf kleiner/größer als die aktuelle Zeit vergleichen... Ok, wenn die Schaltzeiten an unterschiedlichen Tagen liegen, also Mitternacht dazwischen liegt, muss man noch ein wenig Gehirnschmalz investieren, aber auch das ist machbar und lässt sich relativ einfach in die vorhandene Programmstruktur integrieren.

Jens hat noch die Möglichkeit geschaffen, den Ausgang der Schaltuhr mit einem Taster am Gerät oder über die Weboberfläche der Uhr zu beeinflussen. Damit diese Optionen weiterhin funktionieren, müssen noch ein paar Flags und Merker eingebaut werden, die sich die Zustände des Ausgangs merken.


Oben habe ich schon Dämmerung als Begriff erwähnt. Ich will, zusätzlich zu den von Jens eingebauten Möglichkeiten, auch einen Helligkeitssensor ins Spiel bringen, der nachmittags eine eingestellte Einschaltzeit solange übersteuert, bis eine festgelegte Helligkeit im Zimmer unterschritten wird. Natürlich darf der Schaltausgang nicht sofort wieder ausgeschaltet werden, wenn das Licht der Leuchte auf den Sensor fällt.

Da der geplante Mikroprozessor ESP-01 keinen Analogeingang zur Verfügung stellt, findet ein BH1750 Helligkeitssensor Verwendung, der über I²C angesprochen wird. Auch hierfür findet sich auf der Seite von Jens ein passendes (Teil-) Projekt, das sich in die Schaltuhrsoftware integrieren lässt. Ich muss nur noch eine Routine implementieren, die die Abfrage der aktuellen Helligkeit aus der Uhrensoftware heraus erlaubt.

Den erweiterten Code stelle ich als ZIP zum Download zur Verfügung. Zum Code im weiteren Sinne gehört auch der im ZIP enthaltene Ordner HTML. Er enthält die HTML Seiten zur Darstellung der verschiedenen Informationen auf der WEB-Oberfläche, die im Filesystem auf dem ESP8266 abgelegt werden müssen. Hier enthaltener HTML-, CSS- und Script-Code arbeitet mit dem C++ Code im ESP-01 Hand in Hand, alles muss zusammenpassen.

Damit sowohl das LittleFS Dateisystem Platz findet als auch die Firmwareaktualisierung OTA (over the air) funktioniert, muss in der IDE folgende Einstellungen für “Flash Size”getroffen werden: “1MB (FS: 160KB OTA:~422KB)”. Als “Board” ist “Generic ESP8266 Module” zu wählen.

Nachtrag
Die Aktualisierung der Firmware OTA klappt leider nicht. Nach dem Abschluss der Übertragung der Firmware hängt sich die CPU des ESP-01 auf und offenbar wird der neue Code nicht ordnungsgemäß eingehängt. In Folge startet die Firmware nicht mehr, man muss also den neuen Code immer drahtgebunden per Programmer aufspielen.

Update zum Nachtrag
Inzwischen klappt die OTA Aktualisierung wie vorgesehen. Ich bin mir keiner Schuld bewusst, habe eigentlich am diesbezüglichen Code keine Änderungen durchgeführt. Aber was soll’s, Hauptsache funktioniert :)

Hier noch der direkte Link auf die Originalsoftware von Jens. Dort gibt es eine Anleitung zur Inbetriebnahme sowie weitere Informationen zum Programm.

Hinweise

  • Im ZIP sind mehrere Dateien enthalten, die für den Betrieb der Schaltuhr auf einem ESP-01 nicht benötigt werden. Die entsprechenden Aufrufe im Programm sind mit #ifdef Befehlen auskommentiert. Diese Maßnahme ist notwendig, da der ESP-01 nur 1 MB Flash hat und ich die Möglichkeit zum Update der Firmware über WLAN erhalten wollte.
    Der zugehörige Preprozessor-Schalter heißt “ESP01” und steht in “Config.h”.
  • Die Festlegung, ab welcher Helligkeit die Leuchte eingeschaltet werden soll, muss im Code erfolgen, es gibt keine Einstellmöglichkeit über die WEB-Oberfläche.
  • Ich habe fest zwei Schaltzeitpärchen eingestellt, Wochentags und Wochenende.
  • Die Erfassung der Verbrauchsdaten und deren Darstellung bei Klick auf die Uhrzeit ist deaktiviert.
  • Schaltvorgänge abhängig von Morgen- oder Abenddämmerung stehen nicht zur Verfügung.
  • Mit Klick auf das Sonnensymbol wird dafür die Darstellung der aktuell gemessenen Helligkeit in Lux ein- bzw. ausgeblendet.

Die Oberfläche ist natürlich mehr oder weniger identisch zu der von Jens Vorgestellten.

Zeitschaltuhr mit Dämmerungsfunktion

Lediglich beim Klick auf das Sonnensymbol erscheint hier der Helligkeitswert anstelle der Dämmerungsfunktionen.

Zeitschaltuhr mit Dämmerungsfunktion

Uhrzeit und Helligkeitswert werden automatisch jede Sekunde aktualisiert. Ist der Schaltausgang aktiviert, wird das Blitzsymbol gelb dargestellt.


Die Zeitschaltuhr wird in ein Steckergehäuse mit Steckdose, Typ “Strapubox SG 422” eingebaut, der Ausgang (die Steckdose) wird über ein Solid State Relais (SSR) gesteuert.

Da die zu schaltende Leuchte mit einer Energiesparlampe bestückt ist, muss das SSR keine großen Ströme schalten, ein preiswert im Netz zu findendes SSR für 2 A Dauerstrom zum Einlöten tut es hier. Hersteller ist Omron, das Teil heißt G3MB-202P. Es gibt Typen mit unterschiedlicher Eingangsspannung, wir benötigen den 5 V Typ.

Die Angabe der minimalen Eingangsspannung könnte irritieren, ich habe deshalb überprüft, bei welcher Spannung am Eingang der Ausgang eingeschaltet wird. Entwarnung. Bereits ab 2,4 V schaltet beim 5V-Typ des SSR der Ausgangsthyristor voll durch, die Ansteuerung mit 3,3 V ist also problemlos möglich.

Die Betriebsspannung für die Schaltung wird über ein netzgetrenntes Schaltreglermodul 230 V ~ auf 3,3 V = erzeugt, erhältlich z.B. bei AZdelivery unter der Bezeichung “220 zu 3,3 V Mini-Netzteil für Arduino und Raspberry Pi” (für Suchmaschine “220 zu 3,3 V Mini-Netzteil für ESP8266” verwenden).

Der Taster am Gerät ist ein TTP223 Sensormodul, das Gehäuse der Schaltung muss also nicht durchlöchert werden um einen mechanischen Taster zu montieren. Das hat darüber hinaus den Charme, dass ich mich nicht um Berührschutz kümmern muss, die Netzspannung bleibt berührungssicher im Innern des Steckergehäuses verkapselt.

Der oben erwähnte Helligkeitssensor ist ein sogenannter Ambient Light Sensor vom Typ BH1750. Den habe ich bereits in einem anderen Projekt mit ESP-01 eingesetzt, die dortige Implementierung zur Ansteuerung über I²C kann 1:1 übernommen werden.

Leider existiert für den BH1750 in der Software von Jens keine GUI zur Einstellung der Schaltschwelle, hier wird also in erster Näherung der Schwellwert manuell ermittelt und im Programm fest einprogrammiert werden müssen. Nicht so schick wie der Rest der WEB-Oberfläche, aber immerhin machbar.


Für die Schaltung habe ich eine einseitige Platine entworfen, die alle Komponenten trägt und auf die im Gehäuse vorhandenen Befestigungspunkte passt. Ich habe darauf geachtet, dass genügend große Kriech- und Luftstrecken zwischen den Netzspannung führenden Leitern und dem Niederspannungsteil vorhanden sind.

Achtung
Die Schaltung arbeitet teilweise mit Netzspannung. Die Berührung von Netzspannung führenden Teilen der Schaltung kann lebensgefährlich sein. Der Nachbau sollte nur von jemandem durchgeführt werden, der eine entsprechende Ausbildung hat.

Im Prinzip schließe ich mich also der Warnung von Jens an und empfehle dringend, die Verdrahtung im Innern des Steckergehäuses einem Fachmann zu überlassen. Wenn die Schaltung aber wie vorgestellt aufgebaut und das Gehäuse geschlossen wird, bevor es in die Steckdose gesteckt wird, kann eigentlich nichts passieren. Aber das muss jeder für sich selbst entscheiden.

Hier also die Schaltung und das Layout der Platine.

Dämmerungs-Uhr Schaltbild     (Click auf das Bild für größere Darstellung)

Bei der Beschaltung der IOs des ESP-01 müssen bestimmte Vorgaben eingehalten werden, damit der ESP anlaufen kann. Sowohl GPIO2 als auch CH_PD, beides Signale, die auf den Stecker des ESP-01 geführt sind, müssen für den Start des Anwenderprogramms aus dem Flash auf HIGH Potential liegen.

Da GPIO2 als Schaltausgang für das SSR benutzt wird, muss die Ansteuerung des SSR also aktiv LOW erfolgen, damit die Startbedingung für den ESP nicht verletzt wird.

Der Taster wird an GPIO0 angeschlossen und arbeitet ebenfalls aktiv LOW.

Dämmerungs-Uhr Platine

Die vorgesehene LED parallel zum SSR ist eigentlich unnötig, man sieht sie im geschlossenen Gehäuse ohnehin nicht. Sie hilft aber bei der Programmentwicklung als Indikator für den Schaltzustand des Ausgangs, solange die Schaltung noch ohne Netzanschluss und ohne Leuchte arbeitet.

Eingebaut in das Gehäuse präsentiert sich die Schaltung so:

Innenansicht der Dämmerungs-Zeitschaltuhr

Links, unterhalb der roten LED, das SSR, oben in der Mitte der ESP-01, links daneben der Sensor TTP223, das verkapselte Schaltnetzteil in der Mitte.

Unter dem ESP-01 liegen noch 5 PullUp Widerstände.

Dämmerungs-Zeitschaltuhr

Der Helligkeitssensor BH1750 ist über ein 4-poliges Kabel angeschlossen, das über die ins Unterteil des Gehäuses integrierte Zugentlastung gesichert wird. Leider sind im Lieferumfang des Gehäuses weder passende Schrauben noch der eigentliche Sicherungsbügel enthalten. Gut, wenn man solche Kleinteile in der Schublade hat.

Die Platine muss mittels Beilagscheiben, ich habe solche aus Kunststoff verwendet, um ca. 2 mm angehoben eingebaut werden, da sonst die Schrauben der Zugentlastung Kontakt zu den Leiterbahnen und Lötpunkten bekommen.

Der Touch Sensor, die LED und das SSR.

2021-02-18_IMG_3218_resize

Auf dem Sensormodul muss der Kontakt “A” überbrückt werden, da der ESP-01 einen aktiv LOW Kontakt erwartet.

2021-02-18_IMG_3224_c_hell_resize

Interessanter Weise hat es diesmal nicht geklappt, einfach einen Klecks Lötzinn über die beiden Kontakte zu löten, ich musste ein Stück Draht bemühen.

Da der Sensor aktiv LOW arbeitet, der Ausgang also im inaktiven Zustand HIGH ist, leuchtet die LED auf dem Sensorboard permanent und verlischt nur, wenn der Sensor aktiviert wird, um den Schaltzustand des Ausgangs zu ändern. Wenn das stört, muss die SMD LED auf dem Sensorboard entfernt werden.

Nachtrag
Im Betrieb hat sich herausgestellt, dass der TTP223 Sensor offenbar für EMV-Störungen empfänglich ist. Das äußert sich darin, dass die Leuchte morgens eingeschaltet ist, obwohl das Ausschalten um 23 Uhr funktioniert hat.
Um dem Phänomen auf die Spur zu kommen, habe ich temporär die von Jens vorgesehene Logging-Funktion aktiviert. So konnte ich in der Log-Datei schön sehen, dass zu unterschiedlichen Zeiten der Taster als Ursache für ein EIN-Event vermerkt ist.

Mit der von Jens implementierten Entprellroutine funktioniert der TouchSensor nicht ordnungsgemäß, hier habe ich also eine auf den TouchSensor abgestimmte Routine eingebracht. Erst wenn der Sensor länger als 100 ms aktiviert ist, wird der Status des Ausgangs geändert. Da die exakte Position des Sensors von außen nicht erkennbar ist und man die 100 ms beim Betätigen erreichen muss, streicht man am besten mit der flachen Hand auf der Sensorseite am Gehäuse entlang.

Das ZIP-Archiv enthält die aktualisierten Routinen.

Update
Da unsere Rolläden im Sommer sonnengesteuert abgesenkt werden, wird es im Zimmer nachmittags dunkel. Nicht wirklich dunkel, aber doch so dunkel, dass die Zeitschaltuhr meint, jetzt wäre ein guter Moment, das Licht einzuschalten, zumindest solange die eingestellte Einschaltzeit überschritten ist und nur durch den Dämmerungssensor übersteuert wird.

Bisher habe ich diesen Effekt manuell unterdrücken müssen, indem ich die Einschaltzeiten im Sommer auf “relativ spät”, also so ca. 20..21 Uhr geändert habe. Irgendwann vor Winter dann das Ganze zurück... Irgendwie nicht das, was ich mir unter vollautomatisch vorgestellt habe.

Ich habe deshalb jetzt die Einschaltzeitpunkte an die Sonnenuntergangszeit gekoppelt. Die Sonnenuntergangszeit wird täglich von Jens Programm neu berechnet. Diese Zeit trage ich als Einschaltzeitpunkt zur Anzeige in die GUI ein und setze sie in der Steuerung anstelle der aus dem Flash gelesenen, manuell gesetzten, Einschaltzeit ein.

Folglich wandert die Einschaltzeit im Frühjahr mit dem Sonnenuntergang nach hinten und der Dämmerungssensor kommt entsprechend später zum Zuge, eine Absenkung der Helligkeit durch Abschattung per Rolladen wird um diese resultierende Uhrzeit nicht mehr erfolgen. Im Herbst kehrt sich der Effekt dann um, die Einschaltzeiten wandern wieder Richtung “früher”.

Zusätzlich kann der Einschaltzeitpunkt noch über einen festen Wert Richtung “früher” verschoben werden. Dieser Wert wird über die GUI im WEB-Browser eingestellt und wird im Dateisystem des ESP8266 in der Datei "fs/config/hobbs.json" anstelle des dort normalerweise abgelegten Wertes für “watt”, der Leistung des angeschlossenen Verbrauchers, gespeichert.

Die Einstellung der zusätzlichen Korrektur wird durch Klick auf die Uhrzeit in der Kopfzeile aufgerufen.

Zeitschaltuhr - Verschiebung einstellen

Sobald das Eingabefeld verlassen wird, wird der geänderte Wert gespeichert.

Die aktualisierte Firmware hier als Download..

Um die Schaltuhr für die Konfiguration ins eigene WLAN zu integrieren, müssen vor dem Compilieren in der Datei ”Config.h” die Credentials (SSID und Passwort) eingetragen werden.


Die Drähte zum Anschluss der Schaltung an den Steckerteil im Unterteil des Gehäuses müssen gelötet werden. Meine Befürchtung, das Kunststoffmaterial könnte die Temperatur beim Löten nicht aushalten, ist unbegründet, es ergaben sich keine Verformungen. Die Anschlüsse an der Steckdose im Oberteil des Gehäuses werden geschraubt. Die Leitungen sind Litzenleitungen und erhalten zur sauberen Kontaktierung Aderendhülsen.

Lötanschlüsse am Stecker und Aderendhülsen an der Platine.

Beim Ablängen der Leitungen lieber ein bisschen zugeben, es ist ausreichend Platz im Gehäuse um auch etwas längere Leitungen verstauen zu können. Man muss dann nur beim Schließen des Gehäuses darauf achten, die Leitungen nicht einzuklemmen.


Achtung!
Hier noch einmal der dringende Hinweis, dass bei Arbeiten mit Netzspannung die einschlägigen Vorschriften zu beachten sind und man sich im Zweifelsfall von jemandem helfen lässt, der die entsprechende Ausbildung hat.

 

 


Beim Aufruf dieser Funktion werden Daten an Google in USA übermittelt. Neben Ihrer IP-Adresse wird auch die URL der besuchten Seite übertragen.
Besucherzaehler

Besucher seit
25.11.2000