From d846c930d4227e84db86fb31d8e59c3d2ce00660 Mon Sep 17 00:00:00 2001 From: fliegerjohn Date: Sun, 5 May 2024 22:10:51 +0200 Subject: [PATCH 1/3] Tune PID --- firmware/weckkubator/weckkubator.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/weckkubator/weckkubator.ino b/firmware/weckkubator/weckkubator.ino index 1a48d32..83d8d74 100644 --- a/firmware/weckkubator/weckkubator.ino +++ b/firmware/weckkubator/weckkubator.ino @@ -16,7 +16,7 @@ DallasTemperature sensors(&oneWire); // declare sensors double pidset, watertemp, output; // PID adjustment -double Kp=2, Ki=5, Kd=1; +double Kp=500, Ki=10, Kd=0; PID myPID(&watertemp, &output, &pidset, Kp, Ki, Kd, DIRECT); int WindowSize = 5000; unsigned long windowStartTime; @@ -67,7 +67,7 @@ void setup() { lcd.print("Weckkubator 0.0.1"); delay(3000); lcd.clear(); - + } void loop() { From fc39b3c863f5af58ca0154b680652031ea8994a5 Mon Sep 17 00:00:00 2001 From: fliegerjohn Date: Sun, 5 May 2024 22:28:11 +0200 Subject: [PATCH 2/3] Change temprange to 20-50 and 80-90 degrees. --- firmware/weckkubator/weckkubator.ino | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/firmware/weckkubator/weckkubator.ino b/firmware/weckkubator/weckkubator.ino index 83d8d74..58d0a5e 100644 --- a/firmware/weckkubator/weckkubator.ino +++ b/firmware/weckkubator/weckkubator.ino @@ -22,7 +22,7 @@ int WindowSize = 5000; unsigned long windowStartTime; // Temp adjustment -int tempset; +float tempset; int poti; // time @@ -119,7 +119,7 @@ void lcdoutput() { // Output temperatureset lcd.setCursor(0, 1); lcd.print("set: "); - lcd.print(tempset); + lcd.print(pidset); lcd.write((byte)0); lcd.print("C"); @@ -144,6 +144,15 @@ void lcdoutput() { // Read Poti void settemp() { poti = analogRead(A3); - tempset = (18+(poti*0.07)); // range between 18°C and 18+1024*0,07 (~89°C) - pidset = tempset; + tempset = (20+(poti*0.04)); + + if (tempset <= 50) { + pidset = tempset; + } + + if (tempset >= 51) { + pidset = (tempset+30); + } + + } From 67c1f0503acf0bd1aeadbf9b1b981ba2cd01d4df Mon Sep 17 00:00:00 2001 From: fliegerjohn Date: Sun, 5 May 2024 22:51:30 +0200 Subject: [PATCH 3/3] Some timetunings --- firmware/weckkubator/weckkubator.ino | 38 +++++++++++++++++++--------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/firmware/weckkubator/weckkubator.ino b/firmware/weckkubator/weckkubator.ino index 58d0a5e..209f534 100644 --- a/firmware/weckkubator/weckkubator.ino +++ b/firmware/weckkubator/weckkubator.ino @@ -26,7 +26,6 @@ float tempset; int poti; // time -int onesecond = 1000; unsigned long previousMillis; @@ -68,6 +67,25 @@ void setup() { delay(3000); lcd.clear(); + // Setup LCD + // Output temperatureset + lcd.setCursor(0, 1); + lcd.print("set: "); + lcd.print(pidset); + lcd.write((byte)0); + + // Output watertemp + lcd.setCursor(0, 2); + lcd.print("temp: "); + lcd.print(watertemp); + lcd.write((byte)0); + lcd.print("C"); + + // output PID + lcd.setCursor (0, 3); + lcd.print("output: "); + lcd.print(output); + } void loop() { @@ -77,11 +95,13 @@ void loop() { // update LCD unsigned long currentMillis = millis(); - if (currentMillis - previousMillis >= onesecond) { + if (currentMillis - previousMillis >= 250) { settemp(); readtemp(); lcdoutput(); + previousMillis = currentMillis; } + } //------------------------------------------ @@ -89,10 +109,7 @@ void loop() { void pid() { myPID.Compute(); - - /************************************************ - * turn the output pin on/off based on pid output - ************************************************/ + if (millis() - windowStartTime > WindowSize) { //time to shift the Relay Window windowStartTime += WindowSize; @@ -117,23 +134,20 @@ void readtemp() { // LCD output void lcdoutput() { // Output temperatureset - lcd.setCursor(0, 1); - lcd.print("set: "); + lcd.setCursor(8, 1); lcd.print(pidset); lcd.write((byte)0); lcd.print("C"); // Output watertemp - lcd.setCursor(0, 2); - lcd.print("temp: "); + lcd.setCursor(8, 2); lcd.print(watertemp); lcd.write((byte)0); lcd.print("C"); lcd.print(" "); // output PID - lcd.setCursor (0, 3); - lcd.print("output: "); + lcd.setCursor (8, 3); lcd.print(output); lcd.print(" ");