Im Keller hängt ein Wechselrichter mit 5 kW an der Wand und wird im Sommer schön warm - so warm, dass es angeraten erscheint, einen Lüfter zur Wärmeabfuhr anzubauen.
Damit der Lüfter nur bei Bedarf läuft, ist eine temperaturgeführte Steuerung Pflicht :-)
Da die Steuerung im Keller sitzt und ich von einem anderen Projekt noch ein paar ESP-01 Module herumliegen habe, habe ich mich entschlossen, die Steuerung damit aufzubauen und ein WEB-Interface zu programmieren, so dass ich die aktuelle Temperatur und ob der Lüfter gerade läuft, über WLAN abrufen kann. Die wesentlichen Parameter der Steuerung lassen sich über das WEB-Interface ebenfalls anzeigen und verändern, sie werden persistent über eine EEPROM-Simulation im Flash des ESP8266 gespeichert.
Um die Temperatur und andere Informationen auch vor Ort erkennen zu können, bekommt die Steuerung ein OLED Display spendiert. Der Lüfter ist ein 12V-Typ aus einem PC, versorgt wird das Ganze über ein preiswertes 12 V LED-Netzteil.
Für die Versorgung des ESP-01 wird ein Mini StepDown Wandler verwendet, der seinen Platz auf der Trägerplatine findet. Da die WLAN-Module mit ESP8266 recht stromhungrig sind, wird die 3,3 V Versorgung nach dem Schaltregler mit einem 2200 µF Elko gepuffert, der die Stromspitzen beim Senden abfängt.
Der Lüfter wird über einen SMD FET geschaltet, dieser ist das einzige SMD Bauteil und sitzt somit auf der Unterseite der Platine, alle anderen Komponenten sind bedrahtet und werden von oben bestückt. Die Platine ist einseitig entflochten.
Damit der ESP-01 anläuft müssen bestimmte Pins direkt nach dem Einschalten einen definierten Pegel haben:
GPIO0 muss für den Betrieb immer auf High-Potential liegen, Gleiches gilt für CH_PD. Diese beiden Anschlüsse des
ESP-01 haben deshalb PullUps.
GPIO2 muss im Anlauf ebenfalls auf High-Potential liegen, der normalerweise an einem N-FET vorhandene PullDown zum Sperren des Transistors darf also nicht angeschlossen sein. Da der GPIO aber
aktiv auf Low geschaltet wird, sobald das Programm läuft, ist der FET trotzdem zuverlässig gesperrt. Lediglich kurz nach PowerOn des ESP-01 wird der FET für einen Moment eingeschaltet, das lässt sich ohne äußere
Beschaltung nicht ändern, hängt am Bootprozess des Microcontrollers.
(Click auf das Bild für größere Darstellung)
Das OLED-Display wird auf der 4-poligen Buchsenleiste angesteckt und ragt über die Platine hinaus. Der Betrieb der Steuerung ist auch ohne das Display möglich.
Der fertige StepDown Spannungswandler (bei ebay nach “10 Stk Mini DC-DC Converter Step Down Module Adjustable” suchen) ist über vier Drähte mit der Platine verbunden, die Versorgungsspannung von 12 V wird über den 2-poligen Schraubklemmenblock zugeführt.
Die LED leuchtet, wenn der Lüfter eingeschaltet ist.
Der ESP-01 hat normalerweise lediglich zwei frei nutzbare IOs. Über einen wird der Temperatursensor per OneWire Interface angesteuert, der andere schaltet den Lüfter.
Das OLED-Display hat ein I²C Interface, benötigt also weitere zwei Anschlüsse am Microcontroller. Bereits bei der Proof of Concept Version meiner ESP-01 WordClock habe ich die beim ESP-01 ebenfalls vorhandenen aber mit der seriellen Schnittstelle belegten Anschlüsse Rx und Tx für das I²C Interface verwendet, so auch hier.
Damit sind alle auf dem 8-poligen Stecker vorhandenen IOs des ESP-01 in Verwendung, einen Taster zum Einschalten des Display konnte ich also nicht mehr implementieren, dazu später mehr.
Hintergrund für diese Idee war die deutliche Helligkeitsabnahme der längere Zeit eingeschalteten Pixel des OLED Display. Die Lüftersteuerung lief in einer älteren Version bereits mehrere Monate, das Display war dabei immer eingeschaltet und zeigte konstant einen Text sowie die sich ändernde Temperatur an. Die statischen Texte werden jetzt dunkler dargestellt als - an anderen Stellen - neu Hinzugekommene.
Der Anschluss für den Lüfter hat drei Pins, der normale Stecker eines PC-Lüfters passt hier ohne Änderung, der Sense-Ausgang für die Drehzahlüberwachung wird nicht verwendet.
Das Board hat zwei Steckverbindungen für DS18B20 Temperatursensoren, verwendet wird im gegebenen Projekt nur einer davon.
Die Designunterlagen im EAGLE V7.7 Format.
Bei der Software habe ich mich auf den Stabilen HTTP 1.1 WLAN Webserver von Stefan Thesen verlassen und nur die dargestellten Inhalte geändert. Zusätzlich habe ich die Aufbereitung des Seiteninhalts auf einzelne client.print() Befehle umgestellt, das erscheint mir einfacher als alle Inhalte vor dem Senden in einen String zu packen.
Das Interface ist sehr minimalistisch und geradeaus programmiert:
Angezeigt wird die aktuell gemessene Temperatur und der Status des Lüfters. Über die Buttons ein und aus kann die Automatik übersteuert werden. In diesem Fall hat die Temperatur keinen Einfluss mehr auf den Lüfter.
Bei Click auf den Button Einstellungen wird die Seite erweitert:
Hier kann die Einschalttemperatur sowie die Hysterese eingestellt werden. Darüber hinaus lässt sich das Verhalten des Display einstellen.
Wie bereits oben beschrieben ist das Derating der OLED Displays offenbar nicht vernachlässigbar, so dass ich jetzt das Display nach einer gewissen Zeit abschalte. Leider kann das Display, mangels eines freien IO, nicht mehr vor Ort an der Steuerung aktiviert werden, das passiert nur nach einem Zugriff über das WEB Interface.
Der komplette Code für das oben gezeigte Projekt hier als Download. Die verwendete OLED-Library OLED_Functs.ino sowie die zugehörige Headerdatei font.h des ESP8266Basic Projekts sind in der ZIP-Datei enthalten.
Hinweis
In der ersten Version des Code ist ein “ü” im Dateinamen enthalten. Damit kommt die
Arduino IDE nicht zurecht, die Datei wird nicht angezeigt. Ich habe deshalb das Projekt in “ESP-01_Lueftersteuerung.ino” umbenannt.
Tipp
Die Entwicklung und vor allem die Fehlersuche ist bei einem ESP-01 nicht sehr komfortabel, zum Programmieren muss er auf den Programmieradapter gesteckt
werden, um den Code zu testen wandert er wieder auf die Zielhardware. Einfacher geht das vonstatten, verwendet man bis zur Fertigstellung des Code einen Wemos D1. Ãœber
den USB-Anschluss wird das Programm deutlich schneller als beim ESP-01 ins Flash gepumpt, anschließend sind Debugausgaben über die serielle Schnittstelle möglich. Der
Code kann per #define auf Wemos D1 oder ESP-01 als Ziel umgeschaltet werden.
Um den Code auf den ESP-01 zu flashen ist zusätzliche Hardware notwendig.