Werbung
Menschen sind natürlich darauf programmiert, mit dem Sonnenaufgang aufzuwachen. Leider wird das moderne Leben von einer willkürlichen Uhr diktiert, die uns oft zwingt, aufzuwachen, wenn es kein natürliches Licht gibt. Heute stellen wir einen Sonnenaufgangswecker her, der Sie sanft und langsam weckt, ohne auf eine anstößige Geräuschmaschine zurückzugreifen.
Wenn Ihnen ein Sonnenaufgang-Wecker etwas zu viel ist, schauen Sie sich diese iPhone und an Android Apps Verwenden Sie diese Apps, um besser zu schlafen [Android & iOS]Nach einem hektischen Tag ist das Beste, was Sie tun können, eine gute Menge Schlaf zu bekommen. Es erscheinen immer wieder neue Studien, die belegen, wie wichtig Schlaf für einen Menschen wirklich ist und ... Weiterlesen das erkennen wenn es am besten ist, dich durch Körperbewegungen zu wecken Kann eine App Ihnen wirklich helfen, besser zu schlafen?Ich war schon immer ein bisschen ein Schlafexperimentator, hatte einen Großteil meines Lebens ein akribisches Traumtagebuch geführt und so viel wie möglich über das Schlafen gelernt. Es gibt eine ... Weiterlesen
Damit Sie nicht von diesem großartigen Traum abgezogen werden, sondern aufwachen und sich hell und erfrischt fühlen - sie funktionieren wirklich.Projektübersicht
Der Hauptteil des Projekts wird ein 5-Meter-LED-Lichtstreifen sein, der um das Bett gelegt wird. Wir versorgen diese mit einer externen 12-Volt-Versorgung, die mit einigen MOSFET N-Transistoren geschaltet wird. Das Setup für diesen Teil ist identisch mit dem dynamisches Beleuchtungssystem Erstellen Sie Ihre eigene dynamische Umgebungsbeleuchtung für ein Media CenterWenn Sie viele Filme auf Ihrem PC oder Media Center ansehen, sind Sie sicher mit dem Beleuchtungsdilemma konfrontiert. Schalten Sie alle Lichter vollständig aus? Halten Sie sie auf Hochtouren? Oder... Weiterlesen Ich habe vorher gebaut.
Das Timing wird ein Problem sein - da es sich um einen Prototyp handelt, stelle ich den Arduino so ein, dass er bei jedem Zurücksetzen herunterzählt. Theoretisch sollten wir nur ein oder zwei Sekunden pro Tag verlieren, aber im Idealfall würden wir einen "Echtzeituhr" -Chip einbauen, um dies zuverlässiger zu tun. Der Sonnenaufgangsalarm startet 30 Minuten vor dem Aufwecken und erhöht langsam den Ausgangspegel, bis er 100% hell ist. Dies sollte ausreichen, um uns aufzuwecken. Es ist jedoch eine gute Idee, Ihren normalen Wecker so lange zu verwenden, bis Ihr Körper daran gewöhnt ist es.
Ich werde auch ein Nachtlicht in dieses Projekt einbauen, das Bewegungen erkennt und einen diskreten niedrigen Pegel aktiviert Licht unter dem Bett mit einer Auszeit von 3 Minuten, getrennt von den LED-Lichtern, da dies dazu führen würde, dass meine Frau und ich aufwachen oben. Die Beleuchtung unter dem Bett wird eine kommerzielle Netzeinheit sein, daher hacke ich ein Relais in eine Steckdose, um es ein- und auszuschalten. Wenn Sie unter keinen Umständen mit 110-240 V Wechselstrom arbeiten möchten (und das ist im Allgemeinen so) eine gute Regel zu haben), dann verkabeln Sie einen 433-MHz-Funksender mit Schaltbuchsen, wie auf der Seite beschrieben Raspberry Pi Arduino Hausautomationsprojekt Home Automation Guide Mit Raspberry Pi und ArduinoDer Markt für Hausautomation ist mit teuren Verbrauchersystemen überflutet, die nicht miteinander kompatibel und teuer in der Installation sind. Wenn Sie einen Raspberry Pi und einen Arduino haben, können Sie im Grunde das Gleiche erreichen bei ... Weiterlesen .
Teileliste und Schema
- Arduino
- Satz RGB-LED-Streifenleuchten
- 12 Volt Stromversorgung
- 3 x MOSFET N-Transistoren (ich verwende Typ STP16NF06FP)
- Relais- und Steckdose oder drahtlos gesteuerte Steckdosen und geeigneter Sender
- Nachtlicht Ihrer Wahl (normales Netz mit Stecker ist in Ordnung)
- PIR-Bewegungssensor (HC-SR501) oder ein SC-04-Sonar (nicht so effektiv)
- Lichtsensor
- Projektnummer - Lesen Sie jedoch weiter, um sicherzustellen, dass Sie verstehen, wie Sie alles anpassen.
Hier ist das vollständige Schema.
Relais verkabeln
Hinweis: Überspringen Sie diesen Abschnitt, wenn Sie die RGB-Leuchten auch als Nachtlicht verwenden möchten. Dies dient speziell zum Einschalten einer separaten netzbetriebenen Leuchte.
Zum Schalten der Netzstromversorgung muss Ihr Relais auf Spannung ausgelegt sein - 110V oder 240V AC Je nachdem, wo Sie wohnen - und mehr als die Gesamtstromstärke, die Sie wechseln werden. Die, die ich aus diesem Sensorpaket verwendet habe (Haftungsausschluss: Das ist mein Shop) ist 250 VAC / 10 A.Also sollten wir in Sicherheit sein. Relais haben eine com Anschluss, normalerweise in der Mitte, der an das stromführende Kabel angeschlossen werden sollte, das in den Stecker kommt; Verbinden Sie dann das Socket-Live-Terminal mit dem NEIN (normalerweise offen). Ich sollte Ihnen nicht sagen müssen, dass Sie dies nicht tun sollen, solange es an eine Steckdose angeschlossen ist, oder Sie werden sterben. Wenn Sie Angst haben, mit dem Stromnetz in Konflikt zu geraten, verwenden Sie stattdessen drahtlos geschaltete Steckdosen.
Die Erdungs- und Neutralleiter sollten direkt zur Steckdose führen und das Relais nicht berühren. Möglicherweise haben Sie in den USA keine Erdungsleitung. Es liegt in Ihrer Verantwortung, die Farbcodierung der Drähte in Ihrer Nähe zu kennen - Wenn Sie sonst keine normale Steckdose in Ihrem Haus anschließen oder einen Stecker neu verkabeln könnten, versuchen Sie nicht, ein Relais in eine einzubetten!
Verdrahten Sie zum Testen den Relaissignal-Pin mit 12 und führen Sie dann ein einfaches Blinkprogramm aus, das so geändert wurde, dass es an Pin 12 und nicht wie standardmäßig an 13 arbeitet. Ihre Steckdose sollte sich alle paar Sekunden ein- und ausschalten. Der Grund, warum ich Pin 13 nicht verwende, ist, dass während des Upload-Vorgangs die integrierte LED schnell hintereinander ausgelöst wird, um die serielle Aktivität anzuzeigen, wodurch auch das Relais aktiviert wird.
Das richtige Timing
Timing- und Clock-Funktionen sind ohne Zugriff auf eine Netzwerkverbindung oder dediziert schwierig Echtzeituhr (Dazu gehören eigene Batterien, um die Uhr auch dann am Laufen zu halten, wenn der Haupt-Arduino keinen Strom hat). Um die Kosten niedrig zu halten, werde ich schummeln. Ich werde eine Startzeit für den Arduino fest programmieren, um den Countdown zu starten. Die Zeiten sind daher relativ zu dieser Startzeit. Alle 24 Stunden wird die Uhr zurückgesetzt. Der folgende Uhrfunktionscode stellt die globalen Variablen sicher currentMillis und currentMinutes sind jeden Tag richtig. Der Arduino sollte nicht alle 45 Tage mehr als ein paar Sekunden verlieren. Diese hartcodierte Art des Timings ist jedoch insofern recht begrenzt, als ein Stromausfall oder ein versehentliches Zurücksetzen alles kaputt macht. Dies ist also sicherlich ein Bereich, der verbessert werden könnte. Wenn das Timing nicht mehr synchron ist, setzen Sie das Arduino einfach auf die eingestellte Startzeit zurück.
Der Code sollte leicht zu verstehen sein.
void clock () {if (millis ()> = previousMillis + 86400000) {// ein ganzer Tag ist vergangen, setze die Uhr zurück; previousMillis + = 86400000; } currentMillis = millis () - previousMillis; // dies hält unsere currentMillis jeden Tag gleich currentMinutes = (currentMillis / 1000) / 60; }
Nachtlichtfunktion
Ich habe die Hauptschleifen in verschiedene Funktionen unterteilt, damit sie leichter gelesen und entfernt oder angepasst werden können. Das Nachtlicht() Die Funktion funktioniert nur zwischen den Stunden, in denen der Arduino zurückgesetzt wurde (ich gehe davon aus, dass Sie dies wahrscheinlich vor oder um die Schlafenszeit tun, wenn es dunkel ist) und bis der Sonnenaufgangsalarm beginnt. Ich hatte ursprünglich versucht, einen lichtabhängigen Widerstand zu verwenden, aber sie sind nicht sehr empfindlich gegenüber blauem Licht (was zufällig die Farbe ist, die ich für das Nachtlicht verwende) und schwer richtig zu kalibrieren. Die Uhr zu benutzen ist sowieso sinnvoller. Wir werden das Globale verwenden currentMinutes Variable, die jeden Tag zurückgesetzt wird.
Der PIR-Sensor kann etwas eigenartig sein, wenn Sie noch nie einen verwendet haben, obwohl die Verkabelung nicht schwierig ist - Sie werden feststellen VCC, GND, und AUS auf der Rückseite deutlich beschriftet. Es gibt auch zwei variable Widerstände; Der mit RX bezeichnete Bereich bestimmt die Reichweite (bis zu ca. 7 m) und der mit TX gekennzeichnete TX bestimmt die Verzögerung. Die Verzögerung beträgt 5 Sekunden bei der niedrigsten Einstellung (vollständig gegen den Uhrzeigersinn) und bedeutet, dass jede momentane Bewegung mindestens 5 Sekunden des Einschaltzustands vom Sensor auslöst. Es bestimmt jedoch auch die Verzögerung zwischen aktiven Zuständen - wenn also 5 Sekunden vergehen und keine Bewegung erfolgt Wird der Sensor erkannt, sendet er mindestens 5 Sekunden lang ein niedriges Signal, auch wenn sich dabei etwas bewegt Zeitraum. Wenn Sie die Verzögerung mit etwa 30 Sekunden sehr hoch eingestellt haben, scheint der Sensor defekt zu sein.
Wenn Sie alleine schlafen und nichts dagegen haben, die gleichen RGB-Lichtbänder sowohl für den Sonnenaufgangsalarm als auch für das Nachtlicht zu verwenden, sollten Sie den Code leicht genug anpassen können.
void nightlight () {// Nur zwischen den Stunden des Zurücksetzens arbeiten -> Sonnenaufgang. if (currentMinutes
Sonnenaufgangsalarm
Der Einfachheit halber verwende ich den RGB-Farbwert 255,255,0 für einen tiefgelben Sonnenaufgang. Auf diese Weise ist das Inkrement auf beiden Farbkanälen gleich. Wenn Sie feststellen, dass es Sie zu früh aufweckt, sollten Sie mit einem tiefen Rot beginnen und in Richtung Gelb oder Weiß verblassen. Der Anstieg, den ich nur linear verwendet habe, möchten Sie möglicherweise anhand einer natürlicheren Kurve für Helligkeitswerte untersuchen.
Die Funktion ist einfach: Sie ermittelt, um wie viel das Licht pro Sekunde erhöht werden soll, damit es nach 30 Minuten bei voller Helligkeit ist. multipliziert dann das mit wie vielen Sekunden es gerade im Sonnenaufgang ist. Wenn die Helligkeit bereits voll ist, bleibt sie weitere 10 Minuten eingeschaltet, um sicherzustellen, dass Sie aktiv sind (und wenn Sie immer noch nicht aktiv sind, sollten Sie wahrscheinlich einen Backup-Alarm haben).
void sunrisealarm () {// jede Sekunde während des 30-minütigen Zeitraums sollte den Farbwert erhöhen um: float increment = (float) 255 / (30 * 60); // rot 255, grün 255 gibt uns volle Helligkeit gelb wenn (currentMinutes> = MinutenUntilSunrise) {// Sonnenaufgang beginnt! float currentVal = (float) ((currentMillis / 1000) - (MinutenUntilSunrise * 60)) * Inkrement; Serial.print ("Aktueller Wert für Sonnenaufgang:"); Serial.println (currentVal); // Schreibe während des Hochfahrens den aktuellen Wert von Minuten X Helligkeitsinkrement, wenn (currentVal <255) {analogWrite (RED, currentVal); analogWrite (GREEN, currentVal); } else if (currentMinutes - minuteUntilSunrise <40) {// Wenn wir die volle Helligkeit erreicht haben, lassen Sie das Licht 10 Minuten länger an. analogWrite (RED, 255); analogWrite (GREEN, 255); } else {// danach bringen wir sie zurück in den Off-Status analogWrite (RED, 0); analogWrite (GRÜN, 0); } } }
Fallstricke und zukünftige Upgrades
Ich benutze dies seit einigen Wochen und es hilft wirklich, erfrischt und zu einem anständigen Zeitpunkt aufzuwachen. Das Nachtlicht funktioniert auch sehr gut. Es ist jedoch nicht perfekt. Hier sind einige Dinge, die Arbeit und Lehren aus dem Bau erfordern.
Bei der Erstellung dieses Projekts sind viele Probleme beim Umgang mit großen Zahlen aufgetreten. Wenn Sie also vorhaben, den Code zu ändern, denken Sie bitte daran. In C-Sprache ist die Die Eingabe Ihrer Variablen ist sehr wichtig - Eine Zahl ist nicht immer nur eine Zahl. Zum Beispiel, lange nicht signiert Variablen sollten verwendet werden, um super große Zahlen zu speichern, wie wir es bei Millisekunden tun, aber selbst eine Zahl von nur 60.000 kann nicht als reguläre Ganzzahl gespeichert werden (Ein nicht signierter Int wäre für bis zu 68.000 akzeptabel gewesen.). Der Punkt ist, Informieren Sie sich über Ihre Variablentypen Wenn Sie große Zahlen verwenden und ungewöhnliche Fehler finden, liegt dies wahrscheinlich daran, dass eine Ihrer Variablen nicht genügend Bits enthält.
Ich habe auch ein Problem mit Spannungslecks mit sehr geringer Helligkeit festgestellt, das dazu führt, dass die kleinste Lichtmenge selbst dann emittiert wird, wenn a digitalWrite (ROT, 0) Signal wird ausgegeben - ich glaube nicht, dass es ein Hardwareproblem mit den Streifen ist, da sie mit den offiziellen Controllern gut funktionieren. Wenn jemand dieses unten abgebildete Problem lösen kann, wäre ich Ihnen sehr dankbar. Ich habe versucht, Widerstände herunterzuziehen und die Ausgangsspannung von den Arduino-Pins zu begrenzen. Möglicherweise muss ich eine einfache Stromschaltschaltung hinzufügen, um den LED-Streifen nur dann mit Spannung zu versorgen, wenn er tatsächlich benötigt wird. oder es könnten fehlerhafte MOSFETs sein.
Für zukünftige Arbeiten hoffe ich, einen IR-Empfänger hinzuzufügen und einige der Funktionen des ursprünglichen Controllers zu duplizieren - at Zumindest die Möglichkeit, Farben als allgemein verwendbares Licht zu ändern, da dieses Projekt den Streifen derzeit in eine dedizierte Nacht verwandelt Licht. Ich kann sogar eine automatische 30-Minuten-Timeout-Funktion hinzufügen.
Haben Sie dies versucht, Verbesserungen vorgenommen oder andere Ideen? Lass es mich in den Kommentaren wissen!
James hat einen BSc in künstlicher Intelligenz und ist CompTIA A + und Network + zertifiziert. Er ist der Hauptentwickler von MakeUseOf und verbringt seine Freizeit mit VR-Paintball und Brettspielen. Er baut seit seiner Kindheit PCs.