Indholdsfortegnelse:

Wakeup Light: 7 trin (med billeder)
Wakeup Light: 7 trin (med billeder)

Video: Wakeup Light: 7 trin (med billeder)

Video: Wakeup Light: 7 trin (med billeder)
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, November
Anonim
Wakeup Light
Wakeup Light

Mens jeg skriver dette instruerbart, er det midt om vinteren på den nordlige halvkugle, og det betyder korte dage og lange nætter. Jeg er vant til at stå op kl. 06:00 og om sommeren vil solen skinne på det tidspunkt. Om vinteren lyser det dog kl. 09:00, hvis vi er heldige at have en dag, hvor det ikke er overskyet (hvilket er … ikke ofte).

For noget tid siden læste jeg om et “wakeup light” lavet af Philips, der blev brugt i Norge til at simulere en solrig morgen. Jeg har aldrig købt en, men jeg blev ved med at tænke på at lave en, fordi det er sjovere at lave en selv end bare at købe den.

Tilbehør:

Billedramme "Ribba" 50 x 40 cm fra IKEA

perforeret hardboard fra isenkræmmer

STM8S103 udviklingstavle via Ebay eller andre

DS1307 Realtidsur (Mouser, Farnell, Conrad osv.)

32768 Hz urkrystal (Mouser, Farnell, Conrad osv.)

3V lithium coincell + coincell holder

BUZ11 eller IRLZ34N N-kanal MOSFET'er (3x)

BC549 (eller enhver anden NPN -transistor)

så mange hvide, røde, blå, grønne, osv. lysdioder, som du vil

nogle modstande og kondensatorer (se skematisk)

Powerbrick, 12V til 20V, 3A eller mere (f.eks. Gammel strømforsyning til bærbar computer)

Trin 1: Gør det (lidt) lettere at stå op

Gør det (lidt) lettere at stå op
Gør det (lidt) lettere at stå op

Ideen er, at det er svært at komme ud af sengen om morgenen, når det stadig er mørkt. Og hvis du bor tæt på eller endda over polarcirklen, bliver det mørkt meget længe. På steder som Tromsö i Norge vil det slet ikke blive lyst, da der går solen ned halve november for kun at dukke op igen halvvejs i januar.

Så hvad Philips gjorde var at simulere solens stigning.

Philips øger langsomt lysstyrken på en lampe, som sandsynligvis er lavet med flere lysdioder, men skjult bag en enkelt diffusor. Deres tid fra slukket til fuld lysstyrke tager 30 minutter.

Philips vækningslamper er ikke så dyre, men den har kun en enkelt farve, og den ser lidt lille ud. Jeg tror, jeg kan gøre det bedre.

Trin 2: Mere farve

Mere farve
Mere farve

Mit wakeup -lys bruger fire farver, hvid, rød, blå og grøn. Kom først med de hvide lysdioder, derefter kommer de røde, og sidst et par blå og grønne lysdioder. Min idé var, at jeg ikke kun kunne simulere stigningen i lysstyrke, men også skiftet af morgenlysets farve ved at starte med en smule hvidt, tilføje rødt lidt senere og blande i blåt og grønt til sidst. Jeg er ikke sikker på, at det faktisk ligner det faktiske morgenlys, men jeg kan godt lide det farverige display, som det er nu.

Min er også hurtigere end Philips vågnelys, i stedet for Philips -lysets 30 minutter går min fra 0% til 100% lysstyrke på mindre end 5 minutter. Så min sol stiger meget hurtigere.

BEMÆRK:

Det er MEGET svært at lave billeder af mit wakeup light, jeg prøvede med flere kameraer og smartphones, men alle billeder jeg lavede, gør ikke den rigtige ting retfærdighed.

Trin 3: Sigmoid -kurve, flimring og "opløsning"

Sigmoid Curve, Flickering og
Sigmoid Curve, Flickering og

Selvfølgelig ville jeg gøre lysningen så glat som muligt. Menneskelige øjne er logaritmiske i følsomhed, hvilket betyder, at de i totalt mørke er mere følsomme, end de er i fuldt dagslys. En meget lille stigning i lysstyrke, når niveauerne er lave "føles" det samme som et meget større trin, når lyset er på f.eks. 40% lysstyrke. For at opnå dette brugte jeg en speciel kurve kaldet Sigmoid (eller S-kurve), denne kurve starter som en eksponentiel kurve, der halvvejs går ud igen. Jeg fandt ud af, at det er en meget flot måde at øge (og reducere) intensiteten.

Mikrofonens clockfrekvens (og timerne) er 16 MHzog jeg bruger den maksimale opløsning på TIMER2 (65536) til at oprette tre pulsbreddesignaler (PWM). Derfor kommer pulser 16000000 /65536 = 244 gange i sekundet. Det er langt over grænsen for øjnene for at se flimmer.

Så lysdioderne fodres med et PWM -signal, der er lavet med denne 16 bittimer af STM8S103 mikrokontroller. I det mindste kan dette PWM -signal være ON er 1 pulslængde og de resterende 65535 pulslængder slukket.

Så de lysdioder, der er forbundet til det PM-signal, vil derefter være TIL 1/65536-th af tiden: 0,0015%

På det maksimale er de ON 65536/65536-th af tiden: 100%.

Trin 4: Elektronik

Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik

Mikrokontroller

Hjernen i vækkelseslyset er en STM8S103 mikrokontroller fra STMicroelectronics. Jeg kan godt lide at bruge dele, der har lige nok kapaciteter til et job. For en simpel opgave som dette er det ikke nødvendigt at bruge STM32 mikrokontrollere (mine andre favoritter), men en Arduino UNO var ikke nok, da jeg ønskede tre PWM -signaler med 16 bit opløsning, og der er ingen timer med tre outputkanaler på en UNO.

Ur i realtid

Tiden læses fra et DS1307 real -time ur, der fungerer med en 32768 Hz krystal og har et 3V backup -batteri.

Indstilling af det aktuelle klokkeslæt, dag og vågningstid foretages med to knapper og vist med et 16 x 2 LCD -tegn. For at holde mit soveværelse virkelig mørkt om natten, tændes baggrundsbelysningen på LCD -displayet kun, når lysdioderne er lysere end baggrundsbelysningen, og når du indstiller tid, dag og vågningstid.

Strøm

Strøm kommer fra en gammel bærbar strømforsyning, min producerer 12V og kan levere 3A. Når du har en anden strømforsyning, kan det være nødvendigt at justere modstandene i serie med led-strengene. (Se nedenunder)

Leds

Lysdioderne er forbundet til 12V forsyningen, resten af elektronikværket på 5V lavet med en 7805 lineær regulator. I skematikken står der, at jeg bruger en TO220 -regulator, der ikke er nødvendig, da mikrokontrolleren, displayet og uret i realtid kun bruger et par milliampere. Mit ur bruger en mindre TO92 -version af 7805, der kan levere 150mA.

Skiftet af led-strengene sker med N-kanal MOSFET'er. Igen viser det i skematikken andre enheder, end jeg brugte. Jeg havde tilfældigvis præcis tre meget gamle BUZ11 MOSFET'er i stedet for de nyere IRLZ34N MOSFET'er. De fungerer fint

Selvfølgelig kan du sætte så mange lysdioder i som du vil, så længe MOSFET'erne og strømforsyningen kan klare strømmen. I skematisk har jeg kun tegnet en streng af enhver farve, i virkeligheden er der flere hver farve parallelt med de andre strenge i den farve.

Trin 5: Modstande (for lysdioderne)

Modstande (til lysdioderne)
Modstande (til lysdioderne)

Om modstandene i de ledede strenge. Hvide og blå lysdioder har normalt en spænding på 2,8V over dem, når de er ved fuld lysstyrke.

Røde lysdioder har kun 1,8V, mine grønne lysdioder har 2V over dem ved fuld lysstyrke.

En anden ting er, at deres fulde lysstyrke ikke er den samme. Så det tog nogle eksperimenter for at gøre dem lige lyse (i mine øjne). Ved at gøre lysdioderne lige lyse ved fuld lysstyrke, vil de også se lige lyse ud på lavere niveauer, pulsbreddesignalet tænder dem altid ved fuld lysstyrke, men i længere og kortere tider tager dine øjne sig af gennemsnittet.

Start med en beregning som denne. Strømforsyningen leverer (i mit tilfælde) 12V.

Fire hvide lysdioder i serien har brug for 4 x 2,8V = 11,2V, dette efterlader 0,8V for modstanden.

Jeg havde fundet ud af, at de var lyse nok ved 30mA, så modstanden skal være:

0,8 / 0,03 = 26,6 ohm. I skematikken ser du, at jeg satte en 22 ohm modstand i, hvilket gjorde lysdioderne bare en smule lysere.

De blå lysdioder var for lyse ved 30mA, men sammenlignet pænt med de hvide lysdioder ved 15 mA, havde de også omkring 2,8V over dem ved 15mA, så beregningen var 4 x 2,8V = 11,2V igen og efterlod 0,8V

0,8 / 0,015 = 53,3 ohm, så jeg valgte en 47 ohm modstand.

Mine røde lysdioder skal også have omkring 15 mA til at være lige lyse som de andre, men de har kun 1,8V over dem ved den aktuelle strøm. Så jeg kunne sætte flere i serier og stadig have lidt “plads” til modstanden.

Seks røde lysdioder gav mig 6 x 1,8 = 10,8V, så over modstanden var 12 - 10,8 = 1,2V

1,2 / 0,015 = 80 ohm, jeg lavede det til 68 ohm. Ligesom de andre, en lille smule lysere.

De grønne lysdioder, jeg brugte, er lige så lyse som de andre på omkring 20mA. Jeg havde brug for bare et par stykker (ligesom de blå), og jeg valgte at sætte fire i serier. Ved 20mA har de 2, 1V over sig, hvilket giver 3 x 2,1 = 8,4V

12 - 8,4 = 3,6V for modstanden. Og 3,6 / 0,02 = 180 ohm.

Hvis du bygger dette wakeup light, er det usandsynligt, at du har den samme strømforsyning, du bliver nødt til at justere antallet af lysdioder i serie og de nødvendige modstande.

Et lille eksempel. Sig, at du har en strømforsyning, der giver 20V. Jeg ville vælge at indstille 6 blå (og hvide) lysdioder i serie, 6 x 3V = 18V, så 2V for modstanden. Og lad os sige, at du kan lide lysstyrken ved 40mA. Modstanden skal derefter være 2V / 0,04 = 50 ohm, en 47 ohm modstand vil være fin.

Jeg råder til ikke at gå højere end 50mA med almindelige (5 mm) lysdioder. Nogle kan klare mere, men jeg kan godt lide at være på den sikre side.

Trin 6: Software

Al koden kan downloades fra:

gitlab.com/WilkoL/wakeup_light_stm8s103

Hold kildekoden åben ved siden af resten af denne instruks, hvis du vil følge forklaringen.

Main. C

Main.c opsætter først uret, timere og andre eksterne enheder. De fleste "drivere" skrev jeg ved hjælp af Standardbiblioteket fra STMicroelectronics, og hvis du har spørgsmål om dem, kan du skrive det i en kommentar under instruktionsbogen.

Eeprom

Jeg efterlod “tekst til visning” -koden, som jeg brugte til at lægge tekster i eeprom af STM8S103 som kommentarer. Jeg var ikke sikker på, at jeg havde nok flash -hukommelse til al min kode, så jeg forsøgte at lægge så meget som muligt i eeprom for at have al flash til programmet. Til sidst viste det sig ikke nødvendigt, og jeg flyttede teksten til at blinke. Men jeg efterlod det som kommenteret tekst i main.c -filen. Det er rart at have det, når jeg skal gøre noget lignende senere (i et andet projekt)

Eeprom bruges stadig, men kun til lagring af vågningstiden.

En gang i sekundet

Efter opsætning af periferiudstyret kontrollerer koden, om der er gået et sekund (udført med en timer).

Menu

Hvis det er tilfældet, kontrollerer det, om der blev trykket på en knap, i så fald kommer det ind i menuen, hvor du kan indstille det aktuelle tidspunkt, ugedag og vågningstid. Husk, at det tager cirka 5 minutter at gå fra off til fuld lysstyrke, så indstil vågningstiden lidt tidligere.

Vågningstiden gemmes i eeprom, så den selv efter et strømafbrydelse "ved", hvornår den skal vække dig. Den aktuelle tid gemmes naturligvis i realtidsklokken.

Sammenligningsstrøm og vågningstid

Når der ikke blev trykket på en knap, kontrolleres den aktuelle tid og sammenlignes med vågningstiden og hverdagen. Jeg vil ikke have, at det vækker mig i weekenden:-)

Det meste af tiden behøver der ikke gøres noget, så det sætter variablen “leds” til OFF ellers til ON. Denne variabel kontrolleres sammen med signalet "change_intensity", der også kommer fra en timer og er aktiv 244 gange i sekundet. Så når variablen “leds” er ON, øges intensiteten 244 gange i sekundet, og når den er OFF, falder den 244 gange i sekundet. Men stigningen går i enkelte trin, hvor faldet er i trin på 16, hvilket betyder, at når vækkelseslyset forhåbentlig har gjort sit arbejde, slukker det 16 gange hurtigere, men stadig glat.

Glathed og uden for hukommelse

Glatheden kommer fra Sigmoid -kurveberegningen. Beregningen er ganske enkel, men den skal udføres i variabler med flydende punkter (fordobles) på grund af funktionen exp (), se filen sigmoid.c.

I standardsituationen har Cosmic compiler / linker ikke understøttelse af variabler med flydende punkter. Det er let at tænde det (når du har fundet det), men det kommer med en stigning i kodestørrelse. Denne stigning var for meget til at få koden til at passe ind i flash -hukommelse, når den kombineres med sprintf () -funktionen. Og den funktion er nødvendig for at konvertere tal til tekst til displayet.

Itoa ()

For at afhjælpe dette problem skabte jeg itoa () -funktionen. Dette er en Integer To Ascii -funktion, der er ret almindelig, men ikke inkluderet i STMicroelectronics standardbibliotek, og heller ikke med de kosmiske biblioteker.

Trin 7: IKEA (hvad ville vi gøre uden dem)

IKEA (hvad ville vi gøre uden dem)
IKEA (hvad ville vi gøre uden dem)
IKEA (hvad ville vi gøre uden dem)
IKEA (hvad ville vi gøre uden dem)
IKEA (hvad ville vi gøre uden dem)
IKEA (hvad ville vi gøre uden dem)

Billedet fra er købt fra IKEA. Det er en Ribba -ramme på 50 x 40 cm. Denne ramme er ret tyk, og det gør den fantastisk til at skjule elektronik bag den. I stedet for en plakat eller et billede lagde jeg et stykke perforeret hardboard ind. Du kan købe den i isenkræmmerbutikken, hvor den undertiden kaldes "sengebræt". Den har små huller i den, der gjorde den ideel til at sætte lysdioder i. Desværre var hullerne i mit bord en smule større end 5 mm, så jeg var nødt til at bruge varmlim til at “montere” lysdioderne.

Jeg lavede et rektangulært hul i midten af hardboardet til 16x2 displayet og pressede det ind. PCB med al elektronik hænger på dette display, det er ikke monteret på andet.

Det perforerede hardboard blev spraymalet sort og men bagved måtten. Jeg borede to huller i rammen for knapperne for at indstille tid og dato, da rammen er temmelig tyk, måtte jeg udvide hullerne på indersiden af rammen for at få knapperne til at stikke nok ud.

Anbefalede: