Innholdsfortegnelse:

Wakeup Light: 7 trinn (med bilder)
Wakeup Light: 7 trinn (med bilder)

Video: Wakeup Light: 7 trinn (med bilder)

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

Når jeg skriver dette instruerbart, er det midt på vinteren på den nordlige halvkule, og det betyr korte dager og lange netter. Jeg er vant til å stå opp klokken 06:00 og om sommeren vil solen skinne da. Om vinteren blir det imidlertid lyst kl 09:00 hvis vi er så heldige å ha en dag at det ikke er overskyet (som er … ikke ofte).

For en tid siden leste jeg om et "vekkerlys" laget av Philips som ble brukt i Norge for å simulere en solrik morgen. Jeg kjøpte aldri en, men jeg tenkte stadig på å lage en fordi det er morsommere å lage en selv enn å bare kjøpe den.

Rekvisita:

Bilderamme "Ribba" 50 x 40 cm fra IKEA

perforert hardboard fra jernvarehandel

STM8S103 utviklingstavle via Ebay eller andre

DS1307 sanntidsklokke (Mouser, Farnell, Conrad, etc)

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

3V litium coincell + coincell holder

BUZ11 eller IRLZ34N N-kanal MOSFET (3x)

BC549 (eller annen NPN -transistor)

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

noen motstander og kondensatorer (se skjematisk)

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

Trinn 1: Gjør det (litt) lettere å stå opp

Gjør det (litt) lettere å stå opp
Gjør det (litt) lettere å stå opp

Tanken er at det er vanskelig å komme seg ut av sengen om morgenen når det fortsatt er mørkt. Og hvis du bor tett eller til og med over polarsirkelen, vil det være mørkt veldig lenge. På steder som Tromsö i Norge vil det ikke bli lys i det hele tatt, da der går solen ned halve november bare for å dukke opp igjen halvveis i januar.

Så det Philips gjorde var å simulere soloppgang.

Philips øker sakte lysstyrken til en lampe, som sannsynligvis er laget med flere lysdioder, men gjemt bak en enkelt diffusor. Tiden deres fra av til full lysstyrke tar 30 minutter.

Philips vekkinglys er ikke så dyre, men den har bare en farge og den ser litt liten ut. Jeg tror jeg kan gjøre det bedre.

Trinn 2: Mer farge

Mer farge
Mer farge

Våkningslampen min bruker fire farger, hvit, rød, blå og grønn. Kom først med de hvite lysdiodene, så kommer de røde, og sist noen få blå og grønne lysdioder. Tanken min var at jeg ikke bare kunne simulere økningen i lysstyrke, men også skiftingen av morgenlysfargen, ved å begynne med litt hvitt, legge til rødt litt senere og blande inn blått og grønt til slutt. Jeg er ikke sikker på at det faktisk ligner det faktiske morgenlyset, men jeg liker den fargerike skjermen slik den er nå.

Min er også raskere enn Philips vekkerlys, i stedet for 30 minutter med Philips -lyset går min fra 0% til 100% lysstyrke på mindre enn 5 minutter. Så solen går opp mye raskere.

MERK:

Det er VELDIG vanskelig å lage bilder av vekkerlyset, jeg prøvde med flere kameraer og smarttelefoner, men alle bildene jeg lagde, gir ikke ekte rettferdighet.

Trinn 3: Sigmoid -kurve, flimring og "oppløsning"

Sigmoid Curve, Flickering og
Sigmoid Curve, Flickering og

Selvfølgelig ønsket jeg å gjøre lysningen så jevn som mulig. Menneskelige øyne er logaritmiske i følsomhet, noe som betyr at de i totalt mørke er mer følsomme enn de er i full dagslys. En veldig liten økning i lysstyrken når nivåene er lave "føles" det samme som et mye større trinn når lyset er på si 40% lysstyrke. For å oppnå dette brukte jeg en spesiell kurve kalt Sigmoid (eller S-kurve). Denne kurven starter som en eksponentiell kurve som halvveis avtar igjen. Jeg fant ut at det er en veldig fin måte å øke (og redusere) intensiteten.

Klokkefrekvensen til mikrokontrolleren (og tidtakerne) er 16 MHzog jeg bruker maksimal oppløsning på TIMER2 (65536) for å lage tre pulsbreddesignaler (PWM). Derfor kommer pulser 16000000 /65536 = 244 ganger per sekund. Det er langt over grensen for øynene for å se flimmer.

Så lysdiodene mates med et PWM -signal som er laget med denne 16 bitteren av STM8S103 mikrokontroller. Som minimum kan dette PWM -signalet være PÅ, en pulslengde lang og de resterende 65535 pulslengdene av.

Så lysdiodene som er koblet til det PM-signalet vil da være PÅ 1/65536-th av tiden: 0,0015%

På det maksimale er de PÅ 65536/65536-th av tiden: 100%.

Trinn 4: Elektronikk

Elektronikk
Elektronikk
Elektronikk
Elektronikk
Elektronikk
Elektronikk
Elektronikk
Elektronikk

Mikrokontroller

Hjernen til vekking lyset er en STM8S103 mikrokontroller fra STMicroelectronics. Jeg liker å bruke deler som har akkurat nok evner for en jobb. For en enkel oppgave som dette er det ikke nødvendig å bruke STM32 mikrokontrollere (mine andre favoritter), men en Arduino UNO var ikke nok, da jeg ønsket tre PWM -signaler med 16 biters oppløsning, og det er ingen tidtaker med tre utgangskanaler på en UNO.

Sanntidsklokke

Tiden leses fra en DS1307 sanntidsklokke som fungerer med en 32768 Hz krystall og har et 3V reservebatteri.

Innstilling av gjeldende klokkeslett, dag og vekketid gjøres med to knapper og vist med en 16 x 2 LCD -tegnvisning. For å holde soverommet mitt veldig mørkt om natten, er bakgrunnsbelysningen på LCD -skjermen bare slått på når lysdiodene er lysere enn bakgrunnsbelysningen og når du stiller inn tid, dag og oppvåkningstid.

Makt

Strøm kommer fra en gammel bærbar strømforsyning, min produserer 12V og kan levere 3A. Når du har en annen strømforsyning, kan det være nødvendig å justere motstandene i serie med ledestrengene. (Se nedenfor)

Leds

Lysdiodene er koblet til 12V -forsyningen, resten av elektronikkverket på 5V er laget med en 7805 lineær regulator. I skjematikken står det at jeg bruker en TO220 -regulator, som ikke er nødvendig da mikrokontrolleren, skjermen og sanntidsklokken bruker bare noen få milliampere. Klokken min bruker en mindre TO92 -versjon av 7805 som kan levere 150mA.

Byttingen av led-strengene gjøres med N-kanal MOSFET. Igjen, i skjematisk viser det andre enheter enn jeg brukte. Jeg hadde tilfeldigvis tre veldig gamle BUZ11 MOSFET -er i stedet for de nyere IRLZ34N MOSFET -ene. De fungerer fint

Selvfølgelig kan du sette inn så mange lysdioder du vil, så lenge MOSFETene og strømforsyningen kan håndtere strømmen. I skjematisk har jeg tegnet bare en streng av hvilken som helst farge, i virkeligheten er det flere hver farge parallelt med de andre strengene i den fargen.

Trinn 5: Motstander (for Leds)

Motstander (for Leds)
Motstander (for Leds)

Om motstandene i led -strengene. Hvite og blå lysdioder har vanligvis en spenning på 2,8V over seg når de har full lysstyrke.

Røde lysdioder har bare 1,8V, mine grønne lysdioder har 2V over seg ved full lysstyrke.

En annen ting er at deres fulle lysstyrke ikke er den samme. Så det tok noen eksperimenter for å gjøre dem like lyse (for mine øyne). Ved å gjøre lysdiodene like lyse ved full lysstyrke, vil de også se like lyse ut på lavere nivåer, pulsbreddesignalet slår dem alltid på med full lysstyrke, men i lengre og kortere tider tar øynene vare på gjennomsnittet.

Begynn med et regnestykke som dette. Strømforsyningen leverer (i mitt tilfelle) 12V.

Fire hvite lysdioder i serie trenger 4 x 2,8V = 11,2V, dette etterlater 0,8V for motstanden.

Jeg hadde funnet ut at de var lyse nok ved 30mA, så motstanden må være:

0,8 / 0,03 = 26,6 ohm. I skjematikken ser du at jeg satte inn en 22 ohm motstand, noe som gjorde lysdiodene litt lysere.

De blå lysdiodene var for lyse ved 30mA, men sammenlignet med de hvite lysdiodene på 15 mA, hadde de også omtrent 2,8V over dem ved 15mA, så beregningen var 4 x 2,8V = 11,2V igjen og forlot 0,8V

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

Mine røde lysdioder trenger også noen 15 mA for å være like lyse som de andre, men de har bare 1,8V over dem ved den strømmen. Så jeg kunne sette flere i serie og fortsatt ha litt "plass" for motstanden.

Seks røde lysdioder ga meg 6 x 1,8 = 10,8V, så over motstanden var 12 - 10,8 = 1,2V

1.2 / 0.015 = 80 ohm, jeg gjorde det til 68 ohm. Akkurat som de andre, litt lysere.

De grønne lysdiodene jeg brukte er like lyse som de andre på omtrent 20mA. Jeg trengte bare noen få (akkurat som de blå), og jeg valgte å sette fire i serie. Ved 20mA har de 2, 1V over seg, og gir 3 x 2,1 = 8,4V

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

Hvis du bygger dette vekkinglyset, er det lite sannsynlig at du har samme strømforsyning, du må justere antall lysdioder i serie og motstandene som trengs.

Et lite eksempel. Si at du har en strømforsyning som gir 20V. Jeg ville valgt å sette 6 blå (og hvite) lysdioder i serie, 6 x 3V = 18V så 2V for motstanden. Og la oss si at du liker lysstyrken ved 40mA. Motstanden må da være 2V / 0,04 = 50 ohm, en 47 ohm motstand vil være bra.

Jeg anbefaler å ikke gå høyere enn 50mA med vanlige (5 mm) lysdioder. Noen kan håndtere mer, men jeg liker å være på den sikre siden.

Trinn 6: Programvare

All koden kan lastes ned fra:

gitlab.com/WilkoL/wakeup_light_stm8s103

behold kildekoden åpen, ved siden av resten av denne instruksen hvis du vil følge forklaringen.

Main. C

Main.c setter først opp klokken, tidtakere og andre eksterne enheter. De fleste "driverne" jeg skrev ved hjelp av standardbiblioteket fra STMicroelectronics, og hvis du har spørsmål om dem, kan du skrive det i en kommentar under instruksjonsboken.

Eeprom

Jeg la igjen "tekst for å vise" -koden som jeg brukte til å legge tekster i eeprom til STM8S103 som kommentarer. Jeg var ikke sikker på at jeg hadde nok flashminne for all koden min, så jeg prøvde å sette så mye som mulig i eeprom for å ha all flash for programmet. Til slutt viste det seg ikke nødvendig, og jeg flyttet teksten til å blinke. Men jeg forlot det som kommentert tekst i main.c -filen. Det er hyggelig å ha det når jeg trenger å gjøre noe lignende senere (i et annet prosjekt)

Eeprom brukes fortsatt, men bare for lagring av vekketiden.

En gang i sekundet

Etter at du har satt opp eksterne enheter, kontrollerer koden om det har gått ett sekund (gjort med en timer).

Meny

Hvis det er tilfellet, sjekker det om det ble trykket på en knapp. I så fall kommer det inn i menyen der du kan angi gjeldende tid, ukedag og vekketid. Husk at det tar omtrent 5 minutter å gå fra av til full lysstyrke, så angi vekketiden litt tidligere.

Vekkingstiden lagres i eeprom, slik at selv etter strømbrudd vil den "vite" når den skal vekke deg. Gjeldende tid lagres selvfølgelig i sanntidsklokken.

Sammenligning gjeldende og vekkingstid

Når ingen knapp ble trykket, sjekker den gjeldende tid og sammenligner den med vekkingstid og ukedag. Jeg vil ikke at den skal vekke meg i helgen:-)

Mesteparten av tiden trenger ingenting å gjøres, så det setter variabelen "lysdioder" til AV ellers til PÅ. Denne variabelen kontrolleres sammen med signalet "change_intensity", som også kommer fra en timer og er aktiv 244 ganger i sekundet. Så når "leds" -variabelen er PÅ, øker intensiteten 244 ganger per sekund, og når den er AV, reduseres den 244 ganger i sekundet. Men økningen går i enkle trinn der nedgangen er i trinn på 16, noe som betyr at når vekking lyset forhåpentligvis har gjort jobben, slås det av 16 ganger raskere, men fortsatt jevnt.

Glatthet og UTEN MINNE

Glattheten kommer fra Sigmoid -kurveberegningen. Beregningen er ganske enkel, men den må gjøres i variabler med flytende punkt (dobler) på grunn av funksjonen exp (), se filen sigmoid.c.

I standardsituasjonen har ikke den kosmiske kompilatoren / linkeren støtte for flytende variabler. Det er enkelt å slå det på (når du har funnet det), men det kommer en økning i kodestørrelse. Denne økningen var for mye for å få koden til å passe inn i flashminnet når den ble kombinert med sprintf () -funksjonen. Og den funksjonen er nødvendig for å konvertere tall til tekst for displayet.

Itoa ()

For å fikse dette problemet opprettet jeg itoa () -funksjonen. Dette er en heltall til Ascii -funksjon som er ganske vanlig, men ikke inkludert i standardbiblioteket STMicroelectronics, og heller ikke med de kosmiske bibliotekene.

Trinn 7: IKEA (hva ville vi gjort uten dem)

IKEA (hva ville vi gjort uten dem)
IKEA (hva ville vi gjort uten dem)
IKEA (hva ville vi gjort uten dem)
IKEA (hva ville vi gjort uten dem)
IKEA (hva ville vi gjort uten dem)
IKEA (hva ville vi gjort uten dem)

Bildet fra ble kjøpt fra IKEA. Det er en Ribba -ramme på 50 x 40 cm. Denne rammen er ganske tykk, og det gjør den flott for å gjemme elektronikk bak den. I stedet for en plakat eller et bilde la jeg i et stykke perforert hardboard. Du kan kjøpe den på jernvarehandelen der den noen ganger kalles "sengebrett". Den har små hull i den som gjorde den ideell for å sette i lysdioder. Dessverre var hullene i brettet mitt litt større enn 5 mm, så jeg måtte bruke varmt lim for å "montere" lysdiodene.

Jeg lagde et rektangulært hull i midten av hardboardet for 16x2 displayet og presset det inn. PCB med all elektronikk henger på denne displayet, den er ikke montert på noe annet.

Det perforerte hardboardet var spraymalt svart og men bak matten. Jeg boret to hull i rammen for knappene for å angi tid og dato, ettersom rammen er ganske tykk, måtte jeg utvide hullene på innsiden av rammen for å få knappene til å stikke ut nok.

Anbefalt: