Inhoudsopgave:

Wakeup Light: 7 stappen (met afbeeldingen)
Wakeup Light: 7 stappen (met afbeeldingen)

Video: Wakeup Light: 7 stappen (met afbeeldingen)

Video: Wakeup Light: 7 stappen (met afbeeldingen)
Video: PHILIPS WAKE UP LIGHT GEBRUIKT VOOR 30 DAGEN EN DIT GEBEURDE ER! 2024, November
Anonim
Wake-up licht
Wake-up licht

Terwijl ik dit instructable schrijf, is het midden in de winter op het noordelijk halfrond en dat betekent korte dagen en lange nachten. Ik ben gewend om 06:00 uur op te staan en in de zomer schijnt dan de zon. In de winter wordt het echter om 09:00 licht als we geluk hebben op een dag dat het niet bewolkt is (wat…niet vaak is).

Enige tijd geleden las ik over een “wakeup light” van Philips dat in Noorwegen werd gebruikt om een zonnige ochtend te simuleren. Ik heb er nooit een gekocht, maar ik dacht er steeds aan om er een te maken omdat het leuker is om er zelf een te maken dan alleen maar te kopen.

Benodigdheden:

Fotolijst "Ribba" 50 x 40 cm van IKEA

geperforeerd hardboard van ijzerhandel

STM8S103 ontwikkelbord via Ebay of anderen

DS1307 Realtimeklok (Mouser, Farnell, Conrad, enz.)

32768 Hz horlogekristal (Mouser, Farnell, Conrad, etc)

3V lithium knoopcel + knoopcel houder

BUZ11 of IRLZ34N N-kanaal MOSFET's (3x)

BC549 (of een andere NPN-transistor)

zoveel witte, rode, blauwe, groene, etc leds als je wilt

enkele weerstanden en condensatoren (zie schema)

Powerbrick, 12V tot 20V, 3A of meer (bijv. oude laptop voeding)

Stap 1: Het (een beetje) gemakkelijker maken om op te staan

Het (een beetje) gemakkelijker maken om op te staan
Het (een beetje) gemakkelijker maken om op te staan

Het idee is dat het moeilijk is om 's ochtends uit bed te komen als het nog donker is. En als je dichtbij of zelfs boven de poolcirkel woont, zal het erg lang donker zijn. Op plaatsen als Tromsö in Noorwegen wordt het helemaal niet licht, daar de zon half november ondergaat om half januari weer te verschijnen.

Dus wat Philips deed, was het opkomen van de zon simuleren.

Philips verhoogt langzaam de helderheid van een lamp, die waarschijnlijk is gemaakt met meerdere leds maar verborgen is achter een enkele diffuser. Hun tijd van uit tot volledige helderheid duurt 30 minuten.

De Philips wake-up lights zijn niet zo duur, maar ze hebben maar één kleur en zien er een beetje klein uit. Ik denk dat ik het beter kan.

Stap 2: Meer kleur

Meer kleur
Meer kleur

Mijn wake-up light gebruikt vier kleuren, wit, rood, blauw en groen. Eerst de witte leds, dan de rode, en als laatste een paar blauwe en groene leds. Mijn idee was dat ik niet alleen de toename van de helderheid kon simuleren, maar ook de verschuiving van de kleur van het ochtendlicht, door te beginnen met een beetje wit, wat later rood toe te voegen en uiteindelijk blauw en groen te mengen. Ik weet niet zeker of het echt lijkt op echt ochtendlicht, maar ik hou van het kleurrijke scherm zoals het nu is.

De mijne is ook sneller dan de Philips wake-up light, in plaats van de 30 minuten van de Philips light, de mijne gaat van 0% naar 100% helderheid in minder dan 5 minuten. Dus mijn zon komt veel sneller op.

OPMERKING:

Het is ZEER moeilijk om foto's te maken van mijn wake-up light, ik heb het met verschillende camera's en smartphones geprobeerd, maar alle foto's die ik heb gemaakt, doen niet het echte werk.

Stap 3: Sigmoid-curve, flikkering en "resolutie"

Sigmoid-curve, flikkering en
Sigmoid-curve, flikkering en

Natuurlijk wilde ik de verheldering zo soepel mogelijk laten verlopen. Menselijke ogen zijn logaritmisch in gevoeligheid, wat betekent dat ze in totale duisternis gevoeliger zijn dan in het volle daglicht. Een zeer kleine toename in helderheid wanneer de niveaus laag zijn "voelt" hetzelfde als een veel grotere stap wanneer het licht bijvoorbeeld 40% helderheid heeft. Om dit te bereiken heb ik een speciale curve gebruikt genaamd Sigmoid (of S-curve) deze curve begint als een exponentiële curve die halverwege weer afvlakt. Ik vond dat het een hele fijne manier is om de intensiteit te verhogen (en te verlagen).

De klokfrequentie van de microcontroller (en de timers) is 16 MHz en ik gebruik de maximale resolutie van TIMER2 (65536) om drie pulsbreedtesignalen (PWM) te creëren. Daarom komen pulsen 16000000 / 65536 = 244 keer per seconde. Dat is ver boven de limiet van de ogen om flikkeringen te zien.

De leds worden dus gevoed met een PWM signaal dat gemaakt is met deze 16 bittimer van de STM8S103 microcontroller. Dit PWM-signaal kan minimaal 1 pulslengte lang zijn en de resterende 65535 pulslengtes uit.

Dus de leds die op dat PM-signaal zijn aangesloten, staan dan 1/65536-ste van de tijd AAN: 0,0015%

Ze zijn maximaal 65536/65536-ste van de tijd: 100%.

Stap 4: Elektronica

Elektronica
Elektronica
Elektronica
Elektronica
Elektronica
Elektronica
Elektronica
Elektronica

Microcontroller

Het brein van de wake-up light is een STM8S103-microcontroller van STMicroelectronics. Ik gebruik graag onderdelen die net genoeg capaciteit hebben voor een klus. Voor een eenvoudige taak als deze is het niet nodig om STM32-microcontrollers te gebruiken (mijn andere favorieten), maar een Arduino UNO was niet genoeg, want ik wilde drie PWM-signalen met een resolutie van 16 bits en er is geen timer met drie uitgangskanalen op een UNO.

Realtime klok

De tijd wordt afgelezen van een DS1307 realtime klok die werkt met een 32768 Hz kristal en een 3V back-up batterij heeft.

Het instellen van de huidige tijd, dag en de wektijd gebeurt met twee knoppen en wordt weergegeven op een 16 x 2 LCD-tekendisplay. Om mijn slaapkamer 's nachts echt donker te houden, wordt de achtergrondverlichting van het LCD-scherm alleen ingeschakeld wanneer de leds helderder zijn dan de achtergrondverlichting en wanneer u de tijd, dag en wektijd instelt.

Stroom

Stroom komt van een oude laptopvoeding, de mijne produceert 12V en kan 3A leveren. Wanneer je een andere voeding hebt kan het nodig zijn om de weerstanden in serie met de led-strings af te stellen. (Zie onder)

Leds

De leds zijn aangesloten op de 12V voeding, de rest van de elektronica werkt op 5V gemaakt met een 7805 lineaire regelaar. In het schema staat dat ik een TO220-regelaar gebruik, dat is niet nodig omdat de microcontroller, het display en de realtimeklok slechts een paar milliampère gebruiken. Mijn klok gebruikt een kleinere TO92-versie van de 7805 die 150mA kan leveren.

Het schakelen van de led-strings gebeurt met N-kanaals MOSFET's. Nogmaals, in het schema worden andere apparaten weergegeven dan ik gebruikte. Ik had toevallig precies drie zeer oude BUZ11 MOSFET's in plaats van de nieuwere IRLZ34N MOSFET's. Ze werken prima

Je kunt natuurlijk zoveel leds plaatsen als je wilt, zolang de MOSFET's en de voeding de stroom maar aankunnen. In het schema heb ik slechts één string van elke kleur getekend, in werkelijkheid zijn er meerdere elke kleur parallel aan de andere strings van die kleur.

Stap 5: Weerstanden (voor de Leds)

Weerstanden (voor de Leds)
Weerstanden (voor de Leds)

Over de weerstanden in de led strings. Witte en blauwe leds hebben meestal een spanning van 2,8V als ze op volle sterkte staan.

Rode leds hebben slechts 1.8V, mijn groene leds hebben er 2V over op volle sterkte.

Een ander ding is dat hun volledige helderheid niet hetzelfde is. Dus het kostte wat experimenteren om ze even helder te maken (in mijn ogen). Door de leds op volle sterkte even fel te maken, zien ze er ook op lagere niveaus even fel uit, het pulsbreedtesignaal schakelt ze altijd op volle sterkte aan maar gedurende langere en kortere tijden zorgen je ogen voor de middeling.

Begin met een berekening als deze. De voeding levert (in mijn geval) 12V.

Vier witte leds in serie hebben 4 x 2,8V = 11,2V nodig, er blijft dan 0,8V over voor de weerstand.

Ik had ontdekt dat ze helder genoeg waren bij 30mA, dus de weerstand moet zijn:

0,8 / 0,03 = 26,6 ohm. In het schema zie je dat ik een weerstand van 22 ohm heb geplaatst, waardoor de leds net wat feller zijn.

De blauwe leds waren te fel bij 30mA, maar vergeleken met de witte leds van 15mA hadden ze ook ongeveer 2,8V bij 15mA dus de berekening was 4 x 2,8V = 11,2V en er bleef 0,8V over

0.8 / 0.015 = 53,3 ohm dus ik koos voor een 47 ohm weerstand.

Mijn rode leds hebben ook zo'n 15 mA nodig om even fel te zijn als de andere, maar die hebben bij die stroom maar 1.8V. Dus ik zou meer in serie kunnen zetten en nog wat "ruimte" hebben voor de weerstand.

Zes rode leds gaven me 6 x 1.8 = 10.8V, dus over de weerstand was 12 – 10.8 = 1.2V

1.2 / 0.015 = 80 ohm, ik heb het tot 68 ohm gemaakt. Net als de anderen, een klein beetje helderder.

De groene leds die ik heb gebruikt zijn net zo helder als de andere met ongeveer 20mA. Ik had er maar een paar nodig (net als de blauwe) en ik koos ervoor om er vier in serie te zetten. Bij 20mA hebben ze 2, 1V erover, wat 3 x 2,1 = 8,4V. geeft

12 – 8,4 = 3,6V voor de weerstand. En 3,6 / 0,02 = 180 ohm.

Als je deze wakeup light bouwt is het onwaarschijnlijk dat je dezelfde voeding hebt, je zult het aantal leds in serie en de benodigde weerstanden moeten aanpassen.

Een klein voorbeeld. Stel dat je een voeding hebt die 20V geeft. Ik zou ervoor kiezen om 6 blauwe (en witte) leds in serie te zetten, 6 x 3V = 18V dus 2V voor de weerstand. En laten we zeggen dat je de helderheid van 40mA prettig vindt. De weerstand moet dan 2V / 0,04 = 50 ohm zijn, een weerstand van 47 ohm is prima.

Ik adviseer om met gewone (5mm) leds niet hoger dan 50mA te gaan. Sommigen kunnen meer aan, maar ik hou het graag aan de veilige kant.

Stap 6: Software

Alle code is te downloaden van:

gitlab.com/WilkoL/wakeup_light_stm8s103

houd de broncode open, naast de rest van dit instructable als je de uitleg wilt volgen.

hoofd.c

Main.c stelt eerst de klok, timers en andere randapparatuur in. De meeste "stuurprogramma's" die ik heb geschreven met behulp van de standaardbibliotheek van STMicroelectronics en als je er vragen over hebt, schrijf deze dan in een opmerking onder de instructable.

eeprom

Ik liet de "tekst om weer te geven" code die ik gebruikte om teksten in de eeprom van de STM8S103 als commentaar te plaatsen. Ik wist niet zeker of ik genoeg flash-geheugen had voor al mijn code, dus ik probeerde zoveel mogelijk in eeprom te stoppen om alle flash voor het programma te hebben. Dat bleek uiteindelijk niet nodig en ik heb de tekst naar flash verplaatst. Maar ik liet het als becommentarieerde tekst in het main.c-bestand. Het is leuk om het te hebben, als ik later iets soortgelijks moet doen (in een ander project)

De eeprom wordt nog steeds gebruikt, maar alleen voor het opslaan van de wektijd.

Eens per seconde

Na het instellen van de randapparatuur controleert de code of er een seconde is verstreken (gedaan met een timer).

Menu

Als dat het geval is, controleert het of er een knop is ingedrukt, zo ja, dan komt het in het menu waar u de huidige tijd, de dag van de week en de wektijd kunt instellen. Houd er rekening mee dat het ongeveer 5 minuten duurt om van uit naar volledige helderheid te gaan, dus stel de wektijd iets eerder in.

De wektijd wordt opgeslagen in eeprom, zodat het zelfs na een stroomstoring zal "weten" wanneer het u moet wekken. De huidige tijd wordt natuurlijk opgeslagen in de realtime klok.

Vergelijking huidige & wektijd

Als er geen knop is ingedrukt, wordt de huidige tijd gecontroleerd en vergeleken met de wektijd en de weekdag. Ik wil niet dat hij me wakker maakt in het weekend:-)

Meestal hoeft er niets te worden gedaan, dus zet het de variabele "leds" op UIT, anders op AAN. Deze variabele wordt gecontroleerd samen met het signaal "change_intensity", dat ook afkomstig is van een timer en 244 keer per seconde actief is. Dus wanneer de "leds"-variabele AAN is, wordt de intensiteit 244 keer per seconde verhoogd en wanneer deze UIT is, wordt deze 244 keer per seconde verlaagd. Maar de toename gaat in enkele stappen, waarbij de afname in stappen van 16 is, wat betekent dat wanneer het wake-uplicht hopelijk zijn werk heeft gedaan, het 16 keer sneller maar nog steeds soepel wordt uitgeschakeld.

Gladheid en GEEN GEHEUGEN

De gladheid komt van de Sigmoid-curveberekening. De berekening is vrij eenvoudig, maar het moet worden gedaan in variabelen met drijvende komma (doubles) vanwege de functie exp(), zie het bestand sigmoid.c.

In de standaard situatie heeft de Cosmic compiler/linker geen ondersteuning voor floating point variabelen. Het inschakelen is eenvoudig (als je het eenmaal hebt gevonden), maar het wordt geleverd met een grotere codegrootte. Deze toename was te groot om de code in het flashgeheugen te laten passen in combinatie met de sprintf()-functie. En die functie is nodig om getallen om te zetten in tekst voor het display.

Itoa()

Om dit probleem te verhelpen, heb ik de functie itoa() gemaakt. Dit is een Integer To Ascii-functie die vrij algemeen is, maar niet wordt meegeleverd met de standaardbibliotheek van STMicroelectronics, noch met de Cosmic-bibliotheken.

Stap 7: IKEA (wat zouden we doen zonder hen)

IKEA (wat zouden we doen zonder hen)
IKEA (wat zouden we doen zonder hen)
IKEA (wat zouden we doen zonder hen)
IKEA (wat zouden we doen zonder hen)
IKEA (wat zouden we doen zonder hen)
IKEA (wat zouden we doen zonder hen)

De foto van is gekocht bij IKEA. Het is een Ribba lijst van 50 x 40cm. Dit frame is vrij dik en dat maakt het geweldig om elektronica erachter te verbergen. In plaats van een poster of foto heb ik een stuk geperforeerd hardboard erin gedaan. Je kunt het kopen bij de ijzerhandel waar het soms "bedbord" wordt genoemd. Er zitten kleine gaatjes in waardoor het ideaal is om leds in te plaatsen. Helaas waren de gaten in mijn bord iets groter dan 5 mm, dus ik moest heetlijm gebruiken om de leds te "monteren".

Ik maakte een rechthoekig gat in het midden van het harde bord voor het 16x2 display en drukte het erin. De print met alle elektronica hangt aan dit display, het is nergens anders op gemonteerd.

Het geperforeerde hardboard is zwart gespoten en wel achter de mat. Ik heb twee gaten in het frame geboord voor de knoppen om de tijd en datum in te stellen, omdat het frame vrij dik is, moest ik de gaten aan de binnenkant van het frame breder maken om de knoppen voldoende te laten uitsteken.

Aanbevolen: