Tartalomjegyzék:

Ébresztő fény: 7 lépés (képekkel)
Ébresztő fény: 7 lépés (képekkel)

Videó: Ébresztő fény: 7 lépés (képekkel)

Videó: Ébresztő fény: 7 lépés (képekkel)
Videó: Mi az ókori világ 7 csodája? 2024, Július
Anonim
Ébresztő fény
Ébresztő fény

Ahogy ezt az oktathatót írom, tél közepén van az északi féltekén, és ez rövid napokat és hosszú éjszakákat jelent. Már megszoktam, hogy 06: 00 -kor kelek, és nyáron addigra sütni fog a nap. Télen azonban 09: 00 -kor világosodik, ha szerencsénk van, ha olyan napunk van, hogy nem borult (ami… nem gyakran).

Valamikor régen olvastam a Philips által készített „ébresztő lámpáról”, amelyet Norvégiában használtak egy napsütéses reggel szimulálására. Soha nem vettem egyet, de folyamatosan gondolkodtam azon, hogy készítsek egyet, mert saját maga készíteni szórakoztatóbb, mint pusztán megvenni.

Kellékek:

Képkeret "Ribba" 50 x 40 cm az IKEA -tól

perforált farostlemez hardverboltból

STM8S103 fejlesztői tábla az Ebay -en vagy másokon keresztül

DS1307 valós idejű óra (Mouser, Farnell, Conrad stb.)

32768 Hz óra kristály (Mouser, Farnell, Conrad stb.)

3 V -os lítium kozellell + egybeeséstartó

BUZ11 vagy IRLZ34N N-csatornás MOSFET-ek (3x)

BC549 (vagy bármely más NPN tranzisztor)

annyi fehér, piros, kék, zöld stb. LED -et, amennyit csak akar

néhány ellenállás és kondenzátor (lásd a vázlatot)

Powerbrick, 12V - 20V, 3A vagy több (pl. Régi laptop tápegység)

1. lépés: Könnyítse meg (kicsit) a felkelést

(Kicsit) megkönnyíteni a felkelést
(Kicsit) megkönnyíteni a felkelést

Az elképzelés szerint nehéz felkelni reggel az ágyból, amikor még sötét van. És ha közel vagy akár a sarkkör felett élsz, nagyon sokáig lesz sötét. Olyan helyeken, mint Tromsö Norvégiában, egyáltalán nem fog fényt kapni, mert ott a nap november felénél lenyugszik, csak hogy Januari felénél újra megjelenjen.

Tehát a Philips a napfelkeltét szimulálta.

A Philips lassan növeli a lámpa fényerejét, amely valószínűleg több LED -del készült, de egyetlen diffúzor mögé rejtve. A kikapcsolástól a teljes fényerőig tartó idő 30 perc.

A Philips ébresztő lámpák nem olyan drágák, de csak egy színű, és kicsit kicsinek tűnik. Azt hiszem, jobban tudok.

2. lépés: Több szín

Több szín
Több szín

Az ébresztőfényem négy színt használ, fehér, piros, kék és zöld. Először a fehér LED -eket, majd a pirosakat és végül néhány kék és zöld LED -et. Az ötletem az volt, hogy nem csak a fényerő növekedését, hanem a reggeli fény színének eltolódását is szimulálhatom úgy, hogy kezdek egy kis fehérséggel, egy kicsit később hozzáadom a pirosat, és végül a kék és a zöld színét keverem össze. Nem vagyok biztos benne, hogy valóban hasonlít a valódi reggeli fényre, de szeretem a színes kijelzőt, ahogy most van.

Az enyém is gyorsabb, mint a Philips ébresztőfénye, a 30 perces Philips fény helyett az enyém kevesebb mint 5 perc alatt 0% -ról 100% -ra áll. Így a napom sokkal gyorsabban kel fel.

JEGYZET:

NAGYON nehéz képeket készíteni az ébresztő lámpámról, több kamerával és okostelefonnal próbáltam, de az összes kép nem az igazi.

3. lépés: Sigmoid görbe, villódzás és "felbontás"

Sigmoid görbe, villódzás és
Sigmoid görbe, villódzás és

Természetesen azt akartam, hogy a fényesítés a lehető legegyenletesebb legyen. Az emberi szemek logaritmikus érzékenységűek, vagyis teljes sötétségben érzékenyebbek, mint nappal. A fényerő nagyon kismértékű növekedése alacsony szinteknél „ugyanazt” érzi, mint egy sokkal nagyobb lépés, ha a fény 40% -os fényerővel rendelkezik. Ennek eléréséhez egy speciális görbét használtam, amelyet Sigmoidnak (vagy S-görbének) hívtak, ez a görbe exponenciális görbének indul, amely ismét félúton áll. Azt tapasztaltam, hogy ez egy nagyon szép módja az intenzitás növelésének (és csökkentésének).

A mikrovezérlő (és az időzítők) órajel -frekvenciája 16 MHz, és a TIMER2 (65536) maximális felbontását használom három impulzusszélesség -jel (PWM) létrehozásához. Ezért az impulzusok 16000000/65536 = 244 -szer jönnek másodpercenként. Ez messze meghaladja a szemhatárt, hogy lássunk villogást.

Tehát a LED -eket PWM jel táplálja, amely az STM8S103 mikrovezérlő 16 bittimerével készül. Ez a PWM jel legalább 1 impulzus hosszú, a fennmaradó 65535 impulzus pedig kikapcsolható.

Tehát az ehhez a PM-jelhez csatlakoztatott LED-ek 1/65536-adszor bekapcsolnak: 0,0015%

Legfeljebb 65536/65536-dik alkalommal vannak bekapcsolva: 100%.

4. lépés: Elektronika

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika

Mikrokontroller

Az ébresztő fény agya az STMicroelectronics STM8S103 mikrokontrollere. Szeretek olyan alkatrészeket használni, amelyek éppen elegendő képességekkel rendelkeznek egy munkához. Egy ilyen egyszerű feladathoz nem szükséges az STM32 mikrokontrollerek használata (a többi kedvencem), de egy Arduino UNO nem volt elég, mert három PWM jelet akartam 16 bites felbontással, és nincs egy időzítő három kimeneti csatornával az UNO -n.

Valós idejű óra

Az időt egy DS1307 valós idejű óráról olvassák le, amely 32768 Hz -es kristályokkal működik, és 3 V -os tartalék akkumulátorral rendelkezik.

Az aktuális idő, a nap és az ébresztési idő beállítása két gombbal történik, és egy 16 x 2 LCD karakteres kijelzőn látható. Annak érdekében, hogy a hálószobám éjszaka valóban sötét legyen, az LCD kijelző háttérvilágítása csak akkor kapcsol be, ha a LED -ek világosabbak, mint a háttérvilágítás, és amikor beállítja az időt, a napot és az ébresztési időt.

Erő

A tápellátás egy régi laptop tápegységből származik, az enyém 12 V -ot termel, és 3A -t képes leadni. Ha másik tápegysége van, szükség lehet az ellenállások soros beállítására a led-húrokkal. (Lásd lejjebb)

LED -ek

A LED -ek a 12V -os tápegységhez vannak csatlakoztatva, a többi elektronika 5V -on működik, 7805 -ös lineáris szabályzóval. A vázlatban azt írja, hogy TO220 szabályozót használok, erre nincs szükség, mivel a mikrokontroller, a kijelző és a valós idejű óra csak néhány milliampert használ. Az órám a 7805 egy kisebb TO92 verzióját használja, amely képes 150 mA áramellátásra.

A led-karakterláncok kapcsolása N-csatornás MOSFET-ekkel történik. Ismét a vázlatban más eszközöket mutat be, mint amit használtam. Véletlenül pontosan három nagyon régi BUZ11 MOSFET -em volt az újabb IRLZ34N MOSFET -ek helyett. Jól működnek

Természetesen annyi LED -et helyezhet be, amennyit csak akar, amíg a MOSFET -ek és a tápegység bírják az áramot. A sematikus ábrán csak egy, bármilyen színű karakterláncot rajzoltam, a valóságban több szín is párhuzamos az adott szín többi húrjával.

5. lépés: Ellenállások (LED -ekhez)

Ellenállások (LED -ekhez)
Ellenállások (LED -ekhez)

Az ellenállásokról a led húrokban. A fehér és a kék LED -ek általában 2,8 V feszültséggel rendelkeznek, amikor teljes fényerőn vannak.

A piros LED -ek csak 1,8 V -osak, a zöld LED -eim 2 V -osak, teljes fényerő mellett.

A másik dolog az, hogy teljes fényerejük nem ugyanaz. Tehát némi kísérletezésre volt szükség ahhoz, hogy egyformán fényesek legyenek (a szememhez). Ha a LED -ek teljes fényerő mellett egyformán fényesek, alacsonyabb szinten is ugyanolyan fényesek lesznek, az impulzusszélesség -jel mindig teljes fényerővel kapcsolja be őket, de hosszabb és rövidebb időkben a szeme gondoskodik az átlagolásról.

Kezdje egy ilyen számítással. A tápegység (esetemben) 12V -ot szolgáltat.

Négy soros fehér lednek 4 x 2,8 V = 11,2 V -ra van szüksége, ez 0,8 V -ot hagy az ellenállás számára.

Azt tapasztaltam, hogy elég erősek 30 mA -nél, így az ellenállásnak a következőnek kell lennie:

0,8 / 0,03 = 26,6 ohm. A sematikus ábrán látható, hogy egy 22 ohmos ellenállást tettem be, így a LED -ek csak egy kicsit világosabbak lettek.

A kék LED -ek túl fényesek voltak 30 mA -nél, de szépek a fehér LED -ekhez 15 mA -nél, és körülbelül 2,8 V -os volt felettük 15 mA -nél, így a számítás 4 x 2,8 V = 11,2 V volt, így 0,8 V maradt.

0,8 / 0,015 = 53,3 ohm, ezért 47 ohmos ellenállást választottam.

A piros LED -eimnek is szüksége van 15 mA -re, hogy ugyanolyan fényesek legyenek, mint a többi, de csak 1,8 V -os áram van rajtuk ezen az áramon. Így sorokat is sorolhatnék, és még mindig van némi „hely” az ellenállás számára.

Hat piros LED 6 x 1,8 = 10,8 V -ot adott, tehát az ellenállás felett 12 - 10,8 = 1,2 V volt

1,2 / 0,015 = 80 ohm, 68 ohmra tettem. Csakúgy, mint a többi, egy kicsit világosabb.

Az általam használt zöld LED -ek olyan fényesek, mint a többi, körülbelül 20 mA. Csak néhányra volt szükségem (mint a kékekre), és úgy döntöttem, hogy négyet sorba teszek. 20 mA -nél 2, 1 V van felettük, így 3 x 2,1 = 8,4 V

12 - 8,4 = 3,6 V az ellenállásnál. És 3,6 / 0,02 = 180 ohm.

Ha felépíti ezt az ébresztő lámpát, valószínűtlen, hogy ugyanazzal a tápegységgel rendelkezik, be kell állítania a soros LED -ek számát és a szükséges ellenállásokat.

Egy kis példa. Tegyük fel, hogy 20 V -os tápegységgel rendelkezik. Úgy döntöttem, hogy 6 kék (és fehér) LED -et sorba állítok, 6 x 3V = 18 V, tehát 2 V -ot az ellenálláshoz. Tegyük fel, hogy tetszik a 40 mA -es fényerő. Az ellenállásnak ezután 2V / 0,04 = 50 ohm -nak kell lennie, a 47 ohmos ellenállás jó lesz.

Azt tanácsolom, hogy normál (5 mm -es) LED -ekkel ne lépje túl az 50 mA -t. Vannak, akik többet is elbírnak, de én szeretek biztonságban lenni.

6. lépés: Szoftver

Az összes kód letölthető innen:

gitlab.com/WilkoL/wakeup_light_stm8s103

tartsa nyitva a forráskódot, a többi utasítás mellett, ha követni szeretné a magyarázatot.

Fő.c

A Main.c először beállítja az órát, az időzítőket és az egyéb perifériákat. A legtöbb „illesztőprogram”, amelyet az STMicroelectronics Standard Library használatával írtam, és ha bármilyen kérdése van velük kapcsolatban, írja meg megjegyzésében az utasítás alatt.

Eeprom

Meghagytam a „megjelenítendő szöveg” kódot, amellyel szövegeket tettem az STM8S103 eeprom -jába megjegyzésként. Nem voltam biztos abban, hogy elegendő flash memória van az összes kódomhoz, ezért megpróbáltam a lehető legtöbbet behelyezni az eepromba, hogy minden flash legyen a programhoz. Végül ez nem volt szükséges, és áthelyeztem a szöveget villogni. De a main.c fájl megjegyzett szövegeként hagytam. Örülök, hogy van ilyen, amikor később valami hasonlót kell tennem (egy másik projektben)

Az eepromot továbbra is használják, de csak az ébresztési idő tárolására.

Másodszor

A perifériák beállítása után a kód ellenőrzi, hogy eltelt -e egy másodperc (időzítővel).

Menü

Ebben az esetben ellenőrzi, hogy megnyomtak -e gombot, ha igen, akkor belép a menübe, ahol beállíthatja az aktuális időt, a hét napját és az ébresztési időt. Ne feledje, hogy körülbelül 5 percet vesz igénybe a teljes fényerő elérése, ezért állítsa be egy kicsit korábban az ébresztési időt.

Az ébresztési időt az eeprom tárolja, így még áramkimaradás után is „tudja”, mikor ébressze fel. Az aktuális időt természetesen a valós idejű óra tárolja.

A jelenlegi és az ébredési idő összehasonlítása

Ha egyetlen gombot sem nyomtak meg, akkor ellenőrzi az aktuális időt, és összehasonlítja azt az ébresztési idővel és a hét napjával. Nem akarom, hogy felébresszen a hétvégén:-)

A legtöbb esetben semmit sem kell tenni, ezért a „ledek” változót KI értékre állítja. Ezt a változót a „change_intensity” jelzéssel együtt ellenőrzik, amely szintén egy időzítőből érkezik, és 244 -szer aktív másodpercenként. Tehát amikor a „led” változó BE van kapcsolva, az intenzitás másodpercenként 244 -szeresére, kikapcsolt állapotánál pedig 244 -szeresére csökken. De a növekedés egyetlen lépésben megy végbe, ahol a csökkenés 16 lépésben történik, ami azt jelenti, hogy amikor az ébresztő fény remélhetőleg elvégezte a dolgát, akkor 16 -szor gyorsabban, de simán kialszik.

Simaság és a memória

A simaság a Sigmoid görbe számításából származik. A számítás meglehetősen egyszerű, de az exp () függvény miatt lebegőpontos változókban (kettős) kell elvégezni, lásd a sigmoid.c fájlt.

Normál helyzetben a Cosmic fordító / linker nem támogatja a lebegőpontos változókat. A bekapcsolás egyszerű (ha megtalálta), de a kód méretének növekedésével jár. Ez a növekedés túl sok volt ahhoz, hogy a kód elférjen a flash memóriában, ha a sprintf () függvénnyel kombinálják. És ez a funkció szükséges a számok szöveggé alakításához a kijelző számára.

Itoa ()

A probléma orvoslására létrehoztam az itoa () függvényt. Ez egy egész szám Ascii függvény, amely meglehetősen gyakori, de nem szerepel az STMicroelectronics szabványos könyvtárban és a kozmikus könyvtárakban sem.

7. lépés: IKEA (mit csinálnánk nélkülük)

IKEA (mit csinálnánk nélkülük)
IKEA (mit csinálnánk nélkülük)
IKEA (mit csinálnánk nélkülük)
IKEA (mit csinálnánk nélkülük)
IKEA (mit csinálnánk nélkülük)
IKEA (mit csinálnánk nélkülük)

A képet az IKEA -tól vásárolták. Ez egy 50 x 40 cm -es Ribba keret. Ez a keret meglehetősen vastag, ezért kiválóan alkalmas elektronika mögé rejtésére. Plakát vagy kép helyett egy darab perforált farostlemezt tettem be. Vásárolhatja a hardverboltban, ahol néha „ágytáblának” nevezik. Kis lyukak vannak benne, amelyek ideálisak LED -ek elhelyezéséhez. Sajnos a táblán lévő lyukak valamivel nagyobbak voltak, mint 5 mm, ezért forró ragasztót kellett használnom a LED-ek „rögzítéséhez”.

Téglalap alakú lyukat készítettem a merevlemez közepén a 16x2 -es kijelző számára, és benyomtam. A NYÁK minden elektronikával ezen a kijelzőn lóg, nincs másra szerelve.

A perforált farostlemez feketére volt festve, de a szőnyeg mögött. Két lyukat fúrtam a keretbe a gombok számára az idő és a dátum beállításához, mivel a keret meglehetősen vastag volt, ezért ki kellett szélesítenem a keret belsejében lévő lyukakat, hogy a gombok kellően kilógjanak.

Ajánlott: