Съдържание:

Лампа за събуждане: 7 стъпки (със снимки)
Лампа за събуждане: 7 стъпки (със снимки)

Видео: Лампа за събуждане: 7 стъпки (със снимки)

Видео: Лампа за събуждане: 7 стъпки (със снимки)
Видео: Детето ми се храни само със зеленчуци 2024, Ноември
Anonim
Събуждаща светлина
Събуждаща светлина

Докато пиша тази инструкция, средата на зимата е в северното полукълбо и това означава кратки дни и дълги нощи. Свикнал съм да ставам в 06:00 и през лятото тогава слънцето ще грее. През зимата обаче става светло в 09:00, ако имаме късмет да имаме ден, в който не е облачно (което е … не често).

Преди време четох за „събуждаща се светлина“, направена от Philips, която беше използвана в Норвегия за симулиране на слънчева сутрин. Никога не съм купувал такъв, но все си мислех да го направя, защото да си го направите сами е по -забавно, отколкото просто да го купите.

Консумативи:

Рамка за картини "Ribba" 50 x 40 см от IKEA

перфориран твърд картон от магазин за хардуер

STM8S103 дъска за разработка чрез Ebay или други

DS1307 Часовник в реално време (Mouser, Farnell, Conrad и др.)

32768 Hz кристал за часовник (Mouser, Farnell, Conrad и др.)

3V литиева coincell + държач за coincell

BUZ11 или IRLZ34N N-канал MOSFET (3x)

BC549 (или друг NPN транзистор)

колкото искате бели, червени, сини, зелени и т.н. светодиоди, колкото искате

някои резистори и кондензатори (вижте схемата)

Powerbrick, 12V до 20V, 3A или повече (напр. Захранване на стар лаптоп)

Стъпка 1: Улеснявайки (малко) по -лесното ставане

Улеснявайки (малко) по -лесното ставане
Улеснявайки (малко) по -лесното ставане

Идеята е, че е трудно да ставате от леглото сутрин, когато е още тъмно. И ако живеете близо или дори над арктическия кръг, ще бъде тъмно много дълго. На места като Тромсе в Норвегия изобщо няма да светне, тъй като там слънцето залязва половината ноември, само за да се появи отново по средата на Януари.

Така че Philips симулира изгрева на слънцето.

Philips бавно увеличава яркостта на лампата, която вероятно е направена с няколко светодиода, но скрита зад един дифузьор. Времето им от изключване до пълна яркост отнема 30 минути.

Събуждащите светлини на Philips не са толкова скъпи, но имат само един цвят и изглеждат малко малки. Мисля, че мога да се справя по -добре.

Стъпка 2: Повече цвят

Повече цвят
Повече цвят

Моята лампа за събуждане използва четири цвята, бяло, червено, синьо и зелено. Първо дойде белите светодиоди, след това червените и последно няколко сини и зелени светодиоди. Идеята ми беше, че мога да симулирам не само увеличаването на яркостта, но и промяната на цвета на сутрешната светлина, като започна с малко бяло, добавяйки червено малко по -късно и смесвайки в синьо и зелено в крайна сметка. Не съм сигурен, че всъщност прилича на действителна сутрешна светлина, но харесвам цветния дисплей такъв, какъвто е сега.

Моят също е по -бърз от светлината за събуждане Philips, вместо 30 -те минути на светлината Philips, моята преминава от 0% до 100% яркост за по -малко от 5 минути. Така слънцето ми изгрява много по -бързо.

ЗАБЕЛЕЖКА:

МНОГО е трудно да се направят снимки на моята светлина за събуждане, опитах с няколко фотоапарата и смартфона, но всички снимки, които направих, не са истински.

Стъпка 3: Сигмоидна крива, трептене и "разделяне"

Сигмоидна крива, трептене и
Сигмоидна крива, трептене и

Разбира се, исках да направя осветяването възможно най -гладко. Човешките очи са с логаритмична чувствителност, което означава, че при пълна тъмнина те са по -чувствителни, отколкото на дневна светлина. Много малко увеличение на яркостта, когато нивата са ниски, се „усеща“същото като много по -голяма стъпка, когато светлината е, да речем, 40% яркост. За да постигна това, използвах специална крива, наречена Sigmoid (или S-крива), която започва като експоненциална крива, която наполовина се изравнява. Открих, че това е много приятен начин за увеличаване (и намаляване) на интензивността.

Тактовата честота на микроконтролера (и таймерите) е 16 MH и използвам максималната разделителна способност на TIMER2 (65536), за да създам три сигнала с ширина на импулса (PWM). Следователно импулсите идват 16000000 /65536 = 244 пъти в секунда. Това е далеч над границата на очите, за да видите всяко трептене.

Така че светодиодите се захранват с ШИМ сигнал, който се прави с този 16 битов таймер на микроконтролера STM8S103. Най -малко този ШИМ сигнал може да бъде ВКЛЮЧЕН с дължина на 1 импулс, а останалите 65535 импулси са изключени.

Така че светодиодите, свързани към този PM сигнал, след това ще бъдат ВКЛЮЧЕНИ 1/65536-то от времето: 0.0015%

Максимум те са ON 65536/65536-то от времето: 100%.

Стъпка 4: Електроника

Електроника
Електроника
Електроника
Електроника
Електроника
Електроника
Електроника
Електроника

Микроконтролер

Мозъкът на светлината за събуждане е микроконтролер STM8S103 от STMicroelectronics. Обичам да използвам части, които имат достатъчно възможности за работа. За проста задача, като тази, не е необходимо да се използват STM32 микроконтролери (другите ми любими), но Arduino UNO не беше достатъчен, тъй като исках три PWM сигнала с 16 -битова резолюция и няма таймер с три изходни канала на UNO.

Часовник в реално време

Времето се отчита от часовник в реално време DS1307, който работи с кристал 32768 Hz и има 3V резервна батерия.

Настройката на текущия час, ден и час на събуждане се извършва с два бутона и се показва на 16 x 2 LCD дисплей с символи. За да поддържа спалнята ми наистина тъмна през нощта, подсветката на LCD дисплея се включва само когато светодиодите са по -ярки от подсветката и когато настройвате часа, деня и часа за събуждане.

Мощност

Захранването идва от старо захранване за лаптоп, моето произвежда 12V и може да достави 3A. Когато имате друго захранване, може да се наложи да регулирате резисторите последователно с LED-струните. (Виж отдолу)

Светодиоди

Светодиодите са свързани към 12V захранване, останалата част от електрониката на 5V е направена с линеен регулатор 7805. В схемата се казва, че използвам регулатор TO220, който не е необходим, тъй като микроконтролерът, дисплеят и часовникът в реално време използват само няколко милиампера. Моят часовник използва по -малка TO92 версия на 7805, способна да захранва 150mA.

Превключването на led-струните се извършва с N-канални MOSFET. Отново, в схемата показва други устройства, отколкото аз използвах. Случайно имах точно три много стари BUZ11 MOSFET, вместо по -новите IRLZ34N MOSFET. Те работят добре

Разбира се, можете да поставите колкото искате светодиоди, стига MOSFET и захранването да се справят с тока. В схемата съм нарисувал само един низ от всеки цвят, в действителност има няколко всеки цвят, успоредни на другите низове от този цвят.

Стъпка 5: Резистори (за светодиодите)

Резистори (за светодиодите)
Резистори (за светодиодите)

За резисторите в светодиодните струни. Белите и сините светодиоди обикновено имат напрежение 2.8V над тях, когато са с пълна яркост.

Червените светодиоди имат само 1.8V, зелените ми имат 2V над тях при пълна яркост.

Друго нещо е, че пълната им яркост не е същата. Затова бяха необходими някои експерименти, за да ги направят еднакво ярки (за моите очи). Като правят светодиодите еднакво ярки при пълна яркост, те също ще изглеждат еднакво ярки при по -ниски нива, сигналът за ширината на импулса винаги ги включва при пълна яркост, но през по -дългите и по -кратки времена очите ви се грижат за усредняването.

Започнете с такова изчисление. Захранването доставя (в моя случай) 12V.

Четири бели светодиода в серия се нуждаят от 4 x 2.8V = 11.2V, това оставя 0.8V за резистора.

Открих, че те са достатъчно ярки при 30mA, така че резисторът трябва да бъде:

0,8 / 0,03 = 26,6 ома. На схемата виждате, че поставям 22 ома резистор, което прави светодиодите малко по -ярки.

Сините светодиоди бяха твърде ярки при 30 mA, но в сравнение с белите светодиоди при 15 mA, те също имаха около 2,8 V над тях при 15 mA, така че изчислението беше 4 x 2,8 V = 11,2 V, оставяйки отново 0,8 V

0,8 / 0,015 = 53,3 ома, затова избрах резистор от 47 ома.

Червените ми светодиоди също се нуждаят от около 15 mA, които да са еднакво ярки като останалите, но те имат само 1.8V над тях при този ток. Така че мога да поставя повече в серия и все пак да имам малко „място“за резистора.

Шест червени светодиода ми дадоха 6 x 1.8 = 10.8V, така че над резистора беше 12 - 10.8 = 1.2V

1,2 / 0,015 = 80 ома, стигнах до 68 ома. Точно като другите, малко по -ярки.

Зелените светодиоди, които използвах, са толкова ярки, колкото и останалите, на около 20mA. Имах нужда само от няколко (точно като сините) и избрах да поставя четири в серия. При 20mA те имат 2, 1V над тях, което дава 3 x 2.1 = 8.4V

12 - 8,4 = 3,6 V за резистора. И 3,6 / 0,02 = 180 ома.

Ако изградите тази светлина за събуждане, е малко вероятно да имате същото захранване, ще трябва да регулирате броя на светодиодите в серията и необходимите резистори.

Малък пример. Кажете, че имате захранване, което дава 20V. Бих избрал да задам 6 сини (и бели) светодиода последователно, 6 x 3V = 18V, така че 2V за резистора. Да речем, че харесвате яркостта при 40mA. След това резисторът трябва да бъде 2V / 0.04 = 50 ома, резистор от 47 ома ще бъде добре.

Съветвам да не отивате по -високи от 50mA с обикновени (5 мм) светодиоди. Някои могат да се справят повече, но аз обичам да съм на сигурно място.

Стъпка 6: Софтуер

Целият код може да бъде изтеглен от:

gitlab.com/WilkoL/wakeup_light_stm8s103

дръжте изходния код отворен, до останалата част от тази инструкция, ако искате да следвате обяснението.

Main.c

Main.c първо настройва часовника, таймерите и други периферни устройства. Повечето от „драйверите“, които написах, използвайки стандартната библиотека от STMicroelectronics и ако имате въпроси относно тях, напишете ги в коментар под инструкциите.

Eeprom

Оставих кода „текст за показване“, който използвах, за да поставя текстове в eeprom на STM8S103 като коментари. Не бях сигурен, че имам достатъчно флаш памет за целия си код, затова се опитах да поставя възможно най -много в eeprom, за да имам всички флаш за програмата. В крайна сметка това се оказа ненужно и преместих текста на флаш. Но го оставих като коментиран текст във файла main.c. Хубаво е да го имам, когато трябва да направя нещо подобно по -късно (в друг проект)

Eeprom все още се използва, но само за съхраняване на времето за събуждане.

Веднъж в секунда

След настройка на периферните устройства кодът проверява дали е минала една секунда (с таймер).

Меню

Ако случаят е такъв, той проверява дали е натиснат бутон, ако е така, той влиза в менюто, където можете да зададете текущия час, деня от седмицата и времето за събуждане. Не забравяйте, че отнема около 5 минути, за да преминете от изключване към пълна яркост, така че задайте времето за събуждане малко по -рано.

Времето за събуждане се съхранява в eeprom, така че дори след прекъсване на захранването той да „знае“кога да ви събуди. Разбира се, текущото време се съхранява в часовника в реално време.

Сравнение на текущото време и времето за събуждане

Когато не е натиснат бутон, той проверява текущото време и го сравнява с времето за събуждане и делничния ден. Не искам да ме събужда през уикенда:-)

През повечето време нищо не трябва да се прави, така че променливата „leds“да е OFF, в противен случай на ON. Тази променлива се проверява заедно със сигнала „change_intensity“, който също идва от таймер и е активен 244 пъти в секунда. Така че, когато променливата „светодиоди“е ВКЛЮЧЕНА, интензивността се увеличава 244 пъти в секунда, а когато е изключена, намалява 244 пъти в секунда. Но увеличаването става на единични стъпки, където намаляването е на стъпки от 16, което означава, че когато светлината за събуждане се надяваме, че е свършила работата си, тя се изключва 16 пъти по -бързо, но все пак плавно.

Гладкост и извън паметта

Гладкостта идва от изчислението на сигмоидната крива. Изчислението е доста просто, но трябва да се направи в променливи с плаваща запетая (удвоява) поради функцията exp (), вижте файла sigmoid.c.

В стандартната ситуация компилаторът / линкерът на Cosmic няма поддръжка за променливи с плаваща запетая. Включването му е лесно (след като го намерите), но идва с увеличаване на размера на кода. Това увеличение беше твърде много, за да накара кода да се побере във флаш паметта, когато се комбинира с функцията sprintf (). И тази функция е необходима за преобразуване на числа в текст за дисплея.

Itoa ()

За да отстраня този проблем, създадох функцията itoa (). Това е функция Integer To Ascii, която е доста често срещана, но не е включена в стандартната библиотека на STMicroelectronics, нито в библиотеките на Cosmic.

Стъпка 7: IKEA (какво бихме направили без тях)

IKEA (какво бихме направили без тях)
IKEA (какво бихме направили без тях)
IKEA (какво бихме направили без тях)
IKEA (какво бихме направили без тях)
IKEA (какво бихме направили без тях)
IKEA (какво бихме направили без тях)

Снимката от е купена от IKEA. Това е рамка Ribba с размери 50 x 40 cm. Тази рамка е доста дебела и това я прави чудесна за скриване на електрониката зад нея. Вместо плакат или снимка слагам парче перфориран картон. Можете да го купите в магазина за хардуер, където понякога се нарича „дъска за легло“. В него има малки дупки, които го правят идеален за поставяне на светодиоди. За съжаление дупките на дъската ми бяха малко по-големи от 5 мм, така че трябваше да използвам горещо лепило, за да „монтирам“светодиодите.

Направих правоъгълен отвор в центъра на твърдата платка за 16x2 дисплея и го натиснах. ПХБ с цялата електроника виси на този дисплей, не се монтира към нищо друго.

Перфорираният твърд картон е боядисан в черен цвят със спрей, но зад мата. Пробих две дупки в рамката за бутоните, за да настроя часа и датата, тъй като рамката е доста дебела, трябваше да разширя дупките от вътрешната страна на рамката, за да накарам бутоните да стърчат достатъчно.

Препоръчано: