I just moved into a new neighborhood. On my morning walk I discovered the best "neighborhood score" of my whole life: a brand-new electric fireplace, still in the box, with a "free" sign on it, sitting at my neighbor's curb. I snagged it immediately. I've been eyeing these since I saw one at the State Fair a while back. They produce a really cool flame-like effect, and also include a heater module.
Apparently my neighbors were getting rid of it because it "beeps from time to time". Well, being the DIY hacker that I am, I decided to crack it open and see if I could disable the beep, and also upgrade the LED strips inside while I was in there.
Teardown / How it Works
This fireplace has two 12v analog RGB strips -- one at the bottom and one at the top -- plus a custom PCB with super-bright LEDs that control the flames. It comes with an IR remote control and a capacitive touch panel, both of which trigger a VERY LOUD annoying beep whenever a button is pressed. The LED light strips are both programmed to cycle through 14 different color modes, but the lights just change from one solid color to the next with no brightness controls or animations available.
I was really interested to learn how the flame effect was created. Turns out it's a very clever spin on the popular "Pepper's Ghost" illusion. This is the same illusion used at the Haunted Mansion in Disneyland to make ghosts seem to appear in mirrors all around.
There is a long rod inside with mylar diamond shapes threaded onto it. A simple motor at one end makes the rod spin, which creates a very lifelike flame motion effect when reflected onto the glass at the front of the fireplace. Very cool!
Upgrade Goals
- Disable the beep. It's not quite loud enough to make me kick this thing to the curb, but, almost.
- Upgrade the LED strip along the bottom to a smart NeoPixel strip for animated lights.
The top LED strip shines an ambient light on the floor, which I like as a steady light, and the flame lights are so custom and carefully managed that I don't want to mess with them. The bottom lights are within view all the time, and diffused under some lovely fake crystals that shipped with the fireplace, so this seems like the best place for an upgrade.
Goal 1: Disable the Beep
First I disassembled the fireplace frame by removing the back. There are about 1000 screws back there but I got them all out eventually.
I was able to access the motherboard and spotted a piezo speaker soldered onto it right in the middle. There's the culprit. I turned the board over and figured out which solder points connected to the two legs on the little speaker, and carefully unsoldered them. Hooray! No more beeping.
Goal 2: Upgrade the LED Strip
There are a few different pieces to this part of the project:
- Get a microcontroller hooked up to a NeoPixel strip and load it with software & animations
- Add IR control to the new strip, to make the NeoPixel user experience consistent with the fireplace user experience
- Power the NeoPixel strip using the fireplace power supply
1. Microcontroller and NeoPixels
Assembling the NeoPixel Strip
Hey, I have already written a whole tutorial about this part. Check out the NeoPixel Remote Control with WLED tutorial for how I built this, using the parts below.
It was also handy to have this 44-key IR remote available for testing, since it works natively with WLED software.
Installing the NeoPixel Strip
Once I had the strip assembled and working with WLED software (my favorite way to control LEDs these days), it was time to get them in place. After some trial and error I found that the easiest way to do this was to take the front trim piece off the fireplace and remove the white plastic diffusion strip. From there, I was able to simply thread the pixel strand in on top of the existing 12V RGB strip. There is enough space to weave it in and not have to mess around with taking the old strip out.
To disable the old strip, I looked to see where the wires from it led. The motherboard has 5 JST plugs on it, and one of them is dedicated to running just this one strip. So all I had to do was unplug it, and it's neatly out of my way.
I was able to thread the connector underneath on the inside so I can hide the microcontroller and IR sensor in the back of the fireplace.
Now I had a pretty NeoPixel strip lighting up the front of my fireplace! But it was using a separate power supply and a separate IR remote, which was not quite slick enough for me.
Custom IR Remote for WLED
WLED has native support for a number of different IR remote controls, but of course the one that shipped with the fireplace is not one of them. I'm unable to remap the fireplace IR controls, so it makes the most sense to map the NeoPixel strip to the fireplace remote, so I can still use one remote to control the whole piece.
This remote already a dedicated button for cycling through modes on the bottom LED strip. Perfect! I can use this one to cycle through modes on my NeoPixel strip. I also want to use the on/off button to turn the strip on and off along with the rest of the fireplace.
WLED has a nifty feature that makes it easy to figure out custom remote codes. I plugged my QT Py into my computer and launched Arduino. I selected the QT Py as my Port (Tools > Port >) and opened the serial monitor. Then I just pointed the remote at my sensor and pressed some buttons. The serial monitor will auto-magically display the hex code it reads from each button press.
Note: I had to mess with the serial monitor baud rate to get this to work. It worked at 115200. The other baud rates gave me question marks or gibberish.
Now that I had the codes, I could create a custom .json file telling WLED what to do when it heard one of those codes. Here are some of the resources I used:
- Knowledge Base Article about IR Support for WLED
- Sample .json file for a 44-key remote
- json api reference
And here is the final .json file. I saved it as ir.json and uploaded it on the LED Settings page of my WLED interface - select "json remote" from the IR remotes dropdown and the upload box will appear.
{ "0x1FE58A7": { "label": "On/Off", "cmd": "T=2", }, } { "0x1FEE01F": { "label": "Logs", "cmnt": "Next Preset", "cmd": "PL=~" }, }
The first command T=2 toggles the LEDs t on or off when I press the on/off button. The second command, "PL=~" will cycle through the playlist modes when I press the "logs" button.
Debounce Issues
IR control is pretty iffy. It's got to be line-of-sight and the sensor doesn't always pick up the code. Or, if you press the button for a little longer than necessary, the code will repeat. This makes an on/off toggle a little less reliable than I'd like.
Right now I have two separate IR sensors, both listening for the same code to turn the lights on or off. They sometimes get out of sync - my NeoPixel strip turns ON, while the fireplace is turning OFF. I can fix this by pressing the off button once on the fireplace front, which will get them back in sync. It works, but it's a bit fiddly. I'm ok with this though.. it's good enough for me.
Goal 3: Powering the NeoPixels -- FAIL
I wanted to see if I could wire the 5v NeoPixel strip in to the fireplace's power supply, so that I could run everything from one power plug. The short answer? I can't.
My plan was to use a step-down buck converter to take the 12v power from the fireplace and step it down to 5v, and wire the QT Py and NeoPixel strip to the 5v power. Seems straightforward enough.. but I underestimated how complicated the power routing on this fireplace is.
As soon as I started messing with the power circuits, the motherboard stopped responding altogether and the fireplace wouldn't turn on. I was still getting power to the lights, but with the controller out of order, the onboard lights, flame lights, and heater were all out of commission.
After a month of trying everything I could think of (and tearing out a fair bit of hair) I wrote to the manufacturer and asked them to ship me a new motherboard. I managed to get it plugged in and connected, and got the fireplace back to working, but with two power supplies.
I'm still very happy with the results. Adding the addressable strip with WLED has really improved the way this fireplace looks and feels. I made a light mode that flickers like glowing embers, and another with a slow-shifting rainbow. It's so much fun to find light modes that work with the different flame colors, and I'm proud to be able to show this off in my home.