Datalogging 9dof accelerometers over distances of >10m

Hi,

Not sure if this is the right place to ask this but it’s worth a shot.

I would like to use four 9dof inertial measurement units (IMUs) in an engineering project. The units will each be about 10-15m from the PC that I would use to log the data.

After a bit of searching I found these (and similar units):

https://www.sparkfun.com/products/11486

They use I2C, something I’d not heard of before starting this work, and so would only require 4 wires to each IMU (VCC, GND, SDA, SCL). I’m used to sensors that give voltage or current output (e.g. 0-10V, or 4-20mA), and initially thought that I’d need at least 11 wires going into each IMU (1 for VCC, 1 for GND, and 1 for each of the 9 degrees of freedom), so I quite liked the idea that I would only need 4 wires going into each of the four IMUs.

My plan was to connect them all to one of these:

http://sine.ni.com/nips/cds/view/p/lang/en/nid/202368

Then I would use Labview to log the data and to create a front-end to show the readings.

However, I’ve realised that to send the data over the distances involved (probably 10-15m), I2C may not be a good idea because of noise.

So does anyone have any suggestions as to what combination of sensors and DAQ unit(s) to use? I don’t want it to cost too much (ideally no more than about £700 for the sensors and DAQ unit).

Thanks in advance for anything you can offer!

Andrew

Correct, I2C is not designed for long distances but for on a single PCB. The I2C buss can go further but reliability can be an issue.

If all your I2C sensors are close together than the easiest/cheapest solution is to use an Arduino (any variety) to read the sensors with I2C then transmit the data over an RS232 or USB to the PC.

I2C devices have unique device addresses and you may not have more than one device per address on the I2C bus. Although some allow you to change the default device address (within limits) many do not. The MPU-9150 allows you to select 1 bit of the address, so you would be limited to 2 per bus.

The Arduino has one hardware I2C module (so one bus with that module) but you can also implement I2C in software, and thus have more than one bus.

Thanks for your help guys.

Before seeing these messages I had been reading that I2C could be sent over longer distances by using lower data transfer rates or using I2C extenders/repeaters. However, the fact that only 2 of the MPU-9150 devices can be on a single I2C bus certainly scuppers my plan of using one NI-8451.

(I now see that in the I2C address section of the MPU-9150 data sheet it says the address can be 1101000 or 1101001, hence no more than 2 of those devices can be on a single bus.)

If I were to use a separate Arduino for each sensor, would I be limited to 10 bits of resolution for each dof? It certainly seems that the ADCs for the analog inputs are limited to 10 bits, not sure if that is also the case for the I2C inputs. I think my supervisor was hoping for higher resolution than 10 bits.

Also, are USB cables less susceptible to noise than I2C bus cables then? If I were to use a separate Arduino for each sensor, I’m wondering whether I would be better off mounting the Arduinos right next to the sensors, or having the Arduinos next to the PC and running the I2C bus cables from the sensors to the Arduinos.

jremington, your last point suggests to me that I could have 2 buses for a single Arduino, and so have all 4 MPU-9150 devices attached to a single Arduino (2 per bus) - let me know if I’m wrong about that.

Thanks again.

johnson_69:
If I were to use a separate Arduino for each sensor, would I be limited to 10 bits of resolution for each dof? It certainly seems that the ADCs for the analog inputs are limited to 10 bits, not sure if that is also the case for the I2C inputs. I think my supervisor was hoping for higher resolution than 10 bits.

The 9150 uses the I2C bus for it's digital output. I'm not sure what a 9150's internal resolution is but that doesn't matter, the resolution/sensitivity and it's dynamic range for each of it's outputs is listed. Also the data rate. You need to know what your experiment needs *before you choose the sensor*.

http://dlnmh9ip6v2uc.cloudfront.net/dat … -9150A.pdf

From the datasheet …

5.1 Gyroscope Features
The triple-axis MEMS gyroscope in the MPU-9150 includes a wide range of features:
• Digital-output X-, Y-, and Z-Axis angular rate sensors (gyroscopes) with a user-programmable fullscale
range of ±250, ±500, ±1000, and ±2000°/sec
• External sync signal connected to the FSYNC pin supports image, video and GPS synchronization
• Integrated 16-bit ADCs enable simultaneous sampling of gyros
• Enhanced bias and sensitivity temperature stability reduces the need for user calibration
• Improved low-frequency noise performance
• Digitally-programmable low-pass filter
• Factory calibrated sensitivity scale factor
• User self-test
5.2 Accelerometer Features
The triple-axis MEMS accelerometer in MPU-9150 includes a wide range of features:
• Digital-output 3-Axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g
• Integrated 16-bit ADCs enable simultaneous sampling of accelerometers while requiring no external
multiplexer
• Orientation detection and signaling
• Tap detection
• User-programmable interrupts
• High-G interrupt
• User self-test
5.3 Magnetometer Features
The triple-axis MEMS magnetometer in MPU-9150 includes a wide range of features:
• 3-axis silicon monolithic Hall-effect magnetic sensor with magnetic concentrator
• Wide dynamic measurement range and high resolution with lower current consumption.
• Output data resolution is 13 bit (0.3 μT per LSB)
• Full scale measurement range is ±1200 μT
• Self-test function with internal magnetic source to confirm magnetic sensor operation on end
products

Sample rates and bandwidths of the sensors are also listed in the datasheet.

Using a separate Arduino per 9150 is certainly the easiest way to go and then all you need is 4 USB ports on the PC (or a USB hub). If you wanted you could use 4 Pro Mini’s (no on-board USB) and connect them to a NI box that has 4 TTL level serial ports (UARTs) and then 1 USB connection to the PC. This is probably more $$ but might allow you to sync the data collection btw the Arduinos (if needed).

jremington, your last point suggests to me that I could have 2 buses for a single Arduino, and so have all 4 MPU-9150 devices attached to a single Arduino (2 per bus) - let me know if I’m wrong about that.

Yes, in principle you can have all four 9150s on a single Arduino. You could have two 9150s on the hardware bus and two on a software bus. Here is a link to a software I2C library http://playground.arduino.cc/Main/SoftwareI2CLibrary

There likely will be problems with long runs of wire, so make sure you can do what you want with one 9150 attached to one Arduino, before committing yourself to a particular system design.