How exactly do addressable led strips work?

I'm absolutely new at anything involving hardware and serial programming. Somehow I found these terms and think they represent what I want to do for a project.

Basically, addressable led strips have leds attached to an embedded controller with each chip having data in/out, volt in/out, and ground.

Are each of these chips PIC microcontrollers? So if I were to send a data stream in the beginning of the strip through the the first data in from an arduino to individually control each led, is it serially communicating in sort of a chain? Like the data stream is carried over across the other chips using the data in and out connections and those chips all interpet that data based on what number chip it is.

My project involves creating this strip, or at least mimicking it enough. What devices can I use for this, assuming I start with an arduino?

Thanks for the help.

PICs are microcontrollers made by Microchip Technologies, a rival to Atmel who make the ATmega chips used in most Arduinos.

Perhaps you meant to ask if the chips in addressable led strips are microcontrollers. Maybe they are, but they are so simple that they would not have to be. They are more like shift registers with pwm led drivers.

I don't know why you would want to make a project that works like this. My feeling is that this is an "X-Y problem".

PaulRB:
Microchip Technologies, a rival to Atmel

I think Microchip took over, or perhaps merged with, Atmel a while ago. (Not that it matters for the OP's question, just for interest.)

Oh yes, I had forgotten that.

Hmm, I guess they are microcontrollers, but about it not having to be a microcontroller. Is there a way to generalize the use of these pwm drivers? I know the ones in the strip would specifically have to be for those leds, but could those drivers be used for other devices like speakers? That's why I thought to use microcontrollers serially, so I could communicate commands across a large amount of devices without cluttering it with wires.

So an addressable strip with speakers inside of just leds is an example of what I was trying to achieve.

The drivers itself are not really useful for other things. The way of communicating can be used for other stuff. Have a look at SPI. It uses an extra wire but is serially connected.

But do note, SPI but also the interface to leds adn I2C etc isn't meant for distance. For them to work reliable you should stick to short distances. For long distance you can use things like RS485 and there are (although a bit more exotic) long distance I2C drivers.

@septillion

I checked out SPIs but it looks like it works by connecting more wires with slave select. What I want is something like the below:

Arduino--data->microcontroller connected to speaker--data->microcontroller2 connected to speaker2.

So I'd individually control each speaker based on what data I send. Rather than have each data sent directly to it, it'll be sent along the chain of controllers. I want this because the nunber of devices cannot be scaled up dramatically without increasing wires connected directly to the master controller.

Looks like you want something like a DMX protocol.

@selquin, then you looked wrong :wink: That is the most common way but you can also connect MISO (Data out) of micro 1 to MOSI (Data in) of micro 2 etc and chain them :slight_smile: That's the "normal" way of doing it when you use shiftregisters for example.

And again, what length are we talking about?
And what kind of data?

Checked it out and it looks really promising. Thanks for the suggestion. Though it looks daunting to implement...

Hmm, I'd say about 500 devices as an absolute max. So 16 bits? I know that technically speaking we can use voltage to vary the magnitude of light for example, but we need data for the sound effects in speakers right?

Edit: if you meant distance, I'd say within 1 meter. These speakers are tiny.

500 speakers? :o And 1 meter is on the edge of what you can do, depending on the speed. That's why DMX uses RS485. But 500 devices with 1 meter makes 500m, that alone will give you headaches for power distribution. No matter how small the device, 500 devices isn't really something for a newbie.

But I think you need to explain your project into more detail.

OK. Here's the project outline:

500 small speakers are arranged in a matrix. I want to be able to have each controlled by the arduino individually. So at the minimum, I'd send a command from the arduino to turn on speaker 235, without manipulating/turning on the rest. This would I guess involve selectively directing power to it. The end goal after that point would be to do with more than one at the same time. Like "turn on speakers 235, 490, and 498" and they would all turn on at the same time until a new command is issued. The super end goal is to have more complex commands than turn off or on. Maybe increase the sound of one?

But define "turn on". Is that "put 100V to the speaker (and blow it up)" or "play a 300Hz square wave" of "play the 5th symphony of bach"?

Some are easier to do then others. Also, some are so easy you can connect multiple to a single micro and simplify things. But still, 500 speakers is massive and not really newbie friendly. Even for a more experienced person like me I would start with a smaller prototype of let's say 10 just to get it to work before scaling it.

I recently received a PM explaining that I really don't need multiple microcontroller. So you're right, since by turning on I mean sending voltage to it, that it would be just a matter of connecting multiple speakers to the arduino.

And I do plan on starting with a smaller number first, just wanted to see if the 500 is possible for when I do it later. But on the matter of ten speakers, when you mean connect them to the arduino you mean with the available pins right? If I wanted to scale that up how would it work? Like I said earlier I wanted to limit the the amount of wires since 500 would be really... difficult.

It was suggested for me to use shift registers, but again, wires... It's why I brought up the addressable led strip originally. I like the design where it's also flowing in one direction and minimising clutter.

Just putting a voltage on a speaker doesn't make a sound (and will probably burn it). You need some kind of wave form. Square (easy), triangle, sin, music etc.

And how to connect depends on what kind of speaker. Driving this requires less then driving this. But both can't be directly connected to an Arduino pin, it just can't deliver enough power.

And on the subject of scaling, you can use multiple (the same) Arduino (for example Pro Mini's or Nano's) controller by each other or a master Arduino or PC.

Hmm, I guess I'll need to research into the speaker implementation more, with the wave shield. Here's an example of a speaker I might use:

Also, I went ahead and edited my previous post in case that cleared anything up.

You can't connect that speaker directly. You need some sort of amplifier.

The WAV shield is just grabbing the data (WAV file) of the SD-card and sends it to the DAC to play sound. But this is already some heavy lifting for the Arduino. Also, the SD-card uses SPI. You also have cheap MP3 mudules which can play MP3 of an SD-card all by themselfs. Cheaper then the Wave shield and you can use multiple per Arduino but still, not very low part count / cheap, especially because you need a SD-card per speaker (or per two if you can use stereo).

But if you just want a simple square wave or the same complex signal to multiple speakers that's a lot easier.

What do you want to accomplish with this project?

selquin:
...edited my previous post in case that cleared anything up.

It didn't. If you want us to help you, you must answer each question we ask, even if your answer is "I don't know". Please don't just ignore questions. We are not asking them to tease you or make you feel small.

You still have not explained what sound you want these speakers to make. Just applying a voltage to this type of speaker will not make a sound (other than perhaps a single click). You can get buzzers which will make a tone at a fixed frequency and volume when you apply a voltage. But in an earlier post, you mentioned altering the volume, so I guess that is not what you want.