Inhaltsverzeichnis

← Kapitel 11: Hysterese | ↑ Übersicht | Kapitel 13: Übungsaufgabe einstellbarer Dämmerungsschalter →

Kapitel 12: Dämmerungsschalter

Grundlagen

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.

Aufbau

Der Aufbau für unseren Dämmerungsschalter sieht so aus:

Aufbau Dämmerungsschalter

Das Licht, das wir bei Dunkelheit einschalten wollen, ist die grüne LED.

Berechnung

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:

SpannungWandlerwert
3,5V 715
0,3V 60

Code

Wir können den Code vom letzten Beispiel fast 1:1 verwenden:

kapitel12_daemmerungsschalter.ino
#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