
Harry James
0
2130
344
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 maskine, der fremstiller støj.
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] Brug disse apps til at hjælpe dig med at sove bedre [Android & iOS] Efter en hektisk dag, det bedste du kan gøre er 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 ... der opdager, hvornår det bedst er at vække dig ved kropsbevægelser. Kan en app virkelig hjælpe dig med at sove bedre? Kan en app virkelig hjælpe dig med at sove bedre? Jeg har altid været lidt af en søvneksperimenter, og har i store dele af mit liv ført en omhyggelig drømmedagbog og studeret så meget jeg kunne om at sove i processen. Der er en…, der sikrer, at du ikke trækkes væk fra den fantastiske drøm, men i stedet vågner op og føler dig lyst og forfrisket.
Projektoversigt
Hoveddelen af projektet vil være omkring 5 meter LED-strimmellys lagt omkring sengen. Vi tænker disse med en ekstern 12 volt forsyning, skiftet ved hjælp af nogle MOSFET N transistorer. Opsætningen til denne del vil være identisk med det dynamiske belysningssystem Byg din egen dynamiske omgivelsesbelysning til et mediecenter Byg dit eget dynamiske omgivelsesbelysning til et mediecenter Hvis du ser en masse film på din pc eller mediecenter, er jeg sikker på, at du har stået over for lysdilemmaet; slukker du alle lys helt? Holder du dem på fuld eksplosion? Eller ... jeg byggede før.
Timing vil være et problem - da dette er en prototype, sætter jeg 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 “realtid ur” 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 skulle 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 natlys i dette projekt, der registrerer bevægelse og aktiverer et diskret lavt niveau under sengen med en 3 minutters time out, adskilt fra LED-lysene, da det 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 det. Hvis du ikke er tilpas med at arbejde med 110-240v vekselstrømsnettet under alle omstændigheder (og det er generelt en god regel at have), skal du trådløse en 433 MHz trådløs sender med skiftestik, som beskrevet på Raspberry Pi Arduino hjemmeautomatiseringsprojekt Hjemmeautomatiseringsvejledning med Raspberry Pi og Arduino Hjemme-automatiseringsvejledning med Raspberry Pi og Arduino Hjemme-automatiseringsmarkedet er oversvømmet med 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 ... .
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-ekkolod (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.
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 skulle 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, når det er tilsluttet en stikkontakt, eller du kommer til at dø. Hvis du er bange for at komme i kontakt med lysnettet, skal du bruge trådløse switchede stikkontakter i stedet.
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 samle 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-indbygget under uploaden tændes hurtigt efter hinanden 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 for en starttid for Arduino til at begynde sin 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å.
tomt ur () hvis (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 mere mening alligevel. 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 den laveste indstilling (helt mod uret) og betyder, at enhver øjeblikkelig bevægelse vil udløse mindst 5 sekunder af “på” tilstand fra sensoren. Det bestemmer imidlertid også forsinkelsen mellem aktive tilstande - så hvis der går 5 sekunder, og der ikke registreres nogen bevægelse, sender sensoren et lavt signal i mindst 5 sekunder, selvom der er bevægelse i denne periode. Hvis du har indstillet forsinkelsen virkelig højt på ca. 30 sekunder, kan det se ud som om sensoren er ødelagt.
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. hvis (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);
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 synes, det er at vække dig for tidligt, kan du overveje at starte med en dyb rød og falme mod gult eller hvidt. Rampen op, jeg har brugt 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 af hvert sekund, så det er i fuld lysstyrke efter en periode på 30 minutter; ganges derefter, at det dog med mange sekunder for tiden er i solopgangen. Hvis det 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 periode 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 (currentVal); // under rampe op, skriv den aktuelle værdi for minutter X lysstyrke forøgelse hvis (strømVal < 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);
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 erfaringer under konstruktionen.
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 at læse op på dine variabeltyper, når du bruger store tal, og hvis du finder ulige bugs, er det sandsynligvis fordi 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 (RED, 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.
For fremtidig arbejde håber jeg på at tilføje en IR-modtager og duplikere nogle af funktionerne i den originale controller - i det mindste 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!