reklama
Lidé jsou přirozeně naprogramováni tak, aby se probudili s východem slunce; bohužel moderní život je diktován libovolnými hodinami, které nás často nutí probudit se, když není přirozeného světla. Dnes budeme vyrábět svítící budík, který vás jemně a pomalu probudí, aniž byste se uchýlili k útočnému zařízení na vytváření hluku.
Pokud je pro vás budík s východem slunce příliš velký, podívejte se na tyto iPhone a Aplikace pro Android Tyto aplikace vám pomohou lépe spát [Android a iOS]Po hektickém dni je nejlepší udělat spánek. Vždy se objevují nové studie, které dokazují, jak důležitý je spánek pro člověka, což zlepšuje ... Přečtěte si více které detekují kdy tě nejlépe probudí tělními pohyby Může aplikace opravdu pomoci spát lépe?Vždy jsem byl trochu spánkovým experimentátorem, který jsem po většinu svého života držel pečlivý deník snů a studoval jsem co nejvíce o tom, jak v tomto procesu spát. K dispozici je ... Přečtěte si více , čímž se ujistíte, že nejste od toho úžasného snu odtaženi, ale místo toho se probudíte a budete se cítit svěží a svěží - opravdu pracují.
Osnova projektu
Hlavní částí projektu bude asi 5 metrů LED pásové světlo položené kolem postele. Napájíme je pomocí externího 12 voltového zdroje, přepínaného pomocí některých tranzistorů MOSFET N. Nastavení této části bude totožné s nastavením dynamický systém osvětlení Vytvořte si vlastní dynamické okolní osvětlení pro mediální centrumPokud sledujete hodně filmů v počítači nebo v mediálním centru, jsem si jistý, že jste čelili dilematu osvětlení; úplně zhasnete všechna světla? Máte je na plném výbuchu? Nebo... Přečtěte si více Předtím jsem stavěl.
Načasování bude problém - protože se jedná o prototyp, nastavím Arduino, aby odpočítávalo od kdykoli je resetováno. Teoreticky bychom měli každý den ztratit jen jednu sekundu nebo dvě, ale v ideálním případě bychom zahrnuli čip „hodiny reálného času“, aby to bylo spolehlivější. Poplach při východu slunce se spustí 30 minut před časem probuzení a pomalu zvyšuje výstupní úroveň, dokud není na 100% jasu - to by mělo stačit k probuzení, i když je dobré pokračovat v používání běžného budíku, dokud nebude vaše tělo zvyklé to.
Do tohoto projektu zapojím také noční světlo, které detekuje pohyb a aktivuje diskrétní nízkou úroveň světlo pod postelí s 3 minutovou prodlevou, oddělené od LED světel, protože by to způsobilo, že se moje žena i já probudí nahoru. Osvětlení pod postelí bude komerční síťovou jednotkou, takže do zásuvky zasunu relé, abych to zapnul a vypnul. Pokud se vám nepodaří za žádných okolností pracovat se síťovým napětím 110 - 240 V AC (a to je obecně) dobré pravidlo), poté zapojte bezdrátový vysílač 433 MHz se spínacími zásuvkami, jak je uvedeno na Projekt domácí automatizace Raspberry Pi Arduino Průvodce domácí automatizací s Raspberry Pi a ArduinoTrh domácí automatizace je zaplaven drahými spotřebitelskými systémy, nekompatibilními navzájem a nákladnou instalací. Pokud máte Raspberry Pi a Arduino, můžete v podstatě dosáhnout totéž na ... Přečtěte si více .
Seznam dílů a schéma
- Arduino
- Sada RGB LED pásek světla
- 12 V napájecí zdroj
- 3 x tranzistory MOSFET N (používám typ STP16NF06FP)
- Reléová a napájecí zásuvka nebo bezdrátově ovládané zásuvky a vhodný vysílač
- Váš výběr nočního světla (pravidelné napájení ze sítě pomocí zástrčky je v pořádku)
- Pohybový senzor PIR (HC-SR501) nebo sonar SC-04 (není tak účinný)
- Světelný senzor
- Kód projektu - ale čtěte dál, abyste se ujistili, že rozumíte tomu, jak všechno přizpůsobit.
Zde je kompletní schéma.
Zapojení relé
Poznámka: Tuto sekci přeskočte, pokud chcete použít světla RGB také jako noční světlo - to je konkrétně pro zapnutí samostatného síťového napájení.
Pro přepínání síťového napájení bude třeba, aby vaše relé mělo jmenovité napětí - 110 V nebo 240 V AC v závislosti na tom, kde žijete - a více než je celková proudová hodnota, kterou přepnete. Ten, který jsem použil z této sady senzorů (odmítnutí odpovědnosti: to je můj obchod) je 250VAC / 10A, takže bychom měli být v bezpečí. Relé mají com port, obvykle ve středu, který by měl být připojen k živému drátu přicházejícímu do zástrčky; poté připojte živý terminál soketu k NE (obvykle otevřeno). Neměl bych ti říkat, abys to nedělal, že je zapojen do zásuvky, nebo budeš umírat. Pokud se bojíte zasílání zpráv ze sítě, použijte raději bezdrátové zásuvky.
Uzemňovací a nulové kabely by měly jít rovně do zásuvky a nedotýkat se relé. V USA možná nemáte pozemskou linku. Je vaší povinností znát barevné kódování vodičů ve vaší místní oblasti - Pokud byste jinak nemohli zapojit běžnou zásuvku u vás doma nebo zapojit zásuvku, nezkoušejte vložit relé do jedné!
Chcete-li otestovat, připojte signální pin relé na 12 a poté spusťte jednoduchý program blikání upravený tak, aby pracoval na pin 12, nikoli 13, jako je výchozí. Vaše zásuvka by se měla zapínat a vypínat každých několik sekund. Důvod, proč nepoužívám pin 13, je ten, že během procesu nahrávání se vnitřní LED dioda aktivuje v rychlém sledu, aby indikovala sériovou aktivitu, což by také způsobilo aktivaci relé.
Správné načasování
Funkce časování a hodin jsou obtížné bez přístupu k síťovému připojení nebo vyhrazené Hodiny v reálném čase (mezi ně patří vlastní baterie, které udržují hodiny v chodu, i když hlavní Arduino nemá energii). Abych udržel nízké náklady, podvádím. Budu tvrdě zakódovat počáteční čas pro Arduino, aby začal odpočítávat; načasování bude tedy relativní k tomuto počátečnímu času. Každých 24 hodin se hodiny vynulují. Níže uvedený funkční kód hodin zajišťuje globální proměnné currentMillis a currentMinutes jsou správné každý den. Arduino by nemělo ztrácet více než pár sekund každých 45 dní; nicméně tento pevně zakódovaný styl časování je poměrně omezený v tom, že výpadek proudu nebo náhodný reset přeruší vše, takže je to určitě jedna oblast, na které by se dalo zlepšit. Pokud se časování nedostane ze synchronizace, jednoduše resetujte Arduino v nastavený čas zahájení.
Kód by měl být snadno srozumitelný.
void clock () {if (millis ()> = previousMillis + 86400000) {// uplynul celý den, resetujte hodiny; previousMillis + = 86400000; } currentMillis = millis () - previousMillis; // udržuje náš aktuálníMillis každý den stejný proudMinutes = (currentMillis / 1000) / 60; }
Funkce nočního světla
Hlavní smyčky jsem rozdělil na odlišné funkce, takže je snazší číst a odebírat nebo upravovat. noční světlo() Tato funkce funguje pouze mezi hodinami, kdy byl Arduino resetován (předpokládám, že to pravděpodobně uděláte před spaním nebo kolem něj, když je tma), a dokud nebude spuštěn alarm východu slunce. Zpočátku jsem se pokusil použít rezistor závislý na světle, ale není příliš citlivý na modré světlo (což se stává barvou, kterou používám pro noční světlo), a je obtížné správně kalibrovat. Každopádně použití hodin má větší smysl. Použijeme globální currentMinutes proměnná, která se resetuje každý den.
Senzor PIR může být trochu nepředvídatelný, pokud jste ho ještě nikdy nepoužívali, přestože zapojení není obtížné - najdete VCC, GND, a VEN jasně na zadní straně. Existují také dva proměnné odpory; jeden označený RX určuje rozsah (až asi 7 m) a druhý označený TX určuje zpoždění. Zpoždění je 5 sekund při jeho nejnižším nastavení (plně proti směru hodinových ručiček) a znamená, že jakýkoli momentální pohyb spustí od senzoru alespoň 5 sekund stavu „zapnuto“. Určuje však také zpoždění mezi aktivními stavy - takže pokud uplyne 5 sekund a žádný pohyb není detekován, senzor vyšle nízký signál po dobu nejméně 5 sekund, i když během něj dojde k pohybu doba. Pokud máte zpoždění nastaveno opravdu vysoko na přibližně 30 sekund, může to vypadat, že je senzor poškozený.
Pokud spíte sami a nevadí vám používat stejná RGB pásová světla pro budík při východu slunce i noční světlo, měli byste být schopni kód upravit dostatečně snadno.
void nightlight () {// Pracují pouze mezi hodinami reset -> svítání. if (currentMinutes
Sunrise Alarm
Pro jednoduchost budu používat barevnou hodnotu RGB 255 255,0 pro tmavě žluté svítání - tak bude přírůstek na obou barevných kanálech stejný. Pokud zjistíte, že vás probouzí příliš brzy, zvažte zahájení tmavě červenou a vyblednutí směrem ke žluté nebo bílé. Rampa, kterou jsem použil jen lineárně - možná budete chtít prozkoumat pomocí přirozenější křivky pro hodnoty jasu.
Funkce je jednoduchá - zjistí, kolik světla by se mělo každou sekundu zvyšovat, takže je po 30 minutách v plném jasu; pak znásobí, že o mnoho sekund je však aktuálně do východu slunce. Pokud je již v plném jasu, zůstane zapnuto dalších 10 minut, abyste se ujistili, že jste v provozu (a pokud stále ještě nejste, měli byste pravděpodobně mít záložní alarm).
void sunrisealarm () {// každou sekundu během 30 minutové periody by měla zvýšit hodnotu barvy o: float increment = (float) 255 / (30 * 60); // červená 255, zelená 255 nám dává plnou jasnost žlutou, pokud (currentMinutes> = minutesUntilSunrise) {// začíná východ slunce! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * inkrement; Serial.print ("Aktuální hodnota za svítání:"); Serial.println (currentVal); // během náběhu nahoru zapište aktuální hodnotu minut X zvýšení jasu, pokud (currentVal <255) {analogWrite (RED, currentVal); analogWrite (ZELENÁ, aktuálníVal); } jinak pokud (currentMinutes - minutesUntilSunrise <40) {// jakmile jsme v plném jasu, nechte světla svítit o 10 minut déle analogWrite (RED, 255); analogWrite (ZELENÁ, 255); } jindy {// poté je vracíme zpět do vypnutého analogového stavu (RED, 0); analogWrite (ZELENÁ, 0); } } }
Úskalí a budoucí upgrady
Používám to již několik posledních týdnů a opravdu pomáhá probudit pocit svěží a slušné doby; noční světlo funguje opravdu dobře. Není to ale dokonalé, takže zde je několik věcí, které vyžadují práci a ponaučení získané během stavby.
Při přípravě tohoto projektu jsem narazil na spoustu problémů při řešení velkého počtu, takže pokud plánujete úpravu kódu, mějte na paměti. V jazyce C, psaní vašich proměnných je velmi důležité - číslo není vždy jen číslo. Například, bez podpisu dlouho proměnné by měly být použity k ukládání super velkých čísel, jako bychom se zabývali, když mluvíme o milisekundách, ale ani číslo 60 000 nemůže být uloženo jako normální celé číslo (nepodepsaná int by byla přijatelná až pro 68 000). Jde o to, přečtěte si vaše typy proměnných když používáte velká čísla a pokud objevujete liché chyby, je to pravděpodobně proto, že jedna z vašich proměnných nemá dostatek bitů!
Objevil jsem také problém s velmi nízkým únikem napětí jasu - což vede k nejmenšímu množství vyzařovaného světla, i když digitalWrite (ČERVENÁ, 0) je vysílán signál - nemyslím si, že se jedná o hardwarový problém s proužky, protože fungují dobře s oficiálními kontroléry. Pokud někdo dokáže tento problém vyřešit, na obrázku níže, byl bych velmi vděčný. Snažil jsem se stáhnout odpory a omezit výstupní napětí z pinů Arduino. Možná budu potřebovat přidat jednoduchý spínací obvod napájení, aby napájel napětí LED pásku pouze tehdy, když to bude skutečně potřeba; nebo by to mohly být vadné MOSFETy.
Pro budoucí práci doufám, že přidám IR přijímač a duplikuji některé funkce původního ovladače - na přinejmenším schopnost měnit barvy jako světlo pro běžné použití, právě teď tento projekt mění pruh na vyhrazenou noc světlo. Mohu dokonce přidat automatickou 30minutovou funkci časového limitu.
Vyzkoušeli jste to, provedli vylepšení nebo máte nějaké jiné nápady? Dejte mi vědět v komentářích!
James má bakalářský titul v oboru umělé inteligence a je držitelem certifikátu CompTIA A + a Network +. Je hlavním vývojářem MakeUseOf a tráví svůj volný čas hraním VR paintballu a deskových her. Staví počítače od dětství.