diff --git a/content/en/posts/smart-pwm-fan-controller/assembled.png b/content/en/posts/smart-pwm-fan-controller/assembled.png new file mode 100644 index 0000000..9a3bb4e Binary files /dev/null and b/content/en/posts/smart-pwm-fan-controller/assembled.png differ diff --git a/content/en/posts/smart-pwm-fan-controller/board-design.png b/content/en/posts/smart-pwm-fan-controller/board-design.png new file mode 100644 index 0000000..3c93188 Binary files /dev/null and b/content/en/posts/smart-pwm-fan-controller/board-design.png differ diff --git a/content/en/posts/smart-pwm-fan-controller/board-layout.png b/content/en/posts/smart-pwm-fan-controller/board-layout.png new file mode 100644 index 0000000..f6b6aad Binary files /dev/null and b/content/en/posts/smart-pwm-fan-controller/board-layout.png differ diff --git a/content/en/posts/smart-pwm-fan-controller/hass.png b/content/en/posts/smart-pwm-fan-controller/hass.png new file mode 100644 index 0000000..3f5c962 Binary files /dev/null and b/content/en/posts/smart-pwm-fan-controller/hass.png differ diff --git a/content/en/posts/smart-pwm-fan-controller/index.md b/content/en/posts/smart-pwm-fan-controller/index.md new file mode 100644 index 0000000..d12292d --- /dev/null +++ b/content/en/posts/smart-pwm-fan-controller/index.md @@ -0,0 +1,62 @@ +--- +title: "An ESPHome-powered Smart PWM Fan Controller" +description: "Control your fan walls with style from HomeAssistant" +date: 2025-05-16 +tags: + - DIY + - Home Automation +--- + +## The Motivations + +I have a few fan arrays/walls throughout my house, namely two in my garage, and one I plan to build in my room over my bed to replace a tower fan. + +But PC fans can be noisy, and control is ideal. So I decided to build myself a relatively simple ESPHome-based fan controller! + +## The Design + +I of course wanted to base the design off the ESP32, which is my go-to microcontroller for all ESPHome-related devices these days. One crucial feature of the ESP32 is that it contains 8 pulse counter units, which allow the chip to count pulses - like a fan tachometer - very quickly and without using the CPU. I selected my venerable slim HW-395 model, which I also use for [my](/posts/the-supersensor) (Supersensors](/posts/the-supersensor-2.0), as its compact size but full pin count makes designing around it very easy. + +The ESP32 alone can output PWM as well, so I didn't need any sort of fancy controller chip - I just hooked the PWM lines up to each fan and let the ESPHome software do the rest. Lastly a relay controls power to the fans, for simple on/off control in addition to the PWM level control, giving the full range of control needed for a fan array. + +I also needed a way to step down the 12VDC input to the 5V that both the ESP32 and relay needed, so for that I selected a basic adjustable DC-DC converter. This did require initial tuning during each board's assembly, but once set it should never need further adjustment. I used an SMD-like method with a hot air gun to ensure a flat profile with good contact for this board, while everything else is through-hole soldered. + +I designed the board in EasyEDA and ordered from JLCPCB for a very reasonable price (though shipping costs are not what they used to be). The overall design is quite simple, with power routing capable of at least 3A of current at a minimum. + +![Board Design](board-design.png) + +![Board Layout](board-layout.png) + +And assembled it looks very sleek in the black PCB finish. + +![Assembled](completed.png) + +Lastly, the HomeAssistant view shows everthing we might need, with power and speed controls as well as the RPM tachometer output of each fan (useful to see levels or if a fan fails). + +![HomeAssistant Device](hass.png) + +ESPHome code and schematics for the PCB can be found on [the GitHub project page](https://github.com/joshuaboniface/smart-pwm-fan-controller). + +## Parts List (prices as of May 2025) + +| Qty | Component | Cost (CAD, ex. shipping) | Links | +|-----------|--------------------------|--------------------------|-------| +| 1 | ESP32 HW-395 | $6.67 | [AliExpress](https://www.aliexpress.com/item/1005006019875837.html)* | +| 8 | 4-pin fan header | $0.21 ($1.02/5) | [AliExpress](https://www.aliexpress.com/item/1005007499957251.html) | +| 1 | MP1584EN DC-DC converter | $1.34 ($13.99/10) | [Amazon](https://www.amazon.ca/dp/B07THSDWHX) | +| 1 | SRD-05VDC-SL-C relay | $1.52 ($18.16/12) | [Amazon](https://www.amazon.ca/dp/B098JHY5TP) | +| 1 | DC barrel jack | $0.98 ($9.79/10) | [Amazon](https://www.amazon.ca/dp/B011HFLKI2) | +| 2 | 1kΩ resistor (1%) | $0.06 ($10.99/200) | [Amazon](https://www.amazon.ca/dp/B096PK4XN5) | +| 1 | 1N4004 diode | $0.07 ($20.99/300) | [Amazon (kit)](https://www.amazon.ca/dp/B07YK3XMQQ) | +| 1 | BC377 transistor | $0.06 ($12.13/200) | [Amazon (kit)](https://www.amazon.ca/dp/B07X62PBMH) | +| 1 | 3mm LED | $0.05 ($15.99/350) | [Amazon (kit)](https://www.amazon.ca/dp/B073GRZNRL) | +| 1 | Custom PCB (JLC) | $0.50 ($5.00/10) | [GitHub](https://github.com/joshuaboniface/esphome-pwm-fan-controller) | +| **TOTAL** | | $12.99 | | + +* Items marked with an asterisk (`*`) require selection of the correct specific component on the page. + +* Several pieces came as part of larger variety kits, so individual prices may not be completely accurate. + +## Final Thoughts + +This was a fun little project, and I'm quite happy with how it turned out. And it will definitely help keep me cool this summer. Happy hacking!