Wake-Up Light

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

von Philipp Kälin Benutzer:philippk


Einleitung

Der Formumbeitrag für Fragen und Anregungen ist hier


Die Inspiration kam vom original Wake-Up Light von Philips. Philips Wake-Up Light

Der Preis dafür ist jedoch nicht gerade klein. Ich startete also ein eigenes Low-Cost Projekt mit (meiner Meinung nach) ein paar Verbesserungen.


Der Sinn des Ganzen ist es, dass man nicht mehr durch einen grauenhaften Ton von einer Sekunde auf die andere aufwacht, sondern dass man durch das Licht langsam wach wird. Das Ganze basiert auf dem Hormon Melatonin. Diese wird unter anderem in den Augen produziert sobald es dunkel wird und bewirkt, dass man müde wird und einschläft. Wird die Umgebung nun heller hören die Augen auf dieses Hormon zu produzieren und man wird dadurch wach.

15 Minuten vor der eingestellte Weckzeit fängt das Wake-Up Light an zu leuchten. In den ersten 10 Minuten wird es konstant alle 20 Sekunden eine Stufe heller. In den letzten 5 Minuten werden mit den 3 farbigen LEDs abwechslungsweise verschiedene Farben erzeugt. Und zum Schluss kommt dann doch noch ein akustischer Weckruf.

Beim Design hab ich mich von einem Leuchtturm inspirieren lassen und das ganze dementsprechend ähnlich aufgebaut.

Bilder



Features

  • Menügesteuerte Bedienung mit nur 3 Tasten
  • Batteriebetrieb
  • Uhrzeit läuft bei Batteriewechsel weiter
  • Der Alarm kann auf bestimmte Wochentage begrenzt werden

Hardware

Prozessor

Schema

Prozessor

Beschreibung

Als Prozessor wird ein Atmega88 verwendet. Dieser hat gegenüber dem Atmega8 zwei wesentliche Vorteile: Neuerer Generation daher pro Pin mehr Funktionen z. B. PinChangeInterrupt und eine Debugschnittstelle (DebugWire) damit man debuggen könnte, falls man ein JTAGICE mkII hätte :-(

Die 1k Widerstände am Programmierstecker sind, da die meisten Programmiergeräte mit 5V Pegel arbeiten, der Prozessor aber mit etwa 3V läuft.

Für die Zeit wird ein externer RTC verwendet, das hat 2 Vorteile: Man hat eine genaue Zeit inkl. Datum und Wochentag und der Prozessor kann in den Tiefschlaf gehen, wenn er nichts mehr zu tun hat. Er schaltet also alle Clocks ab, würde man einen 32 kHz Quarz verwenden, muss der Clock aktiv bleiben und der Prozessor bräuchte viel mehr Strom. Durch den Programmierbaren Clock Ausgang des RTC wird der Prozessor an einem Interrupt Eingang mit einem 1 Hz Signal versorgt. (Siehe dazu die verschiedenen Sleep Modi des Atmega88)

Mithilfe der beiden Spannungsteiler können die beiden Batteriespannungen gemessen werden.

Die vier SW_xxx Eingänge sind für die Taster

Der TxD Ausgang ist für Debugzwecke, wenn man wie ich keinen JTAGICE mkII hat um über DebugWire zu debuggen.

Am Buzzer Ausgang wird ein Signal Ausgegeben um einen Weckrufton zu erzeigen. Der Buzzer ist selbstoszillierend (Spannung --> Ton, keine Frequenz nötig).

Für die 4 Farben werden 4 PWM Ausgänge verwendet, pro Farbe sind jeweils 2 LEDs in Serie geschaltet um die Helligkeit zu erhöhen.

Die Hintergrundbeleuchtung kann nur ein/aus geschaltet werden.

Ansteuerung

Schema

Ansteuerung

Beschreibung

Als Display wird ein EA DOGM162 mit 2 x 16 Zeichen verwendet. Um nur wenige Prozessorpins zu belegen wird das LCD in SPI Modus angesteuert. Obwohl das LCD an den Hardware SPI-Pins angeschlossen ist wird eine Softwaremässige Übertragung verwendet um Strom zu sparen. Das LCD hat einen internen StepUp Wandler dessen Spannung per Software eingestellt werden kann, damit wird der Kontrast eingestellt.

Alle LEDs werden mit PWM Konstantstrom angesteuert. Die Spannung zwischen Emitter und GND ist immer 0.7V. Zusammen mit dem Emitterwiderstand gibt dies einen konstanten Strom durch die LEDs unabhängig von der Spannung der Batterie.

Alle Taster werden mit den internen PullUp Widerständen des AVRs gespiesen.

Schaltung für LED Konstantstrom

Konstantstrom.png

Software

Allgemein

Die Software läuft grösstenteils Interruptbasiert, das heisst sie macht erst etwas, wenn man eine Taste drückt und so einen Interrupt auslöst. Zusätzlich hat sie vom externen RTC noch einen 1s TimeTick. Das heisst, dass jede Sekunde ein Interrupt auftritt und der TaskHandler und der Taskscheduler ausgeführt werden. Die restliche Zeit ist der Prozessor im Tiefschlaf und verbrauch lediglich ein paar uA.

TaskHandler

Dem Taskhandler kann man Funktionen zuweisen, bei denen man weiss, dass sie länger dauern und nicht gerade jetzt auf der Stelle ausgeführt werden müssen. Ist vor allem in den Interrupt Routinen vorteilhaft, da man diese wieder schnell verlässt und die Zeitintensive Aufgaben später erledigt.

TaskScheduler

Dem TaskScheduler kann man Aufgaben zuweisen, die man nach einer bestimmten Zeit ausführen möchte. Z.B. sollte das Display 5 Sekunden Nachleuchten. Man kann dem Scheduler jetzt also die Funktion BacklightOff() übergeben und angeben dass diese in 5 Sekunden ausgeführt werden soll. Drückt man in der Zwischenzeit eine Taste entfernt man den Task einfach wieder und fügt in von neuem mit 5 Sekunden hinzu.

Bedienung

Die Bedienung ist menügesteuert und geschieht mit den 3 Tasten Up, OK, ESC. Folgende Einstellungen können vorgenommen werden:

  • Alarm
    • Ein/Aus
      Alarm komplett ausschalten oder an ausgewählen Tagen einschalten
    • Zeit
      Alarmzeit einstellen
    • Tage
      Wochentage an denen der Alarm eingeschaltet sein soll auswählen
  • Einstellungen
    • Datum einstellen
      Aktuelles Datum einstellen
    • Zeit einstellen
      Aktuelle Uhrzeit einstellen
    • Spannungen anzeigen
      Spannungen der Batterie und des Akku anzeigen

Downloads

Hardware

Das Archiv enthält das Eagle Schema und ein PDF davon

Version / Datum Bescheibung Link
1.0 / 13.04.2009 Version 1.0 http://www.mikrocontroller.net/wikifiles/d/dc/WakeUpLightHW_1_0.zip

Software

Source

Die Datei enthalt die Einstellungen der FuseBit Einstellungen http://www.mikrocontroller.net/wikifiles/4/47/WakeUPLightFuses.pdf

Das Archiv enthält alle Source Dateien und eine fertig kompilierte HEX-Dateil. Die Software wurde mit AVR-GCC kompiliert.

Version / Datum Bescheibung Link
1.1 / 12.06.2009 Version 1.1 http://www.mikrocontroller.net/wikifiles/2/29/WakeUpLightSW_1_1.zip
1.0 / 02.05.2009 Version 1.0 http://www.mikrocontroller.net/wikifiles/4/4b/WakeUpLightSW_1_0.zip

Version History

V 1.1 / 01.06.09

  • Alle Texte in separate Datei ausgelagert um eine eventuelle Übersetzung zu erleichtern
  • Div. Stellen optimiert um Speicherplatz zu sparen
  • Fading der Farben während der letzten 5 min überarbeitet
  • Anzahl Alarme von 1 auf 3 unabhängige erweitert
  • Einstellungen werden nicht mehr im RTC sondern im EEPROM abgespeichert

V 1.0 / 02.05.09

  • Erste öffentliche Version

Siehe auch