mirror of
https://github.com/vincentvdwal/crust-craft.git
synced 2026-08-18 17:26:39 +02:00
revert
This commit is contained in:
+30
-4
@@ -36,13 +36,17 @@ float derivedOverShoot = targetTemp;
|
|||||||
float derivedUnderShoot = targetTemp;
|
float derivedUnderShoot = targetTemp;
|
||||||
unsigned long lastSwitch = 0;
|
unsigned long lastSwitch = 0;
|
||||||
unsigned long autoSwitchDelay = 20000; // 20s
|
unsigned long autoSwitchDelay = 20000; // 20s
|
||||||
float pwmSwitchDelayOn = 4000; // 4s
|
float pwmSwitchDelayOn = 2000; // 4s
|
||||||
float pwmSwitchDelayOff = 7000; // 7s
|
float pwmSwitchDelayOff = 4000; // 7s
|
||||||
float power = 0;
|
float power = 0;
|
||||||
|
|
||||||
|
float kp = 0.25;
|
||||||
|
float ki = 0.25;
|
||||||
|
float kd = 0.25;
|
||||||
|
|
||||||
String mode = "off";
|
String mode = "off";
|
||||||
|
|
||||||
PIDController pid(1.0, 0.5, 1.0, 100.0, 0.0, 50.0); // Kp, Ki, Kd, max, min, integ_max
|
PIDController pid(kp, ki, kd, 100.0, 0.0, 50.0); // Kp, Ki, Kd, max, min, integ_max
|
||||||
|
|
||||||
// Get Sensor Readings and return JSON object
|
// Get Sensor Readings and return JSON object
|
||||||
String getSensorReadings()
|
String getSensorReadings()
|
||||||
@@ -68,6 +72,10 @@ String getSensorReadings()
|
|||||||
readings["pwm_on"] = pwmSwitchDelayOn;
|
readings["pwm_on"] = pwmSwitchDelayOn;
|
||||||
readings["pwm_off"] = pwmSwitchDelayOff;
|
readings["pwm_off"] = pwmSwitchDelayOff;
|
||||||
|
|
||||||
|
readings["kp"] = kp;
|
||||||
|
readings["ki"] = ki;
|
||||||
|
readings["kd"] = kd;
|
||||||
|
|
||||||
serializeJson(readings, jsonString);
|
serializeJson(readings, jsonString);
|
||||||
return jsonString;
|
return jsonString;
|
||||||
}
|
}
|
||||||
@@ -168,6 +176,24 @@ void handleWebSocketMessage(void *arg, uint8_t *data, size_t len)
|
|||||||
Serial.printf("\nMode set to ");
|
Serial.printf("\nMode set to ");
|
||||||
Serial.print(mode);
|
Serial.print(mode);
|
||||||
}
|
}
|
||||||
|
if (message.startsWith("setKp"))
|
||||||
|
{
|
||||||
|
String k = message.substring(6, 12);
|
||||||
|
kp = k.toFloat();
|
||||||
|
// pid.setSetKp(0.3);
|
||||||
|
}
|
||||||
|
if (message.startsWith("setKi"))
|
||||||
|
{
|
||||||
|
String k = message.substring(6, 12);
|
||||||
|
ki = k.toFloat();
|
||||||
|
// pid.setSetKp(0.3);
|
||||||
|
}
|
||||||
|
if (message.startsWith("setKd"))
|
||||||
|
{
|
||||||
|
String k = message.substring(6, 12);
|
||||||
|
kd = k.toFloat();
|
||||||
|
// pid.setSetKp(0.3);
|
||||||
|
}
|
||||||
if (message.startsWith("setPWMOn"))
|
if (message.startsWith("setPWMOn"))
|
||||||
{
|
{
|
||||||
String target = message.substring(10, 15);
|
String target = message.substring(10, 15);
|
||||||
@@ -327,7 +353,7 @@ void setup()
|
|||||||
|
|
||||||
// Create PID controller instance
|
// Create PID controller instance
|
||||||
pid.setSetpoint(targetTemp);
|
pid.setSetpoint(targetTemp);
|
||||||
pid.setDt(4);
|
pid.setDt(2);
|
||||||
|
|
||||||
ElegantOTA.begin(&server);
|
ElegantOTA.begin(&server);
|
||||||
|
|
||||||
|
|||||||
+15
@@ -20,6 +20,21 @@ void PIDController::setSetpoint(double sp)
|
|||||||
setpoint = sp;
|
setpoint = sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PIDController::setSetKp(double nkp)
|
||||||
|
{
|
||||||
|
kp = nkp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PIDController::setSetKi(double nki)
|
||||||
|
{
|
||||||
|
ki = nki;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PIDController::setSetKd(double nkd)
|
||||||
|
{
|
||||||
|
kd = nkd;
|
||||||
|
}
|
||||||
|
|
||||||
void PIDController::setDt(double sample_time)
|
void PIDController::setDt(double sample_time)
|
||||||
{
|
{
|
||||||
dt = sample_time;
|
dt = sample_time;
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ public:
|
|||||||
double integ_max = 50.0);
|
double integ_max = 50.0);
|
||||||
|
|
||||||
void setSetpoint(double sp);
|
void setSetpoint(double sp);
|
||||||
|
void setSetKp(double nkp);
|
||||||
|
void setSetKi(double nki);
|
||||||
|
void setSetKd(double nkd);
|
||||||
|
|
||||||
void setDt(double sample_time);
|
void setDt(double sample_time);
|
||||||
double compute(double current_temp);
|
double compute(double current_temp);
|
||||||
void reset();
|
void reset();
|
||||||
|
|||||||
+61
-4
@@ -35,10 +35,14 @@
|
|||||||
let spoofInterval = 250;
|
let spoofInterval = 250;
|
||||||
let speedFactor = 250 / spoofInterval;
|
let speedFactor = 250 / spoofInterval;
|
||||||
const switchDelay = (30 / speedFactor) * 1000;
|
const switchDelay = (30 / speedFactor) * 1000;
|
||||||
let pwmOn = $state(4);
|
let pwmOn = $state(2);
|
||||||
let pwmOnDelay = (4 / speedFactor) * 1000;
|
let pwmOnDelay = (2 / speedFactor) * 1000;
|
||||||
let pwmOff = $state(7);
|
let pwmOff = $state(4);
|
||||||
let pwmOffDelay = (7 / speedFactor) * 1000;
|
let pwmOffDelay = (4 / speedFactor) * 1000;
|
||||||
|
|
||||||
|
let kp = $state(0.25);
|
||||||
|
let ki = $state(0.25);
|
||||||
|
let kd = $state(0.25);
|
||||||
|
|
||||||
let maxValues = 4 * 2 * 60 * 60; // 120 minutes (4 values/sec)
|
let maxValues = 4 * 2 * 60 * 60; // 120 minutes (4 values/sec)
|
||||||
|
|
||||||
@@ -361,6 +365,12 @@
|
|||||||
pwmOn = Number(myObj[key]) / 1000;
|
pwmOn = Number(myObj[key]) / 1000;
|
||||||
} else if (key === 'pwm_off') {
|
} else if (key === 'pwm_off') {
|
||||||
pwmOff = Number(myObj[key]) / 1000;
|
pwmOff = Number(myObj[key]) / 1000;
|
||||||
|
} else if (key === 'kp') {
|
||||||
|
kp = Number(myObj[key]);
|
||||||
|
} else if (key === 'ki') {
|
||||||
|
ki = Number(myObj[key]);
|
||||||
|
} else if (key === 'kd') {
|
||||||
|
kd = Number(myObj[key]);
|
||||||
} else if (key === 'mode') {
|
} else if (key === 'mode') {
|
||||||
mode = myObj[key];
|
mode = myObj[key];
|
||||||
modeSpan.innerText = mode;
|
modeSpan.innerText = mode;
|
||||||
@@ -443,6 +453,16 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const changeKValue = (e: Event, k: string) => {
|
||||||
|
const target = e.target as HTMLTextAreaElement;
|
||||||
|
let value = target?.value;
|
||||||
|
console.log('K' + k + ': ' + value);
|
||||||
|
if (!import.meta.env.DEV) {
|
||||||
|
ws.send(`setK${k}: ` + value);
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const prepareDownloadCSV = () => {
|
const prepareDownloadCSV = () => {
|
||||||
let csvContent = 'Time,Temp,Relais\n';
|
let csvContent = 'Time,Temp,Relais\n';
|
||||||
|
|
||||||
@@ -568,6 +588,43 @@
|
|||||||
PID: {calculatedPidOutput.toFixed(0)}% {(calculatedPidOutput * 12).toFixed(0)}W
|
PID: {calculatedPidOutput.toFixed(0)}% {(calculatedPidOutput * 12).toFixed(0)}W
|
||||||
</div>
|
</div>
|
||||||
<div>ON:{pwmOn.toFixed(2)}s OFF:{pwmOff.toFixed(2)}s</div>
|
<div>ON:{pwmOn.toFixed(2)}s OFF:{pwmOff.toFixed(2)}s</div>
|
||||||
|
<div class="mt-3 flex w-full justify-between px-9">
|
||||||
|
<div>Kp</div>
|
||||||
|
<div>Ki</div>
|
||||||
|
<div>Kd</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex gap-1">
|
||||||
|
<input
|
||||||
|
class="min-w-[85px] rounded"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
max="50"
|
||||||
|
step="0.1"
|
||||||
|
value={kp}
|
||||||
|
id="target_temperature"
|
||||||
|
onchange={(e) => changeKValue(e, 'p')}
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
class="min-w-[85px] rounded"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
max="50"
|
||||||
|
step="0.1"
|
||||||
|
value={ki}
|
||||||
|
id="target_temperature"
|
||||||
|
onchange={(e) => changeKValue(e, 'i')}
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
class="min-w-[85px] rounded"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
max="50"
|
||||||
|
step="0.1"
|
||||||
|
value={kd}
|
||||||
|
id="target_temperature"
|
||||||
|
onchange={(e) => changeKValue(e, 'd')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="card flex cursor-pointer gap-2">
|
<div class="card flex cursor-pointer gap-2">
|
||||||
|
|||||||
Reference in New Issue
Block a user