Oglas

Ljudi su prirodno programirani da se probude s izlaskom sunca; nažalost moderan život diktira proizvoljni sat, koji nas često prisiljava da se probudimo kad nema prirodne svjetlosti. Danas ćemo napraviti budilicu za izlazak sunca, koja će vas lagano i polako probuditi bez pribjegavanja uvredljivoj strojevi za buku.

Ako vam izrada budilice za izlazak sunca predstavlja malo previše za vas, pogledajte ove iPhone i Android aplikacije Pomoću ovih aplikacija možete vam bolje spavati [Android & iOS]Nakon napornog dana, najbolje što možete učiniti je da dobijete blagotvornu količinu sna. Uvijek se pojavljuju nove studije koje dokazuju koliko je spavanju zaista važan čovjek, poboljšavajući ... Čitaj više taj detektirati kada je najbolje da vas probudi pokretima tijela Može li vam aplikacija zaista pomoći da bolje spavate?Oduvijek sam bio pomalo eksperimentator spavanja, jer sam veći dio života vodio detaljan dnevnik snova i proučavao koliko sam mogao u vezi spavanja. Tamo su... Čitaj više , osiguravajući da se ne odvučete od tog strašnog sna, već se probudite osjećajući se osvježeno i osvježeno - oni stvarno rade.

instagram viewer

Pregled projekta

Glavni dio projekta bit će nekih 5 metara LED svjetlosnih traka postavljenih oko kreveta. Napajat ćemo ih vanjskim napajanjem od 12 volti, prebačenim pomoću nekih MOSFET N tranzistora. Postava za ovaj dio bit će identična postavci dinamički sustav rasvjete Izgradite vlastitu dinamičku ambijentalnu rasvjetu za medijski centarAko gledate puno filmova na računalu ili medijskom centru, siguran sam da ste se suočili s dilemom rasvjete; potpuno isključite sva svjetla? Držite li ih u punoj eksploziji? Ili... Čitaj više Gradila sam prije.

Vrijeme će biti problem - budući da je ovo prototip, Arduino ću postaviti da odbrojava od kad god se resetira. U teoriji, trebali bismo izgubiti samo sekundu ili dvije svaki dan, ali idealno bi bilo da uključimo čip „real time clock“ kako bismo to učinili pouzdanije. Alarm izlaska sunca upalit će se 30 minuta prije vremena buđenja i polako povećava razinu izlaza dok ne bude 100% svjetlina - to bi trebalo biti dovoljno da nas probudi, iako je dobra ideja da nastavite koristiti svoj redovni budilnik dok se vaše tijelo ne navikne to.

U ovaj ću projekt uključiti i noćno svjetlo koje otkriva kretanje i aktivira diskretnu nisku razinu svjetlo ispod kreveta s vremenskim ograničenjem od 3 minute, odvojeno od LED lampica jer bi se ti i moja supruga probudili gore. Osvjetljenje ispod kreveta bit će komercijalna mrežna jedinica, tako da ću hakirati relej unutar utičnice da bih ga uključio i isključio. Ako vam nije ugodno raditi s 110-240V mrežnim napajanjem ni pod kojim uvjetima (i to je općenito dobro pravilo), zatim povežite bežični odašiljač od 433 MHz s preklopnim utičnicama, kako je istaknuto na Raspberry Pi Arduino projekt automatizacije doma Vodič za kućnu automatizaciju Raspberry Pi i ArduinoTržište kućne automatizacije preplavljeno je skupim potrošačkim sustavima, nespojivim jedni s drugima i skupim za instalaciju. Ako imate Raspberry Pi i Arduino, u osnovi možete postići isto na ... Čitaj više .

Popis dijelova i shema

  • Težak
  • Komplet RGB svjetlosnih traka
  • Napajanje od 12 volti
  • 3 x MOSFET N tranzistora (koristim tip STP16NF06FP)
  • Priključak za relej i struju ili bežične utičnice i odgovarajući odašiljač
  • Vaš izbor noćnog svjetla (u redovnom napajanju s utikačem je u redu)
  • PIR osjetnik kretanja (HC-SR501) ili SC-04 sonar (nije tako učinkovit)
  • Svijetli senzor
  • Kôd projekta - ali čitajte dalje kako biste bili sigurni da razumijete kako sve prilagoditi.

Evo cjelovite sheme.

izlazak alarma krugom

Ožičenje releja

Bilješka: Preskočite ovaj odjeljak ako želite koristiti i RGB svjetla kao noćno svjetlo - ovo je posebno za uključivanje zasebnog svjetla koje napaja mrežom.

Za prebacivanje mrežnog napajanja, vaš će relej trebati naziv za napon - 110V ili 240V AC ovisno o mjestu u kojem živite - i više od ukupne amperaže koju ćete prebaciti. Onaj koji sam koristio iz ovog paketa senzora (odricanje od odgovornosti: to je moja trgovina) je 250VAC / 10A, pa bismo trebali biti sigurni. Releji imaju com priključak, obično u sredini, koji bi trebao biti spojen na živu žicu koja ulazi u utikač; zatim spojite naponski terminal utičnice na NE (normalno otvoren). Ne bih vam trebao reći da ne činite taj luđak uključen u utičnicu ili ćete umrijeti. Ako se ne želite zabrljati s mrežnom mrežom, umjesto toga upotrijebite utikače s bežičnim utičnicama.

relej-ožičenje

Uzemljeni i neutralni kablovi trebaju ići ravno u utičnicu i neće dodirnuti relej. U SAD-u možda nemate zemaljsku liniju. Vaša je odgovornost znati kodiranje žica u boji na vašem lokalnom području - ako ne biste mogli na neki drugi način spojiti običnu utičnicu u svom domu ili ponovno spojiti utikač, ne pokušavajte ugraditi relej u jedan!

Da biste testirali, priključite signalni relej na 12, a zatim pokrenite jednostavan program treptanja modificiran da radi na pin 12, a ne 13 kao što je zadana. Vaša utičnica trebala bi se uključivati ​​i isključivati ​​svakih nekoliko sekundi. Razlog zbog kojeg ne koristim iglu 13 je taj što se tijekom postupka prijenosa, vanjska ploča LED brzo pali kako bi ukazala na serijsku aktivnost, što bi moglo dovesti i do aktiviranja releja.

Pravilno postavljanje vremena

Funkcije vremena i sata su teške bez pristupa mrežnoj vezi ili namjenskoj Sat u stvarnom vremenu (uključuju vlastite baterije za održavanje sata čak i ako glavni Arduino nema struju). Da bi troškovi bili niski, varam. Bit će mi tvrdo kodiranje vremena početka da Arduino započne odbrojavanje; vremena će stoga biti u odnosu na ovo početno vrijeme. Svakih 24 sata sat će se resetirati. Kôd funkcije donjeg sata osigurava globalne varijable currentMillis i currentMinutes su ispravni svaki dan. Arduino ne bi smio gubiti više od nekoliko sekundi svakih 45 dana; međutim, ovaj tvrdo kodirani način mjerenja vremena je prilično ograničen jer će isključenje struje ili slučajno resetiranje prekinuti sve, tako da je ovo sigurno jedno područje koje bi se moglo poboljšati. Ako se vrijeme ne izvrši sinkronizirano, jednostavno resetirajte Arduino na postavljeno vrijeme početka.

Kôd bi trebao biti lako razumljiv.

void clock () {if (millis ()> = previousMillis + 86400000) {// protekao je cijeli dan, resetirajte sat; prethodniMillis + = 86400000; } currentMillis = millis () - prethodniMillis; // ovo održava naš trenutniMillis isti svaki dan currentMinutes = (currentMillis / 1000) / 60; }

Funkcija noćnog svjetla

Glavne petlje odvojim u različite funkcije tako da je lakše čitati, uklanjati ili prilagođavati. noćno svijetlo() funkcija djeluje samo između sati kad je Arduino resetiran (pretpostavljam da ćete to vjerovatno raditi prije ili prije spavanja, kad je mrak), i dok ne počne da se javlja alarm izlaska sunca. U početku sam pokušao upotrijebiti otpornik na svjetlost, ali oni nisu vrlo osjetljivi na plavu svjetlost (što se u biti čini bojom koju koristim za noćno svjetlo) i teško je ispravno umjeriti. Korištenje sata ima ionako više smisla. Koristit ćemo globalno currentMinutes varijabla, koja se resetira svaki dan.

PIR senzor može biti malo čudan ako ga nikad prije niste koristili, iako ožičenje nije teško - otkrit ćete VCC, GND, i OUT jasno označeno na stražnjoj strani. Postoje i dva promjenjiva otpornika; jedan s oznakom RX određuje domet (do oko 7 m), a drugi s oznakom TX određuje kašnjenje. Odgoda je pri najnižoj postavci (u smjeru suprotnom od kazaljke na satu) 5 sekundi, a znači da će svaki trenutni pomak aktivirati najmanje 5 sekundi stanja "uključeno" od senzora. Međutim, određuje i kašnjenje između aktivnih stanja - pa ako prođe 5 sekundi i nema pomicanja otkriven, senzor će slati slab signal najmanje 5 sekundi, čak i ako tijekom toga postoji pokret razdoblje. Ako vam je kašnjenje postavljeno stvarno visoko na oko 30 sekundi, može se činiti kao da je senzor slomljen.

pir senzora

Ako spavate sami i ne smeta vam da koriste iste RGB trake za alarm i za izlazak sunca i noćno svjetlo, trebali biste biti u mogućnosti prilagoditi kôd dovoljno lako.

prazna noćna svjetlost () {// Radite samo između sati resetiranja -> izlaska sunca. ako (currentMinutes 

Alarm izlaska sunca

Radi jednostavnosti, koristit ću vrijednost boje RGB 255,255,0 za tamno žuti izlazak sunca - na taj način priraštaj na oba kanala u boji bit će isti. Ako utvrdite da vas probudi prerano, razmislite o tome da počnete s dubokom crvenom bojom i bledi prema žutoj ili bijeloj boji. Ploča gore koju sam koristio je samo linearna - možda ćete htjeti istražiti koristeći prirodniju krivulju za vrijednosti svjetline.

Funkcija je jednostavna - utvrđuje koliko svjetla treba povećavati svake sekunde, tako da je puna svjetlost nakon razdoblja od 30 minuta; zatim množi da je koliko god sekundi trenutno u izlasku Sunca. Ako je već pri punom svjetlu, ostaje još 10 minuta kako biste bili sigurni da ste ustali (a ako još uvijek niste uključeni, vjerojatno biste trebali uključiti sigurnosni alarm).

void sunrisealarm () {// svake sekunde tijekom 30 min razdoblja treba povećavati vrijednost boje za: plutajući prirast = (plutajući) 255 / (30 * 60); // crvena 255, zelena 255 daje nam punu svjetlinu žutu boju ako (trenutniMinuti> = minuteUntilSunrise) {// započinje izlazak sunca! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * priraštaj; Serial.print ("Trenutna vrijednost za izlazak:"); Serijski.println (currentVal); // za vrijeme rampe upišite trenutnu vrijednost minuta povećanja svjetline u minuti ako (currentVal <255) {analogWrite (RED, currentVal); analogWrite (ZELENO, currentVal); } else if (currentMinutes - minutesUntilSunrise <40) {// jednom kad smo već pri potpuno osvjetljenju, držite svjetla 10 minuta duže analogWrite (CRVENO, 255); analogWrite (ZELENO, 255); } else {// nakon toga vraćamo ih u stanje isključivanja analogWrite (RED, 0); analogWrite (ZELENO, 0); } } }

Zamke i nadogradnje budućnosti

Koristim ovo posljednjih nekoliko tjedana i zaista pomaže da se probudim osjećajući se osvježenije i u pristojno vrijeme; noćna svjetlost također djeluje dobro. Nije savršeno, pa evo nekoliko stvari na kojima je potreban rad i lekcije naučene tijekom izgradnje.

izlazak-alarm

Tijekom izrade ovog projekta naišao sam na mnoštvo problema s velikim brojem pa ako imate namjeru modificirati kôd, imajte to na umu. Na jeziku C, the tipkanje vaših varijabli je vrlo važno - broj nije uvijek samo broj. Na primjer, dugo potpisan varijable bi trebale biti korištene za pohranjivanje super velikih brojeva kao što imamo posla kada govorimo o milisekundama, ali čak ni jedan broj mali 60.000 ne može se pohraniti kao uobičajeni cijeli broj (nepotpisani int bio bi prihvatljiv do 68.000). Poanta je, čitanje o vašim varijablama ako koristite velike brojeve i ako pronađete neobične bugove, vjerojatno zato što jedna od vaših varijabli nema dovoljno bita!

Također sam pronašao problem s vrlo malim curenjem napona svjetline - što dovodi do najsitnije svjetlosti koja se emitira čak i kada digitalWrite (RED, 0) odašilje se signal - mislim da nije problem u hardveru s trakama, jer oni dobro funkcioniraju sa službenim kontrolerima. Ako bilo tko može riješiti ovaj problem, na slici dolje, bio bih vam najviše zahvalan. Pokušao sam spustiti otpornike i ograničiti izlazni napon iz Arduino igle. Možda ću trebati dodati jednostavan krug za uključivanje napajanja da bi se napon LED trake napajao samo kad je stvarno potrebno; ili mogu biti neispravni MOSFET-ovi.

propuštanje svjetlosti

Za budući rad nadam se dodati IR prijemniku i duplicirati neke značajke izvornog kontrolera - at najmanje mogućnost mijenjanja boja kao svjetla općenite uporabe, jer upravo ovaj projekt sad traku pretvara u posvećenu noć svjetlo. Mogu čak dodati automatsku 30-minutnu prekidnu funkciju.

Jeste li to probali, napravili poboljšanja ili imate neke druge ideje? Javite mi u komentarima!

James je diplomirao iz umjetne inteligencije i certificiran je CompTIA A + i Network +. Vodeći je programer MakeUseOf-a, a svoje slobodno vrijeme provodi igrajući VR paintball i boardgames. Gradio je računala još od djeteta.