Reklama

Ľudia sú prirodzene naprogramovaní tak, aby sa prebudili pri východe slnka; bohužiaľ moderný život je určený ľubovoľnými hodinami, ktoré nás často nútia zobudiť sa, keď neexistuje prirodzené svetlo. Dnes vytvoríme východ slnka budík, ktorý vás jemne a pomaly zobudí bez toho, aby ste sa uchýlili k útočnému stroju na tvorbu hluku.

Ak je budenie východu slnka pre vás príliš priveľa, pozrite sa na tieto telefóny iPhone a Aplikácie pre Android Pomocou týchto aplikácií môžete lepšie spať [Android a iOS]Najlepšie je po hektickom dni získať prospešné množstvo spánku. Vždy sa objavujú nové štúdie, ktoré dokazujú, aký dôležitý je spánok pre človeka, čo zlepšuje ... Čítaj viac ktoré detekujú kedy ťa najlepšie prebudia pohybmi tela Môže aplikácia naozaj pomôcť spať lepšie?Vždy som bol trochu spánkovým experimentátorom, ktorý som po väčšinu svojho života držal dôkladný denník snov a študoval som toľko, ako som len dokázal spať v tomto procese. Tam sú... Čítaj viac , zabezpečujúc, aby ste sa odtiahli od tohto úžasného sna, ale namiesto toho sa prebudili a cítili sa sviežo a sviežo - skutočne fungujú.

instagram viewer

Prehľad projektu

Hlavnou časťou projektu bude asi 5 metrov LED pásikové svetlo položené okolo postele. Budeme ich napájať externým 12 voltovým zdrojom, prepínaným pomocou niektorých tranzistorov MOSFET N. Nastavenie pre túto časť bude totožné s nastavením dynamický systém osvetlenia Zostavte si svoje vlastné dynamické okolité osvetlenie pre mediálne centrumAk sledujete veľa filmov na počítači alebo v mediálnom centre, určite ste čelili dileme osvetlenia; úplne vypnete všetky svetlá? Myslíte si, že ich máte na dosah? Alebo ... Čítaj viac Postavil som predtým.

Načasovanie bude problém - keďže ide o prototyp, nastavím Arduino, aby odpočítavalo pri každom jeho resetovaní. Teoreticky by sme mali stratiť každý deň len dve alebo dve sekundy, ale v ideálnom prípade by sme mali zaradiť čip „hodiny reálneho času“, aby sa to dalo spoľahlivejšie. Alarm východu slnka sa spustí 30 minút pred časom budenia a pomaly zvyšuje úroveň výstupu, až kým nebude na 100% jasu - malo by to stačiť na prebudenie, hoci je dobré pokračovať v používaní bežného budíka, kým si vaše telo zvykne ono.

Do tohto projektu zapojím aj nočné svetlo, ktoré detekuje pohyb a aktivuje diskrétnu nízku úroveň svetlo pod posteľou s 3-minútovým časovým oneskorením, oddelené od LED svetiel, pretože by to spôsobilo, že by sa moja žena aj ja prebudili up. Osvetlenie pod posteľou bude komerčnou sieťovou jednotkou, takže zapnem a vypnem zasunutie relé do zásuvky. Ak za akýchkoľvek okolností nie ste spokojní s prácou so striedavým napätím 110 - 240 V AC (a to je všeobecne) dobré pravidlo), potom zapojte bezdrôtový vysielač s frekvenciou 433 MHz so spínacími zásuvkami, ako je uvedené v Projekt domácej automatizácie Raspberry Pi Arduino Sprievodca domácou automatizáciou s Raspberry Pi a ArduinoTrh domácej automatizácie je zaplavený drahými spotrebiteľskými systémami, navzájom nekompatibilnými a nákladnou inštaláciou. Ak máte Raspberry Pi a Arduino, môžete v podstate dosiahnuť to isté pri ... Čítaj viac .

Zoznam častí a schéma

  • Arduino
  • Sada RGB LED pásikových svetiel
  • 12 V napájanie
  • 3 x tranzistory MOSFET N (používam typ STP16NF06FP)
  • Reléová a sieťová zásuvka alebo bezdrôtové zásuvky a vhodný vysielač
  • Váš výber nočného svetla (bežné napájanie zo siete pomocou zástrčky je v poriadku)
  • Pohybový senzor PIR (HC-SR501) alebo sonar SC-04 (nie je tak účinný)
  • Svetelný senzor
  • Kód projektu - ale čítajte ďalej, aby ste sa uistili, že rozumiete tomu, ako všetko prispôsobiť.

Tu je kompletná schéma.

svitania alarm obvodu

Zapojenie relé

Poznámka: Túto časť preskočte, ak chcete používať svetlá RGB aj ako nočné svetlo - to je konkrétne pre zapnutie samostatného sieťového svetla.

Na prepínanie sieťového napájania bude potrebné, aby vaše relé malo menovité napätie - 110V alebo 240 V str v závislosti od toho, kde žijete - a viac ako je celková intenzita, ktorú prepnete. Ten, ktorý som použil z tejto sady senzorov (zrieknutie sa zodpovednosti: to je môj obchod) je 250 VAC / 10A, takže by sme mali byť v bezpečí. Relé majú a com port, zvyčajne v strede, ktorý by mal byť pripojený k živému vodiču prichádzajúcemu do zástrčky; potom pripojte aktívny konektor soketu k NO (normálne otvorené). Nemal by som ti hovoriť, aby si to nerobil, pretože je zapojený do zásuvky, alebo budeš musieť zomrieť. Ak sa bojíte zasielania správ zo siete, použite radšej bezdrôtové zásuvky.

relé, zapojenie

Uzemňovacie a neutrálne káble by mali ísť priamo do zásuvky a nedotýkať sa relé. Možno nemáte pozemnú linku v USA. Je vašou povinnosťou poznať farebné kódovanie vodičov vo vašej oblasti - ak by ste inak nemohli zapojiť bežnú zásuvku vo vašej domácnosti alebo zapojiť zásuvku, neskúšajte vložiť relé do jednej!

Na testovanie pripojte signálny pin relé na 12 a potom spustite jednoduchý program blikania upravený tak, aby pracoval na pin 12, nie 13, ako je predvolené. Vaša zásuvka by sa mala zapínať a vypínať každých pár sekúnd. Dôvod, prečo nepoužívam kolík 13, je ten, že počas procesu nahrávania sa palubná dióda LED spustí v rýchlom slede, aby indikovala sériovú aktivitu, ktorá by tiež spôsobila aktiváciu relé.

Správne načasovanie

Funkcie načasovania a hodín sú náročné bez prístupu k sieťovému pripojeniu alebo vyhradených funkcií Hodiny v reálnom čase (Patria sem aj ich vlastné batérie, ktoré udržia hodiny v chode, aj keď hlavný Arduino nemá energiu). Aby som udržal nízke náklady, podvádzam. Budem tvrdo zakódovať začiatočný čas pre Arduino, aby začal odpočítavanie; časovanie bude preto relatívne k tomuto času začiatku. Každých 24 hodín sa hodiny vynulujú. Nižšie uvedený kód funkcie hodín zaisťuje globálne premenné currentMillis a currentMinutes sú správne každý deň. Arduino by nemalo stratiť viac ako pár sekúnd každých 45 dní; tento pevne kódovaný štýl načasovania je však dosť obmedzený v tom, že výpadok napájania alebo neúmyselné vynulovanie narušia všetko, takže toto je určite jedna z oblastí, ktorá by sa mohla zlepšiť. Ak sa časovanie nedostane zo synchronizácie, jednoducho resetujte Arduino v nastavenom čase začiatku.

Kód by mal byť ľahko zrozumiteľný.

void clock () {if (millis ()> = previousMillis + 86400000) {// uplynul celý deň, vynulujte hodiny; previousMillis + = 86400000; } currentMillis = millis () - previousMillis; // takto sa udržia naše súčasnéMillis každý deň rovnakéMinutes = (currentMillis / 1000) / 60; }

Funkcia nočného svetla

Hlavné slučky som rozdelil na odlišné funkcie, aby sa dali ľahšie čítať a odstraňovať alebo upravovať. nočné svetlo() Funkcia funguje iba v čase, keď bol Arduino resetovaný (predpokladám, že to pravdepodobne urobíte pred spaním alebo okolo neho, keď bude tma), a kým sa nezačne spustiť výstražný signál o východe slnka. Spočiatku som sa snažil použiť rezistor závislý od svetla, ale nie je príliš citlivý na modré svetlo (čo sa stáva farbou, ktorú používam pre nočné svetlo), a je ťažké ho správne kalibrovať. Používanie hodín má napriek tomu väčší zmysel. Použijeme globálne currentMinutes premenná, ktorá sa vynuluje každý deň.

Senzor PIR môže byť trochu nepredvídateľný, ak ste ho nikdy predtým nepoužívali, hoci zapojenie nie je ťažké - zistíte, že VCC, GNDa VON zreteľne označené na zadnej strane. Existujú tiež dva variabilné odpory; jeden označený RX určuje rozsah (až asi 7 metrov) a druhý označený TX určuje oneskorenie. Oneskorenie je 5 sekúnd pri najnižšom nastavení (úplne proti smeru hodinových ručičiek) a znamená, že akýkoľvek okamžitý pohyb spustí zo senzora najmenej 5 sekúnd stavu „zapnuté“. Určuje však aj oneskorenie medzi aktívnymi stavmi - takže ak uplynie 5 sekúnd a nedochádza k žiadnemu pohybu Ak je detekovaná detekcia, senzor vyšle nízku hladinu po dobu najmenej 5 sekúnd, aj keď počas nej dôjde k pohybu obdobie. Ak nastavíte oneskorenie naozaj na približne 30 sekúnd, môže sa zdať, že je snímač poškodený.

PIR čidlá

Ak spíte sami a nevadí vám používať rovnaké pásiky RGB pre budík pri východe slnka aj pre nočné svetlo, mali by ste byť schopní kód upraviť dostatočne ľahko.

void nightlight () {// Pracujú iba medzi hodinami vynulovania -> svitania. if (currentMinutes 

Sunrise Alarm

Kvôli jednoduchosti použijem hodnotu RGB farby 255 255,0 pre tmavo žlté svitanie - prírastok na oboch farebných kanáloch bude teda rovnaký. Ak zistíte, že vás to prebúdza príliš skoro, zvážte začatie s tmavo červenou farbou a slabnutie smerom k žltej alebo bielej. Rampa, ktorú som použil iba lineárne - možno budete chcieť skúmať prirodzenejšiu krivku pre hodnoty jasu.

Táto funkcia je jednoduchá - zisťuje, o koľko by sa malo svetlo zvyšovať o každú sekundu, takže je po 30 minútach v plnom jasu; potom vynásobí, že o mnoho sekúnd je však v súčasnosti do východu slnka. Ak už je v plnom jase, zostane zapnutá ďalších 10 minút, aby ste sa uistili, že ste v poriadku (a ak ešte stále nie ste, pravdepodobne by ste mali mať zabezpečený záložný alarm).

void sunrisealarm () {// každú sekundu počas 30-minútovej periódy by mala zvýšiť hodnotu farby o: float increment = (float) 255 / (30 * 60); // červená 255, zelená 255 nám dáva plný jas žltý, ak (currentMinutes> = minutesUntilSunrise) {// začína svitanie! float currentVal = (float) ((currentMillis / 1000) - (minútyUntilSunrise * 60)) * prírastok; Serial.print („Aktuálna hodnota pre východ slnka:“); Serial.println (currentVal); // počas nábehu zapíšte aktuálnu hodnotu minútového prírastku jasu X, ak (currentVal <255) {analogWrite (RED, currentVal); analogWrite (GREEN, currentVal); } inak, ak (currentMinutes - minutesUntilSunrise <40) {// Akonáhle dosiahneme maximálny jas, nechajte svetlá zapnuté o 10 minút dlhšie, analogový zápis (ČERVENÝ, 255); analogWrite (GREEN, 255); } else {// potom ich zoberieme späť do vypnutého stavu analogWrite (RED, 0); analogWrite (ZELENÁ, 0); } } }

Úskalia a budúce vylepšenia

Používam to už niekoľko posledných týždňov a skutočne mi pomáha prebudiť pocit sviežosti a slušnosti; nočné svetlo funguje naozaj dobre. Nie je to však dokonalé, takže tu je niekoľko vecí, ktoré si vyžadujú prácu a skúsenosti získané počas výstavby.

Sunrise alarm

Pri príprave tohto projektu som narazil na množstvo problémov týkajúcich sa riešenia veľkého počtu, takže ak plánujete úpravu kódu, nezabudnite na to. V jazyku C, zadanie premenných je veľmi dôležité - číslo nie je vždy iba číslo. Napríklad, nepodpísané dlho premenné by sa mali používať na ukladanie veľmi veľkých čísel, ako by sme riešili, keď hovoríme o milisekundách, ale ani číslo 60 000 nemožno uložiť ako bežné celé číslo. (bez podpisu by bolo prijateľné až 68 000). Pointa je, Prečítajte si o vašich typoch premenných keď používate veľké čísla a ak zistíte nepárne chyby, je to pravdepodobne preto, že jedna z vašich premenných nemá dostatok bitov!

Zistil som tiež problém s únikom napätia s veľmi nízkym jasom - čo vedie k najmenšiemu vyžarovaniu svetla, aj keď digitalWrite (ČERVENÉ, 0) je vysielaný signál - nemyslím si, že je to hardvérový problém s prúžkami, pretože fungujú dobre s oficiálnymi radičmi. Ak niekto dokáže tento problém vyriešiť, na obrázku nižšie, bol by som veľmi vďačný. Skúsil som strhnúť odpory a obmedziť výstupné napätie z pinov Arduino. Možno budem musieť pridať jednoduchý obvod na prepínanie napájania, aby som LED pásik napájal iba vtedy, keď to bude skutočne potrebné; alebo to môže byť chybný MOSFET.

light-únik

Pre budúcu prácu dúfam, že pridám IR prijímač a duplikujem niektoré z funkcií pôvodného radiča - na prinajmenšom schopnosť meniť farby ako svetlo na všeobecné použitie, práve teraz tento projekt mení prúžok na vyhradenú noc svetlo. Môžem dokonca pridať automatickú funkciu časového limitu 30 minút.

Skúsili ste to, urobili ste vylepšenia alebo máte nejaké ďalšie nápady? Dajte mi vedieť v komentároch!

James má bakalárske štúdium v ​​oblasti umelej inteligencie a je držiteľom certifikátu CompTIA A + a Network +. Je popredným vývojárom MakeUseOf a trávi svoj voľný čas hraním VR paintballu a spoločenských hier. Staval počítače od malička.