I previously made a slideshow on my DIY TV-B-Gone, and many people requested I make an Instructable. So, the first in a series of DIY TV-B-Gone clones, is the TV-B-Gone Micro!

Technically, because TV-B-Gone is a brand name, this is a "TV-B-Gone clone."

The TV-B-Gone is a neat little device that can turn almost any TV on or off. It uses a microcontroller hooked up to IR LEDs to output a library of on/off codes. Adafruit sells a kit, and has the code as well as the schematic on their website.

Here's a micro clone of the TV-B-Gone that runs on a coin cell battery, is slightly bigger than a quarter, and costs about $3.50 (compared to $20) to make!

Step 1: Materials and Tools

Here is a list of what you will need.

Materials: All of these prices are if you buy only one of each part. If you buy in bulk, like I did, it will actually have a cheaper unit price. For me the total was less than $3.50, for you maybe more if you only buy one of each part.

You will also need some 2032 batteries to power it. DON'T FORGET!

  • AVR programmer (I used a USBtinyISP, a good, cheap programmer made from a kit)
  • Computer with internet access; I predict you are using one right now :-)
  • Soldering iron with solder
  • Helping hands tools, very helpful
Now let's get started!

Step 2: To Use an Oscillator or Not...

The first thing you need to do is decide whether to use to use an oscillator. Here is the info to let you make your choice:

Advantages of and Oscillator:
  • It is much more accurate and doesn't vary near as much as the internal oscillator. This can make the difference between it working and not.
  • It adds about 50 cents extra cost.
  • It takes up more space.
  • It adds slightly more complexity.
I highly recommend you use one, but it is not required. I'll include instructions for both ways.

Step 3: Prep for Programming

If you have a programming board, you can skip this step. If you are using a USBtinyISP or similar, use a breadboard to wire the chip to the proper connections of the programmer. More instructions on how to do this can be found here. The pinout for the chip can be found on the datasheet here.

Step 4: Program the Chip Part 1: Fuses

"Fuses" are a very small part of the microcontroller's memory that tell it how to operate, such as which oscillator to use, enabling the reset pin, and so on. Will will need to change the fuses to run off of an external oscillator. I used http://www.engbedded.com/fusecalc, which is a free AVR fuse calculator. I included images of this, but you don't need to use the calculator because I listed the commands here.

I use AVRdude to interface between the programmer and my computer. A tutorial on how to use AVRdude can be found here.

If you are using an oscillator, use

Avrdude -c usbtiny -p attiny85 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

If you are not, use

Avrdude -c usbtiny -p attiny85 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

Proceed to the next step for programming the real code!

Step 5: Program the Chip Part 2: Code

The first thing you will want to do is connect the oscillator on the breadboard. Because it is now set to run with one, it has to have one to be programmed with one.

Download the firmware v1.1 from Ladyada.net at http://ladyada.net/media/tvbgone/tvbgone11.zip. This is for their kit, but I used it to program this and it worked. Unzip the folder and find the tvbgone.hex file. Copy this and put in C:\users\username where AVRdude can find it. Now, in AVRdude, type

avrdude -c usbtiny -p attiny85 -U flash:w:tvbgone.hex

and wait for it to put the code on the chip. Now let's get building!

Step 6: Begin Construction!

Bend pins 1 and 8 around so that they nearly touch, and solder them together. These are Vcc and RESET, which will both be connected to the button.

Step 7: Add the Button

Cut off two of the four leads of the button, making sure you get two that are pointing to the same side. Flip the chip upside-down and solder one lead of the button to pin 8 as shown in the picture.

When the button is pressed, it will give the chip power. When the button is un-pressed, the chip gets no power and will turn off.

Step 8: Add the Resistor

Bend pins 5 and 6 together, and solder them. Cut one lead of the 150 ohm resistor very short, and solder that end to pins 5 and 6, with the body of the resistor facing down the chip as shown.

The resistor limits the amount of current that the microcontroller can give to the transistor. Pins 5 and 6 are the outputs, and bending them together doubles the amount of current they can source to 20 ma. This is probably not needed, but is used as a precaution.

Step 9: Add the Transistor

Bend the outer two legs of the transistor outward, and cut the center (the base) short, as shown. Also cut the lead from the resistor short, too. Orient the transistor as shown in the picture (flat side up) and solder the base to the lead from the resistor.

The transistor allows the microcontroller, which can source only 10 ma per pin, to drive these LEDs, which can draw up to 100 ma. When a current goes through the base, it allows power to flow through the LEDs (at the collector) to ground (the emitter) in this circuit.

Step 10: Start the Ground Bus

Bend the emitter (left lead) of the transistor at a right angle as show, and solder it to pin 4, the gnd of the microcontroller.This will be connected to ground of the battery later.

Step 11: Add the Resonator

If you decided not to use a resonator when you were programming, you can skip this step and leave pins 2 and 3 unconnected.

Bend the outer two pins of the resonator inward, and the inner pin upwards. Solder the the outer two to pins 2 and 3 of the microcontroller. Bend the leftover emitter lead from the transistor over, and solder it to the middle pin of the resonator to connect it to ground.

Step 12: Solder the LEDs Together

Set the two LEDs next to each other, with the blue one on the left and the flat sides facing up. Bend the top lead of the the clear one to the left, and the bottom lead of the blue one to the right. Solder them in parallel, and cut the excess as shown.

From now on, most of the pictures will be wrong. I did it a different way, then experimented and found that this one was better. Pretend the LEDs in the rest of the pictures are like this, sorry for the inconvenience!

Step 13: Add the LEDs

Solder the negative lead of your LEDs to the collector of the transistor, and leave the positive pointing down the side as shown.

Step 14: Add the Capacitor

Bend the positive of the capacitor out and along the side of the capacitor, and cut it short. Bend the negative out for about 2mm and then bend it straight up. Fit the capacitor in and solder the positive of the capacitor to the positive of the LEDs as shown.

The capacitor filters the power from the battery to provide a smooth voltage for the microcontroller even with the LEDs flashing really fast.

Step 15: Form More Connections

Bend the negative of the capacitor over and solder it to pin 4 of the microcontroller. This connects it to the ground of the circuit.

Step 16: Form More Connections Part 2

Bend the positive wire from the LEDs around the capacitor as shown. Take an extra length of lead from something you cut off earlier, and solder it into place so that it connects the positive of the LEDs to the unused lead of the button. This connects the LEDs to the positive of the battery.

Step 17: Add the Battery Holder

Fit the battery holder under the circuit as shown; it should line up perfectly. Solder the positive and the negative as shown in the picture.

The positive goes to the far end of the button, giving power to the LEDs and, when pressed, the microcontroller.

The negative goes to the negative of the capacitor, grounding what needs to be grounded.

Step 18: Optional: Add an Indicator LED

Unless you hold up a camera to the front, there is no indication that it is going. Here's a modification to add a visible light LED that blinks between each code to show what it's doing.

3mm LED - $0.06
Another 150 ohm resistor - $0.05

First, take your LED and bend the positive lead (not on the flat side) straight out. Keep the negative lead (with a flat side) pointing the same direction and cut it so that it's about 3mm long. Solder this to pin 7 of the microcontroller, with the positive lead facing toward the switch.

(look at picture 2)

Next, cut the positive lead very short. Cut one lead of the resistor very short also, and solder the two together. Bend the other lead of the resistor around to the positive battery terminal, cut it, and solder it into place.

(pictures 3 and 4)

Now when you press the button, the LED will blink between each code. It will also blink 4 times quickly when all the codes have been sent.

Step 19: Add a Battery and Have Fun!

Slip in a 2032 coin cell battery, and have fun blasting TVs with a small, compact, and DIY device! Because the wires are exposed, be careful not to let anything conductive short out the connections. A good way to protect the circuit would be to infuse and cover the circuit with hot glue or sugru.

Note: I am not responsible for what you do with this, act at your own risk.

If you make one, please send me pictures!

Don't forget to rate and leave comments, I like comments :-)

Step 20: Update: Using a v1.2 Preprogrammed Chip

Due to the requests for preprogrammed chips, I made a modification to the design so that you can use Ladayada's preprogrammed chips with v1.2 firmware. It requires a PNP transistor instead of a NPN, and the way every thing is hooked up is different. I have not tested it, but it should work.

Buy the preprogrammed chip here for $5: http://www.adafruit.com/products/75

The circuit layout will be slightly different than the one for the Instructable.

the IR leds just glow constantly,no blinking...what could be wrong
<p>Made instructable about it. Check my profile.</p>
<p>Why do you reset uC with High state? (connected to 5V instead of GND)</p>
<p>I made this on a breadboard , but whenever I give it power, the status LED turns on, but the IR Leds don't blink. Does anyone know of anyway This can be Solved?</p>
How do you know if it's blinking or not? I light I'd invisible to the human eye, and most cameras these days have IR blocking filters.
*is invisible
<p>hi guys i am not good at that think but can you not buy one online</p>
What's the fun in that? :P
This would be awesome in an Altoids Smalls tin! I already have an Adafruit TV b gone in a full size Altoids tin.
<p>does this shut off all tvs at once?</p><p>How do I make it with arduino?</p>
It doesn't shut off every TV at once. How it works is all the on/off signals are stored on the chip and when you turn it on it cycles through them one at a time, so it can take up to one or two minutes to get all the TVs.
<p>Hi! What's the firmware version you use?</p><p>thank U!</p>
<p>Aubtin. I was looking for an inexpensive programmer to make this Instructable. After a lot of looking, I came across this and bought it. It's only $4.99 and has free shipping. <a href="http://www.ebay.com/itm/161128775429?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649" rel="nofollow">http://www.ebay.com/itm/161128775429?ssPageName=ST...</a></p><p>Two things: It only comes with a 10 pin connector cable. But if you look at the pinouts of the 10 pin and the 6 pin cables, they have the same data lines. The 10 pin connector just has 4 extra unused ones. So it's pretty easy to run wires from the 10 pin connector to your programmer board and make it work. I did.</p><p>The second thing is that this instructable is written to use the USBtinyisp programmer. When I tried to use my programmer it failed. Here's the trick. You need to edit the AVR instructions to tell it to use a different programmer. Copy and paste this and then it will work:</p><p>Avrdude -c usbasp -p <br>attiny85 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m</p><p>Followed by:</p><p>avrdude -c usbasp -p attiny85 -U <br>flash:w:tvbgone.hex</p>
<p>Thanks a lot man! I thought that the fuses were programming also... heheh :) i think i got wrong.. :) hahah</p><p>thanks!<br>marC:)</p>
<p>I'm not sure why you used the resonator at all. The attiny85 has an 8 Mhz internal oscillator that is pretty accurate and if there are inconsistencies, you can calibrate the internal oscillator within +/- 1%, via </p><p>http://www.atmel.com/Images/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf</p><p>page 164. The only issue I can possibly see is that the temperature change can cause a frequency swing. Can you get back to me about this? I would like to build one of these in the next few days and if I can minimize components I would prefer to. </p>
<p>Very good article. I used this as the basis for my PCB build. Pictures are below.</p><p>One more thing, I noticed were at least one of the comments mentioned problems programming without the oscillator/crystal connected. You can program the chip first, then set the fuses. This will let you program the ATtiny on either a breadboard or a programming board before sticking it into the circuit. To do this I like to use a GUI for AVRDUDE called AVRDUDESS. Google it, it is great, and makes programming a snap.</p>
<p>Thanks :)</p>
<p>I tried uploading the code and got these errors</p><p>sketch_nov04g.ino:32:18: error: main.h: No such file or directory</p><p>sketch_nov04g:326: error: duplicate 'const'</p><p>sketch_nov04g.ino: In function 'int main()':</p><p>sketch_nov04g:354: error: invalid conversion from 'uint16_t' to 'const prog_char*'</p><p>I have no idea what they mean or how to fix them, any help would be appreciated. </p>
<p>I had to include the port and the transmission rate so it could work with my arduino, but I was able to upload the code without problems: <br></p><p>avrdude -c arduino -p attiny85 -P com3 -b 19200 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m</p><p>avrdude -c arduino -p attiny85 -P com3 -b 19200 -U flash:w:C://tvbgone.hex:i</p><p>(I used the other fuse because I don't have a resonator)</p><p>The problem I have is it doesn't works, I followed and reproduced the schematic but without including the resonator, and I used a small LED to test it but the LED doesn't lights up continuously like I would expect from a remote control.</p><p>Is it the circuit diagram different when you don't use a resonator, if yes how do I connect it?</p>
<p>I've been able to solve the problem: I bought a 8MHz oscillator (the big metallic one) as a substitute of the resonator, that solved all the issues.</p><p>Tip: If you are programming your Attiny at 8MHz you might want to leave the oscillator connected during all the process. In my case I got the &quot;Yikes&quot; problem whenever I forgot to connect the oscillator. </p>
<p>Also I've noticed another thing, the switching action isn't controlled by the program, instead, in order o make it work you need to power the whole circuit. I don't have a problem with this, but I've found<strong> the code just runs once</strong>, when it has been run it just stops, and <strong>you need to turn off and then turn on the circuit in order to make it work again</strong>.</p><p> And the problem becomes larger if we have a capacitor going from positive to negative, that gives the chip some power to keep it on for some more seconds or minutes, depending on how big it is. That means if you turn it off and on again it wont do nothing, I've added a bleeding resistor of 10k to solve this, but the ideal thing would be to loop the code so it could run as long as the button is pressed.</p>
<p>Well, I could also put the capacitor before the button and increase the value of the bleeding resistor.</p>
<p>could you make this one smaller without modifications or does it have to be all spread out and wide like that? Thanks. I wanna cram one inside a 2005/2010 sonic screwdriver toy.</p>
Hi there, how would i change the fuses using an arduino uno, i get a blinking led working on the attiny85 using the arduino but cant seem to figure out how to do this step with only an aduino uno.
Edit <br> <br>Figured it out, what i did was i used the ardunio-1.0.1 software and did the following: <br> <br>1- Opened Arduino program and selected tools&gt;board&gt;Attiny85(external 20mhz clock) <br>2- Click open tab and click ArduinoISP. <br>3- Connected all wires of arduino uno to attiny85. <br>4- Then navigated to C:\Users\arduino-1.0.1\hardware\tools\avr\bin and opened this path in command prompt. <br>5- Entered the following command (remember to put your com port): <br> <br>avrdude -p attiny85 -P com6 -c stk500v1 -b 19200 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m <br> <br>And everthing worked.
I was still confused about steps 4 and 5, could either make a short video, or go more into depth?
<p>Hi, </p><p>Sorry for the late reply, ill try to go more in depth as i dont have any Attiny85's to play around with at this moment to make a video.</p><p>For step 4, my Arduino software is on my desktop, so click on the arduino folder and navigate to </p><p>arduino-1.0.5-r2\hardware\tools\avr\bin</p><p>In the bin folder you should see a whole bunch of exe files, the one we will be looking for is: </p><p>avrdude.exe</p><p>For Step 5, we want to first see what com port we are using, so connect your Arduino, go to 'Device Manager' and you should see your port(mine is 3), remember your com port number for later:</p><p> </p><p>Now in you arduino folder that you opened up earlier and navigated to </p><p>arduino-1.0.5-r2\hardware\tools\avr\bin</p><p>open up command prompt, to do this press ctrl+shift and right click at a blank spot in the bin folder, then in the dropdown menu click 'Open command prompt window here'. Now your command prompt will be pointing to the correct folder.</p><p>Now type:</p><p>avrdude -p attiny85 -P com3 -c stk500v1 -b 19200 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m </p><p>Hit Enter and hope it works, remember to change your com port accordingly</p>
Glad you figured it out, sorry for the late reply. Thanks for leaving the how-to for other people!
<p>Jut curious as to the range that people have gotten out of this rig. I'm looking to make one as small as possible without sacrificing too much range. Thanks!</p>
<p>Hello,</p><p>Nice 'instructables', thanks!</p><p>I put mine in a solar-powered-light-keychain box, re-using the battery and solar cell system. Let see how the powering goes with the time (everybody know the limits of these so called cheap rechargeable batteries). Anyway, had fun doing it !</p><p> I used the version without resonator because of the space inside the box. It is now at least 3 meters range (couldn't test more, my TV remains unused in the garage ... and the garage is 3 meters long ;o )</p><p>I used usbasp programmer and all worked fine.</p><p>Thanks again.</p>
<p>Hey dark sponge, just wanted to show you the cool TV-B-Gone I made from your instructable. I decided to build it on perf-board so that it would fit into the Altoids smalls case. I didn't want to open the case to press the button so I drilled a small hole in the cover (look close, it's right above the &quot;A&quot; in Altoids) and glued it using JB Weld. The button was kind of tough to press so I put a tiny drop of JB Weld on top the button just to give it some height. It's awesome.</p><p>Thanks again</p>
<p>I am planning on buying the equipment and all the components in the list to make this. I am new to this though, would this programmer work for the project? </p><p><a href="http://www.ebay.com/itm/USBtinyISP-v3-0-Programmer-Cables-Fix-Arduinos-Burn-Bootloader-US-SELLER-/171055078311?pt=LH_DefaultDomain_0&hash=item27d3ad5ba7" rel="nofollow">http://www.ebay.com/itm/USBtinyISP-v3-0-Programmer...</a></p><p>Thanks</p>
<p>Hey, I'm trying to figure out how to make one of these, and I'm using an ATTiny85 (not &quot;v&quot;) and a 5v voltage regulator with a 9v battery. How would I write the program to my ATTiny85 from the Arduino IDE? Or is it even possible? Thanks!</p>
<p>I also used ATTiny85 not v and it works fine.... and are you using Arduino as ISP to program the attiny85? I used Arduino as ISP as the usbtinyISP I ordered from ebay is scheduled to arrive in a couple of weeks..... I don't think there's a direct way to upload/program the attiny85 using the IDE.... So, I installed avrdude on my OS (Lubuntu 13.10) and used these commands:</p><p>(writing fuse)</p><p>avrdude -cavrisp -pattiny85 -P/dev/ttyACM0 -b19200 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m -v -v -v -v</p><p>flashing .hex file (.hex file must be in the directory the terminal is currently in)</p><p>avrdude -cavrisp -pattiny85 -P/dev/ttyACM0 -b19200 -U flash:w:tvbgone.hex</p><p>It worked without any error and I am happy to switch my home TV on and off for once.....</p>
<p>In trying this out, I got the fuses set alright (as you said, so I don't know whether or not I'll need the resonator with it), but I'm getting this error when I put the avrdude -cavrisp -pattiny85 -P/dev/ttyACM0 -b19200 -U flash:w:tvbgone.hex in there:</p><p>avrdude -cavrisp -pattiny85 -P/dev/tty.usbmodem641 -b19200 -U flash:w:tvbgone.hex</p><p>avrdude: AVR device initialized and ready to accept instructions</p><p>Reading | ################################################## | 100% 0.05s</p><p>avrdude: Device signature = 0x000000 (retrying)</p><p>Reading | ################################################## | 100% 0.05s</p><p>avrdude: Device signature = 0x000000 (retrying)</p><p>Reading | ################################################## | 100% 0.05s</p><p>avrdude: Device signature = 0x000000</p><p>avrdude: Yikes! Invalid device signature.</p><p> Double check connections and try again, or use -F to override</p><p> this check.</p><p>avrdude done. Thank you.</p><p>Should I just override it with -F?</p>
<p>I think you may have set the fuses to use the external resonator....... and because there's no external resonator connected, the MCU wont work.... that's you get the </p><p>avrdude: Device signature = 0x000000</p><p>error. To fix this, you will need to provide a 8mhz external signal into the MCU to program it </p>
<p>Alright, thanks! And is the fuse setting for with or without the resonator?</p>
<p>The one i provided is with the external resonator... and after setting the fuses you will need the resonator connected before actually flashing anything into its memory</p>
<p>Thanks for all your help so far, I haven't had any luck finding resonators (crystal or ceramic) anywhere local. I could potentially order one from the internet, but I'd rather avoid it if I could for time's sake. How would I go about setting the fuses to on the attiny85 to 8mhz from my Arduino without a resonator?</p>
<p>I Have been trying to use arduino to program this but nothing has worked, if anyone has the the code for the arduino or can help me please reply.</p>
<p>I don't think we can use the Arduino IDE to flash it (there should be a way but I'm not sure) So, I installed avrdude on my OS (Lubuntu 13.10) and used these commands:</p><p>(writing fuse)</p><p>avrdude -cavrisp -pattiny85 -P/dev/ttyACM0 -b19200 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m -v -v -v -v</p><p>flashing .hex file (.hex file must be in the directory the terminal is currently in)</p><p>avrdude -cavrisp -pattiny85 -P/dev/ttyACM0 -b19200 -U flash:w:tvbgone.hex</p>
<p>Following the same schematic, i changed it to pcb version (1st time etching pcb (used toner transfer (ironing) and ferric chloride as etchant) for higher durability...... used an IR LED that I salvaged from random parts as the sole LED as the IR LEDs I ordered from Ebay is only going to arrive in a couple of weeks.... bought the wrong capacitor but it still works, resonator and ATTINY85 from rs components and the rest(everything exclude mcu, resonator, battery) from a local online electronic shop</p>
<p>i had started this a few years ago but kept running into problems programming the chip, so i just fixed the problem and the chip is programmed. so i am wondering how hardy the chips are when it comes to soldering. (how easy is it to burn them out with heat?)</p>
Dark Sponge, you rock! I've wanted one of these forever but couldn't justify the high cost of a pre-made one. I can't wait to start building. One request. I hate the coin batteries. Can you tell me if I can substitute a 9v for the coin? If not, can you suggest how I would modify the circuit to accept one? <br> <br>Thanks!
You can replace it with 2 AA batteries in series or build something similar to this, which uses a 9v instead. http://www.instructables.com/id/DIY-TV-B-Gone-SHP-And-Save-45/
i did everything excatlly likeyou did except i used arduino to program attiny, then i used a program to upload the hex file to my attiny, i tried doing the circuit twice, but it stilll dosent work, help?
Nerver mind I got it working I was looking at the pics and it looks like u connet something to pin 7 but then I looked at the schematic and saw there was nothing connected
Hey I need some help I built the tv b gone on the bread bored and it worked great and now that I have soldered it together it won't work do u think I fryed my attiny85 I am using 1.1 firmware
Hey can i buy one of those ic chips from you preprogramed?
Great instructable! <br>i've made my own TVBG on my breadboard and it's work! <br>I added 2 IR so, totally there 4 leds and powered by 2 AA battery. Can't wait to try this with the big screen TV in school LOL

About This Instructable


454 favorites


Bio: Hi! I've loved electronics and electricity for as long as I can remember, and electric projects are something I do in my free time ... More »
More by dark sponge: DIY TV-B-Gone SHP (And Save $45) $3.50 DIY TV-B-Gone Micro $4 DIY TV-B-Gone
Add instructable to: