TV Commercial Volume Suppressor

24K17147

Intro: 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

Tools and Materials

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

Components

STEP 2: 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

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

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.

38 Comments

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

I too hated the dreaded commercial blast so I used my pro audio equipment to insert a compressor in the audio path. It worked perfectly after a tweek or two although it flattened the entire soundtrack. Unfortunately my wife didn’t care for the wire dripping industrial look so I retired the equipment. Most TVs have some type of compressor built in but movies are notoriously bad for whispering just before an explosion. My solution was to make a large button connected to the mute button with a 30 or 60 second reset to smack when the commercial appears and a few seconds the show sound reappears. Sounds simple but I haven’t had a chance to make it. Seems nowadays everyone wants to solve problems with an arduino .Currently I just ride the mute and check mail in between.

I've been looking for a good tv for a while that includes this kind of function. Not just for adverts, or changing channels, etc, but also because it would be useful for when you are watching films late at night and don't want to wake the neighbours up (eg when the film goes from quiet talking to loud music or noise in a flash).

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.

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!

Thanks for idea and sharing!!!

Very interesting! =D

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.

"

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.

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...

Try - https://lifehacker.com/5831884/the-enough-already-mutes-your-tv-when-overexposed-celebrities-come-on

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

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.

The letters, MUTE , are worn off my remote.

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

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.

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)

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.

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
More Comments