| Heizungsüberwachung mit AUS-ResetEine Schaltung aus der Praxis. In einem Haus fällt die Heizung immer wieder in unregelmäßigen Zeitabständen aus. Der Heizungsbauer findet die Ursache
nicht. So muss sich der Hausherr selbst helfen. Im Fall einer Störung schaltet er die Heizung einfach aus und lässt sie eine halbe Stunde ausgeschaltet. Anschließend
wird die Heizung wieder eingeschaltet und bis zu nächster Störung ist alles in Ordnung. Auf diese Weise wird ein Reset durchgeführt. Da sich im Haus auch andere
Bewohner befinden, der Hausherr selbst aber oft
abwesend ist, kam er auf die Idee, den Vorgang des Aus- und Einschaltens der Heizung zu automatisieren. Für den automatischen Ablauf soll der Mikrocontroller Arduino
sorgen. Bei jeder Störung soll die Heizung, indem sie mithilfe eines Schützes komplett von der Spannung getrennt wird, abgeschaltet werden. Nach einer halben Stunde
soll der Schütz wieder abfallen und die Heizung auf diesem Wege wieder einschalten. Die Schaltung wird in einem Gehäuse untergebracht. Auf dem Gehäuse werden mehrere
Meldeleuchtdioden für Anzeige der Zustände angebracht. Mit einer grünen Leuchtdiode, die in bestimmten Zeitabständen kurz aufleuchtet, wird signalisiert, dass der
Mikrocontroller in Betrieb ist und richtig arbeitet. Eine rote Leuchtdiode leuchtet dann auf, wenn eine Störung auftritt und die Heizung ausgefallen ist. Mit drei
blauen Leuchtdioden wird die Zeit, die während einer Störung abläuft, angezeigt. Jede blaue Leuchtdiode steht für einen 10 Min.-Intervall.
ArduinoDie Anzahl der digitalen Pins, die Arduino Nano zur Verfügung stellt, reicht bei der gewählten Methode für diese Aufgabe nicht aus. Man kann allerdings
auch die analogen Pins digital
nutzen. Um das zu erreichen, wird ein analoger Pin mit der Anweisung „pinMode“ als digitaler Eingang oder Ausgang definiert. Auf diese Weise kann man bei Arduino
Nano mit allen anlogen Pins verfahren. Die Ausnahme bilden die Pins A6 und A7, die ausschließlich als analoge Anschlüsse verwendet
werden können. RelaisDas Relais, dessen Spule passend zu der Spannungsversorgung für 12 VDC ausgelegt ist, stellt zwei Wechsler-Kontakte zur Verfügung. In der Schaltung wird für
die Spannungsversorgung der Heizung ein Öffner-Kontakt verwendet. Das hat den Vorteil, dass bei einem störungsfreien Lauf das Relais ausbleibt und keinen Strom
benötigt. Nur im Falle einer Störung, um die Spannungsversorgung der Heizung zu unterbrechen, wird das Relais für 30
Minuten angezogen. TransistorZwischen einem Ausgang eines Mikrocontrollers und dem Endverbraucher, in diesem Fall eines Relais oder Schützes, muss ein Stromverstärker zwischengeschaltet
werden. Ansonsten kann der Ausgang überlastet und beschädigt werden. In unserer Schaltung übernimmt diese Rolle ein NPN-Transistor. Der Transistor muss auf jedem Fall in der Lage
sein, den Strom, der für den Verbraucher benötigt wird, zu liefern. In dem Beispiel handelt es sich um ca. 40 mA. Der Transistor BC172 verträgt eine Belastung
bis zu 100mA. SchaltplanProgramm (Sketch)// *********************************************************************************************// Heizungsüberwachung mit AUS-Reset // Schaltung mit Arduino Nano // Arduino IDE 2.3.2 // ********************************************************************************************* int Heizung_Relais = 2; // Heizung Schütz/Relais e/a int LED_Blinker = 3; // Blinker (in Betrieb) int LED_Stoerung = 4; // Anzeige Störung int LED_Pause_10Min = 5; // Zeitanzeige 10 Min int LED_Pause_20Min = 6; // Zeitanzeige 20 Min int LED_Pause_30Min = 7; // Zeitanzeige 30 Min int Stoerungszaehler_Nr1 = 8; // Anzahl der Störungen (Max 5) int Stoerungszaehler_Nr2 = 9; int Stoerungszaehler_Nr3 = 10; int Stoerungszaehler_Nr4 = 11; int Stoerungszaehler_Nr5 = 12; int Meldung_Stoerung = A0; // Analogeingang digital nutzen unsigned long Millis_Aktuell, Millis_Blinker, Millis_Sekunde; int Sekunden, Minuten; int Stoerungszaehler; bool Stoerung; // ********************************************************************************************* void setup() { pinMode(Heizung_Relais, OUTPUT); // Ausgänge pinMode(LED_Blinker, OUTPUT); // LED Grün pinMode(LED_Stoerung, OUTPUT); // LED Rot pinMode(LED_Pause_10Min, OUTPUT); // Zeitzählung, 3 Blaue LEDs pinMode(LED_Pause_20Min, OUTPUT); pinMode(LED_Pause_30Min, OUTPUT); pinMode(Stoerungszaehler_Nr1, OUTPUT); // Anzahl der Störungen, 5 gelbe LEDs pinMode(Stoerungszaehler_Nr2, OUTPUT); pinMode(Stoerungszaehler_Nr3, OUTPUT); pinMode(Stoerungszaehler_Nr4, OUTPUT); pinMode(Stoerungszaehler_Nr5, OUTPUT); pinMode(Meldung_Stoerung, INPUT_PULLUP); // Meldung von der Heizung Millis_Blinker = Millis_Sekunde = millis(); // Millisekunden aktuell festhalten } // ********************************************************************************************* void loop() { Millis_Aktuell = millis(); // Mikrocontroller läuft, if (Millis_Aktuell > Millis_Blinker + 2000) { // wenn die grüne LED kurz aufleuchtet digitalWrite (LED_Blinker, HIGH); delay (100); digitalWrite (LED_Blinker, LOW); Millis_Blinker = Millis_Aktuell; } if (not Stoerung) { // Alles OK, Heizung läuft Millis_Sekunde = millis(); digitalWrite (Heizung_Relais, LOW); // Relais bleibt AUS } if (digitalRead(Meldung_Stoerung) == LOW) { // Störung tritt auf Stoerung = HIGH; // Störungsvariable digitalWrite (LED_Stoerung, HIGH); // Rote LED ein } if (Stoerung) { // Störung / Zeitzählung 0-30 Min digitalWrite (Heizung_Relais, HIGH); // Relais EIN schaltet die Heizung Aus if (Millis_Aktuell > Millis_Sekunde + 1000) { // Zeitzählung Millis_Sekunde = millis(); Sekunden++; // Sekunden if (Sekunden > 60) { Sekunden = 0; Minuten++; // Minuten } } } if (Stoerung) { // Störung / Zeit-LEDs einschalten digitalWrite (LED_Pause_10Min, HIGH); // 10 Min LED Ein if (Minuten > 10) { digitalWrite (LED_Pause_20Min, HIGH); // 20 Min LED Ein } if (Minuten > 20) { // 30 Min LED Ein digitalWrite (LED_Pause_30Min, HIGH); } } if (Stoerung) { // Störung / Anzahl der Störungen if (Minuten > 30) { // 30 Minuten um digitalWrite (Heizung_Relais, LOW); // Heizung wieder Ein (Relais Aus) Stoerung = LOW; // Störungsvariable zurücksetzen Minuten = 0; // Minuten zurücksetzen Stoerungszaehler++; // Störungszähler erhöhen if (Stoerungszaehler > 5) { Stoerungszaehler = 1; } digitalWrite (LED_Stoerung, LOW); // LEDs Aus digitalWrite (LED_Pause_10Min, LOW); digitalWrite (LED_Pause_20Min, LOW); digitalWrite (LED_Pause_30Min, LOW); delay (5000); // Abwarten, bis Heizung hochläuft } } if (Stoerungszaehler > 0) { // Anzehl der Störungen anzeigen digitalWrite (Stoerungszaehler_Nr1, HIGH); } else { digitalWrite (Stoerungszaehler_Nr1, LOW); } if (Stoerungszaehler > 1) { digitalWrite (Stoerungszaehler_Nr2, HIGH); } else { digitalWrite (Stoerungszaehler_Nr2, LOW); } if (Stoerungszaehler > 2) { digitalWrite (Stoerungszaehler_Nr3, HIGH); } else { digitalWrite (Stoerungszaehler_Nr3, LOW); } if (Stoerungszaehler > 3) { digitalWrite (Stoerungszaehler_Nr4, HIGH); } else { digitalWrite (Stoerungszaehler_Nr4, LOW); } if (Stoerungszaehler > 4) { digitalWrite (Stoerungszaehler_Nr5, HIGH); } else { digitalWrite (Stoerungszaehler_Nr5, LOW); } } // *********************************************************************************************
|
Google-Suche auf MEINE-SCHALTUNG.de : |