Hirdetés

Az embereket természetesen úgy programozták, hogy felébredjenek a napkeltekor; sajnos a modern életet egy önkényes óra diktálja, gyakran arra kényszerítve minket, hogy ébredjünk, amikor nincs természetes fény. Ma napfelkelte ébresztőórát készítünk, amely óvatosan és lassan felébreszt, anélkül, hogy egy támadó zajt okozó gépet venne igénybe.

Ha egy napkelte ébresztőóra készítése egy kicsit túl sok neked, nézd meg ezeket az iPhone és a Android-alkalmazások Használja ezeket az alkalmazásokat a jobb alváshoz [Android és iOS]Egy heves nap után a legjobb dolog, amit tehetünk, ha kedvező mennyiségű alvást kap. Mindig megjelennek olyan új tanulmányok, amelyek bizonyítják, mennyire fontos az ember számára az alvás ... Olvass tovább hogy észlelik amikor a testmozgásokkal lehet a legjobban felébreszteni Segít-e egy alkalmazás jobban aludni?Mindig egy kicsit alváskísérlő voltam, életem nagy részében aprólékos álmai naplót tartottam, és annyira tanulmányoztam a folyamatban való alvást. Van egy ... Olvass tovább

, biztosítva, hogy nem távolodnak el attól a félelmetes álomtól, hanem felébrednek, amikor ragyogó és felfrissültnek érzik magukat - valóban működnek.

A projekt vázlata

A projekt fő része az ágy körül körülbelül 5 méter hosszú LED-es fényforrás lesz. Ezeket tápláljuk egy külső 12 voltos tápegységgel, néhány MOSFET N tranzisztorral kapcsolva. Ennek a résznek a beállítása megegyezik a dinamikus világítási rendszer Készítse el saját dinamikus környezeti megvilágítását egy médiaközpont számáraHa sok filmet néz a számítógépen vagy a médiaközpontban, biztos vagyok benne, hogy szembe kell néznie a világítási dilemmával; kikapcsolja az összes fényt? Teljes robbanás közben tartja őket? Vagy... Olvass tovább Korábban építettem.

Az időzítés kérdés lesz - mivel ez egy prototípus, azt fogom beállítani, hogy az Arduino visszaszámláljon bármikor, amikor visszaállítja. Elméletileg minden nap csak egy-két veszítsünk el, de ideális esetben egy „valós idejű óra” chipet is bevonnánk, hogy ezt megbízhatóbb módon tegyük meg. A napkelte riasztás 30 perccel az ébredés előtt indul, és lassan növeli a kimeneti szintet, amíg 100% -os fényerőssé nem válik - ennek elegendőnek kell lennie ahhoz, hogy felébresszen minket, bár jó ötlet, ha a szokásos ébresztőórát addig használja, amíg a test megszokja azt.

Éjjeli lámpatestet is beépítek ebbe a projektbe, amely felismeri a mozgást és aktiválja a diszkrét alacsony szintjét világítson meg az ágy alatt 3 perc alatt, külön a LED-es lámpáktól, mivel ezek mind a feleségemet, mind az ébredést felidézhetik fel. Az ágy alsó részén található világítás kereskedelmi hálózati egység lesz, ezért bekapcsolok egy relét a dugaszoló aljzatba, hogy be- és kikapcsoljam. Ha semmilyen körülmények között nem szívesen dolgozik a 110–240 V-os hálózati feszültséggel (és ez általában így van jó szabály, hogy van), majd csatlakoztasson egy 433 MHz-es vezeték nélküli távadót kapcsolóaljzatokkal, ahogyan az a Raspberry Pi Arduino otthoni automatizálási projekt Otthoni automatizálási útmutató Raspberry Pi és Arduino-valAz otthoni automatizálás piacát elárasztják drága fogyasztói rendszerek, amelyek összeegyeztethetetlenek és költségesek a telepítésükhöz. Ha van egy Málna Pi és Arduino, alapvetően ugyanazt a dolgot érheti el ... Olvass tovább .

Alkatrészlista és vázlat

  • Arduino
  • RGB LED csík lámpák halmaza
  • 12 voltos tápegység
  • 3 x MOSFET N tranzisztorok (az STP16NF06FP típust használom)
  • Relé és tápcsatlakozó, vagy vezeték nélküli vezérlésű aljzatok és megfelelő adó
  • Az Ön által választott éjszakai fény (a hálózati csatlakozóval ellátott rendszeres hálózati csatlakozás rendben van)
  • PIR mozgásérzékelő (HC-SR501) vagy SC-04 szonár (nem olyan hatékony)
  • Fényérzékelő
  • Projekt kódja - de olvassa el tovább, hogy megértse, hogyan lehet mindent testreszabni.

Itt van a teljes vázlat.

napkelte-riasztó áramkör

A relé bekötése

jegyzet: Hagyja ki ezt a részt, ha az RGB lámpákat is éjszakai fényként kívánja használni - ez kifejezetten külön hálózati fénnyel való bekapcsoláshoz szükséges.

A hálózati áramellátáshoz a relé feszültségének megfelelő - 110V vagy 240 V AC attól függően, hogy hol lakik - és több, mint a teljes áramváltás, amelyet váltani fog. Amit ezt az érzékelőcsomagot használtam (nyilatkozat: ez az én boltom) jelentése 250 VAC / 10A, tehát biztonságban kell lennünk. A reléknek van a com port, általában a közepén, amelyet csatlakoztatni kell a csatlakozóba bejövő élő vezetékhez; majd csatlakoztassa az aljzat élő csatlakozóját a NEM (általában nyitva). Nem kellett volna mondanom, hogy ne tedd ezt az ügyet, ha egy dugaszolóaljzathoz van dugva, vagy meg fogsz halni. Ha fél attól, hogy zavarja a hálózati áramellátást, akkor használjon vezeték nélküli kapcsolt aljzatot.

relé vezetékezés

A föld és a semleges kábeleknek egyenesen a dugaszolóaljzathoz kell menniük, és nem szabad megérinteniük a relét. Lehet, hogy nincs földvezetéke az Egyesült Államokban. A felelőssége, hogy ismerje a vezetékek színkódolását a helyi környezetben - ha másképp nem tudott huzalozni egy otthoni aljzatot otthonában, vagy visszadugni a csatlakozót, akkor ne próbálja beágyazni a relét egybe!

A teszteléshez vezetje a relé jelzőtűjét 12-re, majd futtasson egy egyszerű villogó programot, amely úgy lett módosítva, hogy működjön a 12-es érintkezőn, nem pedig az alapértelmezés szerint a 13. tűn. A konnektornak néhány másodpercenként be- és kikapcsolnia kell. Nem használom a 13. tűt, mert a feltöltési folyamat során a fedélzeti LED gyorsan egymás után villan, jelezve a soros tevékenységet, ami a relé aktiválását is okozza.

Megfelelő időzítés

Az időmérés és az óra funkciók hálózati kapcsolatra való hozzáférés vagy dedikált szolgáltatás nélkül nehézek Valós idejű óra (ezek magukban foglalják a saját akkumulátorokat, amelyek az órát még akkor is fenntartják, ha a fő Arduino nem rendelkezik árammal). Annak érdekében, hogy alacsonyak maradjak a költségek, csalni fogok. Nekem keményen kódolom az Arduino kezdési idejét a visszaszámlálás megkezdéséhez; az időzítések ezért ehhez a kezdési időhöz viszonyítva lesznek. Az óra minden 24 órában visszaáll. Az alábbi óra funkciókód biztosítja a globális változókat currentMillis és currentMinutes minden nap helyesek. Az Arduino nem veszíthet el néhány másodpercnél többet 45 nap alatt; azonban ez a kódolt idõzítési stílus meglehetõsen korlátozott abban, hogy az áramszünet vagy a véletlen visszaállítás mindent megsemmisít, tehát ez minden bizonnyal egy olyan terület, amelyet javítani lehetne. Ha az időzítés nem szinkronizálódik, akkor egyszerűen állítsa vissza az Arduino-t a megadott kezdési időpontra.

A kódnak könnyen érthetőnek kell lennie.

void clock () {if (millis ()> = previousMillis + 86400000) {// egy teljes nap eltelt, állítsa be az órát; előzőMillis + = 86400000; } currentMillis = millis () - previousMillis; // ez megtartja az currentMillis-t minden nap ugyanazzal az currentMinutes = (currentMillis / 1000) / 60; }

Éjszakai fény funkció

A fő hurkokat különálló funkciókra bontottam, így könnyebben olvashatóak, eltávolíthatók vagy módosíthatók. Az éjjeli lámpa() A funkció csak az Arduino alaphelyzetbe állításának órái között működik (feltételezem, hogy valószínűleg lefekvés előtt vagy körül, ha sötét van), és a napkelte-riasztás megkezdéséig. Kezdetben megpróbáltam fényfüggő ellenállást használni, de ezek nem nagyon érzékenyek a kék fényre (ez valószínűleg az a szín, amelyet az éjszakai fényhöz használok), és nehéz őket jól kalibrálni. Az óra használata egyébként sokkal értelmesebb. A globálisat fogjuk használni currentMinutes változó, amely minden nap visszaáll.

A PIR-érzékelő kissé furcsa lehet, ha még soha nem használta ezt, bár a bekötése nem nehéz - megtalálja VCC, GNDés KI a hátulján egyértelműen fel van tüntetve. Két változó ellenállás van neked is; az egyik RX felirat határozza meg a távolságot (kb. 7 m-ig), és egy másik feliratú TX meghatározza a késleltetést. A késleltetés 5 másodperc a legalacsonyabb beállításnál (teljesen az óramutató járásával ellentétes irányban), és azt jelenti, hogy minden pillanatnyi mozgás legalább 5 másodpercig bekapcsolja az érzékelőt. Ugyanakkor meghatározza az aktív állapotok közötti késleltetést is - tehát ha 5 másodperc telik el, és nincs mozgás Ha az érzékelő észlelve van, akkor az érzékelő legalább 5 másodpercre alacsony jelet küld, még akkor is, ha ezen belül mozog időszak. Ha igazán magasra állítja a 30 másodperc körüli késleltetést, akkor az érzékelő megsérülhet.

pir-érzékelő

Ha egyedül alszik, és nem bánja, hogy ugyanazokat az RGB-csíkos lámpákat használja mind a napkelte-riasztáshoz, mind az éjszakai fényhöz, elég könnyen kell beállítania a kódot.

semleges éjszakai fény () {// Csak a nullázás óráinak -> napkelte közötti munka. if (currentMinutes 

Napkelte riasztás

Az egyszerűség kedvéért a 255 255,0 RGB színértéket mélysárga napkeltekor fogom használni - így a növekedés mindkét színes csatornán azonos lesz. Ha úgy találja, hogy túlságosan korán ébreszt, fontolja meg a mélyvörös és a sárga vagy fehér felé mutató elhalványulást. A felfutást csak lineárisan használtam - érdemes lehet megvizsgálni egy természetes görbét a fényerőértékekhez.

A funkció egyszerű - kiszámítja, hogy mekkora fényt kell növelni másodpercenként úgy, hogy 30 perc elteltével teljes fényerőn legyen; aztán megsokszorozza, hogy bármennyi másodpercig is a napkelte felé tart. Ha már teljes fényerővel rendelkezik, akkor további 10 percig bekapcsol, hogy megbizonyosodjon arról, hogy fel van-e állítva (és ha még mindig nem állsz fel, akkor valószínűleg van egy biztonsági riasztás a helyén).

void sunrisealarm () {// minden egyes másodperc alatt a 30 perces periódus alatt növelnie kell a szín értékét: úszó növekedés = (úszó) 255 / (30 * 60); // piros 255, zöld 255 teljes sárga fényerőt ad nekünk, ha (currentMinutes> = minutesUntilSunrise) {// kezdődik a napkelte! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * növekmény; Serial.print ("Napkelte aktuális értéke:"); Serial.println (currentVal); // felfutás közben írja be a percek aktuális értékét X fényerő-növekedésnél, ha (currentVal <255) {analogWrite (RED, currentVal); analogWrite (ZÖLD, currentVal); } egyébként, ha (currentMinutes - minutesUntilSunrise <40) {// amint teljes fényerővel megkapjuk, tartsuk bekapcsolva a lámpákat 10 percig tovább analógWrite (RED, 255); analogWrite (ZÖLD, 255); } egyébként {// ezt követően visszaállítjuk őket az analogWrite kikapcsolt állapotába (RED, 0); analogWrite (ZÖLD, 0); } } }

Buktatók és a jövőbeli frissítések

Az elmúlt hetekben ezt használtam, és ez tényleg segít felébreszteni a frissülést és megfelelő időben; az éjszakai fény is nagyon jól működik. Ennek ellenére nem tökéletes, tehát itt van néhány dolog, amelyekre az építés során munkát és tanulságokat kell igénybe venni.

napkelte-riasztó

A projekt elkészítése során számos kérdéssel találkoztam a nagyszámú ügyek kezelésével, tehát ha a kód módosítását tervezi, kérjük, vegye figyelembe ezt. C nyelven a a változók beírása nagyon fontos - a szám nem mindig csak szám. Például, alá nem írt hosszú a változókat olyan nagy számok tárolására kell használni, mint amilyenek másodpercről beszélünk, de még a 60 000-es kicsi számot sem lehet normál egészként tárolni (egy alá nem írt intézet 68 000-ig elfogadható lenne). A lényeg az, olvassa el a változó típusait ha nagy számokat használ, és ha páratlan hibákat talál, akkor ez valószínűleg azért van, mert az egyik változónak nincs elegendő bitje!

Találtam egy nagyon alacsony fényerősségű feszültségszivárgás problémáját is - ami a legkisebb mennyiségű fényt bocsátja ki akkor is, ha digitalWrite (RED, 0) jelet bocsátanak ki - nem hiszem, hogy hardverprobléma van a szalagokkal, mivel ezek jól működnek a hivatalos vezérlőkkel. Ha valaki meg tudja oldani ezt az alább látható képet, akkor nagyon hálás lennék. Megpróbáltam leengedni az ellenállásokat és korlátozni az Arduino csapok kimeneti feszültségét. Lehetséges, hogy hozzá kell tennem egy egyszerű tápkapcsoló áramkört, hogy csak a LED-szalag tápfeszültségére táplálja a feszültséget, amikor erre ténylegesen szükség van; vagy hibás MOSFET-ek lehetnek.

fény-szivárgás

A jövőbeni munkához remélem, hogy beilleszt egy infravörös vevőt és megismétli az eredeti vezérlő egyes funkcióit - itt: a legkevésbé az a képesség, hogy a színt megváltoztassa általános felhasználású fényként, mivel ez a projekt jelenleg a csíkot egy külön éjszakára változtatja könnyű. Hozzátehetek egy automatikus 30 perces időtúllépési funkciót.

Próbálta meg, javított vagy más ötletet kapott? Tudassa velünk a megjegyzésekben!

James rendelkezik mesterséges intelligencia BSc-vel, CompTIA A + és Network + tanúsítvánnyal rendelkezik. A MakeUseOf vezető fejlesztője, és szabadidejét VR paintballon és társasjátékokon játszik. Gyerekkora óta épít PC-ket.