Intelligenter Sonnenaufgangs-Wecker: Sanftes Aufwachen mit Licht
Komponenten und Zubehör
| Komponente | Menge |
|---|---|
| Arduino Nano R3 | 1 |
| DS3231 Echtzeituhr-Modul (RTC) | 1 |
| TRIAC (z. B. BT136) + Optokoppler 4N35 (Nulldurchgang) + MOC3063 (TRIAC-Ansteuerung) | je 1 |
| 5V 700mA Step-Down-Netzteil (für Arduino & Logik) | 1 |
| Glühlampenfassung (E27) aus alter Lampe | 1 |
| Lochrasterplatine, Widerstände, Kondensatoren, Kabel | nach Bedarf |
Projektbeschreibung
Im Winter ist es morgens um 6 Uhr noch dunkel und kalt. Dieses Projekt simuliert einen künstlichen Sonnenaufgang: Eine in die vorhandene Deckenlampe eingebaute „smart Glühbirne“ dimmt das Licht über 30–60 Minuten langsam hoch – ein sanfter, natürlicher Wecker.
Glühbirnen-Basis
Eine alte Glühbirne wird zerbrochen (Glas entfernen), der E27-Sockel mit Drähten an Plus/Minus angelötet – das wird die mechanische und elektrische Basis.
Hochspannungsteil (230 V AC)
LEBENSGEFAHR! Arbeiten an Netzspannung nur mit entsprechender Qualifikation. Der TRIAC schneidet die Sinuswelle phasengesteuert an (Phasenanschnitt), um die Lampe zu dimmen. Dazu muss der Nulldurchgang der Netzspannung exakt erkannt werden.
- 4N35 (U1): Optokoppler mit Transistor – detektiert Nulldurchgang, galvanische Trennung zur Logik.
- MOC3063 (U2): Optokoppler mit TRIAC-Ausgang – treibt den Leistungstriac (Q2) an, ebenfalls galvanisch getrennt. Wichtig: Kein Nulldurchgangs-TRIAC-Optokoppler verwenden (schaltet nur bei Nulldurchgang ein).
Niederspannungsteil
- Arduino Nano: Steuert TRIAC über Timer-Interrupt, liest RTC, misst Umgebungslicht.
- DS3231 RTC: Präzise Uhrzeit, Pufferbatterie hält Zeit bei Stromausfall.
- 5V Step-Down: Versorgt Arduino & Logik direkt aus der Lampenfassung.
Firmware-Logik
- Beim Einschalten (Lichtschalter) geht die Lampe an und dimmt langsam ab – Funktionstest.
- Nachts prüft die RTC die Zeit.
- Um 06:00 Uhr beginnt der „Sonnenaufgang“: langsames Hochdimmen auf 100 %.
- Ein Fotowiderstand (LDR) verhindert Einschalten, wenn der Raum bereits hell ist (Energiesparen).
- Ausgeschaltet wird über den Wandschalter.
Code
/* Smart Sunrise Alarm – Arduino Nano + DS3231 + TRIAC-Dimmer
* Autor: Jiri Praus (https://twitter.com/jipraus)
* Inspiration: https://arduinotehniq.blogspot.com/2014/10/ac-light-dimmer-with-arduino.html
*/
#include <TimerOne.h>
#include "RTClib.h"
#define TRIAC_PIN 2
#define ZERO_CROSS_PIN 3
#define LIGHT_SENSOR_PIN A6
#define FREQUENCY_STEP 75 // µs pro Dimmstufe @ 50 Hz (65 für 60 Hz)
#define CHANGE_DIM_LEVEL_EVERY 1 // Dimmstufe alle N Sekunden ändern
#define MAX_DIM_LEVEL 128 // aus
#define MIN_DIM_LEVEL 0 // an
#define DARK_THRESHOLD 300 // LDR-Schwelle für „dunkel“
volatile byte triacCounter = 0;
volatile boolean zeroCrossed = false;
byte dimLevel = MIN_DIM_LEVEL;
boolean lightOn = false;
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
digitalWrite(TRIAC_PIN, LOW);
pinMode(TRIAC_PIN, OUTPUT);
pinMode(ZERO_CROSS_PIN, INPUT);
pinMode(LIGHT_SENSOR_PIN, INPUT);
if (!rtc.begin()) { Serial.println("RTC not found"); while(1); }
if (rtc.lostPower()) {
Serial.println("RTC lost power, setting compile time");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
noInterrupts();
attachInterrupt(digitalPinToInterrupt(ZERO_CROSS_PIN), zeroCrossDetected, RISING);
interrupts();
Timer1.initialize(FREQUENCY_STEP);
Timer1.attachInterrupt(triacTimerInterrupt, FREQUENCY_STEP);
}
void loop() {
delay(CHANGE_DIM_LEVEL_EVERY * 1000);
checkAlarmClock();
adjustDimLevel();
debugPrint();
}
void zeroCrossDetected() {
zeroCrossed = true;
triacCounter = 0;
digitalWrite(TRIAC_PIN, LOW);
}
void triacTimerInterrupt() {
if (dimLevel >= MAX_DIM_LEVEL) {
digitalWrite(TRIAC_PIN, LOW);
} else if (dimLevel <= MIN_DIM_LEVEL) {
digitalWrite(TRIAC_PIN, HIGH);
} else if (zeroCrossed) {
if (triacCounter >= dimLevel) {
digitalWrite(TRIAC_PIN, HIGH);
zeroCrossed = false;
} else {
triacCounter++;
}
}
}
void adjustDimLevel() {
if (lightOn && dimLevel > MIN_DIM_LEVEL) dimLevel--;
else if (!lightOn && dimLevel < MAX_DIM_LEVEL) dimLevel++;
}
void checkAlarmClock() {
if (!lightOn && isRoomDark()) {
DateTime now = rtc.now();
if (now.hour() == 6 && now.minute() == 0) lightOn = true;
}
}
boolean isRoomDark() {
return analogRead(LIGHT_SENSOR_PIN) < DARK_THRESHOLD;
}
void debugPrint() {
Serial.print("lightOn="); Serial.println(lightOn);
Serial.print("dimLevel="); Serial.println(dimLevel);
DateTime now = rtc.now();
Serial.print("datetime=");
Serial.print(now.year()); Serial.print('/');
Serial.print(now.month()); Serial.print('/');
Serial.print(now.day()); Serial.print(' ');
Serial.print(now.hour()); Serial.print(':');
Serial.print(now.minute()); Serial.print(':');
Serial.println(now.second());
Serial.print("lightLevel="); Serial.println(analogRead(LIGHT_SENSOR_PIN));
}
Schaltpläne
Ausblick
Nach Testphase: Einbindung ins Smart Home (Bluetooth/WiFi), variable Weckzeiten per App, Farbtemperatur-Änderung (RGB-LED statt Glühlampe).
Herstellungsprozess
- Spannungsaddition bei Reihenschaltung von Batterien erforschen
- Spannungsteiler-Labor: Design, Messung und Verifikation des Kirchhoffschen Spannungsgesetzes
- Thermoelektrizität: Thermoelemente und der Seebeck-Effekt verstehen
- Potentiometrisches Voltmeter: Präzise Spannungsmessung mit minimaler Belastung
- Kartoffelbatterie bauen: Schritt-für-Schritt-Anleitung zur elektrochemischen Stromerzeugung
- Niederspannungs-AC-Netzteil: Phasenschieberschaltung – Komponenten & Best Practices
- Spannungsregler-Experiment mit 12-V-Zenerdiode
- Spannungsfolger-Verstärker: Design, Aufbau und Messanleitung
- Hochverstärkender Mehrstufen-Common-Emitter-Verstärker mit negativer Gegenkopplung
- Spezialdioden: Schottky, Tunnel, LED, Laser, Photodiode und Solarzellen-Innovationen