Thursday, February 28, 2019

IoT HVAC Monitor

I built this project in July of 2018 and posted it on


IoT HVAC Monitor

Monitors the fan speed, on/off cycles, temperature, and humidity of my HVAC system and posts data to

Parts used:
I built this project for two reasons. (1) I've been looking for an excuse to play around with IoT, and with the ESP8266 in particular. (2) My electric bill has been steadily increasing and I wanted to see how often my HVAC system was cycling on and off (and at what temperature).
I figured I could monitor on/off cycles by attaching a small DC fan motor to the return air grill. When the HVAC unit turns on, the airflow will cause the fan to turn; acting as a generator. I can then read the voltage generated by the fan motor by connecting it to an analog input pin on the ESP8266.
I thought I might also be able to determine the fan speed by the variation of the voltage generated. And I might as well measure the temperature and humidity while I'm at it.
I had an old, non-working power supply from a Dell PC in my junk box, so I decided to salvage the fan for this project. I hot glued magnets on the four corners of the fan, so I could easily attach it to (and detach it from) the metal return air grill.
For my processor, I chose the SparkFun ESP8266 Thing because it includes a built-in LiPo charging circuit. I mounted the Thing to the fan using hot glue and a small breadboard. Then, I wired up the fan to the ADC analog pin and GND. I also added a 1K pull down resistor to make sure the analog pin read zero volts when the HVAC unit was off.
I glued a LiPo battery to the fan as well and plugged it into the Thing.

I connected the DHT11 to the SCL pin (which also serves as digital I/O pin 14) to read temperature and humidity.

Once I put everything together and uploaded my sketch, I snapped the device to my return air grill and kicked on the A/C.

After running it for a while, I logged into and grabbed some results!

As you can see, the on/off cycles look nice and symmetrical, but my voltage readings jump around a lot. I probably need to clean that up a bit with a rectifier or some such. The temperature and humidity readings give me a good idea of when it's cycling. All I have to do now is find out how often a "normal" A/C unit should cycle and I'll be good to go! 

The Arduino code is posted on Hackster along with the project