Go Down

Topic: 9 axis motion shield (Read 5692 times) previous topic - next topic


Hi there,

I bought a 9 axis motion shield and use it with an arduino uno. It seems to work fine, but ....

The Accelerometer is supposed to have 14bit. Ignoring the sign there are 13bit left.
My shield is in accelerometer range +-4g (using the standard example in the ide, examples --> 9 axis motion --> aqccelerometer).
Therefore I expect 4*10/(2^13)= 0,00488m/s^2 to be the resolution of the system.
The shield gives values with two decimals only, and with these I have the impression that the resolution is not even 0,01.
I found no information wether there is a way to adjust the resolution or what might be the cause of this point.
Does anybody have an idea about this?

Thanks, Gerd


The data sheet for the accelerometer will specify the resolution.

When printing floating point numbers, you can specify the number of digits after the decimal point:

float x=1.2345;


Thanks for the quick response.

I tried this as well. So the floating point numbers I see are not limited by printing them to the serial monitor, they actually are not more precise than two digits.

The resolution from the accelerometer ist specified in the datasheet to be 14bit. That's why I am confused, because according to my calculation I cannot access the complet resolution

Do you have any idea?



The resolution from the accelerometer ist specified in the datasheet to be 14bit.
That is the resolution of the output data format.  It is not the resolution of the measurement, which will be limited by the device sensitivity and measurement noise.

Post a link to the device data sheet if you want informed advice.



the requested data:

The Shield has a Bosch BNO055-Chip.
The datasheet is here: http://www.mouser.com/ds/2/621/BST_BNO055_DS000_10_Release-371197.pdf
On Page 29 it is written "resolution 14 bit" and "range +-4g" for the accelerometer.

The link to the shield itself ist here: http://www.exp-tech.de/arduino-9-axes-motion-shield.
I'm using the example of the arduino ide: examples --> 9 Axes Motion --> Accelerometer.

Again my confusion results from:
range +-4g needs 1 bit for the sign.
the residual 13 bit result in 2^13=8192 steps.
Assuming that 4g=4*10m/s^2 is divided by 8192 this results in 40/8192=0,00488m/s^2.

What I get from the shield, using the example from the ide, are values like 0.00, 0.01, 0.02, 0.03.
Conversion of the variables with more than two digits after the decimal point results in 0.0000, 0.0100, 0.0200, ....
So I am not talking about noise in the measured data.
My concern is, that the measured values are spaced by 0.01m/s^2, actually they should be spaced by
And I did not find any information on adjusting the resolution of the accelerometer. Assuming that I did not make a mistake, the measurement now is not precise to 14 bit.



May 19, 2015, 09:08 pm Last Edit: May 19, 2015, 09:12 pm by jremington
That data sheet is useless.

In addition to the fact that the accelerometer resolution is NOT 13 bits plus sign, the code is probably wrong too. But you did not bother to post it.


I'm sorry for possibly "stupid postings".

1) Why is the datasheet useless? The statement alone is not helpful.
2) Why is the resolution of the accelerometer not 13 bits plus sign? I still think this is right.
3) The code is in the examples of the ide - but it is attached now.



May 19, 2015, 11:43 pm Last Edit: May 19, 2015, 11:44 pm by jremington
Sorry, I did not look in the correct place on the data sheet.

On page 13, the sensitivity of the accelerometer is stated to be 1 LSB/milli-g (1 LSB/mg).

This means that a 1 bit change in the accelerometer output corresponds to 9.8 m/s^2/1000 = 0.0098 m/s^2. This would be printed as 0.01 to two decimal places.

However, the accelerometer offset is +/- 150 mg plus there is temperature drift and noise to consider.

This is quite a complex part that also contains a microprocessor to calculate the device orientation, but the data sheet tells you nearly nothing about how it works or how accurate the orientation output might be.


These numbers from page 13 seem to specify the resolution/sensitivity to 0.01m/s^2. I did overlook these. The temperature drift and so on come in addition, I know. But I can compensate for these on a short time scale.

Would you agree to the following summary?
Bosch provides a system with 14bit of resolution/ADC conversion for the accelerometer, but they acually cut down the resolution because the measurement is unreliable below 0.01m/s^2?
In standard mode the system works from -4g to 4g, the mode I used. So the resolution/sensitivity should be 2*4*10m/s^2/(2^14)=0.00488m/s^2. So 1 bit in resolution is neglected.
Even worse: The system offers a +-2g range. In this case the resolution/sensitivity should be 0.00244m/s^2. So 2 bit in resolution are neglected resulting in 12 bit resolution !??!

I know that the processed values of linear acceleration, gravity, orientation ... are calculated from the raw values of the magnetometer, the gyrosensor and the accelerometer. They certainly are not precise down to the resolution from the datasheet or at least I have no idea of how the library from Bosch does the calculation.
But I would have expected the raw values (pure accelerometer) to be that precise or at least to look that precise.




how can i change I2C-busaddress from 9 Axis Motion Shield?

Default: 0x28

I want use two Shields with arduino UNO.

See datasheet BNO055: address 0x28 or 0x29
page 90

Thanks for your Support.


Oct 20, 2015, 05:07 pm Last Edit: Oct 20, 2015, 05:08 pm by jremington
From the datasheet, page 90.
The default I²C address of the BNO055 device is 0101001b (0x29). The alternative address 0101000b (0x28), in I2C mode the input pin COM3 can be used to select between the primary and alternative I2C address as shown in Table 4-7.


Thanks for the quick response. :)

I don't understand where i find the pin 17 /COM3 is on the Shield.


Sorry, but i dont't know how change busaddress (0x28 or 0x29) from 9 AxisMotionShield.


In schematic you see the pin 17/COM3 from BNO055. PIN 17 is connect about resistors with 3.3V and 0V. Its right? NC = normaly close? 

How can i switch high or low level at this pin17 on this shield?

Thanks for your support. :)

best regards


Oct 20, 2015, 10:10 pm Last Edit: Oct 20, 2015, 10:10 pm by jremington
The schematics suggest that there are jumpers or solder blobs, or zero ohm resistors on COM3 to select the address. You will have to either take a very close look at the board to find them, or contact the manufacturer for more info.


Hi everbody,

i need help to use this shield with mega and i didn't find anywhere about connection pins for arduino mega so how can i connect this shield to mega ?

Go Up