I need to monitor voltages of several DC circuits in a generator's contact box. Whenever the generator has an alarm, a LED is lit in the box and voltage on the line drops to zero. I successfully get readings using analogRead(), but whenever I connect a line it shorts to ground (which is shared between the contact box and the Arduino) and triggers the contact box's alarm. I need to devise a way to monitor voltages without triggering the alarm.

Each 5V line and ground from the generator has a bus bar termination point that connects to a point in the proprietary alarm box that houses the LEDs and buzzer. I connected Arduino ground to generator ground, then used A0-A7 on a Nano to connect to individual lines on the bus bar. Arduino VCC is connected to 5V regulated DC power.

  • 2
    What is the voltage you are trying to measure, and how exactly are you wiring it up?
    – Majenko
    Sep 21, 2015 at 15:36
  • 1
    Matt, please edit that information into the question. Also, say if you actually need to measure voltages or just want go/nogo signals as could be obtained using optoisolators. Sep 21, 2015 at 18:01
  • Input impedance of the analog pins is pretty low. So either the signal is very very weak, or your connections/software is doing something wrong.
    – Gerben
    Sep 21, 2015 at 18:21
  • I can detect the signals without problem. The issue is avoiding the short to ground when I add the arduino into the circuit.
    – Matt
    Sep 21, 2015 at 18:32
  • Since I was able to read voltages between load and the shared ground using a voltmeter without tripping the alarm, I thought I could do the same with an arduino.
    – Matt
    Sep 21, 2015 at 21:34

1 Answer 1


A voltmeter does not have a ground reference. An Arduino plugged into the USB port would have one. Conceivably a battery-powered Arduino might work, however a safer solution would be to use an opto-isolator to isolate the voltage being tested from the Arduino. Something like this:

Opto isolator

In this case you connect the "data pin" to the thing you are sensing. If it is at 5V then the LED will conduct (taking around 7 mA) and the transistor in the isolator will drive the Arduino pin LOW. If the data pin goes to zero volts, the transistor will not conduct, and the 1k resistor will pull the Arduino pin HIGH. Thus you can detect if the pin has changed voltage.

The 560 ohm resistor is a current-limiting resistor for the LED in the isolator. A 1k resistor would probably also work, reducing the current draw on the data pin to around 3.8 mA.

  • I would think you could also delete the 1K resistor and use the Arduino internal pullup resistor.
    – CrossRoads
    Feb 22, 2018 at 18:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.