Help! AMBX RGB LED light extension project!

Hello wise Arduino people!

First I must mention that I have an incredibly feeble understanding of electronics, so far it's just from a few days of research. I'm more confident with the software side of this problem so hopefully you can point me in the right direction in understanding the circuitry.

This is quite a unique idea (I'm presuming) but hopefully has a very simple answer.

The goal:
Measure, reporting in real-time, the individual RGB colour channel values generated by a Philips AMBX side-light (they project colour in response to PC monitor activity/games/movies) . An Arduino would pass these values to the PC via serialprint. After that it should be easy, the PC-side can control separate RGB LED light strips on the walls via DMX RGB controller around the room. I already have experience with DMX software and compatible LED drivers.

Example of AMBX in action here: amBX Farcry 2 - YouTube
(You can see sidelights... on either side. This would be copying that light effect across the whole wall either side of screen)

Now you may ask why hack it in such a brutal way if you could just intercept the calls from the PC software controlling the lights? Well, that would be ideal however as a closed protocol it seems impossible - I have found nothing on Google whatsoever anyway and it's far beyond my skill level to get into.

There are some very detailed schematics of the sidelight unit here: http://www.microlp.co.uk/amBX/circuit.html
They are a bit overwhelming to me at the moment, I'm annoyed that I can't understand them!

So far, with a multimeter I have measured the forward voltage of each LED (separate red, green and blue SMD LEDs) and get perfectly usable values (around 2.5-3v max, under the 5v Arduino limit for analoginput).

However I am finding it hard to understand how to connect a circuit up to get that value into an Arduino Uno via the analog input, surely the Ardino's 5V and ground will be a problem connected to the AMBX 18V circuit? Do I just connect a wire from the LED cathode to the analog pin? Do I need resistors? Diodes?!

I'm waiting for delivery of my Arduino, luckily I haven't been able to kill it or the AMBX unit plugging in the wrong wires! As the AMBX units are discontinued and hard to find I don't want to get it wrong.

In the meantime I'd be really grateful to get some understanding of what I need to do to get the forward voltage figures into the Arduino safely, I imagine the schematics make this very clear, if only I could understand them! Then I guess the rest is straightforward (i.e. standard AnalogRead code x3 for each colour of LED).

And here is a great example of what it could all look like: Farcry2 Lighting Design - YouTube

Currently the only way to achieve this is to buy a ridiculously expensive unit (essentially a PC) which has custom AMBX software to control RGB LED strips via DMX, ultimately achieving the same thing as this project!

This should actually be pretty simple. You only need to sense voltage on the AMBX LED circuits and drive the appropriate "extension" LEDS. In fact, it could be pretty easily done without any sort of microcontroller (arduino or otherwise), if you only want to match color for color. Handle the power with a v-reg/voltage divider circuit (with current limiting resistors) and use some transistors to drive the new LEDs. I'm no EE but I think that should work :). Someone please correct me if I'm missing something.

You want to power this whole thing from the AMBX board? My main concern with that would be having enough available current. If you are willing to use an external power supply things get much more simple since you can just buy one that gives you the output you want.

djjoshuad:
This should actually be pretty simple. You only need to sense voltage on the AMBX LED circuits and drive the appropriate "extension" LEDS. In fact, it could be pretty easily done without any sort of microcontroller (arduino or otherwise), if you only want to match color for color. Handle the power with a v-reg/voltage divider circuit (with current limiting resistors) and use some transistors to drive the new LEDs. I'm no EE but I think that should work :). Someone please correct me if I'm missing something.

You want to power this whole thing from the AMBX board? My main concern with that would be having enough available current. If you are willing to use an external power supply things get much more simple since you can just buy one that gives you the output you want.

Sensing the voltage drop across an LED serves relatively little purpose. LEDs are constant curt devices with a voltage drop ( called forward Voltage Vf) varying with changing junction temperature. You would need to measure the current through the LEDs. Or actually much better the duty cycle of the PWM signal controlling the brightness of the LEDs. Even that is not soo interesting. Finding out what the little chip does that sits on the PCB would be the real key to reverse engineer this circuit and will likely provide you with access what the software does that controls these lights.

Thanks for your insight guys, I agree that it could be as simple as directly passing on a reading to a separate LED driver circuit and removing Arduino from it all. However, I would love to be able to monitor the outputs and in turn drive my own LEDs strips from the PC and then use DMX LED drivers, this would have benefits like easy adjustments to intensity, colour balancing, on/off etc. from the PC.

I'd never put any external strips directly into the AMBX system as surely its tolerances for driving LEDs are quite minimal.

Headroom, as you say monitoring voltage right next to the LED seems unreliable, your idea of measuring PWM output directly sounds like the perfect solution. Hopefully the Arduino can monitor PWM voltages quickly and reliably, with averaging over a few pulses perhaps?

I'm looking at this circuit diagram of the sidelight below, the most obvious place to start is what I presume is the driver chip labelled "IC1", (shown left side of LEDs) with ideal measurements of 2.8v max for the Arduino.

Am I correct (unlikely!) in saying that the correct resistor off each corresponding IC pin (for RGB colours) will provide a voltage output that can be safely monitored by the Arduino input (well below 40ma) whilst ALSO keep the lights functional... or will the resistor just use too much current?!

I suppose what I'm asking is how can I get the voltage monitored from the IC pins with minimal current drain from the AMBX circuit?

Just seen this info from the schematics website regarding RGB level test points:

"The red signal from the wallwasher comes in at pin 2 of connector J5 on the PCB. The signal is Pulse Width Modulated and varies between 0v when the red is off and around 16v when the red is at maximum brightness. Test point TE7 allows the red signal input to be monitored."

These test points (TE4, TE6 and TE7) would be much easier to solder onto, but could they be connected to Arduino safely (within current limit?) and would it be easier to decrease this voltage to the 5v for monitoring instead of using the IC1's LED-level output?

Headroom:

djjoshuad:
This should actually be pretty simple. You only need to sense voltage on the AMBX LED circuits and drive the appropriate "extension" LEDS. In fact, it could be pretty easily done without any sort of microcontroller (arduino or otherwise), if you only want to match color for color. Handle the power with a v-reg/voltage divider circuit (with current limiting resistors) and use some transistors to drive the new LEDs. I'm no EE but I think that should work :). Someone please correct me if I'm missing something.

You want to power this whole thing from the AMBX board? My main concern with that would be having enough available current. If you are willing to use an external power supply things get much more simple since you can just buy one that gives you the output you want.

Sensing the voltage drop across an LED serves relatively little purpose. LEDs are constant curt devices with a voltage drop ( called forward Voltage Vf) varying with changing junction temperature. You would need to measure the current through the LEDs. Or actually much better the duty cycle of the PWM signal controlling the brightness of the LEDs. Even that is not soo interesting. Finding out what the little chip does that sits on the PCB would be the real key to reverse engineer this circuit and will likely provide you with access what the software does that controls these lights.

I wasn't referring to measuring voltage drop. I mean measure when there is any voltage on the anode at all (i.e. the LED has been turned on) so he can turn on the appropriate "extension" LEDs.

These test points (TE4, TE6 and TE7) would be much easier to solder onto, but could they be connected to Arduino safely (within current limit?) and would it be easier to decrease this voltage to the 5v for monitoring instead of using the IC1's LED-level output?

In any case, you will need to reduce the voltage*. Your circuit has signals between zero and around 18V. The Arduino can be damaged with voltages above 5V. Reading voltage pluses with a meter only gives you a rough idea of what's going on, and different meters will "average" differently...

Looking at the schematic, I don't think those test points are going to give you a good signal (i.e. it doesn't like it will go close enough to 0V).

The outputs of U1 (pins 1, 7, 8 ) are probably the best place to pick-up the PCM signal (which will switch between around 0 and 18V). A [voltage divider[/url] (2 resistors) can be used to knock-down the voltage. I'd use 10K as the aproximate total resistance for your voltage divider. 2.7K and 7.5K are standard values that will probably work.

Then, if you are going to use an Arduino analog input, you'll need a low-pass [u]RC filter[/u] to convert the PWM to variable DC. I assume a time-constant of around 0.1 Second should work. And, again, I'd start with about a 10K resistor and you can calculate the capacitor value. (The resistors in the voltage divider will interact with the filter to an extent, but you'll probably be experimenting with different values anyway.)

I have to agree that the Arduino is probably overkill! But, it does give you the ability to do anything you want with those 3 color-signals!

  • On the Arduion's inputs, we have to be concerned with voltage. On the outputs, we have to be concerned with current. The relationship between current, voltage, and resistance (or impedance) are is described by [u]Ohm's Law[/u]. The very-high input impedance of the Arduino (under normal conditions) means that current flow into it is very-very low.](Voltage divider - Wikipedia)

DVDdoug, thanks for such a detailed reply, I could just about keep up with what you said!

Would a voltage divider resistor circuit affect the original circuit badly? I mean, would original LEDs still work or would there be too much additional current draw on circuit?

I'm probably being stupid but you mentioned pins 1, 7 and 8 from U1 - did you mean IC1, it has the same pins? The schematic shows IC1 output as 2.8v, not 16v, so no voltage reduction necessary then surely?

In terms of reading the PWM signal, for simplicity is it feasible to eliminate the RC filter entirely? As I understand it, the RC filter would just pass through the peaks of the signal and coupled to a capacitor allow for easier voltage monitoring. Are these components essential? Couldn't the Arduino average out several readings from one pulse width and get a good value?
...This would also be much easier to wire up too, which is nice!