From bd40ae23dabef040e284f36cec777e20d6a0199d Mon Sep 17 00:00:00 2001 From: eneller Date: Thu, 8 Jan 2026 02:32:39 +0100 Subject: [PATCH] Initial Commit --- README.md | 6 ++++++ src/pid.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 README.md create mode 100644 src/pid.cpp diff --git a/README.md b/README.md new file mode 100644 index 0000000..29e284d --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Reflow Plate +Custom Reflow Plate inspired by [UnexpectedMaker +ReflowMaster](https://github.com/UnexpectedMaker/ReflowMaster) +[Pro](https://reflowmasterpro.com) +using [PID](https://en.wikipedia.org/wiki/Proportional%E2%80%93integral%E2%80%93derivative_controller) +to control a simple grill. diff --git a/src/pid.cpp b/src/pid.cpp new file mode 100644 index 0000000..c45c4c2 --- /dev/null +++ b/src/pid.cpp @@ -0,0 +1,38 @@ +const float k_p = 1.0; +const float k_i = 3.0; +const float k_d = 0.2; +const float tick_millis = 30'000; + +float target; +float measured; +float error; +float error_last; +float output; +float i; +float d; + +unsigned long time_last_millis; +unsigned long time_cur_millis; +unsigned long time_delta_millis; + +float pid(float error, float error_last, unsigned long delta){ + float p = k_p * error; + float i = i + (k_i * delta * error); + float d = k_d * (error - error_last) / delta; + return p+i+d; +} + +void setup(){ + time_last_millis = millis(); +} + +void loop(){ + time_cur_millis = millis(); + time_delta_millis = time_cur_millis - time_last_millis; + if (time_delta_millis > tick_millis) { + time_last_millis = time_cur_millis; + error_last = error; + error = target - measured; + output = pid(error, error_last, time_delta_millis); + } +}