VentMan Part II: Arduino-Automated Furnace Detection for Booster Fans
by onetrueandrew in Circuits > Arduino
519 Views, 2 Favorites, 0 Comments
VentMan Part II: Arduino-Automated Furnace Detection for Booster Fans
![vibration.jpg](/proxy/?url=https://content.instructables.com/FWJ/LTJ9/KEY92MGA/FWJLTJ9KEY92MGA.jpg&filename=vibration.jpg)
![fan2.jpg](/proxy/?url=https://content.instructables.com/FO6/WQOR/KEY92K67/FO6WQORKEY92K67.jpg&filename=fan2.jpg)
Main Points:
- This was a temporary hack put in place to detect when my AC/furnace blower motor was running, so that my two booster fans could turn on.
- I need two booster fans in my ductwork to push more warm/cool air two two isolated bedrooms. But I don't want to run the fans all the time, just when the furnace blower motor is running.
Supplies
- WeMos D1 Mini (or cheap knockoff / anything ESP8266)
- Jumper wires
- 10K resisitor
- Tilt sesnor
Fail
Some efforts that failed before this solution:
- Use ecobee API to detect thermostat status. API is on a 20 minute to two hour delay, not good enough
- Arduino flex sensor in the duct was not sensitive enough
- Current sensor on the 24V fan line from thermostat, I didn't have a DC current sensor and was impatient. Plus, the idea scares me.
- Homeassistant/Hass.io same limitations as ecobee API
- Air flow sensor not senstive enough for return air duct flow.
Install Booster Fans
![fan1.jpg](/proxy/?url=https://content.instructables.com/FIW/ZY31/KEY92K25/FIWZY31KEY92K25.jpg&filename=fan1.jpg)
![plug.jpg](/proxy/?url=https://content.instructables.com/FIF/6SPT/KEY92K6D/FIF6SPTKEY92K6D.jpg&filename=plug.jpg)
This write-up is not about the booster fans themselves, but it is a required step. I installed two in-line booster fans, sealed any air leaks with vent tape, and plugged them both into a smart plug I had flashed Tasmota onto, so I could turn on/off both fans with a single GET request.
The used rubber washers where the fans are mounted onto the ceiling joists to reduce vibration.
Wire Up
![vent_vibration_sensor.png](/proxy/?url=https://content.instructables.com/F2L/Q1YV/KEY92KEG/F2LQ1YVKEY92KEG.png&filename=vent_vibration_sensor.png)
The D1 mini, tilt sensor, and resistor fit together so the analog pin reads the tilt setting.
Code
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
//CONSTANTLY READS FROM D1 MINI VIBRATION SENSOR
//IF TWO DISTINCT VIBRATIONS DETECTED IN A 60-SECOND WINDOW, A WEB REQUEST IS MADE
//IF ZERO OR ONE VIBRATION DETECTED, NOTHING HAPPENS, LIKELY FALSE POSITIVE
const int sigPin = A0;
uint32_t period = 1 * 60000; // 60 second window
int flex = 0; //starting value
const char* ssid = "ssid"; //ADD WIFI SSID
const char* password = "password"; //ADD WIFI PASSWORD
void setup () {
WiFi.begin(ssid, password);
Serial.begin(9600);
pinMode(sigPin, INPUT);
}
void loop() {
flex = 0;
Serial.println("restarting count");
for ( uint32_t tStart = millis(); (millis() - tStart) < period; ) {
yield();
int sigStatus = analogRead(sigPin);
if (sigStatus != 1024) //it's working
{
//Serial.println("up");
flex += 1;
Serial.println(flex);
if (flex == 2)
{
//Serial.println("Shook twice, this is real");
HTTPClient http;
//http.begin("http://10.0.0.50:5000/fan_on");
http.begin("http://IP:PORT/path"); //ADD CORRECT IP, PORT, VALUES
int httpCode = http.GET();
String payload = http.getString();
Serial.println(payload);
http.end();
delay(6000); //rest a bit
}
delay(1000);
}
else {
Serial.println("undisturbed");
}
}
}
Install
![zoom_out.jpg](/proxy/?url=https://content.instructables.com/FK3/BPA2/KEY92KQO/FK3BPA2KEY92KQO.jpg&filename=zoom_out.jpg)
![zoom_in.jpg](/proxy/?url=https://content.instructables.com/FWE/GXMN/KEY92KQL/FWEGXMNKEY92KQL.jpg&filename=zoom_in.jpg)
![breadboard.jpg](/proxy/?url=https://content.instructables.com/FKH/W7X6/KEY92JXY/FKHW7X6KEY92JXY.jpg&filename=breadboard.jpg)
![vibration.jpg](/proxy/?url=https://content.instructables.com/F19/U6SG/KEY92KII/F19U6SGKEY92KII.jpg&filename=vibration.jpg)
This is the tricky part, it required a lot of trial-and-error. Ignore the rust stains in the vent, they're from an old humidifier that was installed in the duct.
I decided to place the vibration sensor just inside the cold-air return duct close to the furnace intake, so that all the air entering the blower motor would pass by it, hopefully enabling it to shake a little. The hardest part was getting the sensor to hang just right so that it stood up and still jiggled in the air flow. The photos show the breadboard before I made the solution more permanent. The D1 mini itself stayed outside the duct, to keep the wifi signal strong.
I ended up dangling the tilt sensor against an old wire that used to be used to control the humidifier, but was left in the duct, that way I got the angle just right.
Test
The code works by keeping a rolling 60-second window, and counting the number of times a vibration is detected. You can change the variables, but mine is set to make a GET request to my flask server if at least 2 vibrations are detected in a 60-second window.
The flask server then uses other data to determine if it should turn on my booster fans, like time of day, and house occupancy. See for more info: