pid tuning + temp sensor failures count & display
This commit is contained in:
parent
92adfc73d8
commit
d4a564cea3
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
* output temp control is not ideal (on/off does not represent values between 0 and 100)
|
|
||||||
* experiment with p,i,d
|
|
||||||
|
|||||||
@ -61,14 +61,14 @@ struct Profile {
|
|||||||
|
|
||||||
// Profiles definition
|
// Profiles definition
|
||||||
Profile profiles[] = {
|
Profile profiles[] = {
|
||||||
{"Chickpeas", 2, {{47, 120}, {55, 60}, {65, 150}, {70, 60}, {90, 105}}, 5},
|
{"Chickpeas", 1, {{46, 120}, {55, 60}, {65, 150}, {70, 60}, {90, 105}}, 5},
|
||||||
{"Lentils", 3, {{47, 120}, {53, 120}, {65, 180}, {72, 90}, {90, 15}}, 5},
|
{"Lentils", 3, {{46, 120}, {53, 120}, {65, 180}, {72, 90}, {90, 15}}, 5},
|
||||||
{"Lentils gradual", 10, {{48, 120}, {80, 60}}, 2},
|
{"Gradual", 10, {{46, 120}, {80, 60}}, 2},
|
||||||
{"Soy gradual", 10, {{42, 1}, {48, 120}, {80, 60}, {90, 15}}, 4},
|
{"Long gradual", 10, {{46, 120}, {80, 60}, {90, 15}}, 3},
|
||||||
{"Wheat", 1, {{47, 60}, {53, 60}, {65, 20}, {72, 20}, {85, 20}}, 5},
|
{"Wheat", 1, {{46, 60}, {53, 60}, {65, 20}, {72, 20}, {85, 20}}, 5},
|
||||||
{"55-30&85-120", 1, {{55, 30}, {85, 120}}, 2},
|
{"SV1", 1, {{55, 30}, {85, 120}}, 2},
|
||||||
{"46-45", 0, {{46, 45}}, 1},
|
{"SV2", 0, {{46, 45}}, 1},
|
||||||
{"Test", 3, {{51, 1}}, 1},
|
{"Yoghurt maker", 0, {{40, 300}, {40, 300}, {30, 300}}, 3},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Global variables for profile selection and execution
|
// Global variables for profile selection and execution
|
||||||
@ -87,7 +87,9 @@ bool inSelectionMode = true;
|
|||||||
|
|
||||||
#include "GyverPID.h"
|
#include "GyverPID.h"
|
||||||
double Setpoint, Input, Output;
|
double Setpoint, Input, Output;
|
||||||
GyverPID regulator(50, 0, 0, 1000);
|
GyverPID regulator(25, 0, 0, 1000);
|
||||||
|
|
||||||
|
bool temperatureSensorError = false;
|
||||||
|
|
||||||
// Timing variables
|
// Timing variables
|
||||||
long phaseStartTime;
|
long phaseStartTime;
|
||||||
@ -118,7 +120,10 @@ uint32_t timerChecks= 0;
|
|||||||
|
|
||||||
bool boolLastCompletedState = false;
|
bool boolLastCompletedState = false;
|
||||||
|
|
||||||
#define PARTS 4
|
float failedReadingLastValue = 0;
|
||||||
|
int failedReadingCount = 0;
|
||||||
|
|
||||||
|
#define PARTS 8
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
pinMode(ssrPin, OUTPUT);
|
pinMode(ssrPin, OUTPUT);
|
||||||
@ -192,8 +197,13 @@ void handleTemperatureSensor() {
|
|||||||
Input = thermocouple.readCelsius();
|
Input = thermocouple.readCelsius();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (isnan(Input)) {
|
if (isnan(Input) || Input < 20 || Input > 95) {
|
||||||
Input = 100;
|
failedReadingLastValue = (float) Input;
|
||||||
|
failedReadingCount++;
|
||||||
|
temperatureSensorError = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
temperatureSensorError = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -269,6 +279,10 @@ void handleHeaterAdv() {
|
|||||||
oled.invertText(false);
|
oled.invertText(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (temperatureSensorError) {
|
||||||
|
next = 0;
|
||||||
|
}
|
||||||
|
|
||||||
digitalWrite(ssrPin, next);
|
digitalWrite(ssrPin, next);
|
||||||
currentPart++;
|
currentPart++;
|
||||||
if (currentPart >= PARTS) {
|
if (currentPart >= PARTS) {
|
||||||
@ -518,6 +532,27 @@ void printPhases() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (temperatureSensorError) {
|
||||||
|
oled.invertText(true);
|
||||||
|
oled.setCursor(0, 0);
|
||||||
|
oled.setScale(2);
|
||||||
|
oled.print("T = ");
|
||||||
|
oled.print(Input);
|
||||||
|
oled.print(" ");
|
||||||
|
oled.setScale(1);
|
||||||
|
digitalWrite(activeBuzzerPin, HIGH);
|
||||||
|
delay(5);
|
||||||
|
digitalWrite(activeBuzzerPin, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (failedReadingCount) {
|
||||||
|
oled.setCursor(0, 7);
|
||||||
|
oled.print(failedReadingCount);
|
||||||
|
oled.print(" (");
|
||||||
|
oled.print(failedReadingLastValue);
|
||||||
|
oled.print(") ");
|
||||||
|
}
|
||||||
|
|
||||||
oled.invertText(false); // Ensure text inversion is off after the loop
|
oled.invertText(false); // Ensure text inversion is off after the loop
|
||||||
|
|
||||||
// oled.setCursor(110,7);
|
// oled.setCursor(110,7);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user