Long Distance Wired Analogue Control Question

Dear forum,

I'm trying to send an analogue signal via a 300m (1000ft) cable. It will then enter the Arduino Due via analogue "ins" and then be used to control electronic speed controllers and brushless motors. The signal has to be wired (as apposed to wireless) because its for an underwater device.

Given the distance and associated voltage drop, I think that i might have a challange to get a reliable signal at the arduino.

Can anyone offer me any tips for this?

Thanks, Dave

Presumably you could have some sort of amplifier to recover or recondition the signal before it goes into the Arduino (perhaps with an OpAmp, but I know very little about analogue circuits).


The 20 mA current loop is suitable for distances to 2000 feet at data rates up to 19.2k baud with careful attention to interface design. It can be used at longer distances when data rates are as low as 300 baud.

B&B Electronics, Current Loop Application Note

I don't think there's be any problem getting a signal - the impedance of the wire shouldn't be high enough (relative to your terminating resistance) to be a problem at those distances and whatever resistance there is should be constant and so easy to deal with by calibration. I suspect your main problem is going to be that the wires will act as a great big aerial and pick up all sorts of electromagnetic noise. Perhaps you could use a low-pass filter to get rid of that, or damp it out in software.

would coax or other shielded cable help with interference?

A 4-20mA loop would be the best idea for a long distance analog signal. Also the current in the loop is controlled by the signal, so if there is a short, or water problem the current is still the same 4-20mA. Since you are already operating in the analog part of electronics. Check out the TI XTR110 XTR110 data sheet, product information and support | TI.com for the transmitter.

On the arduino side, use the built in ADC. So V=IxR, so find out the resistance u need if u have I=0.020A and V= full scale ADC voltage. Recommend u run the ADC in deferential mode directly across the resister. The only issue i can think of will be the common mode voltage. The common mode voltage could be as high as the XTR110 supply voltage, 24+ volts. The arduino can not handle that, but as long as you do not attach the XTR110 common to the arduino common there will be no destructive current path for the CMV, hence the need for differential input mode.

You could use a difference amplifier to resolve the CMV problem if u wanted.

Thanks for the replies - I think the 20mA current loop sounds like a winner. It looks like i've got some reading to do to figure out how to implement it though. I'll give it a try and see if it works. If interferance is a problem then maybe i'll investigate shielded cabling...

z2012 - I'll need to have a think about what you say in your second paragraph. Sounds useful advice but i'll have to try to get my head around it first.


If interference is an issue using a standard that transmits over a twisted pair of wires can often help. The signal is sent differentially between the two wires. This means that when noise is added, it gets added to both wires equally and is subtracted out by the receiver.

RS422 is the standard you would most likely want to use if you need the noise immunity. It is generally good for 4000 ft, so that isn't an issue. You can find RS422 driver and receiver ICs that would make this application fairly simple. I would probably still try the current loop first, and if that failed look into 422.

There's the XTR111 as well if you go the 4-20mA way.

My preference has always been to digitise the signal as close to the source as possible then transmit using a serial protocol over RS-485/422 etc. That method is more complicated though.


sounds good- thanks. I'll let you know how i get on..

Look at using "twisted pair" as the cable.


Built a ROV as a senior project last year (Mech Eng. project). Ditch the analog input and send serial data down the line using RS485, this requires an Arduino on the surface to read the analog inputs and send this data down the line to a Arduino onboard the ROV. Look into the MAX485 chips and the LTC490 IC's, both are good search terms in google ( I went with the LTC490, ~$4/IC).

Just for reference because RS422 and RS485 are both showing up here. RS422 and RS485 are almost the same standard. The biggest difference is that 485 allows for more devices to share the bus (32) instead of (5-10). If I understand correctly you are only using two devices, so you can pick either standard to follow. Most devices that support one support the other.

If you like details, here's a link.

RS-232 / RS-485 / RS-422 - what's difference? | Home (State of the Art Networking - not an ad)