Automated Fireplace Blower

Simple project to save energy and learn to work with Particle Mesh devices.

Similar projects worth following
We have a wood-burning fireplace in the middle of our house that gets VERY well-used during the winter. Unfortunately, it doesn’t have a built-in blower so the majority of the heat simply goes up the chimney. Luckily, since it’s in the center of the house, the back-side gets quite warm and is able to radiate heat into the house. When we really get the fire going, I frequently position a small fan to blow some air along it so that we’re able to get more heat from the forced convection that it creates. I had considered putting together a simple project to automate this for a while but never moved forward since due to the orientation of everything, I would have needed some visible wires to connect a temp sensor to the microcontroller controlling the fan. Ultimately, I was able to make it a reality and play with a new toy in the process!

I’m a big fan of Particle Photons and have used them in nearly all of my projects, even ones that don’t actually require internet connectivity (both because I always have a spare sitting around and because it makes remotely flashing new code a breeze). They recently released a series of Mesh devices that create and rely on their own mesh network instead of Wi-Fi and also use significantly less power, making batteries a real option. I had been looking for the right project to try them out and this seemed perfect.

At a high-level, this project has two parts: the controller running the actual fan and then a remote temp sensor running on batteries that reports to the fan on a regular basis and sleeps the rest of the time. When I started on this project, I had just ordered/received the Particle Argon & Xenon and started by playing around with the Xenon to get a feel for how it worked, how long it could run on a battery, etc. As a result, I essentially created the temp sensor before ever specifically trying to.

For the fan (a Vornado 660 I already had), I didn’t know exactly how I would control it. Before opening it up, all I knew was that it had 5 push-buttons: an On/Off button that turned the fan to high when turned on, and then 4 speed buttons that controlled it once it was turned on. Unfortunately, upon plugging the fan in it starts in the ‘off’ state regardless of the previous state, so an off-the-shelf plug controller wasn’t an option.

After tearing down the fan, I was able to identify that a Sonix SN8P2501B was controlling it. I found a datasheet quite easily and was also able to trace out which momentary buttons were connected to which pins. In addition, with the datasheet in-hand I was able to identify both 5V and GND on the chip itself. Through some quick verification, I was able to determine that the buttons shorted their connected pins to ground when pushed.

Originally, I soldered leads to 5V and GND on the chip, as well as the pin-side of each of the buttons. I physically shorted each of the buttons to ground to make sure they functioned as I believed they would (which they did). Then, I connected everything to a Photon on a breadboard and plugged in the fan. This is where I ran into problems. Even though I read 5V prior to connecting the Photon, as soon as I plugged it in, it would briefly blink and then the status LED would just BARELY light up. Reading the voltage in this state it was well below 5V (a little over 2V if I remember correctly). I played around with it for a while but unfortunately was never able to get it to work. My assumption is that the Photon requires more power than the control board on the fan is designed for.

Regardless, I abandoned my original hope of powering the Photon directly off of the fan (I know there are other ways I probably could have done it but I opted for simply powering it via a USB cable). Once powered this way, I was able to find that ~50ms was the amount of time that any of the buttons needed to be shorted to ground in order for the fan controller to register a button press. Additionally, I added some code to continuously monitor each of the buttons to see if a user pushes any of them, thus altering the current state of the fan.

With the fan controller functionality taken care of, I needed to write some code for the temperature sensor to publish its data on a regular basis and sleep the rest of the time so as to prolong the battery life. This turned out to be a little trickier than anticipated as there were several tweaks I had to make to the code in order for it to work properly (while Particle does a good job in general of documenting functions on their devices, with the Mesh devices still being fairly new and the firmware changing rather rapidly it took more digging than normal). The biggest hurdle that wasn’t immediately apparent was that using the Mesh-specific publish function was necessary in conjunction with the sleep function (using the normal publish function...

Read more »


Datasheet for chip on my particular fan

Adobe Portable Document Format - 1.27 MB - 09/05/2019 at 18:23


  • 1 × Vornado 660 Fan I already had
  • 1 × Particle Photon For the fan controller
  • 1 × 3M ‘Command’ Strips For attaching the temp sensor to the back of the fireplace
  • 1 × DS18B20 Digital Temperature Sensor For the fan controller
  • 1 × 4.7k Ohm Resistor For the fan controller

View all 11 components

  • Winter has arrived!

    Ben Brooks11/13/2019 at 17:29 0 comments

    Winter came a little early in the mid-western US. On the plus side, that's meant we've been building fires and I've been able to further test and refine this project. I've been updating the temperature & fan speed set-points as well as playing with the sleep cycle times to see how it impacts battery life (so far I'm in the multiple weeks realm of battery life, would love to get to months). No finalized code yet, but I will update when I'm done tweaking it.

    In regards to the lock-up issues I've experienced with the temperature sensor, I'm still working on this. It seems likely that for the foreseeable future I'll have to use the cloud connection instead of solely the mesh connection.

  • Temperature Sensor Code Issues

    Ben Brooks09/19/2019 at 18:11 0 comments

    Shortly after publishing this project, I started getting random lock-ups with my temperature sensor controller/code. Been working on it since and ultimately got it working longer-term by getting rid of SYSTEM_THREAD(ENABLED) and the associated internet/cloud/mesh connection code. However, I'd still really like to have it work by only connecting to the mesh network (as opposed to requiring an internet/cloud connection) and will keep working on getting there. I'll update here and on the github once I hopefully get it working the way I'd like.

View all 2 project logs

  • 1
    Order and Print Components

    The first thing you’ll want to do is order and print all of the necessary components. The printed components are all available on Github here. After the initial design, I ultimately had to add a hole for the temp sensor on the fan enclosure and I didn’t modify the design to include this. I also found that the slots I made for mounting the fan enclosure to the fan with zip-ties weren’t big enough for some of my zip-ties, so you might want to check this measurement for yours

  • 2
    Solder up the boards

    For the fan controller, I used a small PCB proto board and for the temp sensor I simply soldered the sensor directly to the Xenon. It’s all quite simple, but follow the schematic below for the fan controller and you shouldn’t have any issues

  • 3
    Assemble both devices

    With the finished boards and the printed enclosures, assemble everything. I originally had intended to wrap the temp sensor on the back-side of the temp sensor enclosure. Unfortunately, I broke the leads doing this and ended up wedging a replacement one in the hole and securing it with hot glue. I then used a drill bit and by hand made small holes in both of the 3M Command strips I used to attach it to the back of the fireplace.

View all 6 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates