Reklame

Mennesker er naturligvis programmeret til at vågne op med solopgangen; Desværre er det moderne liv dikteret af et vilkårligt ur, der ofte tvinger os til at vågne op, når der ikke er noget naturligt lys. I dag laver vi et solopgang vækkeur, der forsigtigt og langsomt vækker dig uden at ty til en stødende støjfremstillende maskine.

Hvis det er lidt for meget for dig at lave et solopgang vækkeur, så tjek disse iPhone og Android-apps Brug disse apps til at hjælpe dig med at sove bedre [Android & iOS]Efter en hektisk dag er det bedste, du kan gøre, at få en fordelagtig søvnmængde. Der vises altid nye undersøgelser, der viser, hvor vigtig søvn virkelig er for en person, der forbedrer ... Læs mere det opdager når det bedst er at vække dig ved kropsbevægelser Kan en app virkelig hjælpe dig med at sove bedre?Jeg har altid været en smule søvneksperimenter, og har i store dele af mit liv ført en omhyggelig drømmedagbog og studeret så meget som jeg kunne om at sove i processen. Der er en ... Læs mere

instagram viewer
, der sikrer, at du ikke bliver trukket væk fra den fantastiske drøm, men i stedet vågne op og føl dig lys og opdateret - de fungerer virkelig.

Projektoversigt

Hoveddelen af ​​projektet vil være omkring 5 meter LED-strimmellys, der er lagt omkring sengen. Vi tænker disse med en ekstern 12 volt-forsyning, skiftet ved hjælp af nogle MOSFET N-transistorer. Opsætningen for denne del vil være identisk med dynamisk belysningssystem Byg din egen dynamiske omgivelsesbelysning til et mediecenterHvis du ser en masse film på din pc eller mediecenter, er jeg sikker på, at du står over for lysdilemmaet; slukker du alle lys helt? Holder du dem på fuld blast? Eller... Læs mere Jeg byggede før.

Timing vil være et problem - da dette er en prototype, vil jeg indstille Arduino til at tælle fra hver gang den nulstilles. I teorien skulle vi kun miste et sekund eller to hver dag, men ideelt set ville vi medtage en "realtidsklokke" -chip for at gøre dette mere pålideligt. Solopgangsalarmen starter 30 minutter før opvågningstiden og øger langsomt outputniveauet, indtil det er på 100% lysstyrke - dette skal være nok til at vække os, selvom det er en god ide at fortsætte med at bruge dit almindelige vækkeur, indtil din krop er vant til det.

Jeg vil også indarbejde et nattelys i dette projekt, der registrerer bevægelse og aktiverer et diskret lavt niveau lys under sengen med en 3 minutters time-out, adskilt fra LED-lysene, da de ville få både min kone og jeg til at vågne op. Belysningen under sengen vil være en kommerciel lysnettet, så jeg hacker et relæ inde i en stikkontakt for at tænde og slukke for det. Hvis du ikke er komfortabel med at arbejde med 110-240v vekselstrøm under enhver omstændighed (og det er generelt en god regel at have), tråd derefter op en 433 MHz trådløs sender med skiftestik, som beskrevet på Raspberry Pi Arduino-hjemmeautomatiseringsprojekt Hjemmeautomatiseringsvejledning med Raspberry Pi og ArduinoHjemmeautomatiseringsmarkedet er oversvømmet af dyre forbrugersystemer, uforenelige med hinanden og dyre at installere. Hvis du har en Raspberry Pi og en Arduino, kan du dybest set opnå det samme ved ... Læs mere .

Deleliste og skematisk

  • Arduino
  • Sæt RGB LED-strimmellamper
  • 12 volt strømforsyning
  • 3 x MOSFET N-transistorer (jeg bruger type STP16NF06FP)
  • Relæ- og stikkontakt eller trådløse styrede stikkontakter og passende sender
  • Dit valg af natlys (almindelig lysnettet med stik er fint)
  • PIR bevægelsessensor (HC-SR501) eller en SC-04 sonar (ikke så effektiv)
  • Lyssensor
  • Projektkode - men læs videre for at sikre dig, at du forstår, hvordan du tilpasser alt.

Her er det komplette skema.

solopgang-alarm-kredsløb

Kabelføring af et relæ

Bemærk: Spring over dette afsnit, hvis du også ønsker at bruge RGB-lysene som nattelys - dette er specifikt til at tænde for et separat lysdrevet lys.

For at skifte lysnettet skal dit relæ klassificeres for spænding - 110V eller 240V AC afhængigt af hvor du bor - og mere end den samlede strømstyrke, du skifter. Den, jeg har brugt fra denne sensorpakke (ansvarsfraskrivelse: det er min butik) er 250VAC / 10A, så vi skal være sikre. Relæer har en com port, normalt i midten, som skal forbindes til den strømførende ledning, der kommer ind i stikket; tilslut derefter stikkontaktens stikkontakt til INGEN (normalt åben). Jeg skulle ikke være nødt til at bede dig om ikke at gøre dette, mens det er tilsluttet en stikkontakt, eller du vil dø. Hvis du er bange for at komme i kontakt med lysnettet, skal du bruge trådløse switchede stikkontakter i stedet.

relæ-ledninger

Jord- og neutralkablerne skal gå direkte til stikkontakten og berører ikke relæet. Du har muligvis ikke en jordlinje i USA. Det er dit ansvar at kende farvekodning af ledninger i dit lokale område - Hvis du ellers ikke kunne slå en almindelig stikkontakt i dit hjem eller tilslutte et stik, skal du ikke prøve at integrere et relæ i et!

For at teste, led relæsignalstiften til 12, kør derefter et simpelt blinkprogram, der er ændret til at arbejde på pin 12, ikke 13 som standard. Din stik skal tændes og slukkes med få sekunder. Årsagen til, at jeg ikke bruger pin 13, skyldes, at LED'en ombord under upload-processen skyder hurtigt i rækkefølge for at indikere seriel aktivitet, hvilket vil medføre, at relæet også aktiveres.

At få timingen rigtigt

Timing og urfunktioner er vanskelige uden adgang til en netværksforbindelse eller dedikeret Realtid ur (disse inkluderer deres egne batterier for at holde uret i gang, selv når den vigtigste Arduino ikke har strøm). For at holde omkostningerne lave, vil jeg snyde. Jeg koder en starttid for Arduino for at begynde, at det er nedtælling; timinger vil derfor være relativt til denne starttid. Hver 24 timer nulstilles uret. Koden til urfunktion nedenfor sørger for de globale variabler currentMillis og currentMinutes er korrekte hver dag. Arduino bør ikke miste mere end et par sekunder hver 45 dag; denne hårdkodede timingstil er imidlertid ret begrænset, idet et strømafbrydelse eller en tilfældig nulstilling vil ødelægge alt, så dette er bestemt et område, der kan forbedres. Hvis timingen ikke er synkroniseret, skal du blot nulstille Arduino på dit angivne starttidspunkt.

Koden skal være let at forstå.

void ur () {if (millis ()> = forrigeMillis + 86400000) {// der er gået en hel dag, nulstil uret; forrigeMillis + = 86400000; } currentMillis = millis () - forrigeMillis; // dette holder vores aktuelleMillis den samme hver dag aktuelleMinutes = (currentMillis / 1000) / 60; }

Natlys-funktion

Jeg har opdelt hovedsløjferne i forskellige funktioner, så det er lettere at læse og fjerne eller justere. Det nattelys() -funktionen fungerer kun mellem de timer, hvor Arduino blev nulstillet (jeg antager, at du sandsynligvis vil gøre dette på eller omkring sengetid, når det er mørkt), og indtil solopgangsalarmen skal begynde. Jeg havde oprindeligt forsøgt at bruge en lysafhængig modstand, men de er ikke særlig følsomme over for blåt lys (hvilket tilfældigvis er den farve, jeg bruger til nattelyset), og vanskelige at kalibrere til højre. Brug af uret giver det alligevel mere mening. Vi bruger det globale currentMinutes variabel, som bliver nulstillet hver dag.

PIR-sensoren kan være lidt finurlig, hvis du aldrig har brugt en før, selvom det ikke er vanskeligt at tilslutte den - du finder VCC, GND, og UD tydeligt mærket på bagsiden. Der er også to variable modstande dig; den ene mærkede RX bestemmer rækkevidde (op til ca. 7m), og en anden mærket TX bestemmer forsinkelse. Forsinkelsen er 5 sekunder ved dets laveste indstilling (helt mod uret), og betyder, at enhver øjeblikkelig bevægelse vil udløse mindst 5 sekunder “on” -tilstand fra sensoren. Det bestemmer imidlertid også forsinkelsen mellem aktive tilstande - så hvis der går 5 sekunder, og der ikke er bevægelse registreret, sender sensoren et lavt signal i mindst 5 sekunder, selvom der er bevægelse i løbet af dette periode. Hvis du har virkelig indstillet forsinkelse på ca. 30 sekunder, kan det se ud som om sensoren er ødelagt.

pir-sensor

Hvis du sover alene og ikke har noget imod at bruge de samme RGB-strimmellamper til både solopgangsalarm og natlys, skal du være i stand til at justere koden let nok.

ugyldigt natlys () {// Arbejd kun mellem timerne med nulstilling -> solopgang. if (currentMinutes 

Solopgangsalarm

For enkelheds skyld bruger jeg RGB-farveværdien 255,255,0 til en dyb gul solopgang - på denne måde vil forøgelsen på begge farvekanaler være den samme. Hvis du finder ud af, at den vågner op for tidligt, kan du overveje at starte med en dyb rød og falme mod gult eller hvidt. Rampen op, jeg har brugt i lige lineær - kan du undersøge, hvordan du bruger en mere naturlig kurve til lysstyrkeværdier.

Funktionen er enkel - det regner ud, hvor meget lys der skal øges med hvert sekund, så det er i fuld lysstyrke efter en periode på 30 minutter; ganges derefter, at det med mange sekunder er i øjeblikket i solopgangen. Hvis den allerede er i fuld lysstyrke, forbliver den i yderligere 10 minutter for at sikre dig, at du er oppe (og hvis du stadig ikke er oppe, skal du sandsynligvis have en sikkerhedskopi-alarm på plads).

void sunrisealarm () {// hvert sekund i løbet af 30 minite-perioden skulle øge farveværdien med: float inkrement = (float) 255 / (30 * 60); // rød 255, grøn 255 giver os fuld lysstyrke gul, hvis (nuværende minutter> = minutterUntilSunrise) {// solopgang begynder! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * forøgelse; Serial.print ("Aktuel værdi for solopgang:"); Serial.println (nuværendeVal); // under rampe op, skriv den aktuelle værdi for minutter X lysstyrke forøgelse hvis (strømVal <255) {analogWrite (RØD, strømVal); analogWrite (GRØNN, strømVal); } ellers hvis (nuværende minutter - minutterUntilSunrise <40) {// når vi er i fuld lysstyrke, skal du holde lysene tændt i 10 minutter længere analogWrite (RED, 255); analogWrite (GREEN, 255); } andet {// efter det, kaster vi dem tilbage til off-tilstand analogWrite (RED, 0); analogWrite (GREEN, 0); } } }

Faldgruber og fremtidige opgraderinger

Jeg har brugt dette i de sidste par uger nu, og det hjælper virkelig med at vågne op og føles mere forfrisket og på et anstændigt tidspunkt; nattelyset fungerer også rigtig godt. Det er dog ikke perfekt, så her er et par ting, der har brug for arbejde og lektioner under konstruktionen.

solopgang-alarm

Mens jeg lavede dette projekt, stødte jeg på mange problemer med at håndtere et stort antal, så hvis du planlægger at ændre koden skal du huske dette. På C-sprog, at skrive dine variabler er meget vigtigt - et tal er ikke altid kun et tal. For eksempel, usigneret længe variabler skal bruges til at gemme super store tal, som vi beskæftiger os med, når vi taler om millisekunder, men selv et tal så lille som 60.000 kan ikke gemmes som et almindeligt heltal (et usigneret int ville have været acceptabelt for op til 68.000). Pointen er, læse dine variabeltyper op når du bruger store tal, og hvis du finder underlige bugs, skyldes det sandsynligvis, at en af ​​dine variabler ikke har nok bits!

Jeg har også fundet et problem med lækager med meget lav lysstyrke - hvilket fører til, at den mindste lysmængde udsendes, selv når en digitalWrite (RØD, 0) signal udsendes - Jeg tror ikke, det er hardwareproblem med strimlerne, da de fungerer fint med de officielle controllere. Hvis nogen kan løse dette problem, afbildet nedenfor, ville jeg være meget taknemmelig. Jeg har prøvet at trække modstande ned og begrænse udgangsspændingen fra Arduino-stifterne. Det kan være nødvendigt, at jeg tilføjer et simpelt strømskiftekredsløb for kun at levere spænding til LED-strimlen, når det faktisk er nødvendigt; eller det kan være defekte MOSFET'er.

lys-lækage

For fremtidig arbejde håber jeg at tilføje en IR-modtager og kopiere nogle af funktionerne i den originale controller - kl mindst muligheden for at ændre farver som lys til generel brug, da lige nu dette projekt gør strimlen til en dedikeret nat lys. Jeg kan endda tilføje en automatisk 30 minutters timeout-funktion.

Har du prøvet dette, foretaget forbedringer eller fået andre ideer? Fortæl mig det i kommentarerne!

James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.