Inhoudsopgave:

Heldere regelbare zonsopganglamp - Ajarnpa
Heldere regelbare zonsopganglamp - Ajarnpa

Video: Heldere regelbare zonsopganglamp - Ajarnpa

Video: Heldere regelbare zonsopganglamp - Ajarnpa
Video: Светодиодная лампочка RGB+CCT под E27, с управлением по zigbee - обзор, интеграция в Home Assistant 2024, Juli-
Anonim
Heldere regelbare zonsopganglamp
Heldere regelbare zonsopganglamp
Heldere regelbare zonsopganglamp
Heldere regelbare zonsopganglamp

Ben je ooit om 7 uur wakker geworden, de gebruikelijke tijd die je nodig hebt om wakker te worden voor je werk, en bevond je je in het donker? De winter is een vreselijke tijd, toch? Je moet midden in de nacht wakker worden (waarom is het anders zo donker?), jezelf van het bed rukken en je halfbewuste lichaam naar de douche sturen.

Dit project heeft tot doel een van de problemen op te lossen - ochtendduisternis.

Er zijn veel goedkope zonsopganglampen in de buurt, maar ze hebben allemaal een laag vermogen en zijn bleek. Ze zijn meer een nachtlampje, dat je beter zou moeten laten slapen. Helemaal niet wat ik wil.

Tegelijkertijd wordt u door het felle licht aan te zetten meteen wakker, maar niet zacht genoeg. Wat ik wil is een combinatie van beide benaderingen - oplichten met een lage helderheid, langzaam op volle snelheid komen, dan gaat er een echt alarm af en ben je niet meer zo slaperig. Laten we er een beetje een vogelgezang aan toevoegen, en je wordt elke ochtend wakker in een hemel!

Stap 1: Lamparray

Lampreeks
Lampreeks
Lampreeks
Lampreeks

Allereerst hebben we de lamp zelf nodig. Ik heb een vrij grote kamer met witte muren en plafond, dus ik ging voor 7 GU10 LED-lampen, ongeveer 6W elk, meer dan 40W pure kracht! Dat is genoeg om je het gevoel te geven dat het al dag is. Het kan ook overdag als gewone kamerverlichting worden gebruikt.

Het maakt eigenlijk niet uit hoe je hem in elkaar zet, welke lampen je met welke stopcontacten gebruikt. Alles wat telt - dit moeten dimbare lampen zijn!

In mijn geval heb ik een houten plank met 7 GU10-aansluitingen, allemaal met elkaar verbonden. Ik zal het later in een plastic doos doen.

Stap 2: Dimtheorie

Dimtheorie
Dimtheorie

In theorie is er geen verschil tussen theorie en praktijk. In de praktijk is er.

Een dimmer bedienen vanaf ESP32/Arduino bleek niet zo eenvoudig als ik me had voorgesteld. Ik heb een van RobotDyn AC Light Dimmer-modules. De fabrikant stelt daarvoor een bibliotheek voor. Het werkt niet op ESP32 (en het is echt moeilijk aan te passen, omdat het veel ATMega-specifieke registertoegang op laag niveau gebruikt), werkt min of meer op Arduino Nano, en geeft een vreselijk flikkerend beeld bij lage tot gemiddelde helderheid. Daarom heb ik wat tijd besteed aan het onderzoeken hoe het allemaal werkt en mijn eigen weg te gaan.

Een beetje een theorie

De gekozen dimmermodule maakt gebruik van een zeer populaire TRIAC: BTA16. Er zijn veel artikelen over. Ik zal proberen het hier samen te vatten.

TRIAC is een module die een positieve of negatieve ingangsspanning naar de uitgang kan sturen of kan blokkeren. Standaard blokkeert het alles. Om het te openen, moeten we het een hoog signaal geven op de poortingang voor 100 ons. Dan blijft het open totdat de stroom tot nul daalt, wat gebeurt wanneer een ingangsspanning het teken verandert en een nulspanning overschrijdt. Dan moeten we in de volgende cyclus nog eens 100 ons pulseren, enzovoort. Door te kiezen wanneer we een puls willen geven, regelen we de helderheid: doe het helemaal aan het begin en het zal bijna 100% krachtoverbrenging zijn. Doe het later en het wordt gedimd. Bekijk het bovenstaande diagram en leg het uit.

Om pulsen te genereren in hetzelfde punt van de cyclus, moeten we precies weten wanneer het begint. Daarom heeft de dimmermodule een ingebouwde Zero-Cross-detector. Hij wekt gewoon een signaal op (dat we zullen opvangen als een hardware-interrupt in Arduino) elke keer dat de spanning nul overschrijdt.

Stap 3: Dimmen Oefening

Dimmen Oefening
Dimmen Oefening

Ja, zo zou je wakker worden, als je lamp niet dimt en alle 40W stroom in je slaperige ogen stopt.

Gebruikelijke problemen

Er zijn meerdere problemen die we moeten aanpakken.

Flikkerend.

De timing van de microcontroller moet heel precies zijn bij het in- en uitschakelen van de poortuitgang. De bibliotheek die RobotDyn voorstelt, heeft elke 100us een timer-interrupt en verandert het gate-niveau alleen op timer. Het betekent dat het +/- 50 microseconden kan afwijken van de optimale waarde. Het geeft een goed resultaat bij een hoge helderheid, maar flikkert veel bij een lage helderheid. Ook als de microcontroller veel dingen doet, vermindert dit de tijdnauwkeurigheid, dus idealiter zou een speciale microcontroller voor de dimmer moeten worden gebruikt.

Minimale helderheid. LED's hebben een ingebouwde stroomomvormer, die gewoon weigert te werken met onvoldoende stroom. Mijn lampen leken prima te werken vanaf 10-11%.

Zelfs met deze waarde weigerden sommige van mijn lampen op te lichten bij het starten. Ook als je later de helderheid verhoogt, blijven ze donker. Dat is de reden waarom, wanneer we van de UIT-status naar een positieve helderheid gaan, we beginnen met een opwarmperiode van 5 cycli, wanneer we de lampen het volledige vermogen geven. Daarna gaan we verder met de gewenste helderheid. Het is bijna onmerkbaar, maar het helpt echt.

50/60 Hz netfrequentie. Je moet weten hoeveel je moet wachten voor de volgende nul. Het is vrij eenvoudig - we kijken alleen naar het tijdsverschil tussen twee laatste interrupts.

Geleidelijke verandering van helderheid. ESP32 is behoorlijk traag, het duurt 0,5 sec om een triviaal HTTP- of zelfs WebSocket-verzoek te verwerken, dus verwacht geen soepele helderheidsovergang, het moet op de een of andere manier op het dimmerniveau worden geïmplementeerd. Dat is de reden waarom, wanneer het een nieuwe helderheid ontvangt van een seriële poort, het gewoon het doel stelt en het dan langzaam nadert.

De oplossing

Hier is mijn eenvoudige Arduino-code voor de dimmer. Het wacht op een commando (één byte met de nieuwe helderheid) van de seriële ingang, handelt Zero-Cross-interrupts af, bestuurt de TRIAC en handelt alle bovenstaande problemen af.

Stap 4: Lampcontroller (ESP32)

Lampcontroller (ESP32)
Lampcontroller (ESP32)
Lampcontroller (ESP32)
Lampcontroller (ESP32)

Hier is het verbindingsschema van alle componenten die ik heb. Het ESP32-bord is heel anders dan wat ik gebruik (Heltec), dus de gekozen pinnen zien er een beetje raar uit, maar het zou nog steeds goed moeten werken. Voel je vrij om verschillende pinnen te gebruiken in je project.

Hier is de code die alles regelt. Het is vrij rechttoe rechtaan.

De belangrijkste kenmerken

Bestuurbaar. De lamp maakt verbinding met wifi, start een WebSocket-server op poort 81, wacht op opdrachten. Opdrachtformaat is

Op dit moment worden slechts twee commando's ondersteund: "set_brightness" en "update_settings", die… behoorlijk zelfbeschrijvend zijn.

Tijd krijgen van NTP. Ik wil de dingen niet te ingewikkeld maken en een realtime klok aan het schema toevoegen. We hebben internettoegang, wat betekent dat we de realtime van een NTP-server kunnen krijgen en vervolgens de huidige tijd kunnen bijhouden met behulp van de systeemtimers.

Zonsopgangalarm. U kunt één alarm instellen. Wat het eigenlijk doet: begint met de minimale helderheid en gaat geleidelijk over 10 minuten naar de volledige helderheid. Daarna blijft het een paar uur aan. Daarna wordt het geleidelijk uitgeschakeld gedurende 60 seconden.

Alle bovenstaande parameters zijn configureerbaar.

Vogels zingen. DFPlayer mini wordt gebruikt om muziek af te spelen. Er zijn veel handleidingen voor, maar in wezen hoeft u alleen maar een MicroSD-kaart aan te sluiten, geformatteerd in FAT32, met één bestand genaamd 0001.mp3. Dit bestand kan alles hebben wat je maar wilt, in mijn geval is het 15 minuten zingen van vogels (het wordt in een lus gezet), en het maakt mijn ochtend geweldig. Merk op dat er een enorme condensator op de stroom is en 1 kOhm-weerstanden op de seriële lijn tussen ESP32 en DFplayer - ze zijn optioneel, maar helpen de ruis te verminderen.

Opslaan van de instellingen in EEPROM. Alle instellingen worden in EEPROM geschreven en bij het opstarten geladen. Het maakt het mogelijk om de lamp met minimaal een alarmfunctie te gebruiken zonder dat er een controller is aangesloten.

Wat info naar het OLED-scherm weergeven. Mijn Heltec ESP32 heeft een ingebouwd SSD1306 128X64 I2C-scherm. Alle essentiële informatie wordt erop weergegeven. Ik weet het, de doos ziet er lelijk uit, ik heb zojuist wat dingen 3D-geprint en de gaten en ramen gesneden met een boor. Snel, vies, maar het werkt!

Stap 5: Configuratiescherm

Controlepaneel
Controlepaneel
Controlepaneel
Controlepaneel

Dat is het hart van het project. Een Raspberry Pi met een origineel 7 -scherm, met een Kivy-front-end.

Hier is de volledige broncode.

De eigenschappen

Geschreven in Python. Ik ben dol op Kivy, het is een Python-framework voor gebruikersinterfaces. Zeer eenvoudig, maar toch flexibel en efficiënt (gebruikt veel C-code binnenin voor hoge prestaties en hardwareversnelling).

Weer. Toon de huidige temperatuur en druk buiten. Als u een externe sensor aansluit - ook binnentemperatuur. Deze vraagt en analyseert ook de weersvoorspelling voor de volgende 12 uur en geeft een advies over de kans op regen.

SunriseLamp-controller. Een ander paneel geeft wat basisinformatie over het alarm weer en stelt u in staat de helderheid aan te passen. Als u naar de instellingen gaat, kunt u elke parameter van de lamp configureren, inclusief het alarmschema, max. audiovolume enzovoort.

Screensaver. Rendert Game of Life op het scherm na een periode van inactiviteit.

Vroeger waren er meer dan dat, maar andere dingen leken nutteloos.

Installatie

Ik heb alles handmatig op Raspbian geïnstalleerd en kan nu zeggen: herhaal mijn fouten niet. Gebruik de KivyPie, deze heeft alles voorgeïnstalleerd.

Afgezien daarvan volgt u gewoon de installatiehandleiding in de coderepository.

Stap 6: Geniet

Persoonlijk ben ik blij met het apparaat. Ik gebruik hem overdag als hoofdverlichting in huis en ik kan er 's ochtends mee wakker worden, het is geweldig.

Ik weet dat de instructies niet erg gedetailleerd en beschrijvend zijn. Als iemand hetzelfde maakt en problemen heeft, help ik graag!

Aanbevolen: