Zu beginn des Projektes stand fest, dass ein Schrittmotor angesteuert werden muss. Daraus folgend entstand die erste Methode, die den Drehprozess des Produktes darstellt. Diese Methode ist mit angepassten Variablen im Endprodukt zu finden. Die Methode benötigt für ihre Funktion, den jetzigen Schritt auf dem der Schrittmotor eingestellt ist und den zukünftigen Schritt auf dem der Schrittmotor eingestellt werden soll. Dabei wird unterschieden welcher der beiden Werte höher ist, sodass das Programm entscheidet, ob der Schrittmotor nach vorne oder zurück gedreht werden soll. Zuletzt wird der jetzige Schritt auf den Wert des zukünftigen Schrittes gesetzt, dies geschieht, weil der jetzige und zukünftige Schritt bei korrekter Ausführung schlussendlich identisch sein sollten.

Aus den Anforderungen aus unserem Projekt im Umfang der zu leistenden Funktionen und aus der obigen Basis der spin() Methode ergaben sich notwendig zu implementierende Funktionen innerhalb der Software, die im folgenden implementiert werden müssen.

Die Pins des Schrittmotors müssen angesteuert werden können. Dies geschieht per Deklaration der zu angesteuerten Pins, sowie der Deklarierung als Outputs innerhalb der Setup Methode. Welche Pins genau angesteuert werden müssen ergibt sich aus der Verkabelung. Notaus ist hierbei deklariert worden, wurde allerdings zeitlich bedingt im Endprodukt nicht eingesetzt und wurde auch nicht verkabelt.

Im Setup:

Es werden die für die Anforderungen benötigten Variablen gesetzt die zum einen für die spin() Methode als auch für zukünftige Methoden nützlich werden. Mitunter jetziger/zukünftiger Schritt, jetzige/zukünftige Temperatur und ob die automatische Steuerung aktiv ist. Hinzu kommen Variablen wie lastMsg die im späteren Verlauf Verzögerungen darstellen um die delay() Methode zu vermeiden. Die Variable val dient zum publishen an Node-Red falls die automatische Steuerung aktiviert ist. “kali” dient zur Kalibrierung der Heizung welcher je nach Widerstand des Thermostats hoch oder runter gestellt werden muss. Und “last” dient als Hilfsvariable um den letzten eingestellten Wert aus Node-Red als Startwert zu speichern.

Eine WLAN-Verbindung wird benötigt, dies wurde mithilfe des WiFi Managers erzielt, mithilfe dessen die Verbindung zum WLAN mittels eines Mobilen Endgerätes unkompliziert verläuft.

Im Setup:

Für die Nutzung von Node-Red wird eine Verbindung zum mqtt Server benötigt, sowie das Setzen der Topics für sowohl das publishen als auch dem subscriben. Es wird außerdem ein PubSubClient für den ESP erstellt welcher die Verbindung aufbaut.

Im Setup:

Zum Empfangen von Daten über Node-Red wurde eine Callback Methode implementiert, welche den übergebenen Temperaturwert aus der Node-Red Applikation speichert.

Zur Nutzung der automatischen Steuerung der Heizung wird eine Möglichkeit zur Identifizierung der Außentemperatur des Standortes benötigt. Dies wurde mithilfe einer Wetter API implementiert, die zuvor im Winter Projekt ein essenzieller Bestandteil war. Sowohl den Stadtnamen als auch ein API Key wird benötigt, sodass die Wetterdaten entnommen als auch aus dem richtigen Standort entnommen werden können. Dabei formatiert die Software in der getCurrentWeatherConditions() Methode, die gegeben Informationen aus dem jeweiligen Standort in eine JSON Datei um, auf die dann zugegriffen werden kann. Es wird lediglich die Außentemperatur in Celsius genutzt und aus der JSON Datei entnommen.

Die Basis für das Programm ist gesetzt und die Loop Methode kann nun implementiert werden. Um die Loop Methode übersichtlicher zu gestalten, werden einzelne Codeblöcke entnommen und in einzelne Methoden unterteilt. Eine Methode dient zur Überprüfung ob die automatische Steuerung in der Node-Red  Applikation aktiviert wurde, ist dies der Fall wird unser boolean der für die Automatische Steuerung zuständig ist auf True bzw. bei deaktivierung auf False gesetzt. Dabei werden von der Node-Red Applikation unrealistische Werte gesendet die den Programmfluss allerdings nicht beeinflussen, da der letzte Temperaturwert mittels der Variable lastTemp gespeichert wird und bei Aktivierung der Temperaturwert aus der API überschrieben wird.

Es wird eine Methode benötigt die, die Temperaturwerte in den Schrittwert umwandelt und diesen in  Abhängigkeit von der automatischen Steuerung an die Node-Red Applikation schickt. Für die Umwandlung von Temperaturwerten in Schrittwerte, wurde eine Methode currentTemperatureCheck() mit dem Parameter kali (kurz für Kalibrierung) welcher je nach Heizung variieren kann erstellt. Die Methode berechnet den Schrittwert aus, auf dem die Heizung gestellt werden soll. Danach wird wenn die Automatische  Steuerung aktiv ist, der Temperaturwert der sich aus der Wetter API ergibt an die Node-Red Applikation versendet, sodass man die Temperatur der Heizung auch dort einsehen kann. Die if- Schleife zum Schluss dient zur Entnahme des Temperaturwertes welcher in Node-Red zuletzt eingestellt wurde. Damit wurde das Problem der händischen Kalibrierung beim testen des Produktes gelöst.

Falls der  Client beim Durchlauf die Verbindung zum mqtt Server verlieren sollte, wurde zur Sicherheit die Methode reconnect() implementiert, welche den Client wieder mit dem mqtt Server verbindet.

Wenn die Automatische Steuerung aktiv ist, wird der Temperaturwert auf dem der Raum beheizt werden soll mit der Methode automaticTemperature() in Abhängigkeit von der Außentemperatur gesetzt. Die Werte dienen hierbei nur zur Illustration und können je nach Präferenz abgeändert werden.

In der Loop Methode wird zunächst überprüft ob die automatische Steuerung aktiviert wurde.

Je nachdem ob die automatische Steuerung aktiv ist wird etwas anderes durchgeführt. Bei deaktivierter automatischer Steuerung wird überprüft ob sich der Jetzige Schritt mit dem zukünftigen Schritt unterscheidet, falls dies der Fall ist bedeutet das, dass die Heizungsstufe nicht mit der Stufe aus Node-Red übereinstimmt und dementsprechend über die spin() Methode verändert werden muss.

Falls die automatische Steuerung aktiv ist, wird alle 5 Sekunden über eine speziellere Art von der Delay() Methode, die das Programm nicht stoppt, der Temperaturwert aus der Wetter API entnommen. Daraus folgend wird die Temperatur auf die beheizt werden sollt angepasst.

Im nächsten Durchlauf würde es eine unterscheidung des jetzigen und des zukünftigen Schrittes geben sodass sich die Heizung an den Wert der automatischen  Steuerung anpasst.

Danach wird überprüft ob der Client noch mit dem mqtt Server verbunden ist, ist dies nicht der Fall muss dieser neu verbunden werden.

Zum Schluss wird falls sich die Temperatur je nach Node-Red oder auch je nach Wetter API geändert haben sollte, der zukünftige Schritt verändert, sodass sich der Motor im nächsten Durchlauf drehen wird.

Categories:

Tags:

No responses yet

Leave a Reply

Your email address will not be published. Required fields are marked *