Innehållsförteckning:
Video: Wakeup Light: 7 steg (med bilder)
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
När jag skriver detta instruerbart är det mitten av vintern på norra halvklotet och det betyder korta dagar och långa nätter. Jag är van att gå upp kl 06:00 och på sommaren kommer solen att skina då. På vintern blir det dock ljust 09:00 om vi har turen att ha en dag som det inte är grumligt (vilket är … inte ofta).
För en tid sedan läste jag om ett”väckningsljus” från Philips som användes i Norge för att simulera en solig morgon. Jag köpte aldrig en, men jag fortsatte att tänka på att göra en för att göra en själv är roligare än att bara köpa den.
Tillbehör:
Tavelram "Ribba" 50 x 40 cm från IKEA
perforerad hårdplatta från järnaffär
STM8S103 utvecklingskort via Ebay eller andra
DS1307 Realtidsklocka (Mouser, Farnell, Conrad, etc)
32768 Hz klockkristall (Mouser, Farnell, Conrad, etc)
3V litium coincell + coincell hållare
BUZ11 eller IRLZ34N N-kanal MOSFET (3x)
BC549 (eller någon annan NPN -transistor)
så många vita, röda, blå, gröna, etc -lysdioder som du vill
några motstånd och kondensatorer (se schemat)
Powerbrick, 12V till 20V, 3A eller mer (t.ex. gammal bärbar dator)
Steg 1: Gör det (lite) lättare att gå upp
Tanken är att det är svårt att gå upp ur sängen på morgonen när det fortfarande är mörkt. Och om du bor nära eller till och med ovanför polcirkeln blir det mörkt väldigt länge. På platser som Tromsö i Norge kommer det inte att bli ljus alls där borta går solen ner halva november för att åter dyka upp halvvägs i januari.
Så vad Philips gjorde var att simulera solens uppgång.
Philips ökar långsamt ljusstyrkan på en lampa, som förmodligen är gjord med flera lysdioder men gömd bakom en enda diffusor. Deras tid från av till full ljusstyrka tar 30 minuter.
Philips väckningslampor är inte så dyra men den har bara en enda färg och den ser lite liten ut. Jag tror att jag kan göra det bättre.
Steg 2: Mer färg
Mitt väckningsljus använder fyra färger, vitt, rött, blått och grönt. Först kommer de vita lysdioderna, sedan kommer de röda, och sist några blå och gröna lysdioder. Min tanke var att jag inte bara kunde simulera ökningen av ljusstyrkan utan även förskjutningen av morgonljusets färg genom att börja med lite vitt, lägga till rött lite senare och blanda i blått och grönt till slut. Jag är inte säker på att det faktiskt liknar det verkliga morgonljuset, men jag gillar den färgglada skärmen som den är nu.
Min är också snabbare än Philips väckningslampa, i stället för Philips -ljusets 30 minuter går min från 0% till 100% ljusstyrka på mindre än 5 minuter. Så min sol går upp mycket snabbare.
NOTERA:
Det är MYCKET svårt att göra bilder av mitt väckningsljus, jag försökte med flera kameror och smartphones men alla bilder jag gjorde gör inte riktigt rättvisa.
Steg 3: Sigmoidkurva, flimmer och "upplösning"
Naturligtvis ville jag göra ljusningen så smidig som möjligt. Mänskliga ögon är logaritmiska i känslighet, vilket betyder att i totalt mörker är de mer känsliga än de är i fullt dagsljus. En mycket liten ökning av ljusstyrkan när nivåerna är låga "känns" samma sak som ett mycket större steg när ljuset är på säg 40% ljusstyrka. För att uppnå detta använde jag en speciell kurva som kallas Sigmoid (eller S-kurva) denna kurva börjar som en exponentiell kurva som halvvägs planeras av igen. Jag fann att det är ett mycket trevligt sätt att öka (och minska) intensiteten.
Klockfrekvensen för mikrokontrollern (och tidtagarna) är 16 MHzoch jag använder den maximala upplösningen på TIMER2 (65536) för att skapa tre pulsbreddsignaler (PWM). Därför kommer pulser 16000000 /65536 = 244 gånger per sekund. Det är långt över gränsen för ögonen för att se flimmer.
Så lysdioderna matas med en PWM -signal som görs med denna 16 bitimer av STM8S103 mikrokontroller. Minst denna PWM -signal kan vara PÅ är 1 pulslängd och de återstående 65535 pulslängderna av.
Så de lysdioder som är anslutna till den PM-signalen kommer då att vara PÅ 1/65536: e av tiden: 0,0015%
Maximalt är de PÅ 65536/65536: e av tiden: 100%.
Steg 4: Elektronik
Mikrokontroller
Hjärnan i väckningsljuset är en STM8S103 mikrokontroller från STMicroelectronics. Jag gillar att använda delar som har tillräckligt med kapacitet för ett jobb. För en enkel uppgift som detta är det inte nödvändigt att använda STM32 mikrokontroller (mina andra favoriter) men en Arduino UNO var inte tillräckligt eftersom jag ville ha tre PWM -signaler med 16 bitars upplösning och det finns ingen timer med tre utgångskanaler på en UNO.
Riktig tids klocka
Tiden läses från en DS1307 realtidsklocka som fungerar med en kristall på 32768 Hz och har ett 3V reservbatteri.
Inställning av aktuell tid, dag och väckningstid görs med två knappar och visas med en 16 x 2 LCD -teckenvisning. För att mitt sovrum ska vara riktigt mörkt på natten, tänds bakgrundsbelysningen på LCD -skärmen endast när lysdioderna är ljusare än bakgrundsbelysningen och när du ställer in tid, dag och väckningstid.
Kraft
Strömmen kommer från en gammal bärbar strömförsörjning, min producerar 12V och kan leverera 3A. När du har en annan strömförsörjning kan det vara nödvändigt att justera motstånden i serie med ledsträngarna. (Se nedan)
Lysdioder
Lysdioderna är anslutna till 12V -matningen, resten av elektronikverket på 5V är gjord med en 7805 linjär regulator. I schemat står det att jag använder en TO220 -regulator, som inte behövs eftersom mikrokontrollern, displayen och realtidsklockan använder bara några milliampere. Min klocka använder en mindre TO92 -version av 7805 som kan leverera 150mA.
Byte av led-strängar görs med N-kanal MOSFET. Återigen, i schemat visar den andra enheter än jag använde. Jag råkade ha exakt tre mycket gamla BUZ11 MOSFET istället för de nyare IRLZ34N MOSFET. De fungerar bra
Naturligtvis kan du sätta i så många lysdioder som du vill, så länge MOSFET: erna och strömförsörjningen kan hantera strömmen. I schemat har jag bara ritat en sträng av valfri färg, i verkligheten finns det flera varje färg parallellt med de andra strängarna i den färgen.
Steg 5: Motstånd (för lysdioderna)
Om motstånden i ledsträngarna. Vita och blå lysdioder brukar ha en spänning på 2,8V över sig när de har full ljusstyrka.
Röda lysdioder har bara 1,8V, mina gröna lysdioder har 2V över dem vid full ljusstyrka.
En annan sak är att deras fulla ljusstyrka inte är densamma. Så det tog lite experimenterande att göra dem lika ljusa (i mina ögon). Genom att göra lysdioderna lika ljusa vid full ljusstyrka kommer de också att se lika ljusa ut på lägre nivåer, pulsbreddssignalen slår alltid på dem vid full ljusstyrka men under längre och kortare tider tar dina ögon hand om medelvärdet.
Börja med en beräkning som denna. Strömförsörjningen levererar (i mitt fall) 12V.
Fyra vita lysdioder i serie behöver 4 x 2,8V = 11,2V, detta lämnar 0,8V för motståndet.
Jag hade upptäckt att de var tillräckligt ljusa vid 30mA så att motståndet måste vara:
0,8 / 0,03 = 26,6 ohm. I schemat ser du att jag satte in ett 22 ohm motstånd, vilket gjorde lysdioderna lite ljusare.
De blå lysdioderna var för ljusa vid 30mA, men jämfört med de vita lysdioderna vid 15 mA, hade de också cirka 2,8V över dem vid 15mA så beräkningen var 4 x 2,8V = 11,2V och lämnade igen 0,8V
0,8 / 0,015 = 53,3 ohm så jag valde ett 47 ohm motstånd.
Mina röda lysdioder behöver också cirka 15 mA för att vara lika ljusa som de andra, men de har bara 1,8V över dem vid den strömmen. Så jag kunde sätta mer i serier och fortfarande ha lite "utrymme" för motståndet.
Sex röda lysdioder gav mig 6 x 1,8 = 10,8V, så över motståndet var 12 - 10,8 = 1,2V
1.2 / 0.015 = 80 ohm, jag gjorde det till 68 ohm. Precis som de andra lite ljusare.
De gröna lysdioderna jag använde är lika ljusa som de andra vid cirka 20mA. Jag behövde bara några (precis som de blå) och jag valde att sätta fyra i serie. Vid 20mA har de 2, 1V över sig, vilket ger 3 x 2.1 = 8.4V
12 - 8,4 = 3,6V för motståndet. Och 3,6 / 0,02 = 180 ohm.
Om du bygger denna väckningslampa är det osannolikt att du har samma strömförsörjning, du måste justera antalet lysdioder i serie och de motstånd som behövs.
Ett litet exempel. Säg att du har ett nätaggregat som ger 20V. Jag skulle välja att ställa in 6 blå (och vita) lysdioder i serie, 6 x 3V = 18V så 2V för motståndet. Och låt oss säga att du gillar ljusstyrkan vid 40mA. Motståndet måste då vara 2V / 0,04 = 50 ohm, ett 47 ohm motstånd blir bra.
Jag rekommenderar att inte gå högre än 50mA med vanliga (5 mm) lysdioder. Vissa klarar mer, men jag gillar att vara på den säkra sidan.
Steg 6: Programvara
All kod kan laddas ner från:
gitlab.com/WilkoL/wakeup_light_stm8s103
håll källkoden öppen, bredvid resten av denna instruerbara om du vill följa förklaringen.
Huvud. C
Main.c ställer först in klockan, timern och andra kringutrustning. De flesta av "drivrutinerna" skrev jag med Standardbiblioteket från STMicroelectronics och om du har några frågor om dem, skriv det i en kommentar under instruktionsboken.
Eeprom
Jag lämnade "texten för att visa" -koden som jag använde för att lägga in texter i eeprom i STM8S103 som kommentarer. Jag var inte säker på att jag hade tillräckligt med flashminne för all min kod så jag försökte lägga in så mycket som möjligt i eeprom för att ha all blixt för programmet. Till slut visade det sig inte nödvändigt och jag flyttade texten till blixt. Men jag lämnade det som kommenterad text i main.c -filen. Det är trevligt att ha det när jag behöver göra något liknande senare (i ett annat projekt)
Eeprom används fortfarande, men bara för att lagra väckningstiden.
En gång i sekunden
Efter installation av kringutrustning kontrollerar koden om en sekund har gått (gjort med en timer).
Meny
Om så är fallet kontrollerar det om en knapp har tryckts in. Om så är fallet kommer den in i menyn där du kan ställa in aktuell tid, veckodag och väckningstid. Kom ihåg att det tar cirka 5 minuter att gå från av till full ljusstyrka, så ställ in väckningstiden lite tidigare.
Uppvakningstiden lagras i eeprom så att den även efter ett strömavbrott "vet" när den ska väcka dig. Den aktuella tiden lagras naturligtvis i realtidsklockan.
Jämförelseström och väckningstid
När ingen knapp tryckts kontrollerar den aktuell tid och jämför den med väckningstid och vardag. Jag vill inte att det ska väcka mig i helgen:-)
För det mesta behöver inget göras så det ställer variabeln "lysdioder" till AV annars till PÅ. Denna variabel kontrolleras tillsammans med “change_intensity” -signalen, som också kommer från en timer och är aktiv 244 gånger per sekund. Så när variabeln "leds" är PÅ ökas intensiteten 244 gånger per sekund och när den är AV minskar 244 gånger per sekund. Men ökningen går i enstaka steg där minskningen är i steg om 16, vilket betyder att när väckningslampan förhoppningsvis har gjort sitt jobb, stängs den av 16 gånger snabbare men ändå smidigt.
Smidighet och OUT OF MEMORY
Jämnheten kommer från beräkningen av Sigmoid -kurvan. Beräkningen är ganska enkel men den måste göras i variabler med flytande punkter (dubblar) på grund av funktionen exp (), se filen sigmoid.c.
I standardsituationen har Cosmic compiler / linker inte stöd för variabler med flytande punkter. Det är enkelt att slå på det (när du väl har hittat det) men det kommer med en ökning av kodstorleken. Denna ökning var för mycket för att koden skulle passa i flashminnet i kombination med sprintf () -funktionen. Och den funktionen behövs för att konvertera nummer till text för displayen.
Itoa ()
För att åtgärda detta problem skapade jag itoa () -funktionen. Detta är en heltal till Ascii -funktion som är ganska vanlig, men inte ingår i STMicroelectronics standardbibliotek, inte heller med de kosmiska biblioteken.
Steg 7: IKEA (vad skulle vi göra utan dem)
Bilden från är köpt från IKEA. Det är en Ribba -ram på 50 x 40 cm. Denna ram är ganska tjock och det gör den perfekt för att gömma elektronik bakom den. Istället för en affisch eller bild lägger jag i en bit perforerad hårdplatta. Du kan köpa den i järnaffären där den ibland kallas "sängbräda". Den har små hål i den som gjorde den idealisk för att sätta i lysdioder. Tyvärr var hålen i min bräda lite större än 5 mm så jag var tvungen att använda varmt lim för att "montera" lysdioderna.
Jag gjorde ett rektangulärt hål i mitten av hårddisken för 16x2 displayen och tryckte in den. Kretskortet med all elektronik hänger på den här displayen, den är inte monterad på något annat.
Den perforerade hårdplattan var spraymålad svart och men bakom mattan. Jag borrade två hål i ramen för knapparna för att ställa in tid och datum, eftersom ramen är ganska tjock måste jag bredda hålen på insidan av ramen för att knapparna skulle sticka ut tillräckligt.