Aquarium Cooling Controller
ESP32 firmware for aquarium cooling fan control, monitoring, telemetry, and fault handling.
Loading...
Searching...
No Matches
control_engine.h
Go to the documentation of this file.
1#pragma once
2
12#include <Arduino.h>
13
42
50enum class ControlMode : uint8_t {
51 kFanOff,
52 kFanLow,
53 kFanHigh,
55};
56
72
90
95 23.0f,
96 15.0f,
97 35.0f,
98 40,
99 0.1f,
100 3.0f,
101 0.5f,
102 -3.0f,
103 -0.1f,
104 -0.5f,
105 0.2f,
106 5.0f,
107 1.0f,
108 15,
109 60,
110 45,
111 20,
112 100,
113 60,
114};
115
116namespace ControlEngine {
117
134bool isTargetTemperatureValid(float targetTemperatureC,
135 const ControlConfig& config = kDefaultControlConfig);
136
143bool isControlConfigValid(const ControlConfig& config);
144
152float sanitizeTargetTemperature(float targetTemperatureC,
153 const ControlConfig& config = kDefaultControlConfig);
154
167 const ControlConfig& config = kDefaultControlConfig);
168
175const char* modeLabel(ControlMode mode);
176
177} // namespace ControlEngine
ControlMode
Operating mode selected by the control engine.
Definition control_engine.h:50
@ kFanHigh
Water-driven hysteresis currently commands the high fixed PWM.
@ kFanOff
Water-driven hysteresis currently keeps the fan off.
@ kWaterSensorFallback
Water sensor is invalid and fallback PWM is used.
@ kFanLow
Water-driven hysteresis currently commands the low fixed PWM.
constexpr ControlConfig kDefaultControlConfig
Default control limits for the aquarium cooling firmware.
Definition control_engine.h:94
Pure cooling-control calculations.
Definition control_engine.cpp:10
bool isTargetTemperatureValid(float targetTemperatureC, const ControlConfig &config)
Checks whether a target temperature is finite and inside configured limits.
Definition control_engine.cpp:12
bool isControlConfigValid(const ControlConfig &config)
Checks whether a full staged-control configuration is internally valid.
Definition control_engine.cpp:18
float sanitizeTargetTemperature(float targetTemperatureC, const ControlConfig &config)
Replaces invalid target temperatures with the configured default.
Definition control_engine.cpp:39
const char * modeLabel(ControlMode mode)
Converts a control mode to a stable diagnostic label.
Definition control_engine.cpp:110
ControlSnapshot compute(const ControlInputs &inputs, const ControlConfig &config)
Computes the fan command and control mode for the current inputs.
Definition control_engine.cpp:47
Tunable limits and hysteresis settings for cooling control.
Definition control_engine.h:21
float minimumCoolingOnDeltaC
Lowest accepted upper hysteresis delta.
Definition control_engine.h:26
float minimumHighCoolingDeltaC
Lowest accepted delta where fan-high is allowed.
Definition control_engine.h:32
uint8_t minimumFanLowPwmPercent
Lowest accepted fixed PWM for fan-low.
Definition control_engine.h:35
float maximumTargetTemperatureC
Highest accepted configured target in degrees Celsius.
Definition control_engine.h:24
float highCoolingDeltaC
Water delta above target where fan-high starts.
Definition control_engine.h:34
uint8_t fanLowPwmPercent
Fixed PWM used during fan-low cooling.
Definition control_engine.h:37
float maximumCoolingOffDeltaC
Highest accepted lower hysteresis delta.
Definition control_engine.h:30
float minimumTargetTemperatureC
Lowest accepted configured target in degrees Celsius.
Definition control_engine.h:23
float minimumCoolingOffDeltaC
Lowest accepted lower hysteresis delta.
Definition control_engine.h:29
float maximumCoolingOnDeltaC
Highest accepted upper hysteresis delta.
Definition control_engine.h:27
uint8_t fanHighPwmPercent
Fixed PWM used during fan-high cooling.
Definition control_engine.h:40
uint8_t maximumFanHighPwmPercent
Highest accepted fixed PWM for fan-high.
Definition control_engine.h:39
uint8_t maximumFanLowPwmPercent
Highest accepted fixed PWM for fan-low.
Definition control_engine.h:36
float coolingOnDeltaC
Water delta above target where cooling starts.
Definition control_engine.h:28
uint8_t minimumFanHighPwmPercent
Lowest accepted fixed PWM for fan-high.
Definition control_engine.h:38
uint8_t fallbackPwmPercent
Fan PWM used when water temperature is unavailable.
Definition control_engine.h:25
float coolingOffDeltaC
Water delta below target where cooling stops.
Definition control_engine.h:31
float maximumHighCoolingDeltaC
Highest accepted delta where fan-high is allowed.
Definition control_engine.h:33
float defaultTargetTemperatureC
Fallback target water temperature in degrees Celsius.
Definition control_engine.h:22
Sensor and target inputs for one control calculation.
Definition control_engine.h:65
ControlMode previousMode
Previously active control mode for hysteresis hold behavior.
Definition control_engine.h:70
bool waterSensorValid
True when the water temperature sample is valid.
Definition control_engine.h:68
bool hasConfiguredTargetTemperature
True when a user-configured target should be considered.
Definition control_engine.h:66
float waterTemperatureC
Water temperature in degrees Celsius.
Definition control_engine.h:69
float requestedTargetTemperatureC
Requested target water temperature in degrees Celsius.
Definition control_engine.h:67
Complete result of one control calculation.
Definition control_engine.h:80
bool waterSensorValid
True when the water temperature value is usable.
Definition control_engine.h:83
ControlMode mode
Selected control mode.
Definition control_engine.h:88
uint8_t waterBasedPwmPercent
PWM requested by water-temperature hysteresis control.
Definition control_engine.h:86
float targetTemperatureC
Effective target water temperature in degrees Celsius.
Definition control_engine.h:81
bool targetDefaulted
True when the default target replaced an invalid request.
Definition control_engine.h:82
uint8_t finalPwmPercent
Final commanded fan PWM percentage.
Definition control_engine.h:87
float waterDeltaC
Water temperature minus target temperature.
Definition control_engine.h:85
float waterTemperatureC
Effective water temperature, or NAN when invalid.
Definition control_engine.h:84