Oglas

Ljudje smo po naravni poti programirani, da se prebudimo ob sončnem vzhodu; na žalost moderno življenje narekuje poljubna ura, ki nas pogosto sili, da se zbudimo, ko ni naravne svetlobe. Danes bomo izdelovali budilko ob sončnem vzhodu, ki vas bo nežno in počasi zbudila, ne da bi se zatekli k žaljivemu stroju.

Če vam je budilka za sončni vzhod nekoliko preveč, si oglejte te iPhone in Aplikacije za Android S temi aplikacijami boste lažje spali [Android & iOS]Po napornem dnevu je najboljše, kar lahko storite, da si privoščite koristno količino spanja. Vedno se pojavljajo nove študije, ki dokazujejo, kako pomemben je resnično spanec za človeka, izboljšuje ... Preberi več ki zaznajo kdaj vas najbolje zbudijo z gibi telesa Ali vam lahko aplikacija resnično pomaga bolje spati?Že od nekdaj sem bil eksperiment eksperimentov s spanjem, saj sem večino življenja vodil natančen sanjski dnevnik in študiral, kolikor sem mogel o spanju. Obstajajo ... Preberi več , poskrbite, da se ne umaknete od tega čudovitih sanj, ampak se prebudite, se počutite svetli in osveženi - resnično delujejo.

instagram viewer

Osnutek projekta

Glavni del projekta bo približno 5-metrska LED lučka, položena okoli postelje. Napajal jih bomo z zunanjim 12-voltnim napajanjem, ki se preklopi z nekaterimi MOSFET N tranzistorji. Nastavitev tega dela bo enaka kot dinamični sistem razsvetljave Izdelajte svojo dinamično zunanjo osvetlitev za medijski centerČe v računalniku ali medijskem središču gledate veliko filmov, sem prepričan, da ste se soočili z dilemo razsvetljave; ali popolnoma ugasnete vse luči? Ali jih držite na polnem pihu? Ali ... Preberi več Zgradil sem že prej.

Čas bo težava - ker gre za prototip, bom Arduino nastavil odštevanje od vsakega trenutka, ko je ponastavljen. Teoretično bi morali vsak dan izgubiti samo sekundo ali dve, v idealnem primeru pa bi vključili čip v realnem času, da bi to naredili bolj zanesljivo. Alarm ob sončnem vzhodu se bo zagnal 30 minut pred bujenjem in počasi povečeval izhodno raven, dokler ne bo 100% svetlost - to bi moralo biti dovolj, da nas zbudi, čeprav je dobro, da uporabljate svojo navadno budilko, dokler se vaše telo ne navadi to.

V ta projekt bom vključil tudi nočno luč, ki zazna gibanje in aktivira diskretno nizko raven luč pod posteljo s 3-minutnim časom, ločeno od LED lučk, saj bi se ti in moja žena zbudili gor. Osvetlitev spodnje postelje bo komercialna omrežna enota, zato bom v vtičnici vstavil rele, da ga vklopim in izklopim. Če vam ni pod nobenim pogojem (in to na splošno, ne delujete z omrežjem 110-240V AC) dobro pravilo), nato povežite 433 MHz brezžični oddajnik s preklopnimi vtičnicami, kot je opisano na Raspberry Pi Arduino projekt avtomatizacije doma Vodnik za domačo avtomatizacijo z malino Pi in ArduinoTrg domače avtomatizacije je preplavljen z dragimi potrošniškimi sistemi, ki so med seboj nezdružljivi in ​​drage za namestitev. Če imate malino Pi in Arduino, lahko v bistvu dosežete isto na ... Preberi več .

Seznam delov in shema

  • Arduino
  • Set luči RGB LED luči
  • 12 voltno napajanje
  • 3 x MOSFET N tranzistorji (uporabljam tip STP16NF06FP)
  • Rele in vtičnica ali brezžične vtičnice in ustrezen oddajnik
  • Vaša izbira nočne luči (navadna električna mreža s vtičem je v redu)
  • PIR senzor gibanja (HC-SR501) ali sonar SC-04 (ni tako učinkovit)
  • Senzor svetlobe
  • Koda projekta - vendar preberite, da boste razumeli, kako vse prilagoditi.

Tu je popolna shema.

vezje-alarmno vezje

Ožičenje releja

Opomba: Ta del preskočite, če želite uporabljati tudi luči RGB kot nočno luč - to je posebej za vklop ločene luči, ki napaja električno omrežje.

Za preklop omrežne napetosti bo vaš rele potreben napetosti - 110V ali 240 V AC odvisno od tega, kje živite - in več kot skupna amperaža, ki jo boste preklopili. Tisti, ki sem ga uporabil v tem paketu senzorjev (izjava o omejitvi odgovornosti: to je moja trgovina) je 250VAC / 10A, zato bi morali biti varni. Releji imajo a com vrata, ponavadi na sredini, ki jih je treba povezati z živo žico, ki prihaja v vtič; nato priključite vtičnico vtičnice na NE (običajno odprto). Ne bi ti smel govoriti, da ne delaš tega hudobca, če je priključen v vtičnico, ali pa boš umrl. Če se bojite, da se ne boste spopadali z omrežjem, namesto tega uporabite brezžične vtičnice.

relejsko ožičenje

Ozemljitveni in nevtralni kabli naj bi šli naravnost v vtičnico in se ne bodo dotikali releja. Morda nimate zemeljske črte v ZDA. Vaša odgovornost je poznati barvno kodiranje žic v vašem lokalnem območju - če drugače ne bi mogli priključiti navadne vtičnice v vašem domu ali ponovno priključiti vtiča, ne poskušajte vstaviti releja v eno!

Če želite preskusiti, priključite signalni zatič releja na 12, nato pa zaženite preprost program utripa, spremenjen tako, da deluje na pin 12, ne 13, kot je privzeto. Vaša vtičnica se mora vklopiti in izklopiti vsakih nekaj sekund. Razlog, da ne uporabljam nožice 13, je, ker med postopkom nalaganja LED na krovu hitro zasveti, kar kaže na serijsko aktivnost, zaradi česar se bo tudi rele aktiviral.

Kako natančno določiti čas

Funkcije merjenja časa in ure so težko dostopne do omrežne povezave ali namenske povezave Ura v realnem času (vključujejo svoje baterije, s katerimi lahko ura deluje tudi, če glavni Arduino nima moči). Da bi stroški ostali nizki, bom šel varati. Težko bom kodiral začetni čas, da bo Arduino začel odštevanje; časovni razporedi bodo torej glede na ta začetni čas. Vsakih 24 ur se ura ponastavi. Spodnja koda funkcije ure zagotavlja globalne spremenljivke trenutniMillis in currentMinutes so pravilni vsak dan. Arduino ne sme izgubiti več kot nekaj sekund vsakih 45 dni; vendar je ta težko kodiran način merjenja časa zelo omejen, ker bo izpad električne energije ali nenamerna ponastavitev vse prekinila, tako da je to zagotovo eno področje, ki bi ga lahko izboljšali. Če se čas ne izklopi, Arduino ponastavite na nastavljeni začetni čas.

Koda mora biti enostavno razumljiva.

void clock () {if (millis ()> = prejšnjiMillis + 86400000) {// pretekel je cel dan, ponastavite uro; prejšnjiMillis + = 86400000; } trenutniMillis = millis () - prejšnjiMillis; // to ohranja naš trenutniMillis enak vsak dan currentMinutes = (trenutniMillis / 1000) / 60; }

Nočna luč funkcija

Glavne zanke ločim na različne funkcije, tako da je lažje brati, odstraniti ali prilagoditi. The nočna lučka() funkcija deluje samo med urami, ko je bil Arduino ponastavljen (predvidevam, da boste to verjetno naredili pred spanjem ali okoli njega, ko je mrak), in dokler se ne zažene alarm za sončni vzhod. Na začetku sem poskušal uporabiti upor, ki je odvisen od svetlobe, vendar niso zelo občutljivi na modro svetlobo (kar se zgodi kot barva, ki jo uporabljam za nočno luč) in težko pravilno umerim. Uporaba ure je tako ali tako bolj smiselna. Uporabili bomo globalno currentMinutes spremenljivko, ki se ponastavi vsak dan.

Senzor PIR je lahko nekoliko čuden, če ga še nikoli niste uporabljali, čeprav ožičenje ni težko - našli boste VCC, BND, in ZUNAJ na hrbtni strani jasno označeno. Tu sta tudi dva spremenljiva upora; ena označena z RX določa domet (do približno 7 m), druga z oznako TX pa določa zakasnitev. Najnižja nastavitev (popolnoma v nasprotni smeri urinega kazalca) je zakasnitev 5 sekund, kar pomeni, da bo vsak trenutni premik od senzorja sprožil vsaj 5 sekund stanja "vklop". Vendar pa določa tudi zakasnitev med aktivnimi stanji - torej, če preteče 5 sekund in ni gibanja če zazna, bo senzor poslal slabi signal vsaj 5 sekund, tudi če je med tem gibanje obdobje. Če je nastavljena zamuda približno 30 sekund, se lahko zdi, da je senzor zlomljen.

pir-senzor

Če spite sami in nimate nič proti uporabi istih luči RGB traku tako za alarm ob sončnem vzhodu kot za nočno luč, bi morali kodo dovolj enostavno prilagoditi.

prazna nočna svetloba () {// Deluje samo med urami ponastavitve -> sončni vzhod. if (currentMinutes 

Alarm ob sončnem vzhodu

Za preprostost bom uporabil vrednost barvne vrednosti RGB 255,255,0 za globoko rumen sončni vzhod - tako bo prirast na obeh barvnih kanalih enak. Če se vam zdi, da vas zbudi prezgodaj, razmislite o tem, da začnete s temno rdečo in bledijo do rumene ali bele. Izstopanje, ki sem ga uporabil, je samo linearno - morda boste želeli raziskati z uporabo bolj naravne krivulje za vrednosti svetlosti.

Funkcija je preprosta - ugotovi, koliko svetlobe bi bilo treba povečevati vsako sekundo, tako da je polna svetlost po 30 minutah; nato pomnoži, da je za toliko sekund trenutno sončni vzhod. Če je že pri polni svetlosti, ostane še nadaljnjih 10 minut, da se prepričate, da ste pripravljeni (in če še vedno niste, bi verjetno morali imeti rezervni alarm).

void sunrisealarm () {// vsako sekundo v 30-minutnem obdobju bi moral barvno vrednost povečati za: povečanje plovca = (float) 255 / (30 * 60); // rdeča 255, zelena 255 daje polno svetlost rumeno, če se (trenutni minutami> = minuteUntilSunrise) {// sončni vzhod začne! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * povečanje; Serial.print ("Trenutna vrednost za sončni vzhod:"); Serial.println (currentVal); // med ramp up up napišete trenutno vrednost minutnega povečanja svetlosti X, če (currentVal <255) {analogWrite (RED, currentVal); analogWrite (ZELENO, currentVal); } drugače, če (trenutne minute - minuteUntilSunrise <40) {// ko smo že pri polni svetlosti, prižgite lučke 10 minut dlje analogWrite (RDEČA, 255); analogWrite (ZELENO, 255); } else {// po tem jih vrnemo v izklopljeno analogWrite (RED, 0); analogWrite (ZELENO, 0); } } }

Pasti in prihodnje nadgradnje

To uporabljam zadnjih nekaj tednov in resnično pomaga, da se zbudim, da se počutim bolj osveženo in v spodobnem času; nočna svetloba deluje tudi zelo dobro. Kljub temu ni popolno, zato je tukaj nekaj stvari, ki potrebujejo delo in lekcije, pridobljene med gradnjo.

sončni vzhod-alarm

Pri izdelavi tega projekta sem naletel na veliko vprašanj pri obravnavi velikega števila, tako da, če nameravate spremeniti kodo, upoštevajte to. V jeziku C je tisto tipkanje vaših spremenljivk je zelo pomembno - število ni vedno samo število. Na primer, dolgo podpisan spremenljivke je treba uporabiti za shranjevanje super velikih številk, kot jih imamo, ko govorimo o milisekundah, vendar celo števila, majhnega kot 60.000, ni mogoče shraniti kot običajno celo število (nepodpisan int bi bil sprejemljiv za do 68.000). Bistvo je, prebrati o svojih spremenljivkah če uporabljate velike številke in če najdete nenavadne napake, je to verjetno zato, ker ena od vaših spremenljivk nima dovolj bitov!

Odkril sem tudi težavo z zelo nizkim svetlobnim puščanjem napetosti - kar vodi do najmanjše količine svetlobe, ki jo oddaja tudi, ko digitalWrite (RDEČA, 0) oddaja se signal - mislim, da ni težav s strojno opremo trakov, saj so v redu z uradnimi krmilniki. Če lahko kdo reši to težavo, prikazano spodaj, bi bil zelo hvaležen. Poskušal sem spuščati upore in omejiti izhodno napetost iz Arduino zatičev. Morda bom moral dodati preprost tokokrog za preklapljanje moči, da napajamo napetost na LED traku samo, kadar je to dejansko potrebno; ali pa so lahko napačni MOSFET-i.

puščanje svetlobe

Za prihodnje delo upam dodati IR sprejemnik in podvojiti nekatere funkcije prvotnega krmilnika - at najmanj možnost spreminjanja barv kot običajne luči, saj ta projekt zdaj trak pretvori v posvečeno noč svetloba. Lahko dodam celo samodejno 30-minutno časovno omejitev.

Ste to že preizkusili, se izboljšali ali imate kakšne druge ideje? Sporočite mi v komentarjih!

James ima doktorat iz področja umetne inteligence in ima certifikat CompTIA A + in Network +. Je vodilni razvijalec MakeUseOf in svoj prosti čas preživlja z igranjem VR paintball in družabnih iger. Z računalniki gradi že od malih nog.