A light FX module that listens to sounds and flickers LEDs for entertainment

Overview

Noisy Blinker is the first real module for Grumpenspiel visual FX. It takes the proof of concepts I have done up to this point and advances the standards further. Simple system controlled by Arduino, a microphone for input, and some NeoPixels for output. Cute homemade light diffusers. Includes a potentiometer to calibrate the audio cutoff threshold, brightness, and a mode button.

No MIDI input used on Noisy Blinker. She just passively listens to the music and reacts, keeping it simple.

Action

Some videos of Noisy Blinker in operation:

Silent Operation - Mode 1 with threshold turned all the way up, so it ignores sounds and simply keeps the lights on, slowly moving the colors.

Russian Dance Trepak Nutcracker - Mode 3 with a tight threshold, giving nice responsiveness to the sudden sound bursts.

Rhythm of the Night - Mode 5, giving a spread of constant on, threshold blinking, and peak blinking.

GitHub

Source code and schematic available on GitHub in the hcgs-noisy-blinker repository.

Hardware

noisy blinker parts before assembly
  • Arduino Nano controller
  • High Sensitivity Sound Detection Module - basically a small microphone with an adjustable gain and both analog/digital outputs. It has an onboard LM393 comparator and a potentiometer to set a threshold for a digital output. The analog works quite nicely for this project.
  • NeoPixels - WS2812b addressable RGB LEDs. Eight individual pieces cut from a long strip.
  • Potentiometer - allows the user to adjust the threshold for the audio signal.
  • Potentiometer - allows the user to adjust the brightness of the LEDs. Uses the FastLED library for lossless dimming.
  • Push Button - cycles through operating modes
  • DC Power Jack - 5.5mm x 2.1mm, pin 5 VDC, sleeve GND
  • Decoupling Capacitors - keep the power smooth

There are two audio adjustment pots in this system, one on the sound board and the other wired into the arduino. They work hand-in-hand. The one on the sound board will adjust the sensitivity of the board, altering the average value of the analog output. Then the one on the arduino sets the value that triggers LED illumination. Basically set the sound pot to a generally useful value, then use the threshold pot for fine tuning in any given concert location/situation.

Schematic and Circuit

Eagle .sch schematic file is available in the GitHub repository.

noisy blinker schematic

I went for a breadboard point-to-point assembly on this one. Go nice and slow, spread things out for simplicity. There was a “fingers crossed” moment when I plugged it in. The solderless prototype only took power from USB, while the production model powers the NeoPixels via 5 VDC source separate from USB. Worked properly right away, resulting in a happy robot maker.

point-to-point circuit front
point-to-point circuit back
NeoPixel WS2812b soldering assembly line
using super glue to attach the LEDs to the wood board

Power Requirements

184 mA typical current usage at full brightness setting. Actual usage will be even less since full brightness is bit powerful for comfortable viewing.

534 mA maximum current draw according to the datasheet. Make sure you don’t turn all 8 to full 255, 255, 255 at full brightness when only powered over USB.

ComponentCurrentNotes
Arduino Nano 50 mA Estimate from Nick Gammon
NeoPixels 130 mA Datasheet says 60ma each * 8 pixels, so maximum is 480 at max at full white RGB, full brightness. Measured a variety of usage scenarios. Full brightness, migrating colors, constant-on (no sound reactivity), 100-125 mA. With sound reaction blinking, usage was 30-80 mA. I’ll use the fully on value with a slight padding.
Microphone Board 4 mA direct measurement

Firmware

Arduino .ino source code is available in the GitHub repository.

As of this writing (which might become obsolete in 20 minutes, depending on whether the blizzard outside lets up or I stay trapped inside playing robots) the Nano runs the old bootloader, so be sure to set that in Arduino IDE for programming at the right speed.

Serial is at 9600. Compiled with debugging turned off, so only use for Serial is to let the user define a value for their favorite color, which gets stored in EEPROM.

Modes

The user can press the mode button to cycle through the following behaviors. The choice is saved to EEPROM so the mode will be restored at boot time.

When the user selects a new mode, the light FX turn off for 2 seconds and one LED indicates what the new mode is. Extra pat on my back for making the UI reactive during this 2 seconds, rather than using Arduino’s blocking delay() function.

  1. independent moving colors - 8 LEDs on threshold
  2. single moving color - 8 LEDs on threshold
  3. independent moving colors - 4 LEDs on peaks, 4 on threshold
  4. single moving color - 4 LEDs on peaks, 4 on threshold
  5. independent moving colors - 3 LEDs on peaks, 3 on threshold, 2 constant on
  6. single moving color - 3 LEDs on peaks, 3 on threshold, 2 constant on
  7. user defined color - 3 LEDs on peaks, 3 on threshold, 2 constant on
  8. user defined color - 6 LEDs on threshold, 2 constant on

Enclosure and Construction

As of this writing, she’s not really “enclosed” per se. The base is made from poplar wood, stained with Varathane Special Walnut, and sealed with 5 coats of Polycrylic. Even a cheap piece of wood like this came out very pretty.

The NeoPixel components are clipped from a long strip and then soldered with solid core power and data wires. Cyanoacrylate glue keeps them (and my finger, oops) attached to the poplar base. The exposed wiring looks cute against the finished wood.

The motherboard sits on standoffs attached with M3 screws. The screw heads are carefully counter sunk to keep from scratching tables or shelves that this beauty sits on.

My creativity exploded with options for diffusers on the LEDs. The first revision is simple paper cones, pretty much because the family get together is tomorrow and I want to share the fun. The paper is inherently weak, so a more durable diffuser is in the works.