← Kapitel 11: Hysterese | ↑ Übersicht | Kapitel 13: Übungsaufgabe einstellbarer Dämmerungsschalter →
Früher waren Dämmerungsschalter sehr beliebt. Sei es für die Straßenbeleuchtung oder für die weihnachtlichen Lichterketten auf dem Balkon.
So ein Dämmerungsschalter kann sehr einfach selber realisiert werden. Wir brauchen dazu lediglich zwei Widerstände, einer davon muss lichtabhängig sein. Wer dazu mehr wissen will kann alles über lichtabhängige Widerstände in diesem Wikieintrag nachlesen.
Nun wird auch klar, warum wir im vorigen Kapitel gelernt haben, was eine Hysterese ist. Angenommen, wir verwenden diesen Dämmerungsschalter, um abends das Licht einzuschalten:
Dies würde sich beliebig oft und sehr schnell wiederholen und somit zu einem ungewollten Blitzlicht führen. Durch eine ausreichende Hysterese zwischen den Umschaltpunkten kann das vermieden werden.
Der Aufbau für unseren Dämmerungsschalter sieht so aus:
Das Licht, das wir bei Dunkelheit einschalten wollen, ist die grüne LED.
Wir wollen, dass das Licht irgendwann zwischen den Helligkeitsstufen „Wohnzimmer“ und „Straßenbeleuchtung“ einschaltet. Die Spannungen sind (wie hier zu sehen) zwischen 2,5 und 4,16V. Wir nehmen jetzt einfach mal den Wert 3,5V. Die Hysterese soll nun ±0,3V betragen. Wie wir hier gelernt haben sind die Analogwandlerwerte also:
Spannung | Wandlerwert |
---|---|
3,5V | 715 |
0,3V | 60 |
Wir können den Code vom letzten Beispiel fast 1:1 verwenden:
#define LED_GRUEN 11 #define ANALOGPIN A0 #define HYSTERESE 60 #define SCHWELLWERT 715 int hell = 1; int messwert = 0; void setup() { pinMode(LED_GRUEN, OUTPUT); // Pin auf Ausgang pinMode(ANALOGPIN, INPUT); // Pin auf Eingang if(analogRead(ANALOGPIN)<SCHWELLWERT) { // Es ist hell hell = 1; digitalWrite(LED_GRUEN, LOW); // gruene LED aus } else { // Der Wert ist im roten Bereich, kann also fallen hell= 0; digitalWrite(LED_GRUEN, HIGH); // gruene LED an } } void loop() { messwert = analogRead(ANALOGPIN); // Lieber mehr Klammern setzen als zu wenig, so ist die Reihenfolge sicher definiert: if((hell == 1) && (messwert > (SCHWELLWERT + HYSTERESE))) { // Es wird dunkel: digitalWrite(LED_GRUEN, HIGH); // gruene LED an hell = 0; } else if((hell == 0) && (messwert < (SCHWELLWERT - HYSTERESE))) { // Es wird wieder hell: digitalWrite(LED_GRUEN, LOW); // gruene LED aus hell = 1; } else { // nichts tun } }
Die Werte SCHWELLWERT und HYSTERESE können natürlich noch angepasst werden um ein gutes Ergebnis zu erzielen. Hier im Büro von eHaJo funktionieren folgende Werte am Besten:
Nun bietet sich eine Übungsaufgabe an: Da der Schwellwert abhängig vom Widerstand und von der gewünschten Helligkeit ist, wäre es sehr sinnvoll, wenn man den nachträglich, ohne Programmierung, ändern könnte.
Besteht eine Möglichkeit, dies zu tun?
Ja. Wir können einen weiteren Analogeingang verwenden um mit Hilfe eines Potis den Schwellwert einzustellen.
Wir kommen also zu Kapitel 13: Übungsaufgabe einstellbarer Dämmerungsschalter