About once a year I remember this idea and google anything relevant, and here I am again after attempting and failing my own version.
Basically, I want to make this into a module:
The way the creator talks in the comments is like it was a throw-away project, but for me it’s a mountain and a half. I can handle building a PCB and panel etc if someone has the Arduino knowledge to do the coding and schematic part.
There’s an Adafruit tutorial that may help. The code is just analog writes to three PWM output pins. For brightness you’d scale all three outputs equally.
Note that these strips draw up to 1.2 A per meter at +12 V. In the video it uses USB power which for USB 3.0 is limited to 0.9 A at +5 V (0.5 A for USB 2.0). If that’s bucked up to +12 V then presumably it’s a maximum capacity of about 0.4 A or less. So if you want full brightness and more than a few decimeters of LEDs you would need a different power solution. In that case, for a module you could power the Arduino off the synth power supply but it probably would not be a great idea to try to power the LEDs off it, better to go with a dedicated +12 V supply.
You just connect each CV input to an analog pin on the microcontroller. Use Schottky diodes to ground and +5 V to limit the voltage on each pin (or rely on the microcontroller’s internal protection diodes, you can argue either way) and a series current limiting resistor. If you want to accept CVs outside the 0–5 V range you need to scale and offset.
Have you put together an existing project with a MCU yet? I’ve found that putting together two Arduino projects (both derivatives of Hagiwo DCO stuff) helped me get a feel for how I will go about my first MCU project when I tackle it, showing me how people go about this stuff and the tools they use. I think even assembling a simple project would be useful to make it easier to break down the task in chunks later.
I have a very simple module i grabbed off github a while back that basically does the same as the one in the video, with the addition of having 3 inputs for RGB. I tried to modify that to accept CV but failed and it does need some other work to allow power from an external source, so I thought I would try and figure out the arduino one (again) as it seems to tick all the boxes.
I feel a little clearer on what I need to do with Arduino now, so I am going to give it a try and come back with more questions (so be prepared)…
So in that project the inputs are gates, and then there are attenuators to vary the gate levels; these are buffered and added to a bias voltage and then sent to the LED strip.
A few comments:
First, the attenuators are 100k pots, but then these feed into 10k resistors going to the inverting op amp inputs. Having a larger resistance attenuator going to a smaller resistance to ground or other voltage level is normally not good. The small resistor will distort the voltages you’d otherwise get off the attenuator, giving you a non linear response. As seen below, that non linear response actually helps you in this case, though it’s rather a case of one problematic design choice partially canceling another one.
Second, I’m confused by the op amp stages. If you send in a 5 V gate, and turn the attenuator from CCW to CW, then the op amp output is saturated at about 10.5 V until the attenuated voltage reaches about 2.5 V, then decreases to 5 V. Due to the non linear attenuator response mentioned above, it goes from 0 to 2.5 V in only the first 10% of the pot travel, so the op amp output is only saturated for a little bit and then decreases to 5 V, though non linearly; the LED gets dimmer as you turn the knob up. To me it would make more sense to set up the op amps as non inverting LED drivers. Then the LEDs would get brighter as the voltage increases, proportional to the voltage without turning off below the forward voltage point. As a bonus, since the attenuator would go directly to the non inverting op amp input, there would be no small resistance to a voltage level to screw that up.
But there is another problem, which is that the TL07x can only source around 50 mA current or so. As mentioned above, an RGB strip at full brightness can pull something like 1.2 A per meter. So for a strip of any appreciable length you can only get very limited brightness with an op amp driver. Which I guess is why people usually use PWM with a microcontroller and MOSFETs or transistors driving the LED strips.
These are WS2812 LEDs. They take 3 inputs, power, ground, and data. The data to control them is generated by the arduino. The LEDs have built-in shift registers to pass the data from one LED to the next, so the project really should be as simple as some input conditioning (the simplest version would just be a couple 5v zener diodes as is often used by Hagiwo in their arduino synth modules.
Basically like that to 4 different Analog pins. You could get fancy and add a potentiometer in there to make an attenuator. The output part of the schematic would be connecting a digital pin to the “DIN” pin on the led strip with a long wire.
The simplicity comes at the cost of only accepting CV signals from 0-5v (anything else is dumped or clamped at max)
The arduino library you would use would be “FastLED”. It’s really easy to hook an ardunio up to a bit of WS2812 LED strip and try playing around with the example projects that come with the library to get an idea of how they work. There’s a bunch of tutorials about how to use that as well over on youtube. And i’d suggest trying the analog example projects in the ardunio IDE to learn about processing analog signals with an arduino.
As far as power you could get enough power off USB if you use a USB-PD trigger module to configure the correct voltage/current. Up to 20V at 5A is supported in the specification (although not implemented in many/most charger wallwarts) but a simple 12v wall wart and a barrel connector soldered onto the +/- pins on the end of the strip is probably the simplest solution.
Well, they could be. The Adafruit tutorial I linked to above is for simpler analog LED strips:
There are two basic kinds of LED strips, the “analog” kind and “digital” kind. Analog-type strips have all the LEDs connected in parallel and so it acts like one huge tri-color LED; you can set the entire strip to any color you want, but you can’t control the individual LED’s colors. They are very very easy to use and fairly inexpensive.
The Digital-type strips work in a different way. They have a chip for each LED, to use the strip you have to send digitally coded data to the chips. However, this means you can control each LED individually! Because of the extra complexity of the chip, they are more expensive.
I guess a few ULN2003’s with all the drivers tied together on each would do the jerb for power handling the analog strips. I used to drive an LED strip under my coffee table with 2 UNL2003s controlled by the raspberry pi we were using as a home theater system. (by the way… frosted glass coffee table with LED lighting underneath looks super cool. that was the best roadkill table… table and glass found separately.)
Blockquote they are more expensive
I mean expensive is relative. you can get a meter on ebay for under $8 without even looking around much. Chips are sometimes kinda pricey though these days.
I don’t think either is really objectively “easier” just more or less intuitive for different builders.