Electrical – Using an arduino to read a 5050 LED signal

arduinoledvoltage measurement

I have a project right now where I have access to a header to control standard 12v 5050 LED strips. What I'm trying to do is read that signal with an Arduino, and then use the values to control other types of RGB strips/bulbs that are connected to the Arduino.

I cannot seem to wrap my head around how to pull the signal I want. I've got a +12V, and an R, G, and B signal. The RGB ones aren't + voltage so… what are they then? How do I go about converting them into something the arduino can read on the Analog pins?

Best Answer

The LEDs are almost certainly controlled via PWM, so the RGB signals are 12 V PWM.

You can read these into an Arduino (with a slight loss of precision), by low-pass filtering the PWM signal to get an analog voltage between 0 and 12 V, and then adding a voltage divider to scale the 12 V down to a maximum of 5 V so that you can use the Arduino ADC to read the values. The order of the voltage divider and LPF is non-critical, either way works.

However, beware that the impedance of the voltage divider will affect your LPF and vice versa, so you need to either carefully design your circuit, or add a buffer of some sort in between.

One of the simplest ways to avoid this inter-circuit interaction would be to use the 12 V PWM to switch a MOSFET supplied from 5 V, effectively level shifting the 12 V down to 5 V, and then choosing an appropriate RC LPF to adequately smooth the 5 V PWM on the Arduino analog input. You will want to choose your filter cutoff based on both the PWM frequency and your expected response time (how fast you want to detect changes); a larger filter time constant will give you better accuracy at the cost of slower response time.