Mehrkanalthermostat auf arduino uno. Ventilator mit Arduino, der von der Temperatur abhängt. Komponenten eines PID-Reglers

Schematische Darstellung eines hausgemachten Vierkanal-Thermostats mit Temperaturanzeige, der auf der Basis von Arduino UNO, LM325 und mit einem 1602A-Display aufgebaut ist, ermöglicht die Steuerung von vier separaten Lasten.

Hier wird eine modernisierte Version des Gerätes beschrieben, die neben passiver Temperaturmessung und -anzeige auch vier Heizungen ansteuern kann, um an vier verschiedenen Stellen die eingestellte Temperatur zu halten, bei der in der ersten Version nur Temperaturmessung möglich war .

Der Betrieb eines Vierkanal-Thermometers und sein Programm sind im vorherigen Artikel (L.1) ausführlich beschrieben, daher werden wir hier nur über Änderungen sprechen, um den Betrieb eines Vierkanal-Thermostats zu implementieren.

Schaltplan

Das schematische Diagramm ist in Abb. 1 dargestellt.

Reis. 1. Schematische Darstellung eines Thermostats auf Arduino UNO, LM325 mit einem 1602A-Display.

Im Gegensatz zur ersten Schaltung (L.1) sind an den Relaiswicklungen K1–K4 vier Transistorschalter geladen, die vier verschiedene Heizvorrichtungen (H1–H4) steuern. Die Steuerbefehle für diese Tasten kommen von vier digitalen Ports D9-D12 des ARDUINO UNO-Boards.

Programm

Das Programm ist in Tabelle 1 dargestellt.

Tabelle 1.

Der erste Unterschied besteht darin, dass die Ports so eingestellt sind, dass sie die Heizungen steuern. Dies sind die Ports D9-D12, sie werden hier eingestellt:

PinMode (12, AUSGANG);

PinMode (11, AUSGANG);

PinMode (10, AUSGANG);

PinMode (9, AUSGANG);

Sie können andere freie digitale Ports auswählen, nach dem Anschließen des Indikators gibt es noch D8 und D13. Aber der Autor hat diese ausgewählt: D9, D10, D11, D12. Der zweite Unterschied besteht darin, dass die if-Komparatorfunktion zur Steuerung der Heizungen verwendet wird. In den Zeilen:

wenn (temp< -15)digitalWrite(12, HIGH);

Wenn (temp> -15) digitalWrite (12, LOW);

wenn (tempi< 1)digitalWrite(11, HIGH);

if(tempi > ​​1)digitalWrite(11, LOW);

wenn (temp2< 20)digitalWrite(10, HIGH);

Wenn (temp2 > 20) digitalWrite (10, LOW);

wenn (temp3< 10)digitalWrite(9, HIGH);

Wenn (temp3 > 10) digitalWrite (9, LOW);

Diese Leitungen zeigen an, bei welcher Temperatur, welcher Logikpegel am entsprechenden Port liegen soll. Wenn beispielsweise die Temperatur des ersten Sensors (T1) unter -15 °C liegt, liegt an Port D12 eine logische Einheit an. Wenn die Temperatur des zweiten Sensors (T2) unter 1 °C liegt, ist der Anschluss D11 eine logische Einheit.

Wenn die Temperatur des dritten Sensors (TS) unter 20 °C liegt, ist der Anschluss D10 eine logische Einheit. Wenn die Temperatur des vierten Sensors (T4) unter 10 °C liegt, ist Anschluss D9 eine logische Einheit. Natürlich können auch ganz andere Temperaturen eingestellt werden - alle, die für eine bestimmte Anwendung dieses Gerätes benötigt werden.

Außerdem sind sie bereits im fertigen Gerät bei Bedarf leicht auswechselbar. Dazu müssen Sie einen PC an den USB-Anschluss des ARDUINO UNO-Boards anschließen und ein Programm mit anderen Daten zu Temperaturschwellen herunterladen. Grundsätzlich kann dazu am Körper des fertigen Gerätes ein USB-Anschluss vorgesehen werden.

Normalerweise gibt es in einem „typischen“ Thermostat eine Hystereseschleife, d. h. einen Schaltkreis, der eine Differenz zwischen der Heiztemperatur und der Heiztemperatur erzeugt. Dies ist notwendig, damit sich die Heizung nicht sehr oft ein- und ausschaltet. Dies ist besonders wichtig, wenn die Heizung durch ein elektromagnetisches Relais gesteuert wird.

Denn die Relaiskontakte sind für diese Betriebsart nicht ausgelegt und können durch Funkenbildung schnell durchbrennen. Aber die Hysterese führt einen Fehler in den Betrieb des Thermostats ein. Hier wurde entschieden, keine Hysterese zu erzeugen, sondern das Gerät nur zu verlangsamen, damit die Relaiskontakte nicht zu oft schalten. Dazu in der Zeile:

Anzeigezeit auf drei Sekunden erhöht. Dadurch werden die Messungen im Abstand von drei Sekunden wiederholt, und in jedem Fall darf das Relais nicht mehr als einmal alle drei Sekunden schalten.

Einzelheiten

Alle elektromagnetischen Relais K1-K4 können mit 12-V-Wicklungen und Kontakten verwendet werden, die stark genug sind, um bestimmte Heizungen zu steuern.

Ausgangsstufen können auch nach anderen Schemata hergestellt werden, beispielsweise an Opto-Mistern. In diesem Fall werden die entsprechenden Ports des ARDUINO UNO-Boards über Strombegrenzungswiderstände, LEDs von Opto-Simistoren oder sogenannten "Solid-State-Relais" verbunden.

Karavkin W. RK-08-17.

Literatur: 1. Karavkin V. - Vierkanal-Thermometer auf ARDUINO UNO, RK-06-17.

Die Hauptaufgabe der Kühlschranksteuerung besteht darin, die eingestellte Temperatur in der Kammer aufrechtzuerhalten. Dies erfolgt durch den Temperaturregler durch Änderung der elektrischen Leistung am Peltier-Modul.

In der vorherigen Lektion haben wir einen Leistungsregler entwickelt. Die Beziehung zwischen Leistungs- und Temperaturreglern sieht so aus.

  • Der Temperaturregler empfängt die gemessene Temperatur, vergleicht sie mit der Solltemperatur und berechnet den Leistungssollwert für den Leistungsregler.
  • Der Leistungsregler erzeugt eine der gegebenen Leistung entsprechende PWM.

Wir haben den Leistungsregler nach dem integralen Regelgesetz gebaut. Um die Temperatur zu stabilisieren, verwenden wir einen komplexeren Steueralgorithmus - einen Proportional-Integral-Differentiator (PID)-Regler.

PID-Regler.

In der vorherigen Lektion habe ich ausführlich darüber gesprochen. Betonte seine Stärken und Schwächen.

Der nach diesem Prinzip arbeitende Regler hat eine hohe Genauigkeit. Die übrigen Kriterien für die Qualität der Regulierung – Schnelligkeit und Stabilität – sind nicht ausreichend.

Um eine hohe Leistung für alle Kriterien zu erreichen, ist es notwendig, einen Regler zu verwenden, der verschiedene Regulierungsgesetze kombiniert.

Ein solches Gerät ist ein Proportional-Integral-Differential(PID)-Regler. Er erzeugt ein Ausgangssignal, das die Summe aus drei Komponenten mit unterschiedlichen Übertragungseigenschaften ist. Als Ergebnis liefert der PID-Regler hohe Qualität Regelung und ermöglicht Ihnen die Optimierung der Steuerung nach individuellen Kriterien.

An der Bildung des Ausgangssignals des PID-Reglers sind beteiligt:

  • Proportional- Der Wert ist proportional zum Fehlanpassungsfehler (der Differenz zwischen dem eingestellten und dem tatsächlichen Wert des gesteuerten Parameters).
  • Integrierende Komponente ist das Fehlanpassungsfehlerintegral.
  • Differenzierende Komponente ist die Ableitung des Fehlanpassungsfehlers.

Die mathematische Form des PID-Reglergesetzes hat die Form:

o(t) = P + I + D = K p e(t) + K ich ∫e(t)dt + K d de(t)/dt

  • o(t) – Ausgangssignal;
  • P ist die proportionale Komponente;
  • I - integrierende Komponente;
  • D - differenzierende Komponente;
  • Kp, Ki, Kd - Koeffizienten von proportionalen, integrierenden, differenzierenden Verbindungen;
  • e(t) ist der Fehlanpassungsfehler.

In schematischer Form kann der PID-Regler wie folgt dargestellt werden.

Das Blockschaltbild des PID-Spannungsreglers U sieht so aus.

  • Die gemessene Spannung Ureal(t) wird von dem gegebenen Uset subtrahiert.
  • Der resultierende Fehlanpassungsfehler e(t) wird den proportionalen, integrierenden und differenzierenden Verknüpfungen zugeführt.
  • Als Ergebnis der Summe der Komponenten ergibt sich die Stellwirkung o(t), die auf das Stellglied aufgebracht wird.

Bei einer Softwareimplementierung des PID-Reglers wird das Ausgangssignal in regelmäßigen Abständen berechnet. Diese. der Controller ist zeitdiskret. Daher werde ich weiterhin Ausdrücke verwenden: den vorherigen Zustand des Signals, den vorherigen Wert usw. Wir sprechen über den Zustand des Systems zum vorherigen Zeitpunkt der Abtastung.

Komponenten des PID-Reglers.

Noch einmal. Das Ausgangssignal des PID-Reglers ist die Summe aus drei Komponenten:

  • proportional;
  • integrieren;
  • differenzieren.

proportionale Komponente.

P(t) = Kp * e(t)

Hat kein Gedächtnis, d.h. der Wert des Ausgangssignals hängt nicht vom vorherigen Zustand des Systems ab. Nur der Mismatch-Fehler multipliziert mit dem Faktor wird an den Ausgang weitergegeben. Das Ausgangssignal kompensiert die Abweichung der Regelgröße. Das Signal ist umso größer, je größer der Fehlanpassungsfehler ist. Wenn der Fehler 0 ist, ist das Ausgangssignal ebenfalls 0.

Der Proportionalanteil kann den Fehler nicht vollständig kompensieren. Dies ist aus der Formel ersichtlich. Das Ausgangssignal ist Kp mal größer als der Fehler. Wenn der Fehlanpassungsfehler 0 ist, dann ist das Ausgangssignal des Controllers 0. Und dann gibt es nichts zu kompensieren.

Daher gibt es bei Proportionalreglern immer einen sogenannten statischen Fehler. Er kann durch Erhöhen des Kp-Koeffizienten verringert werden, was jedoch zu einer Abnahme der Stabilität des Systems und sogar zu Eigenschwingungen führen kann.

Zu den Nachteilen von Proportionalreglern gehören:

  • das Vorhandensein eines statischen Steuerfehlers;
  • geringe Stabilität mit zunehmendem Koeffizienten.

Es gibt einen entscheidenden Vorteil:

  • Hohe Regelgeschwindigkeit. Die Reaktion eines Proportionalreglers auf einen Schleppfehler wird nur durch die Abtastzeit des Systems begrenzt.

Regler, die nur nach dem Proportionalgesetz arbeiten, werden selten eingesetzt.

Die Hauptaufgabe des Proportionalanteils im PID-Regler ist die Drehzahlerhöhung.

integrierende Komponente.

I(t) = K ich ∫e(t)dt

Proportional zum Integral des Fehlanpassungsfehlers. Unter Berücksichtigung der Zeitdiskretheit des Reglers können wir wie folgt schreiben:

I(t) = I(t -1) + K ich * e(t)

  • I(t-1) ist der Wert von I am vorherigen Zeitabtastpunkt.

Der Fehlanpassungsfehler wird mit einem Faktor multipliziert und zum vorherigen Wert des Integrators addiert. Diese. Das Ausgangssignal summiert sich ständig und verstärkt mit der Zeit seine Wirkung auf das Objekt. Somit wird der Fehlanpassungsfehler selbst für kleine Werte des Fehlers und des Koeffizienten Ki vollständig kompensiert. Im eingeschwungenen Zustand wird das Ausgangssignal des Reglers vollständig vom integrierenden Bauteil bereitgestellt.

Zu den Nachteilen eines integrierten Reglers gehören:

  • langsame Geschwindigkeit;
  • durchschnittliche Stabilität.

Würde:

  • Die Fähigkeit, Mismatch-Fehler bei jeder Verstärkung vollständig zu kompensieren.

In der Praxis werden häufig integrierende Regler (nur integrierender Anteil) und proportional-integrierende (integrierende und proportionale Anteile) verwendet.

Die Hauptaufgabe des integrierenden Gliedes im PID-Regler besteht darin, den statischen Fehler zu kompensieren und eine hohe Regelgenauigkeit zu gewährleisten.

differenzierende Komponente.

D(t) = Kdde(t)/dt

Proportional zur Änderungsrate des Fehlanpassungsfehlers. Ein besonderer Indikator für die Beschleunigung von Fehlanpassungsfehlern. Der Ableitungsbegriff prognostiziert Abweichungen der Regelgröße in der Zukunft und wirkt dieser Abweichung entgegen. In der Regel kompensiert es Verzögerungen beim Einwirken des Reglers auf das Objekt und erhöht die Stabilität des Systems.

Unter Berücksichtigung der Zeitdiskretheit des Reglers lässt sich der differenzierende Anteil wie folgt berechnen:

D(t) = Kd * (e(t) - e(t - 1))

Es zeigt, wie stark sich der Mismatch-Fehlerwert in einer Zeiteinheit der Diskretion des Controllers geändert hat.

Es gibt keine Regler, die aus einem einzigen Differenzierungsglied bestehen.

Die Hauptaufgabe des Differenziergliedes im PID-Regler ist die Erhöhung der Stabilität.

Einrichten des PID-Reglers.

Die Regelgüte von PID-Reglern hängt maßgeblich davon ab, wie optimal die Koeffizienten gewählt werden. Die Koeffizienten des PID-Reglers werden in der Praxis in einem System mit einem realen Objekt durch Auswahl bestimmt. Es gibt verschiedene Tuning-Methoden. Ich werde nur über allgemeine Prinzipien sprechen.

Die Qualität der Regelung wird anhand des Einschwingverhaltens des Reglers beurteilt. Diese. gemäß dem Zeitplan der Änderungen des gesteuerten Parameters im Laufe der Zeit.

Zu den traditionellen Punkten der Abstimmungssequenz des PID-Reglers möchte ich hinzufügen, dass es zunächst notwendig ist, zu bestimmen, welche Kriterien für die Regelqualität vorzuziehen sind.

In der vorherigen Lektion waren wir beim Entwerfen eines Leistungsreglers hauptsächlich an Genauigkeit und Stabilität interessiert. Und wir haben die Geschwindigkeit sogar künstlich reduziert. Einige Regler arbeiten unter Bedingungen mit erheblichen Interferenzen, und Stabilität ist ihnen wichtiger, andere erfordern eine hohe Geschwindigkeit, selbst auf Kosten der Genauigkeit. Optimierungskriterien können unterschiedlich sein. Im Allgemeinen werden PID-Regler abgestimmt, um sicherzustellen, dass alle Regelqualitätskriterien auf einem hohen Niveau sind.

Die Komponenten des PID-Reglers werden separat konfiguriert.

  • Die integrierenden und differenzierenden Verknüpfungen werden ausgeschaltet und der Koeffizient der proportionalen Verknüpfung ausgewählt. Ist der Regler proportional integrierend (kein Differenzierglied), so wird eine völlige Schwingungsfreiheit des Einschwingverhaltens erreicht. Wenn der Regler auf hohe Geschwindigkeit eingestellt ist, können Schwankungen verbleiben. Sie werden versuchen, das differenzierende Glied zu kompensieren.
  • Der Differenzierer ist angeschlossen. Sein Koeffizient versucht, Schwankungen des Regulierungsparameters zu beseitigen. Wenn dies fehlschlägt, reduzieren Sie den Proportionalkoeffizienten.
  • Aufgrund der integrierenden Verbindung wird der verbleibende Fehlanpassungsfehler entfernt.

Die Abstimmung des PID-Reglers ist iterativ. Diese. Punkte der Auswahl von Koeffizienten können viele Male wiederholt werden, bis ein akzeptables Ergebnis erzielt wird.

Aufgrund ihrer hohen Leistung und Vielseitigkeit werden PID-Regler häufig in industriellen Automatisierungssystemen eingesetzt.

In der nächsten Lektion entwickeln wir einen PID-Temperaturregler.

Er wird mit Ihnen die Erfahrung teilen, einen intelligenten Lüfterrotationsregler unter Beteiligung eines Temperatursensors, eines LCD-Displays und natürlich eines Arduino zu erstellen.

Vor einigen Monaten las ich eine Reihe von Artikeln über Arduino und interessierte mich sehr für dieses Gerät und entschied mich bald, es zu kaufen. Es sei darauf hingewiesen, dass ich weit von der Mikroelektronik entfernt bin, daher hat mich das Board vor allem durch seine relativ einfache Entwicklung angezogen. Nachdem ich mit LEDs und „Hallo Welt“ rumgespielt habe, wollte ich mal was Praktisches machen, gleichzeitig die Arduino-Fähigkeiten genauer kennenlernen. Vor dem Hintergrund des ungewöhnlich heißen Sommers 2010 entstand die Idee, einen kühleren, temperaturabhängigen Drehzahlregler mit Anzeige aller dazugehörigen Kennlinien auf dem LCD zu konstruieren. Ich hoffe, dass dieses Schema oder seine Variationen für jemanden nützlich sein werden, also habe ich beschlossen, meine Skizzen zu veröffentlichen.

Für dieses Schema benötigen wir:

  • Das Brett selbst Arduino oder gleichwertig;
  • Brotbrett zum Zusammenbau von Schaltungskomponenten;
  • WH1601A-NGG-CT-Display mit eingeschaltetem Trimmer 20 kOhm o.ä;
  • Widerstände - 220 Ohm, 10 kOhm, 4,7 kOhm;
  • bipolarer Transistor SS8050D oder ähnlich;
  • Digitaler Temperatursensor DS18B20 ;
  • Diode 1N4148 oder gleichwertig;
  • Fan axialer Dreileiter (für 12 V), zum Beispiel - Computer;
  • Steckdosenleiste Ernährung 2,1/5,5mm.

Der Computer Kühler hat drei Drähte, von denen zwei - rot (+12 V) und schwarz (GND) - für die Stromversorgung verwendet werden und der dritte (gelb) mit einem Drehzahlmesser verbunden ist, der auf einem Hall-Element aufgebaut ist. Leider reichen uns 5V von der Platine eindeutig nicht aus, aber 6 digitale Arduino-Ausgänge können im PWM-Modus arbeiten (sie sind auf der Platine selbst mit weißen Quadraten oder mit den Buchstaben PWM gekennzeichnet), sodass wir das Signal von regeln können Platine an das Relais, das für die Änderung der an den Lüfter gelieferten Spannung verantwortlich ist.

Wir werden Informationen über die Umdrehungen vom dritten Draht des Drehzahlmessers erhalten, wobei eine modifizierte Methode basierend auf der Implementierung verwendet wird unterbricht, die bei den meisten Arduinos an die digitalen Pins 2 (Interrupt 0) und 3 (Interrupt 1) gesendet werden können. Übrigens hat der Arduino Mega 4 zusätzliche Pins mit der Fähigkeit, Interrupts zu empfangen.

Jetzt müssen wir platzieren digitaler Temperatursensor, deren Daten wir verwenden, um die Spannung zu regeln, die an den PWM-Digitalausgang geliefert wird, und somit den Lüfterspannungskanal zu „öffnen“. Dallas-Sensoren haben ihre eigene Arduino-Bibliothek - DallasTemperature, die wir später in der Skizze verbinden werden. Die Bibliothek muss in das Verzeichnis arduino-0018/libraries/ entpackt werden.

Der Letzte, der übrig ist - LCD anschließen, wo wir alle aktuellen Informationen zu Temperatur und Lüftergeschwindigkeit anzeigen. Da ich den WH1601A-Bildschirm für die Montage verwendet habe, kann es zu bekannten Problemen bei der Anzeige von Zeichenfolgen kommen. Um sie zu beseitigen, verwenden wir die Bibliothek LiquidCrystalRus, die ebenfalls in das Verzeichnis arduino-0018/libraries/ entpackt werden muss.

// Fügen Sie die Temperatursensorbibliothek hinzu#enthalten // Fügen Sie die LCD-Bibliothek hinzu#enthalten #define Power-Pin 9 // Pin zur Steuerung der Lüfterleistung#define HallSensor 2 // Pin für Lüfterdrehzahlsensor (Interrupt)#define TempPin 7 // Pin für Temperatursensor LiquidCrystalRus-LCD (12, 11, 10, 6, 5, 4, 3); // Verbinden Sie LCD DallasTemperature tempSensor; int NbTopsFan, Calc, fadeValue; //Integer-Variablen für Berechnungen Float-Temperament; // reale Variable zum Speichern der Temperatur typedef struct( // Einführung eines neuen Variablentyps für Fans Char-Fantyp; unsigned int fandiv; )fanspec; //Array von Variablen neuen Typs Fanspec Fanspace=((0,1),(1,2),(2,8)); //Variable, die für die Auswahl des Lüftersensortyps verantwortlich ist (1 - unipolarer Hallsensor, 2 - bipolarer Hallsensor) Char-Fan = 2; // Diese Funktion wird bei jedem Interrupt aufgerufen void rpm() ( NbTopsFan++; ) // Funktion zur Berechnung der angelegten Spannung an einem digitalen Pin mit PWM Void temp () ( fadeValue = min (int (temper * 7), 255); // Multipliziere die Temperatur mit dem Koeffizienten, // Ganzzahl aus dem Produkt nehmen } // Weil der maximale PWM-Wert ist 255, dann macht es keinen Sinn mehr anzuwenden - wir nehmen mindestens zwei Leere aufstellen() (tempSensor.begin (TempPin); // Temperatursensor starten lcd.begin (16, 2); // LCD-Eigenschaften einstellen lcd.setDRAMModel (LCD_DRAM_WH1601); // Und Anzeigetyp pinMode (HallSensor, INPUT); // Pin zum Empfangen von Interrupts setzen AttachInterrupt (0, U / min, RISING ); // Wir binden die Interrupt-Nummer 0 an unsere Funktion und sie wird jedes Mal berechnet, wenn sich das Signal ändert) Leere Schleife() ( Temperament = tempSensor.getTemperature (); // Temperatur abrufen Temp(); // Berechnen Sie die angelegte Spannung an der PWM analogWrite (PowerPin, fadeValue); // Füttern NbTopsFan = 0; // Die Variable mit den Umdrehungen auf Null setzen Verzögerung (1000); //Warte 1 Sekunde Calc = ((NbTopsFan * 60)/fanspace.fandiv); // Berechnen Sie die Drehzahl pro 60 Sekunden geteilt durch den Lüftermultiplikator lcd.print (Rechnung, DEZ); //Geben Sie den berechneten Wert in Dezimalform aus lcd.print ("rpm-"); LCD-Druck (Temperament); //Ausgangstemperatur lcd.home(); )

Beim Lesen des ersten Teils des Titels dachten viele von Ihnen wahrscheinlich - ein weiterer Thermostat auf dem leidgeprüften Arduino. Und ... Es stimmt - ja, das ist ein weiterer Thermostat für den nächsten Heizkessel, das nächste Haus, aber das stimmt nur zum Teil - im Artikel möchte ich mich nicht auf das Gerät selbst konzentrieren - davon gibt es in der Tat jede Menge ( Artikel). Zweifellos werde ich den Thermostat beschreiben, aber ich möchte mehr darüber sprechen, wie ich den Mikrocontroller selbst an den Kessel angeschlossen habe. Also wer Interesse hat bitte...

Wie alles begann

Vorweg möchte ich sagen, dass ich überhaupt kein Programmierer bin und mich noch nie mit einem echten Mikrocontroller beschäftigt habe. Meine erste Bekanntschaft mit dem AVR MK (und MK im Allgemeinen) war damals in der High School, als ich wissen wollte, wie dieses mysteriöse Ding noch funktioniert. Ich habe mehrere Artikel gelesen und seitdem habe ich nur noch Fragmente in meiner Erinnerung, die mit nur zwei Wörtern - DDR und PORT - beschrieben werden könnten - hier endete mein Wissen. Dann war da noch die Universität, der 5. Kurs – „Programmierung von Mikrocontrollern“, wo wir alle den MSC51 in einer virtuellen Umgebung kennengelernt haben. Es gab bereits Interrupts und Timer und alles andere. Nun, mit solch einem Gepäck an Wissen kam ich zum Problem. Lassen Sie uns mit dieser autobiografischen Notiz enden und zum interessanteren Teil übergehen.

Wie also begann die Entwicklung des Thermostats? Nach der Installation einer autonomen Heizung mit einem Gaskessel hatte ich, wie viele andere, die üblichen Probleme - die Temperatur im Haus war stark vom Wetter draußen abhängig - Frost - es ist kalt In der Wohnung müssen Sie die Temperatur des Kühlmittels in Batterien erhöhen, wärmer - im Gegenteil. Solche Tänze mit einem Tamburin lagen mir nicht besonders, weil. Die Einstellung des Boilers wurde dadurch erschwert, dass er hinter der Tür installiert war und die Tür von einem Mikrowellenherd gestützt wurde, auf dem ein Müllhaufen lag. Nun, Sie verstehen - eine Nadel in einem Ei, ein Ei in einer Ente usw.

Dieses Problem wurde ganz einfach gelöst – mit einem OTC-Sensor (Outside Temperature Compensation), der an den Boiler angeschlossen wird und es ihm ermöglicht, die Temperatur des Kühlmittels abhängig von der Außentemperatur automatisch anzupassen. Das Problem schien gelöst, aber das Lesen der Serviceanleitung für den Boiler (Ferolli Domiproject C24D) machte meine Hoffnung schnell zunichte – der Anschluss eines externen Temperatursensors ist bei diesem Modell nicht vorgesehen. Alle? Alle. Und jetzt könnte es wahrscheinlich fertig sein, aber im Sommer im Kessel während eines Gewitters brennt die Steuerplatine auf eine für mich immer noch unverständliche Weise durch, und im Gespräch mit dem Servicemann (die Platine wurde später repariert), ich gefragt, ob es möglich ist, OTC an meinen Kessel anzuschließen? Er antwortete, dass sie die Verbindung über externe Thermostate herstellten. Es blieb in meiner Erinnerung, aber ich konzentrierte mich nicht wirklich darauf, bis das kalte Wetter einsetzte, und dann das gleiche Problem.

Beim Durchblättern der gleichen Serviceanleitung, aber um zu sehen, wie das Thermostat angeschlossen ist, ist mir aufgefallen, dass der „OpenTherm-Regler“ an den gleichen Klemmen angeschlossen ist. Dann wurde mir klar – hier ist es! Eine Google-Suche nach "OpenTherm Arduino" hat mich wieder verärgert - nichts besonders Vernünftiges. Es gab einen Nachrichtenmonitor, aber das ist es nicht - ich muss nicht einmal zuhören, es gibt nichts zu tun - ich brauche einen Thermostat.

Lassen Sie uns zuerst etwas Einfaches auf dem Arduino bauen. IN Kapitel 12 Thermostate mit rein analogen Komponenten haben wir bereits erfunden. Sehen wir uns nun an, wie Sie digitale Technologie in dieses nützliche Geschäft einbeziehen können.

Wir haben bereits erwähnt (vgl. Kapitel 18), dass AVR-Controller einen 10-Bit-Mehrkanal-ADC enthalten. Auf Arduino-Boards sind ihre Pins speziell als analoge Eingänge gekennzeichnet (Buchstabe A mit Zahlen von null bis fünf). Beachten Sie, dass sie auch als normale digitale Nummern mit Zahlen von 14 bis 18 verwendet werden können, und wir werden sie weiterhin als solche verwenden. Wir werden einen dieser Eingänge verwenden, um die Temperatur zu messen, und wir werden die Lastverbindung von einem der digitalen Ausgänge steuern.

Insgesamt benötigen wir:

□ Arduino Uno Board (jedes andere ist in Ordnung);

Ich habe einen Thermistor als Temperatursensor. Geeignet sind zB vorhandene

□ "Amperke" B57164-K 103-J mit einem Nennwiderstand von 10 kOhm bei 25 ° C - es sind seine Eigenschaften, die angegeben werden Kapitel 13 als Veranschaulichung der Eigenschaften von Thermistoren;

□ variabler Widerstand 10 kΩ, fester Widerstand 620 Ohm;

□ Exekutives Relais – elektromagnetisch (erforderlich mit einem verstärkenden Transistorschalter, siehe unten) oder Festkörper.

Zum Verkauf stehen Module, die auf elektromagnetischen 5-Volt-Relais basieren und speziell für die Steuerung über die Arduino-Ausgänge angepasst sind. Elektromagnetische Relais selbst benötigen einen ziemlich großen Steuerstrom (und je leistungsstärker das Relais ist, desto leistungsstärker ist es - nur die Reed-Relais mit der geringsten Leistung können direkt von der Logik aus arbeiten), daher müssen alle diese Relaismodule einen Transistorverstärker haben schalten. Beispielsweise verkauft Amperka ein solches Modul auf Basis des Relais HLS8L‑DC5V‑S‑C. Wenn Sie mit dem elektromagnetischen Relais nicht zufrieden sind und eine möglichst einfache Schaltung anstreben, können Sie nach Solid-State-Relais Ausschau halten - geeignet z. B. CX240D5R von Crydom oder ähnliche mit einer Ansprechspannung von 3- 15 V. Sie haben einen Steuerstrom von etwa 15 mA bei 5 Volt pro Eingang, was für AVR akzeptabel ist, da ihr Steuereingang direkt mit dem Arduino-Digital-Pin verbunden werden kann. Zwar kann der CX240D5R bei einer Spannung von 220 Volt keine Last mit mehr als einem Kilowatt Leistung schalten, aber mehr brauchen wir bei dieser Aufgabe auch nicht.

Die Thermostatschaltung auf dem Arduino Uno ist in Abb. 21.2.

Reis. 21.2. Thermostatkreis eingeschaltet Arduino Uno

Im Diagramm ist die Relaiswicklung K1 (mit Schließerkontakten) bedingt direkt mit dem digitalen Ausgang des Arduino verbunden - es versteht sich, dass es sich entweder um das zuvor erwähnte Halbleiterrelais mit den gewünschten Eigenschaften handelt oder einfach um den Steuereingang von die fertige Relaismodulplatine. Um den Zustand des Stromkreises zu kontrollieren, wird gleichzeitig mit der Heizung eine LED aktiviert. Das Thermostatprogramm nach diesem Schema ist äußerst einfach:

Die Widerstandswerte sind auf den angegebenen Thermistor B57164-K abgestimmt, Nennwert 10 kΩ bei 25 °C (103-J). Entsprechend dem Programm arbeitet das Relais in der Nähe des Werts am ADC-Ausgang, der gleich 500 ist. Dies ist ungefähr die Mitte des 10-Bit-Bereichs (die gesamte Skala umfasst 1024 Abstufungen), d. h. dieser Wert wird eingestellt, wenn die oberen und unteren Widerstände sind relativ zum AO-Eingang ungefähr gleich (die Spannung an diesem Eingang beträgt dann ungefähr 2,5 Volt).

Beachten Sie, dass beide Funktionen Wenn enden Sie nicht mit dem Üblichen anders. Um ein Flattern zu verhindern, wurde eine Hysterese in das Programm eingeführt: Das Relais schaltet ein, wenn der Wert von Code 510 überschritten wird, und aus, wenn es auf den Wert von 490 fällt. In der Pause behält es den vorherigen Zustand bei. Zwanzig Codeeinheiten (was ist drin Kapitel 12 wir riefen an Todeszone) entsprechen etwa 10 Millivolt, d.h. die Hysterese bei einer Temperatur im Bereich von 30–40 Grad wird etwas weniger als ein Zehntel Grad betragen (überzeugen Sie sich selbst anhand von Tabelle 13.1 aus Kapitel 13).

Die Einstellung der Ansprechtemperatur über den Widerstand R2 ist mit diesen Parametern im Bereich von ca. 22 bis 96 °C möglich. In der Praxis ist ein so großer Einstellbereich natürlich nicht erforderlich, daher ist es ratsam, den Wert von R2 zu verringern. Der Wert von R1 wird so gewählt, dass sich R1 und der Nennwert von R2 zum Widerstand des Thermistors beim unteren Wert des gewünschten Temperaturbereichs (gemäß Tabelle 13.1) addieren. Für eine genauere Anpassung können Sie die Schwellenwerte im Programm kalibrieren und ändern, indem Sie die stationäre Temperatur mit einem herkömmlichen Thermometer messen.

Wenn Sie andere Sensoren in dieser Schaltung verwenden, vergessen Sie nicht das Vorzeichen des Temperaturkoeffizienten. Eine gewöhnliche Diode oder ein Transistor in Diodenschaltung (wie in den Schaltungen von Kapitel 13) haben ebenfalls eine negative Steigung der Kennlinie, sodass für sie lediglich die Zahlenwerte der Ansprechschwelle im Programm geändert werden müssen. Aber Halbleitersensoren vom Typ TMP35 (vgl. Kapitel 13) oder einfach metallische Widerstandsthermometer (wie beim Bau von Kapitel 17) haben einen positiven Temperaturkoeffizienten, so dass die Antwortbedingungen umgekehrt werden müssen. Ändern Sie nicht nur „mehr“ in „weniger“ und umgekehrt, sondern ändern Sie auch das Verhältnis der Schwellenwerte für die Hysterese. In der neuen Situation muss sich die Heizung einschalten, wenn der Wert unter dem unteren Schwellenwert liegt, und ausschalten wenn es größer ist als das größere.


Spitze