diff --git a/firmware/weckkubator/weckkubator.ino b/firmware/weckkubator/weckkubator.ino index 1a48d32..209f534 100644 --- a/firmware/weckkubator/weckkubator.ino +++ b/firmware/weckkubator/weckkubator.ino @@ -16,17 +16,16 @@ 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; // Temp adjustment -int tempset; +float tempset; int poti; // time -int onesecond = 1000; unsigned long previousMillis; @@ -67,7 +66,26 @@ void setup() { lcd.print("Weckkubator 0.0.1"); 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.print(tempset); + 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(" "); @@ -144,6 +158,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); + } + + }