
Gabriel Brooks
0
2694
797
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é světlo. Dnes vydáme 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 aplikace pro iPhone a Android. Tyto aplikace vám pomohou lépe spát [Android a iOS] Tyto aplikace vám pomohou spát lépe [Android a iOS] po hektice den, to nejlepší, co můžete udělat, je získat prospěšné množství spánku. Objevují se vždy nové studie, které dokazují, jak důležitý je spánek pro člověka, což zlepšuje ... které detekují, kdy vás nejlépe probudí pohybem těla Může aplikace opravdu pomoci lépe spát? 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. Existuje…, které zajišťují, že nejste odtáhnut od tohoto úžasného snu, ale místo toho se probudí a cítí se svěží a svěží - opravdu pracují.
Osnova projektu
Hlavní částí projektu bude asi 5 metrové LED pásové světlo položené kolem postele. Budeme je napájet externím 12 voltovým napájením, přepínaným pomocí některých tranzistorů MOSFET N. Nastavení této části bude identické s dynamickým osvětlovacím systémem Vytvořte si vlastní dynamické okolní osvětlení pro mediální centrum Vytvořte si vlastní dynamické okolní osvětlení pro mediální centrum Pokud sledujete hodně filmů v počítači nebo v mediálním centru, jsem určitě jste čelili dilematu osvětlení; úplně zhasnete všechna světla? Máte je na plném výbuchu? Nebo ... už jsem postavil.
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 ztratit každý den jen dvě nebo dvě, ale v ideálním případě bychom měli zahrnout “hodiny reálného času” čip, aby to bylo spolehlivější. Budík na východ 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, aby nás probudilo, i když je dobré pokračovat v používání běžného budíku, dokud nebude vaše tělo zvyklý na to.
Do tohoto projektu také zapojím noční světlo, které detekuje pohyb a aktivuje diskrétní světlo s nízkou úrovní pod postelí s časovým limitem 3 minuty, oddělené od LED světel, protože by to způsobilo, že se moje žena i já probudí . Osvětlení pod postelí bude komerční síťovou jednotkou, takže budu zasekávat relé uvnitř zásuvky, abych to zapnul a vypnul. Pokud za jakýchkoli okolností pracujete s napájecím napětím 110 - 240 V střídavého proudu (což je obecně dobré pravidlo), zapojte bezdrátový vysílač 433 MHz se spínacími zásuvkami, jak je uvedeno v projektu domácí automatizace Raspberry Pi Arduino. Příručka domácí automatizace s Raspberry Pi a Arduino Příručka domácí automatizace s Raspberry Pi a Arduino Trh 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 stejné věci na… .
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řepnutí síťového napájení bude třeba, aby vaše relé bylo dimenzováno na napětí - 110 V nebo 240 V AC v závislosti na tom, kde žijete - a více, než je celková intenzita, kterou přepnete. Ten, který jsem použil z této sady senzorů (vyloučení 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, je to zapojeno 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 ve vašem domě 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 pár sekund. Důvod, proč nepoužívám pin 13, je ten, že během procesu nahrávání se palubní LED spustí rychle za sebou, 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ého 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 čas zahájení Arduina, aby začal odpočítávat; časování tedy bude 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ž několik sekund každých 45 dní; tento pevně zakódovaný styl načasování je však 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 bylo možné vylepš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() 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, když je tma), a dokud nebude spuštěn alarm východu slunce. Zpočátku jsem se snažil 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. Použití hodin dává větší smysl, stejně. 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 nikdy předtím 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í nejméně 5 sekund “na” stav ze senzoru. Určuje však také zpoždění mezi aktivními stavy - takže pokud uplyne 5 sekund a není detekován žádný pohyb, senzor vyšle nízký signál po dobu alespoň 5 sekund, i když během této doby dojde k pohybu. 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 jak pro východ slunce, tak pro noční světlo, měli byste být schopni upravit kód dostatečně snadno.
void nightlight () // Pracují pouze mezi hodinami reset -> svítání. if (currentMinutes < minutesUntilSunrise) if(digitalRead(trigger) == 1) nightLightTimeOff = millis()+nightLightTimeOut; // activate, or extend the time until turning off the light Serial.println("Activating nightlight"); //Turn light on if needed if(millis() < nightLightTimeOff) digitalWrite(nightLight,HIGH); else digitalWrite(nightLight,LOW);
Sunrise Alarm
Pro zjednodušení použiji hodnotu RGB 255 255,0 pro tmavě žluté svítání - přírůstek na obou barevných kanálech bude tedy 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 v současné době do východu slunce. Pokud je již v plném jasu, zůstane zapnuto dalších 10 minut, aby se zajistilo, že jste v pořádku (a pokud stále ještě nejste, měli byste pravděpodobně mít záložní poplach na místě).
void sunrisealarm () // každou sekundu během 30minitového období by měla zvýšit hodnotu barvy o: float increment = (float) 255 / (30 * 60); // červená 255, zelená 255 nám dává plný jas žlutý, pokud (currentMinutes> = minutesUntilSunrise) // začíná svítat! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * inkrement; Serial.print ("Aktuální hodnota za východu slunce:"); Serial.println (currentVal); // během náběhu, zapište aktuální hodnotu minut X zvýšení jasu, pokud (currentVal < 255) analogWrite(RED,currentVal); analogWrite(GREEN,currentVal); else if(currentMinutes - minutesUntilSunrise < 40) // once we're at full brightness, keep the lights on for 10 minutes longer analogWrite(RED,255); analogWrite(GREEN,255); else //after that, we're nuking them back to off state analogWrite(RED,0); analogWrite(GREEN,0);
Úskalí a budoucí upgrady
Používám to už 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ů s řešením 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 tak malé jako 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 o svých typech 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ů!
Také jsem našel problém s velmi nízkým jasem úniku napětí - což vedlo k nejmenšímu množství světla vyzařovaného, i když digitalWrite (ČERVENÁ, 0) je vysílán signál - nemyslím si, že je to 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 muset přidat jednoduchý spínací obvod napájení, aby napájel napětí na LED pásech pouze tehdy, když to bude skutečně potřeba; nebo by to mohly být vadné MOSFETy.
V budoucnu doufám, že přidám IR přijímač a duplikuji některé funkce původního ovladače - alespoň schopnost měnit barvy jako světlo pro běžné použití, protože 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!