Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
uc-welt:gscheiduino:12-daemmerungsschalter [2016/01/08 16:22] Hannes Jochriemuc-welt:gscheiduino:12-daemmerungsschalter [2024/02/06 09:43] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-[[uc-welt:gscheiduino:11-hysterese|← Kapitel 11: Hysterese]] | [[uc-welt:gscheiduino:00-uebersicht|↑ Übersicht]]  | [[ →]]+[[uc-welt:gscheiduino:11-hysterese|← Kapitel 11: Hysterese]] | [[uc-welt:gscheiduino:00-uebersicht|↑ Übersicht]]  | [[uc-welt:gscheiduino:13-einstellbarer-daemmerungsschalter|Kapitel 13: Übungsaufgabe einstellbarer Dämmerungsschalter →]]
  
 ====== Kapitel 12: Dämmerungsschalter ====== ====== Kapitel 12: Dämmerungsschalter ======
Zeile 30: Zeile 30:
   * graues Kabel von A0 nach H28   * graues Kabel von A0 nach H28
  
-Das Licht, das wir bei Dunkelheit einschalten wollen ist die grüne LED.+Das Licht, das wir bei Dunkelheit einschalten wollenist die grüne LED. 
 + 
 +===== Berechnung ===== 
 + 
 +Wir wollen, dass das Licht irgendwann zwischen den Helligkeitsstufen "Wohnzimmer" und "Straßenbeleuchtung" einschaltet. Die Spannungen sind ([[bauteile:ldr#ergebnisse|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 [[uc-welt:gscheiduino:08-analoginputs#theorie|hier]] gelernt haben sind die Analogwandlerwerte also: 
 + 
 +^Spannung^Wandlerwert^ 
 +| 3,5V | 715 | 
 +| 0,3V | 60 | 
 + 
 +===== Code ===== 
 + 
 +Wir können den Code vom letzten Beispiel fast 1:1 verwenden: 
 + 
 +<code c 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 
 +  } 
 +
 +</code> 
 + 
 +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: 
 + 
 +  * SCHWELLWERT 500 
 +  * HYSTERESE 200 
 + 
 +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 [[uc-welt:gscheiduino:13-einstellbarer-daemmerungsschalter|Kapitel 13: Übungsaufgabe einstellbarer Dämmerungsschalter]]