Skelbimas
Žmonės natūraliai yra užprogramuoti prabusti su saulėtekiu; liūdnai šiuolaikinį gyvenimą diktuoja savavališkas laikrodis, dažnai verčiantis mus atsibusti, kai nėra natūralios šviesos. Šiandien mes pagaminsime saulėtekio žadintuvą, kuris švelniai ir lėtai pažadins jus, nesinaudodamas įžeidžiančia mašina.
Jei pasigaminti žadintuvą nuo saulėtekio yra šiek tiek per daug, patikrinkite šiuos „iPhone“ ir „Android“ programos Naudokite šias programas norėdami geriau išsimiegoti [„Android“ ir „iOS“]Po džiovos dienos geriausias dalykas, kurį galite padaryti, yra užmigti naudingą kiekį. Visada atsiranda naujų tyrimų, kurie įrodo, koks svarbus miegas yra žmogui, pagerina ... Skaityti daugiau kad aptikti kada geriausia jus pažadinti kūno judesiais Ar programa gali padėti jums geriau miegoti?Aš visada buvau šiek tiek miego eksperimentatorė, didžiąją gyvenimo dalį turėdama kruopštų svajonių dienoraštį ir kiek galėdama mokiausi apie miegą. Čia yra... Skaityti daugiau , užtikrinsite, kad nebūsite atitraukti nuo tos nuostabios svajonės, o pabusite jaustis šviesūs ir atsigaivinti - jie tikrai veikia.
Projekto metmenys
Pagrindinę projekto dalį sudarys maždaug 5 metrų LED juostos šviesa, išdėstyta aplink lovą. Mes juos maitinsime išoriniu 12 voltų maitinimo šaltiniu, perjungtu naudojant kai kuriuos MOSFET N tranzistorius. Šios dalies sąranka bus tokia pati kaip dinaminė apšvietimo sistema Sukurkite savo dinaminį aplinkos apšvietimą „Media Center“Jei žiūrite daug filmų savo kompiuteryje ar laikmenų centre, esu tikras, kad susidūrėte su apšvietimo dilema; ar tu visiškai išjungi visas lemputes? Ar laikote juos visiškai sprogusius? Arba ... Skaityti daugiau Aš anksčiau statydavau.
Laikas bus problema - kadangi tai yra prototipas, aš nustatysiu Arduino nuskaityti bet kada, kai jis bus iš naujo nustatytas. Teoriškai kiekvieną dieną turėtume prarasti tik antrą ar dvi, bet idealu, jei patikimiau tai atliktume. Saulėtekio aliarmas įsijungs 30 minučių prieš pabudimo laiką ir lėtai padidins išėjimo lygį, kol jis bus 100% šviesus - to turėtų pakakti, kad mus pažadintų, nors gera mintis ir toliau naudoti įprastą žadintuvą, kol jūsų kūnas bus pripratęs tai.
Į šį projektą taip pat įtrauksiu naktinę lemputę, kuri nustato judėjimą ir suaktyvina diskretišką žemą lygį šviesa po lova per 3 minutes, atskirai nuo LED lempučių, nes dėl jų pabustų ir mano žmona, ir aš aukštyn. Apatinis lovos apšvietimas bus komercinis maitinimo šaltinis, todėl įkišiu relės vidinį kištukinį lizdą, kad jį įjungčiau ir išjungčiau. Jei jokiomis aplinkybėmis jums nėra patogu dirbti su 110–240 V kintama srove (ir tai paprastai gerą taisyklę turėti), tada prijunkite 433 MHz bevielį siųstuvą su perjungimo lizdais, kaip aprašyta „Raspberry Pi Arduino“ namų automatikos projektas Namų automatikos vadovas su „Raspberry Pi“ ir „Arduino“Namų automatikos rinka yra užtvindyta brangių vartotojų sistemų, nesuderinamų viena su kita ir brangiai kainuojančių įrengimo. Jei turite aviečių pi ir arduino, tą patį galite pasiekti ... Skaityti daugiau .
Dalių sąrašas ir schema
- Arduino
- RGB LED juostelių lempučių rinkinys
- 12 voltų maitinimo šaltinis
- 3 x MOSFET N tranzistoriai (aš naudoju STP16NF06FP tipą)
- Relės ir maitinimo lizdas arba bevieliu būdu valdomi lizdai ir tinkamas siųstuvas
- Jūsų pasirinkimas nakties apšvietimo (įprastas maitinimo šaltinis yra gerai)
- PIR judesio jutiklis (HC-SR501) arba SC-04 sonarinis (ne toks efektyvus)
- Šviesos sensorius
- Projekto kodas - bet skaitykite toliau ir įsitikinkite, kad suprantate, kaip viską pritaikyti.
Čia yra visa schema.
Relės prijungimas
Pastaba: Praleiskite šį skyrių, jei norite naudoti RGB lemputes taip pat kaip naktinę lemputę - tai specialiai skirta įjungti atskirą maitinimo šaltinį.
Norėdami perjungti elektros energiją, jūsų relė turės atitikti įtampą - 110 V arba 240 V kintama priklausomai nuo to, kur jūs gyvenate - ir daugiau nei perkelsite amperais. Tą, kurį naudojau iš šio jutiklio paketo (atsisakymas: tai mano parduotuvė) yra 250 VAC / 10A, todėl turėtume būti saugūs. Relės turi com jungtis, paprastai centre, kuri turėtų būti sujungta su tiesioginiu laidu, patenkančiu į kištuką; tada prijunkite tiesioginį lizdą prie NE (paprastai atidarytas). Aš neturėčiau jums sakyti, kad nedarytumėte šios žaizdos, nes ji įkišta į lizdą, ar jūs mirsite. Jei bijote susidurti su elektros energija, naudokite belaidžius jungiklius.
Įžeminimo ir neutralūs kabeliai turi eiti tiesiai į lizdą ir neliesti relės. Galbūt neturite žemės linijos JAV. Jūs esate atsakingi už tai, kad žinotumėte laidų spalvų kodavimą jūsų vietovėje - jei jūs negalėtumėte kitaip užsukti įprasto lizdo namuose ar perjungti kištuko, nemėginkite įterpti relės į vieną!
Norėdami išbandyti, relės signalo kaištį prijunkite prie 12, tada paleiskite paprastą mirksėjimo programą, modifikuotą veikti 12, o ne 13 kaiščiu, kaip numatyta. Jūsų lizdas turėtų įsijungti ir išsijungti kas kelias sekundes. Aš nenaudoju 13 segtuko dėl to, kad įkėlimo proceso metu greitai sudedamas borto šviesos diodas, kad būtų parodyta serijinė veikla, o tai taip pat suaktyvintų relę.
Kaip tinkamai pasirinkti laiką
Laiko ir laikrodžio funkcijos yra sunkios, jei nėra prieigos prie tinklo ryšio ar jos nėra skirtos Realaus laiko laikrodis (tai apima savo baterijas, kad laikrodis veiktų net tada, kai pagrindinis Arduino neturi energijos). Kad išlaidos būtų mažos, ketinu sukčiauti. Aš sunkiai koduosiu „Arduino“ pradžios laiką, kad prasidėtų jo atgalinis skaičiavimas; todėl laikas bus proporcingas šiam pradžios laikui. Kas 24 valandas laikrodis bus nustatomas iš naujo. Žemiau pateiktas laikrodžio funkcijos kodas įsitikina, kad globalūs kintamieji dabartinisMillis ir dabartinės minutės yra teisingi kiekvieną dieną. Arduino neturėtų prarasti daugiau nei kelias sekundes kas 45 dienas; tačiau šis sunkiai užkoduotas laiko nustatymo stilius yra gana ribotas, nes nutrūkus elektros energijos tiekimui ar netyčiniam atstatymui viskas nutrūks, taigi tai tikrai yra viena sričių, kurią būtų galima patobulinti. Jei laikas sinchronizuojasi, paprasčiausiai nustatykite Arduino nustatytu pradžios laiku.
Kodas turėtų būti lengvai suprantamas.
void clock () {if (millis ()> = previousMillis + 86400000) {// praėjo visa diena, iš naujo nustatykite laikrodį; ankstesnisMillis + = 86400000; } currentMillis = millis () - ankstesnisMillis; // Tai palaiko mūsų „currentMillis“ tą pačią dieną „currentMinutes =“ (currentMillis / 1000) / 60; }
Naktinės šviesos funkcija
Aš išskiriu pagrindines kilpas į atskiras funkcijas, kad jas būtų lengviau skaityti, pašalinti ar koreguoti. naktinė šviesa() funkcija veikia tik nuo to laiko, kai Arduino buvo atstatytas (aš manau, kad jūs tikriausiai tai padarysite prieš miegą arba aplink jį, kai tamsu) ir kol nebus pradėtas skaityti žadintuvas. Iš pradžių bandžiau naudoti nuo šviesos priklausomą rezistorių, tačiau jie nėra labai jautrūs mėlynai šviesai (tai būna spalva, kurią naudoju nakties šviesai) ir yra sunkiai kalibruojami teisingai. Bet kokiu atveju prasmingiau naudoti laikrodį. Mes naudosime pasaulinį tinklą dabartinės minutės kintamasis, kuris kiekvieną dieną nustatomas iš naujo.
PIR jutiklis gali būti šiek tiek sudėtingas, jei niekada jo dar nenaudojote, nors jį sujungti nėra sunku - rasite VCC, GNDir OUT aiškiai užrašyta ant nugaros. Taip pat yra du kintamieji rezistoriai; vienas pažymėtas RX nustato diapazoną (iki maždaug 7 m), o kitas pažymėtas TX nustato delsą. Mažiausias nustatymas yra 5 sekundžių atidėjimas (visiškai prieš laikrodžio rodyklę) ir reiškia, kad bet koks momentinis judesys iš jutiklio suaktyvins mažiausiai 5 sekundes „įjungta“ būsena. Tačiau tai taip pat lemia delsą tarp aktyvių būsenų - taigi, jei praeis 5 sekundės, o judesio nebus aptiktas, jutiklis siųs žemą signalą mažiausiai 5 sekundes, net jei tuo metu judama laikotarpis. Jei nustatysite, kad vėlavimas yra tikrai didelis - maždaug 30 sekundžių, jutiklis gali sugesti.
Jei jūs miegate vienas ir neprieštaraujate tam, kad naudotumėte tuos pačius RGB juostinius žibintus ir saulėtekio signalui, ir nakties apšvietimui, turėtumėte mokėti lengvai pritaikyti kodą.
tuščias naktinis apšvietimas () {// Dirbkite tik tarp nustatytų valandų -> saulėtekio. if (currentMinutes
Saulėtekio aliarmas
Paprastumo dėlei aš naudoju RGB spalvų vertę 255 255,0 ryškiai geltonam saulėtekiui - tokiu būdu abiejų spalvų kanalų prieaugis bus vienodas. Jei pastebite, kad jis pažadina jus per anksti, apsvarstykite galimybę pradėti nuo raudonos raudonos spalvos ir išblukti link geltonos arba baltos spalvos. Aš naudojuosi padidėjimu tiesiškai - galbūt norėsite ištirti, naudodami natūralesnę ryškumo verčių kreivę.
Funkcija yra paprasta - ji nustato, kiek šviesos turėtų padidinti kiekviena sekundė, pavyzdžiui, kai ji yra visiškai ryški po 30 minučių; tada padaugina iš to, kad per kelias sekundes jis patenka į saulėtekį. Jei jis jau veikia visiškai ryškiai, jis įjungiamas dar 10 minučių, kad įsitikintumėte, jog atsikeliate (o jei vis dar nestojate, tikriausiai turite turėti atsarginį aliarmą).
void sunrisealarm () {// kiekviena sekundė per 30 minučių turėtų padidinti spalvos vertę: plūdės prieaugis = (plūdės) 255 / (30 * 60); // raudona 255, žalia 255 suteikia mums ryškumą geltonai, jei (currentMinutes> = minutesUntilSunrise) {// prasideda saulėtekis! float currentVal = (plūduriuoti) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * prieaugis; Serial.print („Dabartinė saulėtekio vertė:“); Serial.println (currentVal); // per rampa parašykite dabartinę minučių X ryškumo padidėjimo reikšmę, jei (currentVal <255) {analogWrite (RED, currentVal); analoWrite (GREEN, currentVal); } else if (currentMinutes - minutesUntilSunrise <40) {// kai būsime visiškai ryškūs, 10 minučių ilgiau palaikykite lemputes. analoginė (RED, 255); analoWrite (GREEN, 255); } dar {// po to mes nukopijuojame juos į išjungtą būseną „analogWrite“ (RED, 0); analoWrite (ŽALI, 0); } } }
Spąstai ir būsimi patobulinimai
Aš naudoju tai paskutines kelias savaites ir tai tikrai padeda atsibusti jaustis gaiviau ir tinkamu metu; naktinis apšvietimas taip pat veikia tikrai gerai. Vis dėlto tai nėra tobula, todėl čia pateikiami keli dalykai, kuriuos reikia dirbti ir išmokti pamokas statant.
Kurdamas šį projektą susidūriau su daugybe problemų, susijusių su dideliais skaičiais, taigi, jei ketinate pakeisti kodą, atminkite tai. C kalba, rašyti savo kintamuosius yra labai svarbu - skaičius ne visada yra tik skaičius. Pavyzdžiui, nepasirašytas ilgas kintamieji turėtų būti naudojami norint saugoti labai didelius skaičius, kaip kad mes kalbame apie milisekundę, tačiau net ir tokio mažo skaičiaus, kaip 60 000, negalima išsaugoti kaip eilinio sveikojo skaičiaus (nepasirašytas intarpas būtų buvęs priimtinas iki 68 000). Esmė ta, skaitykite apie jūsų kintamuosius tipus kai naudojate didelius skaičius ir jei randate nelyginių klaidų, tai greičiausiai todėl, kad viename iš jūsų kintamųjų nepakanka bitų!
Taip pat radau problemą dėl labai mažo ryškumo įtampos nuotėkio - dėl to sklinda mažiausias šviesos kiekis net tada, kai „digitalWrite“ (RED, 0) skleidžiamas signalas - nemanau, kad tai yra juostelių aparatinės įrangos problema, nes jos puikiai veikia kartu su oficialiais valdytojais. Jei kas gali išspręsti šią problemą, pavaizduotą žemiau, būčiau labai dėkingas. Aš bandžiau nuleisti rezistorius ir apriboti išvesties įtampą iš Arduino kaiščių. Man gali reikėti pridėti paprastą galios perjungimo grandinę, kad LED juostai būtų tiekiama tik įtampa, kai to iš tikrųjų reikia; arba tai gali būti klaidingi MOSFET.
Ateityje dirbdamas tikiuosi įterpti infraraudonųjų spindulių imtuvą ir nukopijuoti kai kurias pirminio valdiklio funkcijas - mažiausiai galimybė pakeisti spalvas kaip bendro naudojimo šviesa, nes šiuo metu šis projektas juostelę paverčia tam skirta naktimi lengvas. Aš netgi galiu pridėti automatinę 30 minučių pertraukos funkciją.
Ar jūs tai išbandėte, patobulinote ar turite kokių nors kitų idėjų? Praneškite man komentaruose!
Jamesas yra dirbtinio intelekto bakalauras ir yra CompTIA A + bei Network + sertifikuotas. Jis yra pagrindinis „MakeUseOf“ kūrėjas ir laisvalaikį praleidžia žaisdamas VR dažasvydį ir stalo žaidimus. Nuo mažens jis statė kompiuterius.