Reklaam
Inimesed on loomulikult programmeeritud ärkama koos päikesetõusuga; kahjuks dikteerib tänapäevast elu suvaline kell, sundides meid sageli ärkama, kui loomulikku valgust pole. Täna valmistame päikesetõusu äratuskella, mis äratab teid õrnalt ja aeglaselt, ilma et kasutataks solvavat müra tekitavat masinat.
Kui päikesetõusu äratuskella tegemine on teie jaoks natuke liiga palju, siis vaadake neid iPhone'i ja Androidi rakendused Kasutage neid rakendusi, et aidata teil paremini magada [Android ja iOS]Pärast kirglikku päeva on parim asi, mida saate teha, magada soodsalt. Alati ilmub uusi uuringuid, mis tõestavad, kui oluline on uni inimesele, parandades ... Loe rohkem mis tuvastavad millal on kõige parem äratada teid kehaliigutuste abil Kas rakendus aitab teil paremini magada?Olen alati olnud natuke une eksperimenteerija, pidades suurema osa oma elust täpset unenäopäevikut ja uurinud nii palju kui võimalik, selle protsessi ajal magamist. Seal on ... Loe rohkem , tagades, et teid ei tõmmata sellest fantastilisest unenäost eemale, vaid ärkate selle asemel, et tunda end helge ja värskendatuna - need teevad tõesti tööd.
Projekti ülevaade
Projekti põhiosa moodustab umbes 5-meetrine voodi ümber LED-lamp. Toitame neid välise 12 voldise toitega, mis lülitatakse sisse mõne MOSFET N transistori abil. Selle osa häälestus on identne seadistusega dünaamiline valgustussüsteem Looge meediumikeskusele oma dünaamiline ümbritsev valgustusKui vaatate arvutis või meediumikeskuses palju filme, olen kindel, et olete seisnud silmitsi valgustusprobleemidega; kas lülitate kõik tuled täielikult välja? Kas hoiate neid täie hooga? Või ... Loe rohkem Ehitasin enne.
Ajastamine on probleem - kuna see on prototüüp, panen Arduino loendama, kui see lähtestatakse. Teoreetiliselt peaksime iga päev kaotama vaid sekundi või kaks, kuid ideaaljuhul hõlmaks see usaldusväärsemaks tegemiseks „reaalajas kella” kiibi. Päikesetõusu alarm käivitub 30 minutit enne ärkamisaega ja suurendab aeglaselt väljundtaseme taset, kuni see on 100% heledusega - sellest peaks piisama, et meid äratada, kuigi on hea mõte kasutada tavalist äratuskella seni, kuni keha on harjunud seda.
Kavatsen sellesse projekti kaasata ka öötuli, mis tuvastab liikumise ja aktiveerib diskreetse madala taseme Valgustus voodi all 3-minutilise ooteajaga, eraldi LED-tuledest, kuna need põhjustaksid nii minu kui ka mu naise ärkamist üles. Voodi all olev valgustus on kaubanduslik toiteallikas, nii et hakkan selle sisse ja välja lülitama pistikupesas oleva relee. Kui teil ei ole 110–240 V vahelduvvoolu toiteallikaga töötamine mingil juhul mugav (ja see on tavaliselt hea reegel olemas), siis ühendage juhtmevaba 433 MHz raadiosaatja lülituspesadega, nagu on kirjeldatud jaotises Vaarika Pi Arduino kodutehnika projekti Koduse automatiseerimise juhend koos vaarikapi ja arduinogaKodutehnika automatiseerimise turg on üle ujutatud kallite tarbija süsteemidega, omavahel kokkusobimatud ja nende paigaldamine kulukas. Kui teil on vaarikapi ja arduino, saate põhimõtteliselt sama saavutada ... Loe rohkem .
Osade loetelu ja skeem
- Arduino
- RGB LED-ribavalgustite komplekt
- 12-voldine toiteallikas
- 3 x MOSFET N transistorid (kasutan tüüpi STP16NF06FP)
- Relee- ja pistikupesa või juhtmeta juhtimisega pistikupesad ja sobiv saatja
- Teie valitud öövalgus (tavaline vooluvõrk pistikuga on korras)
- PIR-liikumisandur (HC-SR501) või SC-04 sonar (mitte nii efektiivne)
- Valgussensor
- Projekti kood - kuid lugege kindlasti läbi, et saada aru, kuidas kõike kohandada.
Siin on täielik skeem.
Relee ühendamine
Märge: Jätke see jaotis vahele, kui soovite kasutada RGB-tulesid ka öövalgustina - see on spetsiaalselt eraldi toitel töötava tule sisselülitamiseks.
Võrgutoite vahetamiseks peab teie relee pinge nimiväärtus olema - 110 V või 240 V vahelduvvool sõltuvalt elukohast - ja rohkem kui kogu vaheldumisi vahetate. Seda, mida ma sellest anduripakist kasutasin (loobumine: see on minu pood) on 250 VAC / 10 A, nii et me peaksime olema ohutud. Releedel on a com port, tavaliselt keskel, mis tuleks ühendada pistikusse tuleva reaalajas juhtmega; seejärel ühendage pistikupesa pingepesa vooluvõrku EI (tavaliselt avatud). Ma ei peaks teile ütlema, et ärge tehke seda, kui see on pistikupessa ühendatud, või kui te surete. Kui kardate jama vooluvõrgust, kasutage selle asemel traadita sisse lülitatud pistikupesasid.
Maandusjuhtmed ja neutraalsed kaablid peaksid minema otse pistikupessa ja ei tohi releed puudutada. Teil ei pruugi USA-s maismaaliini olla. Teie kohus on teada oma piirkonnas asuvate juhtmete värvikoodide kasutamist - kui te ei saaks oma kodus tavalist pistikupesa juhtmest lahti ühendada ega pistikut juhtme külge keerata, ärge proovige releed manustada ühte!
Testimiseks ühendage releesignaali tihvt 12-ni, seejärel käivitage lihtne vilgutusprogramm, mis on modifitseeritud töötama pin-12, mitte 13, nagu vaikimisi. Teie pistikupesa peaks sisse ja välja lülituma iga paari sekundi tagant. Põhjus, miks ma ei kasuta pin 13, on see, et üleslaadimise ajal süttib rongis olev LED kiiresti järjestikkuse aktiivsuse tähistamiseks, mis põhjustab ka relee aktiveerimise.
Ajastuse õigeks saamine
Ajastus- ja kellafunktsioonid on raskendatud ilma võrguühenduseta juurdepääsu või sellele pühendamata Reaalajas kell (nende hulgas on oma patareid, mis hoiavad kella töövalmis ka siis, kui peamisel Arduinol pole voolu). Et kulusid madalal hoida, kavatsen petta. Ma kodeerin Arduino algusaega kõvasti kodeerimise algust; ajad on seetõttu selle algusajaga võrreldes. Iga 24 tunni järel kell lähtestatakse. Allpool olev kellafunktsiooni kood tagab globaalsete muutujate olemasolu praeguneMillis ja currentMinutes on iga päev õiged. Arduino ei tohiks kaotada rohkem kui mõni sekund iga 45 päeva järel; see kodeeritud ajastusstiil on siiski üsna piiratud, kuna voolukatkestus või juhuslik lähtestamine rikuvad kõik, nii et see on kindlasti üks valdkond, mida saaks veel paremaks muuta. Kui ajastus ei sünkrooni, lähtestage Arduino lihtsalt teie valitud algusajal.
Kood peaks olema kergesti mõistetav.
void clock () {if (millis ()> = previousMillis + 86400000) {// on möödunud terve päev, lähtestage kell; eelmineMillis + = 86400000; } praeguneMillis = millis () - eelmineMillis; // see hoiab meie currentMillise iga päev samaks. currentMinutes = (currentMillis / 1000) / 60; }
Öise valguse funktsioon
Ma jagan põhisilmad eraldi funktsioonideks, nii et neid on lihtsam lugeda ja eemaldada või kohandada. öövalgus () funktsioon töötab ainult tundide vahel, mil Arduino lähtestati (ma eeldan, et teete seda tõenäoliselt enne magamaminekut või umbes pimedal ajal) ja kuni päikesetõusu äratuse saabumiseni. Algselt olin proovinud kasutada valgusest sõltuvat takistit, kuid need ei ole sinise valguse suhtes eriti tundlikud (see on värv, mida öösel valgust kasutan) ja neid on raske õigesti kalibreerida. Kella kasutamine on igal juhul mõistlikum. Me kasutame globaalset currentMinutes muutuja, mis lähtestatakse iga päev.
PIR-andur võib olla pisut pentsik, kui te pole seda kunagi varem kasutanud, ehkki selle juhtmestik pole keeruline - leiate VCC, GNDja VÄLJAS tagaküljel selgelt märgistatud. Sind on ka kaks muutuvat takistit; üks sildiga RX määrab vahemiku (kuni umbes 7m) ja teine märgistatud TX määrab viivituse. Viivitus on selle madalaima seadistuse korral 5 sekundit (täielikult vastupäeva) ja tähendab, et iga hetkeline liikumine käivitab andurist vähemalt 5 sekundi pikkuse sisselülitatud oleku. Kuid see määrab ka viivituse aktiivsete olekute vahel - kui 5 sekundit möödub ja liikumist pole Kui seade tuvastatakse, saadab andur madala signaali vähemalt 5 sekundiks, isegi kui selle ajal toimub liikumine periood. Kui teil on viivitus seatud umbes 30 sekundi kõrgusele, võib tunduda, et andur on katki.
Kui magate üksi ja ei taha kasutada samu RGB ribatulesid nii päikesetõusu häire kui ka öövalguse jaoks, peaksite suutma koodi piisavalt hõlpsalt reguleerida.
tühine öövalgus () {// Töötage ainult lähtestamise tundide vahel -> päikesetõusu ajal. if (currentMinutes
Päikesetõusu äratus
Lihtsuse huvides kasutan sügavkollase päikesetõusu puhul RGB värviväärtust 255 255,0 - sel moel on juurdekasv mõlemal värvikanalil sama. Kui leiate, et see ärkab teid liiga vara, võiksite alustada punasest punasest ja kollase või valge poole tuhmuda. Minu tõus on tõusnud lihtsalt lineaarselt - võiksite uurida heleduse väärtuste loomulikuma kõvera kasutamist.
Funktsioon on lihtne - see annab teada, kui palju valgust peaks iga sekundi võrra suurendama, näiteks 30-minutise perioodi järel on see täies heleduses; siis korrutatakse nii palju sekunditega, et ta on praegu päikesetõusus. Kui see on juba täies heleduses, hoiab see sisse lülitatud veel 10 minutit, et olla kindel, et olete üleval (ja kui te ikka veel ei ole, peaks teil tõenäoliselt olema varualarm).
void sunrisealarm () {// iga sekund 30 minuti jooksul peaks värvi väärtust suurendama: ujuki juurdekasv = (ujuk) 255 / (30 * 60); // punane 255, roheline 255 annab meile täieliku heleduse kollaseks, kui (currentMinutes> = minutesUntilSunrise) {// päikesetõus algab! float currentVal = (float) ((praeguneMillis / 1000) - (minutesUntilSunrise * 60)) * juurdekasv; Serial.print ("Päikesetõusu praegune väärtus:"); Serial.println (currentVal); // rampimise ajal kirjutage hetke heleduse juurdevoolu väärtus minutites X, kui (currentVal <255) {analogWrite (RED, currentVal); analogWrite (ROHELINE, currentVal); } muidu kui (currentMinutes - minutesUntilSunrise <40) {// kui oleme täieliku heleduse käes, siis hoidke tulesid kümme minutit kauem peal analogWrite (RED, 255); analogWrite (ROHELINE, 255); } muidu {// pärast seda kopeerime nad tagasi analogWrite'i väljalülitatud olekusse (RED, 0); analogWrite (ROHELINE, 0); } } }
Lõksud ja edaspidised uuendused
Olen seda juba viimased nädalad kasutanud ja see aitab tõesti ärgata end värskemalt ja sobival ajal; ka öövalgus töötab tõesti hästi. See pole siiski täiuslik, nii et siin on mõned asjad, mis vajavad ehituse ajal tööd ja õppetunde.
Selle projekti tegemisel puutusin paljude probleemidega kokku suurte numbritega tegelemisel, nii et kui plaanite koodi muuta, pidage seda meeles. C keeles on oma muutujate sisestamine on väga oluline - arv ei ole alati ainult number. Näiteks, allkirjastamata pikk muutujaid tuleks kasutada ülikergete arvude salvestamiseks, nagu millisekunditest rääkides, kuid isegi nii väikest arvu kui 60 000 ei saa tavalise täisarvuna talletada (allkirjastamata int oleks olnud vastuvõetav kuni 68 000 jaoks). Asi on selles, lugege üles oma muutujate tüüpide kohta kui kasutate suuri numbreid ja kui leiate veider vead, siis tõenäoliselt sellepärast, et ühel teie muutujast pole piisavalt bitti!
Samuti leidsin probleemi väga heledate pingelekketega - mis põhjustab selle, et isegi siis, kui digitalWrite (RED, 0) signaal on väljastatud - ma ei usu, et ribadega on riistvaraprobleem, kuna need töötavad koos ametlike kontrolleritega suurepäraselt. Kui keegi suudab seda probleemi, nagu allpool näidatud, lahendada, oleksin väga tänulik. Olen proovinud takisteid maha tõmmata ja piirata Arduino tihvtide väljundpinget. Võib-olla pean lisama lihtsa toitelülitusahela, et toota LED-riba ainult pingele, kui seda tegelikult vaja on; või võib see olla vigane MOSFET.
Edaspidiseks tööks loodan lisada IR-vastuvõtja ja dubleerida mõned algse kontrolleri funktsioonid - vähim võimalus värvi muutmiseks üldkasutatava valgustina, kuna praegu muudab see projekt riba eriliseks ööks valgus. Võin lisada isegi automaatse 30-minutilise ajalõpu funktsiooni.
Kas olete seda proovinud, parendusi teinud või on teil muid ideid? Andke kommentaarides teada!
Jamesil on tehisintellekti BSc ning ta on CompTIA A + ja Network + sertifikaadiga. Ta on MakeUseOfi juhtiv arendaja ja veedab oma vaba aega VR-i paintballi ja lauamänge mängides. Ta on lapsest peale arvutit ehitanud.