LED Sing Along Lighting - Karaoke Style

Hello, I am brand new to this forum and to Arduino and coding. I have tried to look up some tutorials and have the basic idea of what is going on to program an addressable LED strip. My goal is to program 1 LED strip (WS2812B) using an Arduino Uno Rev3 to light up one LED and turn off that same LED, then move to the next for the next word, in synch with the lyrics to a song. So if a song had 200 lyrics, it would cycle on and off 200 lights, one by one, down the strip.

What direction can anybody help point me in? Tips, advice, questions? It seems like there might be several ways to go about it, but just thought I would see if anybody out there who knows more than me can save me some time with advice or insights. Anything helps!

Thanks!

Welcome to the forums. Here is an extensive guide to using WS2812 LEDs. Adafruit refers to them as "NeoPixels"

You can also look at the FastLED library - it has tons of examples, but isn't as newbie friendly.

Since you are only having 1 LED on at any given time, your power requirements are very low. In the future, if you decide to start lightly lots of them up, pay attention to the power requirements. You can't just power it all from the +5V off the Arduino.

WS2812 leds are packed close and very small.
It would take many to underline a word in readable text.
With enough strings you could make a line of text and make the song words to sing brighter. With 5 lines the text would be crude but readable. 7 lines would be better, 5 leds wide.
There are font sets to use for that. The text might have to be scrolled to do it.

On what are the words displayed? If you plan to show the words on WS2812, with 8x5 letters, you need 6-columns to display one letter (plus spacing). A "word" is generally considered to be five letters, 30 columns per word. You can buy or build an 8x64 WS2812 panel that can hold two words if you are using an Uno or Nano. You can program many more WS2812 with a Mega or ESP32. If you have only two words, scrolling the letters fast enough, might keep up with the tempo. And since you know how WS2812 work, then you will know that you could color the "current" word in the song in a special color.

If you have the words displayed using another means, you could "underline" each word by measuring the width of each word and programming the lighting of those segments into the rhythm, changing always, lighting under the word to sing.

This simulation has fifty-six columns by eight rows. Any more columns and memory will be filled, and the sketch would not run.

1 Like

Thanks for the response, I guess I should clarify, I do not want to spell anything out. I only want a light to come on at a specific time interval. I will work out the details of the physical layout of the lights, but for example if you were to sing happy birthday, I want the first light to come on at the same time in the song as the word "happy" is being said, once that word is done I want the second light to come on for the word "birthday", ect. And down the line I would also need each light to stay on for different amounts of time based on how long the word is. For example the light that comes on for "birthday" would stay on for longer than the light for the word "to" and/or "you"

Please, draw a picture of what the user will see. Your description (post #5) sounds like you need an unknown, but infinite, string of lights, with only one light per word (but I think I might be wrong, since infinite is not easy to program).

I have made something similar to your needs. It lights a selected number of LEDs for a selected duration. You edit the "sequence" of steps, set the "duration" for each step, and set the "speed" for a synchronized display. The application was a "lightning" simulator for a diorama.

Here is the link to the code and the data for the simulation. Ask me anything.

Have a look into WS2811 led bulb strings. The lights are 12mm dia bulbs and there are inches of easy-splice wires between each one.

very good idea, I may switch over to these if I can figure out the code. Having never done anything before this is all very foreign.

I used the FastLed library for 2 things.

  1. the LED array with 8 bit Red, Green and Blue level for each string led. I set the numbers through code.

  2. the .show() function sends the array to the string for you. The physical led nodes shift data bits upwards and into the next as long as data gets clocked in and there's a node to take it. My strings have 50 nodes and 5M wires, 1 bulb/node per 10cm (4 inches).

Be sure to get ones with wires colored for pwr/gnd/data and not tree wire green if you intend to splice wires to reach farther, WS2811 is hobby-friendly, makes nice size color dots/tree bulb. They project less directly than strip leds or bare leds, the bulb's glow is diffused and casts light all around where the bare led may shine in a 35 degree cone or some other width.

OTOH, I just like the effect the bulbs make. Solid Color, whatever shade you want.