Introduction: TV Commercial Volume Suppressor

Picture of TV Commercial Volume Suppressor

My dad constantly whines about how annoying it is when commercials are considerably louder than their accompanying program. Since his complaining was becoming more annoying than the actual commercials, I decided to create a little gadget that would solve both problems simultaneously. The gizmo I created will automatically lower the volume of the TV when it gets too loud, and can be programmed to work on any device that uses an IR based remote control.

Step 1: Components and Tools

Picture of Components and Tools

Tools and Materials

  • Soldering iron
  • Solder
  • Breadboard
  • Hook-up wire


Step 2: Wire It Up

Picture of Wire It Up

Since I was gifting this to my dad and wanted it to look nice, I decided to have a PCB professionally made. I used Eagle to create the schematic and board. My breadboard was looking pretty messy, so I would just use the schematic to guide your hook-up process. Here is a brief summary of the pinout.

  • A0 goes to the microphone output
  • Pin 2 goes to "Program" button
  • Pin 3 goes to the transistor gate
  • Pin 4 goes to the IR Receiver output
  • Pin 5 goes to "Down" button
  • Pin 6 goes to "Up" button
  • Pins 7, 8, 9, 10, 11, and 12 go the the LCD.
  • Put 3.3 volts across the microphone
  • Put 5 volts across the transistor/IR LED, potentiometer, and LCD.

Step 3: How to Use It

Picture of How to Use It

The heavy lifting part of the code was actually borrowed from other things I found online. I used an IR library to both decode the TV remote's signals and to repeat the signal to the TV. I also borrowed another snippet of code to accurately measure the reference voltage of the Arduino's ADC since even small errors would make large difference in the microphone's volume readings. Don't ask me how they work, because it is beyond me. I just figured out how to use them through trial-and-error.

Basically, the Arduino constantly checks the state of the three buttons and the volume. If either of the Up or Down buttons are pressed, the volume threshold, or maximum volume before the system is triggered to decrease the TV's volume, will be raised or lowered. To set the IR Code that is sent when the threshold is exceeded, press the Program button and followed by the Up button. When the screen prompts you to press the -Volume button, aim your TV's remote at the IR receiver and press the -Volume button until the screen shows you a hexadecimal value that corresponds to your TV's -Volume command. (I added that as a sanity check). It sometimes takes a few tries to get it to work, I'm not sure why though.

If the volume is measured to be above the threshold, the Arduino will send out the -Volume command. You can change the "burst length", or how many -Volume commands are sent when the threshold is exceeded, by pressing the Program button, then the Down button. The screen will show you the current burst length, which can be changed using the Up and Down buttons and then saved by pressing the Program button again.

All of this information is stored in the EEPROM so that the system remembers your presets even when you unplug it.

As another sanity test, the Arduino will send out a -Volume command every time it starts up. This way, you can just press the Arduino's reset button to test whether or not the device is working.

Step 4: Test It

It works!

Step 5: Put It All Together

Picture of Put It All Together

Once I confirmed it worked, I ordered the PCB and then soldered everything on to it. I also used my university's laser cutters to make a little MDF box to house it, but these are both extra steps that aren't completely necessary. Once these were done, the project was complete! I put all of this together during finals week and may have neglected some details, so let me know if I missed anything!

Step 6: Errors

I added this extra step as an appendix. Since this was my first time using Eagle and making a PCB, I ended up making a couple of errors.

First: Since I used a clone of the Arduino Nano, the PCB actually has four extra pins for the controller. However, the board still works so long as you solder the controller to the right pins.

Second: The potentiometer that came with the LCD didn't match the one I used to design the board. You can bend the wires to make it fit, but it doesn't look as nice or feel as secure if the right pot had been used.

There are also a few things I would do differently in the future. First, if I had used an LCD with a backlight, I would have added a way to cut power to the LCD after the screen hadn't been updated in a while to save power. Second, you might be able to actually remove or reduce the 100 ohm resistor in front of the IR LED to make it brighter. Since the LED is only on for short bursts it probably wouldn't burn out. However, I have yet to test this. I also recommend using a microphone with an adjustable gain. I used the Sparkfun microphone and it wasn't as sensitive as I would have liked.


imerrymary (author)2018-01-10

My older (5+ years) Samsung TV has a setting for volume control which was great until I got Amazon Fire TV. When I switch between antenna and Fire TV, I usually have to adjust the volume, sometimes by a LOT. This seems like a good solution but it's been decades since I took an electronics course. I think it's time to update my skills and give this project a try. Thanks for providing so much detail - a great starting point.

Hamartio (author)2018-01-08

Now if you could just get it to recognize the difference between commercials and shows, you'd have a million dollar invention! Especially if instead of muting or reducing the audio, it automatucally played whatever you set it to. Analog ad block ftw!

ValeryS3 (author)2018-01-08

Thanks for idea and sharing!!!

Raphango (author)2018-01-08

Very interesting! =D

e5frog (author)2018-01-07

Nice idea, I'm also annoyed with the difference in volume, I have often wondered if there was a way to sense when commercials started (and ended) and automatically change the volume. When hearing unwanted sound it's a lot more disturbing than say playing your favorite record at a loud volume.

If this worked on kids I'd build one right away. ;-)
When watching an action movie though, there's normal talk and then intense sound (gun shots, explosions etc) - or other similar dynamics. Seems to me there's a risk that the OSD volume bar will pop up right in the movie and when someone it talking straight after such an event you won't be able to hear them.
Some kind of average calculation over a few seconds could help prevent temporary loud sounds to trigger the volume setting?
Even if the commercial is now (in the US at least) supposed to have the same "average volume" as the program they accompany - there's nothing that prevents the station from lowering the volume slightly just before the commercial - so that there's a difference in volume anyway.
In Sweden currently we mostly have commercials for various online "casinos", not sure it's better than the female hygiene products or diapers usually seen before these.
Anyway, nice solution, hope your dad is happy with it.

I believe you can also share your design on Oshpark, so people can order it right away without having to upload any files.

DDW_OR (author)e5frog2018-01-07


Some kind of average calculation over a few seconds could help"

that is where i would put a "fixed" adjustable voltage. you would adjust it once.

then any audio signal would then be automatically adjusted up or down until it is relatively equal to the "fixed" voltage. this should be able to be done without having a micro-controller (Android).

the problem, this type of circuit would prevent the user from using the TV remote to control volume without getting up and adjusting the "fixed" voltage. someone smarter than me can figure that out.

FYI, I am an electronic repair tech, not an engenerer or a programmer.

e5frog (author)DDW_OR2018-01-07

I was thinking mostly that if sensing a too loud volume it could have a timer before adjusting the volume to sense if the volume stayed that loud so that short loud sounds would pass without any change.
IMHO, when the loud sound stops it should restore volume by the same amount of IR pulses that way it should get back to the same setting as before the commercial (or other continuous loud sound).
If adding further functions it could have a timer with a night time setting where it won't allow a volume over a certain level at night not to disturb family or perhaps neighbours...

ed.darby (author)e5frog2018-01-07

Try -

e5frog (author)ed.darby2018-01-07

Neat idea, there has to be CC to decode then I guess. Do commercials often have closed captions?

ндогонят (author)2018-01-07

In France, commercials are at he same volume as the res of the programme, it's mandatory. They *feel* louder because of compression and other aural tricks, but the volume remains the same, so unless you have a spectrum analyser system able to detect these tricks, you're not gonna make it with an Arduino, sorry (good luck with the sampling and the FFT analysis). A Raspberry Pi Zero may do the trick, though, but the maths behind that are a mere nightmare.

Good job, though, I might get some parts of your code for something else.

itsmescotty (author)2018-01-07

The letters, MUTE , are worn off my remote.

NathanR124 (author)2017-12-26

But what if someone else is yelling and the tv mutes itself.

Hegpetz (author)NathanR1242018-01-01

Perhaps if one's TV has audio outputs one could feed off that directly, bypassing outside noise interference. E.g. "Line Out". Sometimes present for hooking up external sound systems to the TV, but not always.

DDW_OR (author)Hegpetz2018-01-07

if the tv has a headphone jack use it to hook up computer speakers to.

it will do the following:

shut off the tv speakers

still allow the tv remote to control volume.

next, add your Volume Suppressor in line with the computer speakers.

I agree a volume normalizer would be great !!!!

been looking for one for years.

2018 FYI, i still hear loud commercials even after the CALM (Commercial Advertising Loudness Mitigation)

bonelifer (author)DDW_OR2018-01-07

Loud relative to what. The act basically says that commercials must now only be as loud as the loudest sound in the current show. If you are watching some loud action movie, that means they can be as loud as the loudest thing in the movie, which is usually an explosion or some other thing that's loud. It would of been nice to instead required some sort of bit that a processor would recognize and it would know when the commercials began and ended. But then people would make an automatic devious that just muted commercials. Sometimes you have to take the wins you can get.

rievezahl (author)Hegpetz2018-01-02

I thought about that too - just add an audio compressor between audio signal and the speakers' power amp. The problem i see is a troublesome automation of the extra unit when changes in volume are desired

balder0 (author)NathanR1242017-12-26

If someone is yelling loudly, you should find a way to mute them before you worry about the TV ;)

That is a valid concern, though, since it is a realistic occurrence, especially around children. A way to remedy that might be to add a form of debounce where the LED won't fire unless the excessive volume lasts for more than a certain length of time.

tytower (author)balder02017-12-26

Getting the input mike up next to the TV speaker and shielded from outside noise might be a cure ,perhaps in the guts of the TV.

man_thas_cool (author)tytower2018-01-01

If your going into the tv might as well tap into the speaker wire and set a voltage threshold.

tytower (author)man_thas_cool2018-01-04

yes I agree . Was looking in the back of one yestterday and thought the same so I did the wires while there . Only one side of a speaker syatem needed.

man_thas_cool (author)balder02018-01-01

Great idea! Now I need something that turns up the volume of speech without blowing you out of the room when music turns on. I’m thinking a filter might do the trick (high pass)

ratguner (author)2018-01-07

Great idea and a fun project.

If I remember correctly, FCC regulations stipulates that commercials can not be louder than their parent program. Have not researched this so I am not certain if it is a current regulation. However, if most of us would complain to our local cable and channel providers, maybe something would happen.

DDW_OR (author)2018-01-07

could someone make an inline device that would be a volume normalizer? using a manually adjustable reference voltage (RV).

once the RV is set then the device will automatically increase and decrease so the the relative volume level would remain the same. have heard that some sound bars have this but have not found one.

RickG96 (author)2018-01-07

We let them get away with forced advertising that is the real issue. I love your idea please refine it and sell it as a kit.

DodgeD (author)2018-01-07

The good news is that the CALM (Commercial Advertising Loudness Mitigation) Act was implemented in December of 2011. The FCC have to regulate the audio of TV commercials from being broadcasted at louder levels than the TV program they appear within. To learn more about the CALM Act,Google it. Most Samsung HTS have a dedicated DSP button on the remote control,there are other manufacturers that offer this also but you have to look it up.This is certainly a good project to acquire work skills in electronics and great that you shared it,even though one can buy these units.BUT it’s the fun of making it.

ve6cmm (author)2018-01-07

Years ago you could actually see when the commercials were about to come on as there was a little white CUE dot that would appear at the screens top left corner to indicate that the commercials should be inserted in 5 seconds (I think that was the timing). This was in the old analog days. Since the emergence of Digital TV, and Digital switch boards, the CUE dot has disappeared. Bummer

Complete maniac (author)2017-12-26

I hate ads too, especially perfume ads, this is an inspiring idea that I may try. Good job!

macshout (author)Complete maniac2018-01-02

Is there a VOC detector for Arduino? I find perfumes overpowering too. :)

balder0 (author)Complete maniac2017-12-26

Thank you!

flyingsparkie (author)2018-01-01

oh...and you turn volume back down again...blaming the tv!

flyingsparkie (author)2018-01-01

Nice project! What if you reverse it because someone is talking over the tv and you can't hear it properly, if it automatically turns it up you wouldn't get the blame for doing so...and perhaps the offending additional 'noise' maker might leave. ;)

DGW (author)2018-01-01

I think about solutions for how to mute commercials once in awhile too. I've noticed that there is usually a black screen for about a second before the show comes back on after a string of commercials. If this is true on most channels(?) then maybe you could return the volume to normal by having a photosensor near the screen and waiting for the show to return. This pause does not seem to exist when the commercials start. Probably because there was a device on the market many years ago that killed commercials by looking for the leading dark screen.

dbenedetto (author)2017-12-26

Very nice! I just press the mute button. :-)

tytower (author)2017-12-26

It is certainly complete and not a new idea but difficult to get a working model. This seems doable and I too will build it and try. I went to compile the code but got an error "TV_Volume_Supressor:14: error: 'IRsend' does not name a type
IRsend irsend;"

guessing the IR library is different or mine is older so I'll
investigate this .

In Arduino choose manage libraries. Search for "IRremote" and you will be offered an update . Take it and then this compiles fine .

Swansong (author)2017-12-26

This is genius! I hate that too, it's so aggravating! Great idea :)

balder0 (author)Swansong2017-12-26

Thank you!

About This Instructable




More by balder0:TV Commercial Volume Suppressor
Add instructable to: