Sadržaj:

Svjetlo za buđenje: 7 koraka (sa slikama)
Svjetlo za buđenje: 7 koraka (sa slikama)

Video: Svjetlo za buđenje: 7 koraka (sa slikama)

Video: Svjetlo za buđenje: 7 koraka (sa slikama)
Video: Ako imate iPhone, OVO MORATE ISPROBATI! 2024, Novembar
Anonim
Wakeup Light
Wakeup Light

Dok pišem ovo uputstvo, sredina je zime na sjevernoj hemisferi, a to znači kratke dane i duge noći. Navikao sam ustajati u 06:00, a na ljeto će do tada zasjati sunce. Zimi, međutim, svijetli u 09:00 ako imamo sreće da imamo dan koji nije oblačan (što … nije često).

Prije nekog vremena čitao sam o "svjetlu za buđenje" koje je napravio Philips i koje se koristilo u Norveškoj za simulaciju sunčanog jutra. Nikada ga nisam kupio, ali sam stalno razmišljao o tome da ga napravim jer je izrada samog sebe zabavnija od same kupovine.

Potrošni materijal:

Okvir za slike "Ribba" 50 x 40 cm od IKEA -e

perforirana lesonit ploča iz prodavnice hardvera

Razvojna ploča STM8S103 putem Ebaya ili drugih

DS1307 Sat u stvarnom vremenu (Mouser, Farnell, Conrad itd.)

32768 Hz kristalni sat (Mouser, Farnell, Conrad itd.)

3V litijum coincell + držač coincell

BUZ11 ili IRLZ34N N-kanalni MOSFET-ovi (3x)

BC549 (ili bilo koji drugi NPN tranzistor)

koliko god želite bijelih, crvenih, plavih, zelenih itd. LED dioda

neki otpornici i kondenzatori (vidi shemu)

Powerbrick, 12V do 20V, 3A ili više (npr. Napajanje starog laptopa)

Korak 1: Olakšajte (malo) lakše ustajanje

Olakšavanje ustajanja (malo) lakše
Olakšavanje ustajanja (malo) lakše

Ideja je da je teško ustati iz kreveta ujutro dok je još mrak. A ako živite blizu ili čak iznad arktičkog kruga, bit će mračno jako dugo. Na mjestima kao što je Tromsö u Norveškoj uopće neće svijetliti jer tamo sunce zalazi pola novembra samo da bi se ponovo pojavilo na pola januara.

Philips je simulirao izlazak Sunca.

Philips polako povećava svjetlinu lampe, koja je vjerojatno napravljena s nekoliko LED dioda, ali skrivena iza jednog difuzora. Njihovo vrijeme od isključenja do pune svjetline traje 30 minuta.

Philips svjetla za buđenje nisu toliko skupa, ali imaju samo jednu boju i izgledaju pomalo mala. Mislim da mogu bolje.

Korak 2: Više boje

Više boja
Više boja

Moje svjetlo za buđenje koristi četiri boje, bijelu, crvenu, plavu i zelenu. Prvo dolaze bijele LED diode, zatim dolaze crvene, a zatim nekoliko plavih i zelenih LED dioda. Moja ideja je bila da mogu simulirati ne samo povećanje svjetline, već i promjenu boje jutarnjeg svjetla, počevši od malo bijele boje, dodajući crvenu boju malo kasnije i miješajući plavu i zelenu boju na kraju. Nisam siguran da li zaista liči na jutarnje svjetlo, ali sviđa mi se šareni ekran kakav je sada.

Moj je takođe brži od Philipsovog svjetla za buđenje, umjesto 30 minuta Philips svjetla, moje svjetlo postaje sa 0% do 100% svjetline za manje od 5 minuta. Tako da moje sunce izlazi mnogo brže.

BILJEŠKA:

JAKO je teško napraviti slike mog svjetla za buđenje, pokušao sam s nekoliko kamera i pametnih telefona, ali sve slike koje sam napravio ne čine pravu stvar.

Korak 3: Sigmoidna krivulja, treperenje i "razrješenje"

Sigmoidna krivulja, treperenje i
Sigmoidna krivulja, treperenje i

Naravno da sam htio učiniti posvjetljivanje što je moguće glatkijim. Ljudske oči su logaritamske osjetljivosti, što znači da su u potpunom mraku osjetljivije nego na dnevnom svjetlu. Vrlo mali porast svjetline kada su nivoi niski "osjeća se" isto kao i mnogo veći korak kada je svjetlost recimo 40% svjetline. Da bih to postigao, upotrijebio sam posebnu krivulju koja se zove Sigmoid (ili S-krivulja). Ova krivulja počinje kao eksponencijalna krivulja koja se na pola puta ponovno izravnava. Otkrio sam da je to vrlo lijep način za povećanje (i smanjenje) intenziteta.

Taktna frekvencija mikrokontrolera (i mjerača vremena) je 16 MHza. Koristim maksimalnu rezoluciju TIMER2 (65536) za stvaranje tri signala širine impulsa (PWM). Stoga impulsi dolaze 16000000 /65536 = 244 puta u sekundi. To je daleko iznad granice očiju da vidite bilo kakvo treperenje.

Dakle, LED diode se napajaju sa PWM signalom koji je napravljen ovim 16 -bitnim timerom mikrokontrolera STM8S103. Najmanje ovaj PWM signal može biti UKLJUČEN ako je dug 1 impuls, a preostalih 65535 impulsa isključen.

Dakle, LED diode povezane na taj PM signal tada će biti UKLJUČENE 1/65536-to vrijeme: 0,0015%

Maksimalno su ON 65536/65536-to vrijeme: 100%.

Korak 4: Elektronika

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika

Mikrokontroler

Mozak svjetla za buđenje je mikrokontroler STM8S103 kompanije STMicroelectronics. Volim koristiti dijelove koji imaju dovoljno mogućnosti za posao. Za jednostavan zadatak, kao što je ovaj, nije potrebno koristiti STM32 mikrokontrolere (moji drugi favoriti), ali Arduino UNO nije bio dovoljan jer sam htio tri PWM signala sa 16 -bitnom rezolucijom i nema tajmera s tri izlazna kanala na UNO -u.

Sat u realnom vremenu

Vrijeme se očitava sa sata za realno vrijeme DS1307 koji radi s kristalom od 32768 Hz i ima pomoćnu bateriju od 3V.

Podešavanje trenutnog vremena, dana i vremena buđenja vrši se pomoću dva dugmeta i prikazuje se na LCD ekranu sa prikazom 16 x 2. Da bi moja spavaća soba bila mračna noću, pozadinsko osvjetljenje LCD ekrana uključuje se samo kada su LED diode jače od pozadinskog osvjetljenja i kada postavljate vrijeme, dan i vrijeme buđenja.

Snaga

Napajanje dolazi iz starog napajanja za prijenosno računalo, moje proizvodi 12V i može isporučiti 3A. Kad imate drugo napajanje, možda će biti potrebno namjestiti otpornike u nizu s LED žicama. (Pogledajte ispod)

Led

LED diode su spojene na 12V napajanje, ostatak elektronike na 5V napravljen je sa linearnim regulatorom 7805. Na shemi piše da koristim regulator TO220, koji nije potreban jer mikrokontroler, zaslon i sat u stvarnom vremenu koriste samo nekoliko miliampera. Moj sat koristi manju TO92 verziju 7805 koja može napajati 150mA.

Prebacivanje LED žica vrši se pomoću N-kanalnih MOSFET-ova. Opet, na shemi prikazuje druge uređaje koje nisam koristio. Slučajno sam imao točno tri vrlo stara BUZ11 MOSFET -a umjesto novijih IRLZ34N MOSFET -ova. Odlično rade

Naravno, možete staviti koliko god LED dioda želite, sve dok MOSFET -ovi i napajanje mogu podnijeti struju. Na shemi sam nacrtao samo jedan niz bilo koje boje, u stvarnosti ih ima nekoliko u svakoj boji paralelno s ostalim nizovima te boje.

Korak 5: Otpornici (za LED)

Otpornici (za LED)
Otpornici (za LED)

O otpornicima u LED žicama. Bijele i plave LED diode obično imaju napon od 2,8 V iznad njih kada su pri punoj svjetlini.

Crvene LED diode imaju samo 1,8 V, moje zelene LED diode imaju 2 V preko njih pri punoj svjetlini.

Druga stvar je da njihova puna svjetlina nije ista. Zato je bilo potrebno malo eksperimentiranja kako bi bili jednako sjajni (za moje oči). Učinivši LED diode jednako svijetlim pri punoj svjetlini, one će također izgledati jednako svijetle na nižim razinama, signal širine impulsa ih uvijek uključuje pri punoj svjetlini, ali tokom dužih i kraćih vremena vaše oči brinu o prosjeku.

Počnite s ovakvim proračunom. Napajanje daje (u mom slučaju) 12V.

Četiri bijele LED diode u seriji trebaju 4 x 2,8 V = 11,2 V, ovo ostavlja 0,8 V za otpornik.

Otkrio sam da su dovoljno jaki na 30mA pa otpornik mora biti:

0,8 / 0,03 = 26,6 ohma. Na shemi vidite da sam stavio otpornik od 22 ohma, pa su LED diode samo malo svjetlije.

Plave LED diode bile su presvijetle na 30 mA, ali u usporedbi s bijelim LED diodama na 15 mA, imale su i oko 2,8 V preko njih na 15 mA, pa je proračun bio 4 x 2,8 V = 11,2 V, a opet je ostalo 0,8 V

0,8 / 0,015 = 53,3 ohma pa sam odabrao otpornik od 47 ohma.

Mojim crvenim LED diodama također treba nekih 15 mA da budu jednako svijetle kao i ostale, ali na toj struji imaju samo 1,8 V. Tako da bih mogao staviti više u seriju i imati još “prostora” za otpornik.

Šest crvenih LED dioda dalo mi je 6 x 1,8 = 10,8 V, pa je preko otpornika bilo 12 - 10,8 = 1,2 V.

1,2 / 0,015 = 80 ohma, uspio sam u 68 ohma. Baš kao i ostali, malo svjetliji.

Zelene LED diode koje sam koristio su svijetle kao i ostale na oko 20mA. Trebalo mi je samo nekoliko (baš kao i plavih) i odlučio sam staviti četiri u seriju. Na 20mA imaju 2, 1V preko sebe, dajući 3 x 2,1 = 8,4V

12 - 8,4 = 3,6 V za otpornik. I 3,6 / 0,02 = 180 ohma.

Ako napravite ovo svjetlo za buđenje, malo je vjerojatno da imate isto napajanje, morat ćete prilagoditi broj LED dioda u seriji i potrebne otpornike.

Mali primjer. Recimo da imate napajanje koje daje 20V. Odlučio bih postaviti 6 plavih (i bijelih) LED dioda u seriji, 6 x 3V = 18V, dakle 2V za otpornik. Recimo da vam se sviđa svjetlina na 40mA. Otpornik tada mora biti 2V / 0,04 = 50 ohma, otpornik od 47 ohma će biti u redu.

Savjetujem da ne idete više od 50 mA sa običnim (5 mm) LED diodama. Neki mogu podnijeti više, ali ja volim biti na sigurnom.

Korak 6: Softver

Sav kod možete preuzeti sa:

gitlab.com/WilkoL/wakeup_light_stm8s103

neka izvorni kod ostane otvoren, pored ostatka ovog uputstva ako želite slijediti objašnjenje.

Main.c

Main.c prvo postavlja sat, tajmere i druge periferne uređaje. Većina "upravljačkih programa" koje sam napisao koristeći standardnu biblioteku kompanije STMicroelectronics i ako imate bilo kakvih pitanja o njima, napišite ih u komentaru ispod uputstava.

Eeprom

Ostavio sam kod „tekst za prikaz“koji sam koristio za stavljanje tekstova u eeprom STM8S103 kao komentare. Nisam bio siguran da li imam dovoljno flash memorije za sav svoj kôd pa sam pokušao staviti što je više moguće u eeprom kako bih imao sav flash za program. Na kraju se to pokazalo nepotrebnim i tekst sam premjestio u flash. Ali ostavio sam ga kao komentar u datoteci main.c. Lijepo je to imati, kad kasnije moram učiniti nešto slično (u drugom projektu)

Eeprom se i dalje koristi, ali samo za spremanje vremena buđenja.

Jednom u sekundi

Nakon postavljanja perifernih uređaja kod provjerava je li prošla jedna sekunda (urađeno pomoću tajmera).

Meni

U tom slučaju provjerava je li pritisnuto dugme, ako je tako, ulazi u izbornik u kojem možete postaviti trenutno vrijeme, dan u sedmici i vrijeme buđenja. Imajte na umu da je potrebno oko 5 minuta za isključivanje do pune svjetline, pa postavite vrijeme buđenja malo ranije.

Vrijeme buđenja pohranjeno je u eepromu tako da će i nakon nestanka struje "znati" kada vas treba probuditi. Naravno, trenutno vrijeme je pohranjeno u satu stvarnog vremena.

Poređenje trenutnog vremena i vremena buđenja

Kad nije pritisnuto nijedno dugme, provjerava trenutno vrijeme i uspoređuje ga s vremenom buđenja i radnim danom. Ne želim da me probudi za vikend:-)

Većinu vremena ništa ne treba činiti pa postavlja varijablu "leds" na OFF, a na ON. Ova varijabla se provjerava zajedno sa signalom “change_intensity”, koji također dolazi iz tajmera i aktivan je 244 puta u sekundi. Dakle, kada je "LED" varijabla UKLJUČENA, intenzitet se povećava 244 puta u sekundi, a kada je isključena, smanjuje se 244 puta u sekundi. Ali povećanje ide u pojedinačnim koracima gdje je smanjenje u koracima od 16, što znači da se, kad je svjetlo za buđenje, nadam se, obavilo svoj posao, isključuje 16 puta brže, ali i dalje glatko.

Glatkoća i PAMĆENJE

Glatkoća dolazi iz proračuna Sigmoid krivulje. Izračun je prilično jednostavan, ali ga je potrebno izvršiti u varijablama s pomičnim zarezom (udvostručuje) zbog funkcije exp (), pogledajte datoteku sigmoid.c.

U standardnoj situaciji Cosmic kompajler / povezivač nema podršku za varijable s pomičnim zarezom. Uključivanje je jednostavno (nakon što ga pronađete), ali dolazi s povećanjem veličine koda. Ovo povećanje je bilo previše da bi se kôd uklopio u flash memoriju u kombinaciji s funkcijom sprintf (). A ta je funkcija potrebna za pretvaranje brojeva u tekst za prikaz.

Itoa ()

Da bih riješio ovaj problem stvorio sam funkciju itoa (). Ovo je funkcija Integer To Ascii koja je prilično uobičajena, ali nije uključena u standardnu biblioteku STMicroelectronics, niti u kosmičke biblioteke.

Korak 7: IKEA (šta bismo bez njih)

IKEA (šta bismo bez njih)
IKEA (šta bismo bez njih)
IKEA (šta bismo bez njih)
IKEA (šta bismo bez njih)
IKEA (šta bismo bez njih)
IKEA (šta bismo bez njih)

Slika je kupljena od IKEA -e. To je okvir Ribba dimenzija 50 x 40 cm. Ovaj okvir je prilično debeo i čini ga odličnim za skrivanje elektronike iza njega. Umjesto postera ili slike stavio sam komad perforirane lesonita. Možete ga kupiti u željezariji gdje se ponekad naziva i „daska za krevet“. Ima male rupe u sebi što ga čini idealnim za postavljanje LED dioda. Nažalost, rupe na mojoj ploči bile su nešto veće od 5 mm pa sam morao koristiti vruće ljepilo za "montiranje" LED dioda.

Napravio sam pravokutnu rupu u sredini tvrde ploče za ekran 16x2 i pritisnuo je. PCB sa svom elektronikom visi na ovom ekranu, nije montiran ni na šta drugo.

Perforirana lesonit ploča obojena je sprejom u crnoj boji, ali sa unutrašnje strane prostirke. Izbušio sam dvije rupe u okviru za gumbe za postavljanje vremena i datuma, budući da je okvir prilično debeo, morao sam proširiti rupe na unutarnjoj strani okvira kako bi gumbi dovoljno stršili.

Preporučuje se: