The TV-B-Gone is a device created by Adafruit that can shut off almost any TV using IR. Using their open-source documentation, I created my own TV-B-Gone for much cheaper and using a piece of perfboard. This page documents the steps to how I created my TV-B-Gone, but I will do a more detailed tutorial soon.
How it Works
TV remotes operate using IR or infrared radiation, light at a wavelength not visible to humans. By flashing pulses of IR light in timed intervals, a remote can communicate with the TV to send it codes like how morse code works. For instance, something like "101101110001" could be a turn off code. However, since TV manufacturers use different code instructions, we can't readily use one remote to control every TV.
Adafruit compiled a list of turn-off codes for 230 TV brands, which can be iterated through bruteforce until the TV turns off. The TV-B-Gone utilizes an ATtiny85 as the processor, which runs through all these codes and emits them through IR LED's, hoping to turn off the target TV.
- DIP Socket
- x4 950 nm IR LEDS
- x4 NPN transistors
- PNP transistor
- AVR ISP
- Battery Holder
- Tactile Switch
- Colored LED
I started by looking at the Adafruit schematic for the TV-B-Gone 3, and mapped the component layout to fit on a 12x18 piece of perfboard. I am using the same style AAA double battery holder they use, for which the perfboard fits perfect. All other components are the same, except I am using generic transistors and a different style resonator (but still 8mhz).
Next, I programmed the ATtiny85 microcontroller which Adafruit calls for in their design. Since the ATtiny chip comes in a DIP package instead of a dev board, we will need to use an ISP (in-system programmer) to upload code to it, which is wired by hand. You can buy an ISP (preferrable) or make one using an Arduino like I did. You can check out my guide herewhich gives a more detailed insight on programming ATtiny chips and choosing an ISP, as well as how to make an Arduino ISP.
Since Adafruit provides compiled hex code, I used a command line tool called AVRDUDE to flash the code.
I installed AVRDUDE (Linux) :
sudo apt install avrdude
Next, I wanted to set the ATtiny to use an external oscillator (an 8MHz resonator) for higher precision. I wired the resonator to the ATtiny with the Adafruit schematic, and hooked my Arduino ISP, and placed a capcitor between reset and ground to prevent resetting on upload. With wiring in place, I set the fuses in the ATtiny. Replace -P with your ISP port.
avrdude -c avrisp -p t85 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m -P /dev/ttyACM0 -b 19200
Next I downloaded the Adafruit GitHub repository, moved into the firmware directory, and flashed the tvbgone.hex file to the ATtiny.
git clone https://github.com/adafruit/TV-B-Gone-kit cd TV-B-Gone-kit/firmware avrdude -p t85 -P /dev/ttyACM0 -c avrisp -b 19200 -U flash:w:tvbgone.hex
Next I moved straight to assembling the perfboard, using the perfboard layout above.
- First, I soldered the IR LED's and their driver NPN transistors. In the configuration below. I tied all of the positive leads together, which I brought to the left side of the perfboard, creating a positive power railing. I also tied all of transistor bases and tied the collectors, which I used to draw the negative power railing.
- Next I placed the PNP transistor with the emitter inline with the positive power rail, and the collector to the NPN bases.
- I soldered down the DIP socket facing the left, and connected a 1k Ω resistor to pin 5 and to the base of the PNP transistor.
- I drew pin 8 of the DIP socket to the positive power line, and connected a 1k Ω resistor to pin 7. I then connected the indicator LED to the other lead of the resistor and to power.
- After this, I connected pin 6 (MISO) to ground with a 10K Ω resistor. I also connected the 8 MHz resonator to pins 2 & 3 of the DIP socket, and the middle pin to the negative power rail.
- I connected a tacticle switch between reset (pin 1) and ground of the DIP socket.
- Finally, I added the last two components, the two capcitors which do voltage regulation.
- I finished the board by adding the rest of the power connections, and attaching them to the double AAA battery pack power lines.
- Using some double-sided foam tape, I stuck the perfboard down to the battery pack.
I intended to closely replicate the Adafruit TV-B-Gone without having to buy their custom PCB at a pricey $20. The main difference in my replication is the perfboard, and substitution of a few components. While I chose to use the same battery pack they used, you can use any power supply between 3-5 V. While I'm using wide-angled LEDs, I can still get a pretty good range on my TV-B-Gone, but will try to get some of the narrow-angled ones in the future. I'm working on a micro iteration of the TV-B-Gone which I'm hoping to release soon.