View on GitHub

SturmFront

DIY fan-controller for indoor sports which adjusts fan speed according to your current heart rate

SturmFront

SturmFront is a DIY fan-controller for indoor sports, which adjusts fan speed according to your current heart rate.

I use while riding Zwift. The advantages:

Alternatives

I developed SturmFront as a low-cost, DIY-version of the well-known Wahoo® KICKR Headwind. In contrast to the KICKR Headwind, SturmFront does not have an integrated fan, but can be thought of like a smart plug, but instead of WiFi it uses ANT+ and instead of simply on/off-control SturmFront offers adjustable power output. This allows SturmFront to turn any fan into a smart fan. Keith Wakeham developed also a DIY fan controller named Maelstom.

Function

A short, probably not complete description of how SturmFront works.

Hardware

As basis for SturmFront I used a second-hand WiFi-enabled smart socket from the local classifieds. It cost me only 2,50€ and I got a living room suitable enclosure as well as the proper power socket connectors:

Front view of wifi smart socket with CEE 7/4 plug and CEE 7/16 socket. Side view of wifi smark socket with CEE 7/4 plug and CEE 7/16 socket.

I also re-used the components from the power supply. I couldn’t re-use the SoC and/or WiFi chip, beacuse I needed ANT+ and Bluetooth connectivity. The electro-mechanical relay was also not of any use to me, because I needed phase control to be able to adjust the fan’s speed.

The whole circuit consists of a just a few building blocks:

There is a PDF of the schematic under EDA/sturmfront.pdf.

Both power supply as well as zero cross detection are isolated, which makes this design relatively expensive, but also easier to work with, develop and debug. The Isolated DC/DC-converter as well as the 3.3V LDO are re-used, although I added a PI-filter to the LDO output and the NRF-module is not the best, layout-wise. I also reserved space for an LM75 temperature sensor, but I used to on-chip sensor of the NRF. I figured since the SoC spends most of the time in powerdown anyway the difference from ambient to junction should not be that much (~2K).

Before ordering a manufactured PCB, I isolation-milled an engineering prototype:

Since the PCB is oddly-shaped with large radii all around plus a button, LED and screw holes all of whose locations have to match with the case, having a prototype allowed me to check all dimensions before ordering as well as to check if all components would still fit in the case height-wise. I was also able to check for errors and improvements in the PCB design. Lastly, I was able to polish the firmware before the final boards arrived.

Isolation milled engineering prototype PCB in smart wifi plug case with oscilloscope probes and debug adapter attached.

Note that the outlet in the picture is not connected to mains but to an isolation transformer for testing.

Making a prototype turned out to be a good decision, since I found multiple errors in the PCB which I had fixed for the final, professionally manufactured PCB. I still managed to sneak a few issues in the final PCB. For example, the silkscreen of the pinout labels of the ISP-connector are hidden underneath the SSR. 😅

Software

During development and testing of SturmFront it soon became obvious to me that speed control linearly proportinal to heart rate is insufficient.

SturmFront uses bilinear mapping to interpolate between 5˚K and 5 bpm values.