Interfacing multiple arduinos over a long distance

So I have a need to have multiple (16.. expandable to 24) ardiuno's talk to one another over a large distance. One of the things I'm trying to do is make use of a bunch of 3 wire cables (XLR) that I have, so communication with RJ45, or other protocols that use more wires really isn't going to work.

Option 1: Use I2c with a series of line extender's like this TI P82B715

  • Each Arduino would be in series to each other.
  • I'd need about 300 total feet, but a maximun of 75 feet between arduino's
  • I'm just not sure this is feasible

Option 2: Same as Option 1, except use the arduino's in a "star" formation, vs a bus.

  • Master I2c would be in the middle of the star.
  • max distance would need to be no more than 75 feet from master to each slave

Option 3: Scrap the wires and go with Xbee wireless modules.

  • I like this option the most, except for the cost. 16 Arduino's + 16 Xbee modules is starting to get the price up.

I guess what I'm wondering is if there is a better communication protocol to use, that wouldn't require any more than the 3 wires in my cable? Can you get I2C to talk at these distances? has anyone worked with the line extenders or something like it?

Just not sure where to go on this. Help is appreciated.

Do the three wires have to carry power as well?

1 wire will need to be a common ground, but no each arduino will have it's own power source.

RS485 will do 75' easily depending on the bit rate and you have two wires for it. So you could multi-drop all the Arduinos and come up with a protocol, normally this would mean a master that polls the slaves. 485 should not be used in a star topology, it should be a bus with short "stubs" to each node. It also needs line termination.

LIN transceivers only need 1 wire and are rated at 40m but should do better. LIN is not balanced but still very noise immune.

I2C is not intended for long runs like that but I don't know much about it, with drivers and/or slower rates it would probably work.

Whatever you do, if the application is important you'll have to come up with a protocol to handle errors etc. That's the hard part.

Wireless has it's place but a wire is always more reliable and cheaper if you have access to run the lines.

The Jeenode RF Tx/Rx enabled Arduinos might be a way to go. Details at http://shop.jeelabs.com/products/jeenode

Did you understand...

normally this would mean a master that polls the slaves

?

If that is acceptable, it affects the answers you might get.

Yeah, having the master poll the slaves for information will be totally acceptable.

I also did a bit of reading into RS485, and it looks like it would work pretty well for the task.

Here is a good example of a RS485 master/slave setup

Too funny... that was the "reading" I was doing... plus some others.. thanks for the link.