From b82ff138c2cc802f4e1e8de6032c8dc7af672fd8 Mon Sep 17 00:00:00 2001 From: sven Date: Sun, 27 Mar 2022 22:39:54 +0200 Subject: [PATCH] Added Cool.ino --- Cool.ino | 203 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 Cool.ino diff --git a/Cool.ino b/Cool.ino new file mode 100644 index 0000000..85b2349 --- /dev/null +++ b/Cool.ino @@ -0,0 +1,203 @@ +/********************************************************************/ +// First we include the libraries +#include +#include +#include +#include +#include +/********************************************************************/ +// Data wire is plugged into pin 2 on the Arduino +#define ONE_WIRE_BUS 20 +/********************************************************************/ +// Setup a oneWire instance to communicate with any OneWire devices +// (not just Maxim/Dallas temperature ICs) +OneWire oneWire(ONE_WIRE_BUS); +/********************************************************************/ +// Pass our oneWire reference to Dallas Temperature. +DallasTemperature sensors(&oneWire); +/********************************************************************/ +byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x09, 0x70 }; +IPAddress ip(192,168,178,57); +EthernetServer server(80); +float r,t; +const int vent = 22; +const int compressor = 23; +const long interval = 5000; // interval for measurement (milliseconds) +unsigned long previousMillis = 0; +const long agitPrerun = 60000; +unsigned long previousMillisagitPrerun = 0; +const long maxCool = 1800000; +unsigned long previousMillismaxCool = 0; +const long agitPostrun = 180000; +unsigned long previousMillisagitPostrun = 0; +float temperatureA; // temperature in Celsius +float DeltaT = 1.5; +float temperatureSP = 10.0; +int stepAct = 0; +int stepActLC = 0; +int tempReached = 0; + +void setup(void) +{ + pinMode(vent, OUTPUT); + pinMode(compressor, OUTPUT); + // start serial port + Serial.begin(9600); + Serial.println("Dallas Temperature IC Control Library Demo"); + // Start up the library + sensors.begin(); + Ethernet.begin(mac, ip); + server.begin(); + Serial.print("Server gestartet. IP: "); + // IP des Arduino-Servers ausgeben + Serial.println(Ethernet.localIP()); +} +void loop(void) +{ + unsigned long currentMillis = millis(); + if (currentMillis - previousMillis >= interval) { + // save the last time you blinked the LED + previousMillis = currentMillis; + + // call sensors.requestTemperatures() to issue a global temperature + // request to all devices on the bus +/********************************************************************/ + Serial.print(" Requesting temperatures..."); + sensors.requestTemperatures(); // Send the command to get temperature readings + Serial.println("DONE"); +/********************************************************************/ + temperatureA = sensors.getTempCByIndex(0); + Serial.print("Temperature is: "); + Serial.println(temperatureA); + Serial.print("StepAct: "); + Serial.println(stepAct); + Serial.println((currentMillis - previousMillismaxCool)/1000); + + + } + if (stepAct <= 0 || stepAct > 4){ + stepAct = 1; + } + else if (stepAct == 1){ // Waiting + if (temperatureA > (temperatureSP + DeltaT)){ + stepAct++; + } + digitalWrite(vent, LOW); + digitalWrite(compressor, LOW); + } + else if (stepAct == 2){ // Pre run agitators for 1min. + if (stepAct != stepActLC){ + previousMillisagitPrerun = currentMillis; + stepActLC = stepAct; + } + if (currentMillis - previousMillisagitPrerun >= agitPrerun) { + previousMillisagitPrerun = currentMillis; + stepAct++; + } + digitalWrite(vent, HIGH); + digitalWrite(compressor, LOW); + } + else if (stepAct == 3){ // Cooling until temperature reached, or max time + if (stepAct != stepActLC){ + previousMillismaxCool = currentMillis; + stepActLC = stepAct; + } + if (currentMillis - previousMillismaxCool >= maxCool || temperatureA < temperatureSP) { + previousMillismaxCool = currentMillis; + stepAct++; + } + if (temperatureA < temperatureSP){ + tempReached = 1; + } + else { + tempReached = 0; + } + digitalWrite(vent, HIGH); + digitalWrite(compressor, HIGH); + } + else if (stepAct == 4){ // Postrun + if (stepAct != stepActLC){ + previousMillisagitPostrun = currentMillis; + stepActLC = stepAct; + } + if (currentMillis - previousMillisagitPostrun >= agitPostrun) { + previousMillisagitPostrun = currentMillis; + if (tempReached == 1){ + stepAct = 1; + } + else{ + stepAct--; + } + } + digitalWrite(vent, HIGH); + digitalWrite(compressor, LOW); + } + + // ETHERNET + EthernetClient client = server.available(); + // Wenn es einen Client gibt, dann... + if (client) { + Serial.println("Neuer Client"); + // Jetzt solange Zeichen lesen, bis eine leere Zeile empfangen wurde + // HTTP Requests enden immer mit einer leeren Zeile + boolean currentLineIsBlank = true; + // Solange Client verbunden + while (client.connected()) { + // client.available() gibt die Anzahl der Zeichen zurück, die zum Lesen + // verfügbar sind + if (client.available()) { + // Ein Zeichen lesen und am seriellen Monitor ausgeben + char c = client.read(); + Serial.write(c); + // In currentLineIsBlank merken wir uns, ob diese Zeile bisher leer war. + // Wenn die Zeile leer ist und ein Zeilenwechsel (das \n) kommt, + // dann ist die Anfrage zu Ende und wir können antworten + if (c == '\n' && currentLineIsBlank) { + client.println("HTTP/1.1 200 OK"); + client.println("Content-Type: text/html"); + client.println("Connection: close"); // Verbindung wird nach Antwort beendet + client.println("Refresh: 30"); // Seite alle 25 Sekunden neu abfragen + client.println(); + // Ab hier berginnt der HTML-Code, der an den Browser geschickt wird + client.println(""); + client.println(""); + client.println("CONTROLLINO Analog Input"); + client.println("

CONTROLLINO

"); + + client.println("

"); + client.print("Aktuelle Temperatur: "); + client.println(temperatureA); + client.println("

"); + client.println("

"); + client.print("Sollwert Temperatur: "); + client.println(temperatureSP); + client.println("

"); + client.println("

"); + client.print("Delta Temperatur: "); + client.println(DeltaT); + client.println("

"); + client.write("
T: "); + client.write("R:
"); + client.println(r,t); + client.println(""); + break; + } + if (c == '\n') { + // Zeilenwechsel, also currentLineIsBlack erstmal auf True setzen + currentLineIsBlank = true; + } + else if (c != '\r') { + // Zeile enthält Zeichen, also currentLineIsBlack auf False setzen + currentLineIsBlank = false; + } + } + } + // Kleine Pause + delay(1); + // Verbindung schliessen + client.stop(); + Serial.println("Verbindung mit Client beendet."); + Serial.println(""); + } +} +