реклама

Хората са естествено програмирани да се събуждат с изгрева; за съжаление съвременният живот е продиктуван от произволен часовник, често ни принуждава да се събудим, когато няма естествена светлина. Днес ще направим будилник за изгрев, който нежно и бавно ще ви събуди, без да прибягвате до обидна машина за създаване на шум.

Ако създаването на будилник за изгрев е малко прекалено много за вас, вижте тези iPhone и Приложения за Android Използвайте тези приложения, за да ви помогне да спите по-добре [Android & iOS]След забързания ден, най-доброто нещо, което можете да направите, е да получите полезно количество сън. Винаги се появяват нови изследвания, които доказват колко важен е сънят в действителност за човек, подобрявайки ... Прочетете още които откриват кога е най-добре да ви събуди с движения на тялото Може ли приложение наистина да ви помогне да спите по-добре?Винаги съм бил експериментатор на сън, като през по-голямата част от живота си съм водил щателен дневник на сънищата и съм изучавал колкото мога по отношение на съня в процеса. Има ... Прочетете още

instagram viewer
, като гарантирате, че не сте се отдръпнали от този страхотен сън, но вместо това се събуждате, чувствайки се ярки и освежени - те наистина вършат работа.

План на проекта

Основната част от проекта ще бъде около 5-метрова LED светлинна лента, поставена около леглото. Ще ги захранваме с външно 12 волтово захранване, превключено с помощта на MOSFET N транзистори. Настройката за тази част ще бъде идентична с тази динамична осветителна система Изградете своя собствена динамична осветителна среда за медиен центърАко гледате много филми на вашия компютър или медиен център, сигурен съм, че сте се сблъскали с дилемата на осветлението; изключваш ли напълно всички светлини? Поддържате ли ги на пълен взрив? Или... Прочетете още Строих преди.

Времето ще бъде проблем - тъй като това е прототип, ще настроя Arduino да отброява от всеки път, когато е нулиран. На теория трябва да губим само секунда или две всеки ден, но в идеалния случай бихме включили чип „часовник в реално време“, за да направим това по-надеждно. Алармата за изгрев ще започне 30 минути преди събуждане и бавно ще увеличи нивото на изход, докато не стане 100% яркост - това трябва да е достатъчно, за да ни събуди, въпреки че е добра идея да продължите да използвате обикновения си будилник, докато тялото ви не е свикнало то.

В този проект ще включа и нощна светлина, която открива движение и активира дискретно ниско ниво светлина под леглото с 3 минутно време, отделно от LED светлините, тъй като тези ще предизвикат и съпругата ми, и аз нагоре. Осветлението на под леглото ще бъде търговско захранващо устройство, така че ще хакна реле вътре в контакта, за да го включите и изключите. Ако при никакви обстоятелства не ви е удобно да работите с 110-240V променлив ток (и това е общо взето добро правило да има), след това свържете 433 MHz безжичен предавател с комутационни гнезда, както е посочено на Raspberry Pi Arduino проект за автоматизация на дома Ръководство за домашна автоматизация с Raspberry Pi и ArduinoПазарът на домашна автоматизация е залят от скъпи потребителски системи, несъвместими помежду си и скъпи за инсталиране. Ако имате Raspberry Pi и Arduino, можете основно да постигнете същото нещо при ... Прочетете още .

Списък на частите и схема

  • Arduino
  • Комплект RGB LED светлинни ленти
  • 12 волта захранване
  • 3 x MOSFET N транзистори (използвам тип STP16NF06FP)
  • Гнездо за реле и захранване или безжични контролирани гнезда и подходящ предавател
  • Вашият избор на нощна светлина (редовното захранване с захранване е добре)
  • PIR сензор за движение (HC-SR501) или SC-04 сонар (не е толкова ефективен)
  • Светлинен сензор
  • Код на проекта - но прочетете, за да сте сигурни, че разбирате как да персонализирате всичко.

Ето пълната схема.

изгрев-аларма съединение

Окабеляване на реле

Забележка: Пропуснете този раздел, ако искате да използвате RGB светлините и като нощна светлина - това е специално за включване на отделна светлина, захранвана от мрежата.

За превключване на мрежовото захранване релето ви ще трябва да е с номинално напрежение - 110V или 240V AC в зависимост от това къде живеете - и повече от общия ампераж, който ще превключвате. Този, който съм използвал от този пакет сензори (отказ от отговорност: това е моят магазин) е 250VAC / 10A, така че трябва да сме в безопасност. Релетата имат a COM порт, обикновено в центъра, който трябва да бъде свързан към живия проводник, влизащ в щепсела; след това свържете живия терминал на гнездото към НЕ (нормално отворен). Не бива да ви казвам да не правите тази измама, тя е включена в контакт или ще умрете. Ако се страхувате да не се объркате с мрежовото захранване, използвайте вместо това безжични комутирани гнезда.

реле-окабеляване

Заземяващите и неутралните кабели трябва да отиват направо към контакта и да не докосват релето. Може да нямате земна линия в САЩ. Ваша отговорност е да знаете цветното кодиране на проводниците в местната си зона - ако по друг начин не можете да свържете обикновен гнездо в дома си или да свържете отново щепсел, не се опитвайте да вградите реле в такова!

За да тествате, свържете щифта на релейния сигнал на 12, след което стартирайте обикновена програма за мигане, модифицирана да работи на пин 12, а не 13, както е по подразбиране. Вашият гнездо трябва да се включва и изключва на всеки няколко секунди. Причината, поради която не използвам пин 13, е, че по време на процеса на качване, бордовият светодиод светва бързо последователно, за да посочи серийна активност, което би причинило и релето да се активира.

Правилно определяне на времето

Функциите за синхронизиране и часовник са трудни без достъп до мрежова връзка или специално Часовник в реално време (те включват собствени батерии, за да поддържат часовника дори когато основният Arduino няма мощност). За да поддържам ниските разходи, ще изневерявам. Ще бъде трудно да кодирам начален час за Arduino да започне отброяването му; следователно времето ще бъде относително към това начално време. На всеки 24 часа часовникът ще се нулира. Кодът на функцията на часовника по-долу гарантира глобалните променливи currentMillis и currentMinutes са правилни всеки ден. Arduino не трябва да губи повече от няколко секунди на всеки 45 дни; този твърдо кодиран стил на синхронизиране обаче е доста ограничен, тъй като прекъсването на тока или случайното нулиране ще прекъсне всичко, така че това със сигурност е една област, която може да бъде подобрена. Ако синхронизирането не се синхронизира, просто нулирайте Arduino в зададения от вас начален час.

Кодът трябва да бъде лесен за разбиране.

void часовник () {if (millis ()> = предишенMillis + 86400000) {// изтече цял ден, нулирайте часовника; предишенMillis + = 86400000; } currentMillis = millis () - предишенMillis; // това поддържа нашия currentMillis един и същ всеки ден currentMinutes = (currentMillis / 1000) / 60; }

Функция нощна светлина

Разделям основните контури на отделни функции, така че да е по-лесно да се чете, премахва или коригира. Най- нощна светлина() функция работи само между часовете, когато Arduino е нулиран (предполагам, че най-вероятно ще направите това или преди лягане, когато е тъмно), и докато не се появи алармата за изгрев. Първоначално се опитах да използвам резистор, зависим от светлина, но те не са много чувствителни към синя светлина (което се случва с цвета, който използвам за нощната светлина) и трудно да калибрирам правилно. Използването на часовника така или иначе има повече смисъл. Ще използваме глобалната currentMinutes променлива, която се нулира всеки ден.

PIR сензорът може да бъде малко причудлив, ако никога досега не сте го използвали, въпреки че окабеляването му не е трудно - ще откриете VCC, GND, и OUT ясно обозначен на гърба. Има и два променливи резистора; един, обозначен RX, определя обхвата (до около 7 m), а друг с етикет TX определя забавянето. Закъснението е 5 секунди при най-ниската му настройка (напълно обратно на часовниковата стрелка) и означава, че всяко моментно движение ще задейства поне 5 секунди състояние „включено“ от сензора. Той обаче определя и закъснението между активните състояния - така че ако изминат 5 секунди и няма движение открит, сензорът ще изпрати слаб сигнал за поне 5 секунди, дори ако има движение по време на това месечен цикъл. Ако зададете закъснението наистина високо около 30 секунди, може да изглежда, че сензорът е счупен.

PIR-сензор

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

void nightlight () {// Работи само между часовете на нулиране -> изгрев. ако (currentMinutes 

Аларма за изгрев

За простота ще използвам RGB цветовата стойност 255 255,0 за наситено жълт изгрев - по този начин увеличението на двата цветни канала ще бъде еднакво. Ако откриете, че ви буди много рано, помислете да започнете с наситено червено и да избледнее към жълто или бяло. Рампата, която използвах, е само линейна - може да искате да проучите, като използвате по-естествена крива за стойности на яркостта.

Функцията е проста - тя определя колко светлината трябва да се увеличава с всяка секунда, така че да е с пълна яркост след период от 30 минути; след това се умножава, че колкото и секунди да е в момента на изгрева. Ако вече е на пълна яркост, той остава за още 10 минути, за да се уверите, че сте изправени (и ако все още не сте, вероятно трябва да имате резервна аларма).

void sunrisealarm () {// всяка секунда през 30-минутния период трябва да увеличава стойността на цвета с: float прираст = (float) 255 / (30 * 60); // червено 255, зелено 255 ни дава пълна яркост жълто, ако (currentMinutes> = minutesUntilSunrise) {// изгрев започва! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * нарастване; Serial.print ("Текуща стойност за изгрев:"); Serial.println (currentVal); // по време на рампа нагоре напишете текущата стойност на увеличение на яркостта минути X, ако (currentVal <255) {analogWrite (RED, currentVal); analogWrite (ЗЕЛЕН, currentVal); } else if (currentMinutes - minutesUntilSunrise <40) {// след като сме на пълна яркост, дръжте светлините за 10 минути по-дълъг analogWrite (RED, 255); analogWrite (ЗЕЛЕН, 255); } else {// след това ги връщаме обратно в изключено състояние analogWrite (RED, 0); analogWrite (ЗЕЛЕНО, 0); } } }

Капки и бъдещи надстройки

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

изгрев-аларма

По време на създаването на този проект се сблъсках с много проблеми при справянето с голям брой, така че ако планирате да промените кода, имайте предвид това. На езика на C, the въвеждането на вашите променливи е много важно - числото не винаги е само число. Например, неподписан дълго променливите трябва да се използват за съхранение на супер големи числа, каквито имаме при разговора, когато говорим за милисекунди, но дори число, толкова малко, колкото 60 000, не може да бъде запазено като редовно цяло число (неподписан инт би бил приемлив за до 68 000). Въпросът е, четете на променливите си типове когато използвате големи числа и ако откривате странни бъгове, вероятно защото една от променливите ви няма достатъчно битове!

Също така открих проблем с много ниски течове на напрежението на яркостта - което води до най-малкото количество светлина, излъчвана дори когато digitalWrite (ЧЕРВЕН, 0) сигнал се излъчва - не мисля, че това е хардуерен проблем с лентите, тъй като те работят добре с официалните контролери. Ако някой може да реши този проблем, на снимката по-долу, ще съм най-благодарен. Опитах да сваля резистори и да ограничавам изходното напрежение от щифтовете на Arduino. Може да се наложи да добавя обикновена верига за превключване на захранването, за да захранва само напрежение към LED лентата, когато действително е необходимо; или може да се повредят MOSFET.

светлинна течове

За бъдеща работа се надявам да добавя IR приемник и да дублирам някои от функциите на оригиналния контролер - at най-малко способността да се променят цветовете като светлина за общо ползване, тъй като в момента този проект превръща лентата в посветена нощ светлина. Може дори да добавя автоматична функция за 30-минутно време.

Опитали ли сте това, направили ли сте подобрения или имате някакви други идеи? Уведомете ме в коментарите!

Джеймс има бакалавърска степен по изкуствен интелект и е сертифициран като CompTIA A + и Network +. Той е водещ разработчик на MakeUseOf и прекарва свободното си време, играейки VR пейнтбол и настолни игри. Той изгражда компютри още от дете.