diff --git a/usermods/PWM_fan/readme.md b/usermods/PWM_fan/readme.md new file mode 100644 index 000000000..a40098c15 --- /dev/null +++ b/usermods/PWM_fan/readme.md @@ -0,0 +1,36 @@ +# PWM fan + +v2 Usermod to to control PWM fan with RPM feedback and temperature control + +This usermod requires Dallas Temperature usermod to obtain temperature information. If this is not available the fan will always run at 100% speed. +If the fan does not have _tacho_ (RPM) output you can set the _tacho-pin_ to -1 to not use that feature. + +You can also set the thershold temperature at which fan runs at lowest speed. If the actual temperature measured will be 3°C greater than threshold temperature the fan will run at 100%. + +If the _tacho_ is supported the current speed (in RPM) will be repored in WLED Info page. + +## Installation + +Add the compile-time option `-D USERMOD_PWM_FAN` to your `platformio.ini` (or `platformio_override.ini`) or use `#define USERMOD_PWM_FAN` in `myconfig.h`. +You will also need `-D USERMOD_DALLASTEMPERATURE`. + +### Define Your Options + +All of the parameters are configured during run-time using Usermods settings page. +This includes: + +* PWM output pin +* tacho input pin +* sampling frequency in seconds +* threshold temperature in degees C + +_NOTE:_ You may also need to tweak Dallas Temperature usermod sampling frequency to match PWM fan sampling frequency. + +### PlatformIO requirements + +No special requirements. + +## Change Log + +2021-10 +* First public release diff --git a/usermods/PWM_fan/usermod_PWM_fan.h b/usermods/PWM_fan/usermod_PWM_fan.h index 43a89fc2a..624534b12 100644 --- a/usermods/PWM_fan/usermod_PWM_fan.h +++ b/usermods/PWM_fan/usermod_PWM_fan.h @@ -6,7 +6,7 @@ #include "wled.h" -// PWM code curtesy of @KlausMu +// PWM & tacho code curtesy of @KlausMu // https://github.com/KlausMu/esp32-fan-controller/tree/main/src // adapted for WLED usermod by @blazoncek @@ -44,7 +44,7 @@ class PWMFanUsermod : public Usermod { // configurable parameters int8_t tachoPin = -1; int8_t pwmPin = -1; - uint8_t tachoUpdateSec = 5; + uint8_t tachoUpdateSec = 30; float targetTemperature = 25.0; // strings to reduce flash memory usage (used more than twice) @@ -205,6 +205,7 @@ class PWMFanUsermod : public Usermod { * Below it is shown how this could be used for e.g. a light sensor */ void addToJsonInfo(JsonObject& root) { + if (tachoPin < 0) return; JsonObject user = root["u"]; if (user.isNull()) user = root.createNestedObject("u"); JsonArray data = user.createNestedArray(FPSTR(_name));