# How can I electronically sense the state of an LED in another device with an Arduino?

I'm working on a project to integrate an off the shelf garage door monitor with an Arduino. The base station has a pair of LED's that flash in different patterns to indicate the state of the remote sensor, and my thought is that I can read these by connecting them to the the input pins, however I have some hurdles to cross. I've made some progress, but I'm just getting started with electronics and I'm unsure if I'm going in the right direction or if I'm going to fry \$70 worth of stuff.

Here's what I know:

1. The base station has a 100mA 12V power supply.
2. The Arduino can use a up to a 12V power supply, but it's happier with 9V.
3. The voltage across the base station leads is about 1.9V when they're lit.
4. Arduinos use 5V logic, and read anything higher than 3V as high.

My plan is get a 12V power supply that can power both easily, feed the base station directly off of it, and use this converter to give the Arduino 9V. I assume that they share the same ground level.

Since the voltage across the LED is only 2V, which is not enough for the Arduino to read, I'm currently thinking of using a variation of this circuit below, which shows the ON state as about 1V and the OFF state as 5V at the input. The difference will be that I'll just run a wire from the positive side of one of the base station LED's to the transistor base.

simulate this circuit – Schematic created using CircuitLab

So, am I on the right track? Is there a better way to read these LED's using an Arduino?

• Why not get the voltage across the LED and the current-limiting resistor? – Ignacio Vazquez-Abrams Aug 15 '13 at 7:15

The problem is being addressed with unnecessarily complex solutions. The crux of the issue is an incorrect assertion: "Since the voltage across the LED is only 2V, which is not enough for the Arduino to read, ...".

The Arduino's analog inputs are high impedance, and can happily read a 2 Volt signal. In fact, AnalogRead() would return a value of around 1024 x 2 / 5 = ~ 400 to 420 for an approximately 2 Volt signal.

So assuming the two circuits have their grounds interconnected, simply hook up the anodes of the LEDs to separate ADC pins of the Arduino, and use AnalogRead() on each. The high input impedance ensures that operation of the LEDs is not materially affected - even a voltage follower or a buffer is unnecessary.

• To make it even simpler, use LDRs or Photo Diodes as Arduino sensors and tape them over the device LEDs. Full isolation (especially as a garage door opener is likely to have a relay or similar electromagnetic spiker), easy installation, easy removal if needed. – Ron J. Aug 15 '13 at 12:10
• This is the best engineering answer. – Kaypro II Aug 16 '13 at 2:57

You can use a voltage follower so you can read the voltage of the LED without changing the impedance of the reading circuit.

simulate this circuit – Schematic created using CircuitLab

Well, I don't know much about your project, but this could be a quick solution. ;D

• I think this is the best "learning electronics" answer. – Kaypro II Aug 16 '13 at 3:05
• Arduino has a 100Mohm input impedance. So there is no need for a voltage follower circuit. – MatsK Jan 10 '15 at 8:42

Why bother modifying the remote? Use a phototransistor/photodiode. It's a light based transistor. Hot-glue it over the led or tape it on, and you are done.

This still requires an analog input on the arduino.

The voltage across the LEDs may be too small for the arduino input but it would easily switch on a transistor. Any small signal NPN transistor would do for Q1 and Q2. The resistor values are not that critical.