Projekt alarma za noćno svjetlo i izlazak sunca

  • William Charles
  • 0
  • 3474
  • 649
Oglas

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

Ako vam je budilica za izlazak sunca malo previše za vas, pogledajte ove aplikacije za iPhone i Android. Pomoću ovih aplikacija pomažu vam da bolje spavate [Android i iOS] Pomoću ovih aplikacija pomažu vam da bolje spavate [Android i iOS] Nakon napornog snimanja dan, najbolje što možete učiniti je dobiti blagotvornu količinu sna. Uvijek se pojavljuju nove studije koje dokazuju koliko je spavanju zaista važan čovjek, poboljšavajući ... koji otkrivaju kada je najbolje da vas probudi pokretima tijela. Može li vam aplikacija zaista pomoći da bolje spavate? Može li vam aplikacija zaista pomoći da bolje spavate? Oduvijek sam bio pomalo eksperimentista spavanja, jer sam veći dio života vodio detaljan dnevnik snova i proučavao onoliko koliko sam mogao u vezi spavanja. Postoje…, osiguravajući da se ne povučete iz tog strašnog sna, već se umjesto toga probudite osjećajući se osvježeno i osvježeno - oni stvarno rade.

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. Postavka za ovaj dio bit će identična sustavu dinamičke rasvjete. Izgradite vlastitu dinamičku ambijentalnu rasvjetu za Media Center Izradite vlastitu dinamičku ambijentalnu rasvjetu za Media Center Ako gledate puno filmova na računalu ili medijskom centru, sigurni ste da ste se suočili s dilemom rasvjete; potpuno isključite sva svjetla? Držite li ih u punoj eksploziji? Ili ... prije sam gradio.

Tajming će biti problem - budući da je ovo prototip, Arduino ću postaviti da odbrojava svaki put kad se resetira. U teoriji, trebali bismo izgubiti samo sekundu ili dvije svaki dan, ali idealno bi bilo da uključimo “sat u stvarnom vremenu” čip da biste to učinili pouzdanije. Alarm za izlazak sunca upalit će se 30 minuta prije vremena buđenja i polako povećavati izlaznu razinu sve dok ne bude 100% svjetlina - to bi trebalo biti dovoljno da nas probudi, mada je dobra ideja nastaviti koristiti redoviti budilnik dok vaše tijelo ne navikao se.

Također ću u ovaj projekt ugraditi noćno svjetlo, koje detektuje kretanje i aktivira diskretno svjetlo niske razine ispod kreveta s vremenskim ograničenjem od 3 minute, odvojeno od LED lampica jer bi se ti moji suprug i ja probudili , 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 ni pod kojim uvjetima (i to je općenito dobro pravilo) nije ugodno raditi s napajanjem od 110-240V izmjeničnog napajanja, povežite bežični odašiljač od 433 MHz s preklopnim utičnicama, kako je istaknuto na projektu automatizacije doma Raspberry Pi Arduino Vodič za kućnu automatizaciju Raspberry Pi i Arduino Vodič za kućnu automatizaciju Raspberry Pi i Arduino Tržište kućne automatizacije preplavljeno je skupim potrošačkim sustavima, međusobno nespojivim i skupim za instalaciju. Ako imate Raspberry Pi i Arduino, u osnovi možete postići isto ... .

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 senzor pokreta (HC-SR501) ili SC-04 sonar (nije tako učinkovit)
  • Svijetli senzor
  • Kôd projekta - ali pročitajte dalje kako biste bili sigurni da razumijete kako sve prilagoditi.

Evo cjelovite sheme.

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 moj dućan) 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 koji je priključen u utičnicu ili ćete umrijeti. Ako se bojite da se ne brinete s mrežnom mrežom, umjesto toga upotrijebite utičnice s bežičnim komutacijama.

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 u vašem lokalnom području - ako inače ne biste mogli uključiti običnu utičnicu u svom domu ili ponovno uključiti utikač, nemojte pokušavati 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 zašto ne koristim iglu 13 je taj što se tijekom postupka prijenosa, vanjska ploča LED brzo aktivira kako bi ukazala na serijsku aktivnost, što bi moglo uzrokovati i aktiviranje 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 kada glavni Arduino nema struju). Da bi troškovi bili niski, idem varati. Ja ću tvrdo kodirati vrijeme 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;  trenutniMillis = millis () - prethodniMillis; // ovo održava naš trenutniMillis isti svaki dan currentMinutes = (trenutniMillis / 1000) / 60;  

Funkcija noćnog svjetla

Glavne petlje sam odvojio na različite funkcije, tako da je lakše čitati, uklanjati ili prilagođavati. noćno svijetlo() funkcija djeluje samo između sati kada je Arduino resetiran (pretpostavljam da ćete to vjerovatno raditi u vrijeme spavanja ili oko njega, kad je mrak), i sve dok ne počne alarm sunrisea. U početku sam pokušao upotrijebiti otpornik na svjetlost, ali oni nisu baš osjetljivi na plavu svjetlost (što se u biti događa u boji 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 5 sekundi na najnižoj postavci (potpuno u smjeru suprotnom od kazaljke na satu), i znači da će svaki trenutni pokret pokrenuti najmanje 5 sekundi od “na” stanje od senzora. Međutim, ona također određuje kašnjenje između aktivnih stanja - pa ako protekne 5 sekundi i nije uočeno kretanje, senzor će poslati niski signal barem 5 sekundi, čak i ako postoji pomak tijekom tog razdoblja. Ako vam je odgoda postavljena na oko 30 sekundi, može se činiti da je senzor slomljen.

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

void nightlight () // Radite samo između sati resetiranja -> izlaska sunca. ako (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);   

Alarm izlaska sunca

Radi jednostavnosti, koristit ću vrijednost boje RGB 255,255,0 za duboko žuti izlazak sunca - na taj način priraštaj na oba kanala u boji bit će isti. Ako ustanovite da vas probudi prerano, razmislite o tome da započ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 30 minuta; zatim množi da je za 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 imati sigurnosni sigurnosni alarm).

void sunrisealarm () // svake sekunde tijekom 30 min razdoblja treba povećati vrijednost boje za: plutajući prirast = (plutajući) 255 / (30 * 60); // crveno 255, zeleno 255 daje nam potpuno svjetlo žuto ako (trenutniMinuti> = minuteUntilSunrise) // izlazak sunca! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * priraštaj; Serial.print ("Trenutna vrijednost za izlazak:"); Serial.println (currentVal); // Za vrijeme rampe upišite trenutnu vrijednost minuta pojačanja svjetline minuta X ako (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);    

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ćno svjetlo također djeluje dobro. Ipak nije savršeno, pa evo nekoliko stvari na kojima treba raditi i naučiti lekcije tijekom izgradnje.

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 riječ je o tipkanje vaših varijabli je vrlo važno - broj nije uvijek samo broj. Na primjer, dugo potpisan varijable bi trebale biti korištene za pohranu super velikih brojeva, kao što imamo posla kada govorimo o milisekundama, ali čak ni broj od 60.000 ne može se pohraniti kao uobičajeni cijeli broj (nepotpisani int bio bi prihvatljiv do 68.000). Poanta je u tome da pročitate svoje varijable vrste kada koristite velike brojeve, a ako pronađete neparne bugove, to je vjerojatno zato što jedna od vaših varijabli nema dovoljno bita!

Otkrio sam i problem s vrlo slabim naponom svjetline - što dovodi do najsitnije svjetlosti koja se emitira čak i kada digitalWrite (crvena, 0) odašilje se signal - mislim da nije problem u hardveru s trakama, budući da oni dobro funkcioniraju sa službenim kontrolerima. Ako bilo tko može riješiti ovaj problem, na slici dolje, bio bih vam 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.

Nadam se da ću za budući rad dodati IR prijemnik i duplicirati neke značajke izvornog kontrolera - barem mogućnost promjene boje kao svjetla za opću upotrebu, jer upravo sada ovaj projekt traku pretvara u posvećenu noć svjetlo. Mogu čak dodati automatsku 30-minutnu funkciju.

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




Još ne komentari

O modernoj tehnologiji, jednostavnoj i pristupačnoj.
Vaš vodič u svijetu moderne tehnologije. Naučite kako koristiti tehnologije i uređaje koji nas okružuju svaki dan i naučite kako otkriti zanimljivosti na Internetu.