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;
|
||||
unsigned long lastSwitch = 0;
|
||||
unsigned long autoSwitchDelay = 20000; // 20s
|
||||
float pwmSwitchDelayOn = 4000; // 4s
|
||||
float pwmSwitchDelayOff = 7000; // 7s
|
||||
float pwmSwitchDelayOn = 2000; // 4s
|
||||
float pwmSwitchDelayOff = 4000; // 7s
|
||||
float power = 0;
|
||||
|
||||
float kp = 0.25;
|
||||
float ki = 0.25;
|
||||
float kd = 0.25;
|
||||
|
||||
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
|
||||
String getSensorReadings()
|
||||
@@ -68,6 +72,10 @@ String getSensorReadings()
|
||||
readings["pwm_on"] = pwmSwitchDelayOn;
|
||||
readings["pwm_off"] = pwmSwitchDelayOff;
|
||||
|
||||
readings["kp"] = kp;
|
||||
readings["ki"] = ki;
|
||||
readings["kd"] = kd;
|
||||
|
||||
serializeJson(readings, jsonString);
|
||||
return jsonString;
|
||||
}
|
||||
@@ -168,6 +176,24 @@ void handleWebSocketMessage(void *arg, uint8_t *data, size_t len)
|
||||
Serial.printf("\nMode set to ");
|
||||
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"))
|
||||
{
|
||||
String target = message.substring(10, 15);
|
||||
@@ -327,7 +353,7 @@ void setup()
|
||||
|
||||
// Create PID controller instance
|
||||
pid.setSetpoint(targetTemp);
|
||||
pid.setDt(4);
|
||||
pid.setDt(2);
|
||||
|
||||
ElegantOTA.begin(&server);
|
||||
|
||||
|
||||
+15
@@ -20,6 +20,21 @@ void PIDController::setSetpoint(double 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)
|
||||
{
|
||||
dt = sample_time;
|
||||
|
||||
@@ -17,6 +17,10 @@ public:
|
||||
double integ_max = 50.0);
|
||||
|
||||
void setSetpoint(double sp);
|
||||
void setSetKp(double nkp);
|
||||
void setSetKi(double nki);
|
||||
void setSetKd(double nkd);
|
||||
|
||||
void setDt(double sample_time);
|
||||
double compute(double current_temp);
|
||||
void reset();
|
||||
|
||||
+61
-4
@@ -35,10 +35,14 @@
|
||||
let spoofInterval = 250;
|
||||
let speedFactor = 250 / spoofInterval;
|
||||
const switchDelay = (30 / speedFactor) * 1000;
|
||||
let pwmOn = $state(4);
|
||||
let pwmOnDelay = (4 / speedFactor) * 1000;
|
||||
let pwmOff = $state(7);
|
||||
let pwmOffDelay = (7 / speedFactor) * 1000;
|
||||
let pwmOn = $state(2);
|
||||
let pwmOnDelay = (2 / speedFactor) * 1000;
|
||||
let pwmOff = $state(4);
|
||||
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)
|
||||
|
||||
@@ -361,6 +365,12 @@
|
||||
pwmOn = Number(myObj[key]) / 1000;
|
||||
} else if (key === 'pwm_off') {
|
||||
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') {
|
||||
mode = myObj[key];
|
||||
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 = () => {
|
||||
let csvContent = 'Time,Temp,Relais\n';
|
||||
|
||||
@@ -568,6 +588,43 @@
|
||||
PID: {calculatedPidOutput.toFixed(0)}% {(calculatedPidOutput * 12).toFixed(0)}W
|
||||
</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}
|
||||
</div>
|
||||
<div class="card flex cursor-pointer gap-2">
|
||||
|
||||
Reference in New Issue
Block a user