Inhaltsverzeichnis:
- Schritt 1: Lampenanordnung
- Schritt 2: Dimmtheorie
- Schritt 3: Dimmpraxis
- Schritt 4: Lampencontroller (ESP32)
- Schritt 5: Systemsteuerung
- Schritt 6: Viel Spaß
Video: Helle steuerbare Sonnenaufgangslampe - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:16
Sind Sie jemals um 7 Uhr aufgewacht, der üblichen Zeit, die Sie für die Arbeit benötigen, und befanden sich in der Dunkelheit? Der Winter ist eine schreckliche Zeit, oder? Du musst mitten in der Nacht aufwachen (warum ist es sonst so dunkel?), dich aus dem Bett reißen und deinen halb bewusstlosen Körper unter die Dusche schicken.
Dieses Projekt zielt darauf ab, eines der Probleme zu lösen - die Morgendunkelheit.
Es gibt viele billige Sonnenaufgangslampen, aber alle haben eine geringe Leistung und sind blass. Sie sind eher eine Nachtlampe, die einen besser schlafen lassen soll. Ganz und gar nicht das, was ich will.
Gleichzeitig weckt Sie das einfache Einschalten des hellen Lichts sofort, aber nicht sanft genug. Was ich will, ist eine Kombination aus beiden Ansätzen - mit geringer Helligkeit leuchten, langsam auf Vollgas kommen, dann klingelt ein richtiger Wecker und man ist nicht mehr so müde. Fügen wir ein bisschen Vogelgesang hinzu, und Sie wachen jeden Morgen in einem Himmel auf!
Schritt 1: Lampenanordnung
Als erstes brauchen wir die Lampe selbst. Ich habe einen ziemlich großen Raum mit weißen Wänden und Decken, also habe ich mich für 7 GU10-LED-Lampen entschieden, jeweils etwa 6 W, mehr als 40 W reine Leistung! Das ist genug, um Ihnen das Gefühl zu geben, dass es bereits Tag ist. Sie kann auch tagsüber als normale Raumbeleuchtung verwendet werden.
Dabei spielt es keine Rolle, wie Sie es zusammenbauen, welche Lampen Sie mit welchen Fassungen verwenden. Alles worauf es ankommt - das müssen dimmbare Lampen sein!
In meinem Fall habe ich ein Holzbrett mit 7 GU10-Buchsen befestigt, die alle miteinander verbunden sind. Ich stecke es später in eine Plastikbox.
Schritt 2: Dimmtheorie
In der Theorie gibt es keinen Unterschied zwischen Theorie und Praxis. In der Praxis gibt es.
Die Steuerung eines Dimmers von ESP32/Arduino aus schien nicht so einfach zu sein, wie ich es mir vorgestellt hatte. Ich habe eines der RobotDyn AC Light Dimmer-Module. Dafür schlägt der Hersteller eine Bibliothek vor. Es funktioniert nicht auf ESP32 (und es ist wirklich schwer anzupassen, da es viel ATMega-spezifischen Registrierungszugriff auf niedriger Ebene verwendet), funktioniert irgendwie auf Arduino Nano und verursacht ein schreckliches Flackern bei niedriger bis mittlerer Helligkeit. Deshalb habe ich einige Zeit damit verbracht, zu untersuchen, wie das alles funktioniert, und meinen eigenen Weg zu gehen.
Ein bisschen Theorie
Das gewählte Dimmermodul verwendet einen sehr beliebten TRIAC: BTA16. Es gibt viele Artikel darüber. Ich versuche es hier zusammenzufassen.
TRIAC ist ein Modul, das eine positive oder negative Eingangsspannung auf den Ausgang übertragen oder sperren kann. Standardmäßig blockiert es alles. Um es zu öffnen, sollten wir ihm 100 us lang ein High-Signal am Gate-Eingang geben. Dann bleibt es geöffnet, bis der Strom auf Null abfällt, was passiert, wenn eine Eingangsspannung das Vorzeichen ändert und eine Nullspannung kreuzt. Dann sollten wir im nächsten Zyklus einen weiteren 100-us-Puls machen und so weiter. Durch die Wahl des Zeitpunkts, an dem ein Impuls gegeben werden soll, steuern wir die Helligkeit: Tun Sie dies ganz am Anfang und es wird fast 100 % der Leistungsübertragung erreicht. Tun Sie es später, und es wird gedimmt. Schauen Sie sich das Diagramm oben an und erklären Sie es.
Um Impulse im gleichen Punkt des Zyklus zu erzeugen, müssen wir genau wissen, wann er beginnt. Aus diesem Grund hat das Dimmermodul einen eingebauten Nulldurchgangsdetektor. Es löst nur ein Signal aus (das wir in Arduino als Hardware-Interrupt abfangen) jedes Mal, wenn die Spannung Null überschreitet.
Schritt 3: Dimmpraxis
Ja, so würden Sie aufwachen, wenn Ihre Lampe kein Dimmen hat und alle 40 W Leistung in Ihre müden Augen bringt.
Häufige Probleme
Es gibt mehrere Probleme, die wir angehen müssen.
Flimmern.
Das Timing des Mikrocontrollers muss beim Ein- und Ausschalten des Gate-Ausgangs sehr präzise sein. Die von RobotDyn vorgeschlagene Bibliothek hat alle 100us einen Timer-Interrupt und ändert den Gate-Level nur beim Timer. Dies bedeutet, dass er +/- 50 Mikrosekunden vom optimalen Wert abweichen kann. Es liefert ein gutes Ergebnis bei hoher Helligkeit, flimmert jedoch bei geringer Helligkeit stark. Auch wenn der Mikrocontroller viele Dinge tut, verringert dies die Zeitgenauigkeit, daher sollte idealerweise ein dedizierter Mikrocontroller für den Dimmer verwendet werden.
Minimale Helligkeit. LEDs haben einen eingebauten Stromwandler, der einfach nicht funktioniert, wenn er nicht genug Leistung hat. Meine Lampen schienen ab 10-11% gut zu funktionieren.
Selbst bei diesem Wert weigerten sich einige meiner Lampen beim Start aufzuleuchten. Auch beim späteren Erhöhen der Helligkeit bleiben sie dunkel. Aus diesem Grund beginnen wir, wenn wir vom AUS-Zustand zu einer positiven Helligkeit wechseln, mit einer Aufwärmphase von 5 Zyklen, wenn wir den Lampen die volle Leistung geben. Dann fahren wir mit der gewünschten Helligkeit fort. Es ist fast nicht wahrnehmbar, aber es hilft wirklich.
50/60 Hz Netzfrequenz. Sie müssen wissen, wie lange Sie vor der nächsten Null warten müssen. Es ist ziemlich einfach - wir schauen uns nur den Zeitunterschied zwischen zwei letzten Interrupts an.
Allmähliche Helligkeitsänderung. ESP32 ist ziemlich langsam, es dauert 0,5 Sekunden, um eine triviale HTTP- oder sogar WebSocket-Anfrage zu verarbeiten. Erwarten Sie also keinen reibungslosen Helligkeitsübergang, er muss irgendwie auf Dimmerebene implementiert werden. Wenn er eine neue Helligkeit von einem seriellen Port empfängt, stellt er daher nur das Ziel ein und nähert sich ihm dann langsam im Laufe der Zeit.
Die Lösung
Hier ist mein einfacher Arduino-Code für den Dimmer. Es wartet auf einen Befehl (ein Byte mit der neuen Helligkeit) vom seriellen Eingang, verarbeitet Zero-Cross-Interrupts, steuert den TRIAC und behandelt alle oben genannten Probleme.
Schritt 4: Lampencontroller (ESP32)
Hier ist das Verbindungsschema aller Komponenten, die ich habe. Das ESP32-Board unterscheidet sich stark von dem, was ich verwende (Heltec), daher sehen die ausgewählten Pins etwas seltsam aus, aber es sollte immer noch gut funktionieren. Fühlen Sie sich frei, verschiedene Pins in Ihrem Projekt zu verwenden.
Hier ist der Code, der alles steuert. Es ist ziemlich direkt.
Die wichtigsten Funktionen
Steuerbar. Die Lampe verbindet sich mit WiFi, startet einen WebSocket-Server auf Port 81, wartet auf Befehle. Befehlsformat ist
Derzeit werden nur zwei Befehle unterstützt: "set_brightness" und "update_settings", die… ziemlich selbsterklärend sind.
Zeit von NTP abrufen. Ich möchte die Dinge nicht zu komplizieren und dem Schema eine Echtzeituhr hinzufügen. Wir haben Internetzugang, was bedeutet, dass wir die Echtzeit von einem NTP-Server abrufen und dann die aktuelle Uhrzeit mithilfe der Systemzeitgeber verfolgen können.
Sonnenaufgangsalarm. Sie können einen Alarm einstellen. Was es tatsächlich macht: beginnt mit der minimalen Helligkeit und geht über 10 Minuten allmählich zur vollen Helligkeit über. Dann hält es ein paar Stunden an. Dann schaltet es sich über 60 Sekunden nach und nach aus.
Alle oben genannten Parameter sind konfigurierbar.
Vögel singen. DFPlayer mini wird zum Abspielen von Musik verwendet. Es gibt viele Anleitungen dafür, aber im Wesentlichen müssen Sie nur eine MicroSD-Karte, die in FAT32 formatiert ist, mit einer Datei namens 0001.mp3 einstecken. Diese Datei kann alles haben, was Sie wollen, in meinem Fall sind es 15 Minuten Vogelgesang (es wird geloopt), und es macht meinen Morgen erstaunlich. Beachten Sie, dass es einen riesigen Kondensator an der Stromversorgung und 1 kOhm-Widerstände an der seriellen Leitung dazwischen gibt ESP32 und DFplayer - sie sind optional, helfen aber, das Rauschen zu reduzieren.
Speichern der Einstellungen im EEPROM. Alle Einstellungen werden in das EEPROM geschrieben und beim Start geladen. Es ermöglicht die Verwendung der Leuchte mit mindestens einer Alarmfunktion ohne angeschlossenen Controller.
Rendern einiger Informationen auf dem OLED-Bildschirm. Mein Heltec ESP32 verfügt über einen integrierten SSD1306 128X64 I2C-Bildschirm. Alle wesentlichen Informationen sind darauf gerendert. Ich weiß, die Schachtel sieht hässlich aus, ich habe gerade ein paar Sachen 3D-gedruckt und die Löcher und Fenster mit einem Bohrer geschnitten. Schnell, schmutzig, aber es funktioniert!
Schritt 5: Systemsteuerung
Das ist das Herzstück des Projekts. Ein Raspberry Pi mit einem originalen 7-Zoll-Display, auf dem ein Kivy-Frontend ausgeführt wird.
Hier ist der vollständige Quellcode.
Die Funktionen
Geschrieben in Python. I love Kivy, es ist ein Python-Framework für Benutzeroberflächen. Sehr einfach, aber flexibel und effizient (verwendet viel C-Code für hohe Leistung und Hardwarebeschleunigung).
Wetter. Zeigen Sie die aktuelle Temperatur und den Druck draußen. Wenn Sie einen Fernfühler anschließen - auch die Innentemperatur. Er fragt und analysiert auch die Wettervorhersage für die folgenden 12 Stunden und gibt einen Hinweis auf die Wahrscheinlichkeit des Regens.
SunriseLamp controller. Ein weiteres Panel zeigt einige grundlegende Informationen zum Alarm an und ermöglicht Ihnen die Helligkeitseinstellung. Wenn Sie zu den Einstellungen gehen, können Sie jeden Parameter der Lampe konfigurieren, einschließlich des Alarmzeitplans, der maximalen Audiolautstärke usw.
Screensaver. Renders Game of Life auf dem Bildschirm nach einiger Zeit der Inaktivität.
Früher gab es mehr als das, aber andere Dinge schienen nutzlos zu sein.
Installation
Ich habe alles manuell auf Raspbian installiert und kann jetzt sagen: Wiederhole meine Fehler nicht. Verwenden Sie den KivyPie, es ist alles vorinstalliert.
Folgen Sie ansonsten einfach der Installationsanleitung im Code-Repository.
Schritt 6: Viel Spaß
Ich persönlich bin mit dem Gerät zufrieden. Ich benutze es tagsüber als Hauptbeleuchtung zu Hause und es lässt mich morgens aufwachen, es ist erstaunlich.
Ich weiß, dass die Anweisungen nicht sehr detailliert und beschreibend sind. Wenn jemand das gleiche macht und Probleme hat - ich helfe gerne!