BNO-055 Breakout- full calibration freezes sensor

Hello, all!
I am using a breakout from adafruit for the BNO-055.
everything in the Raw Data sketch goes well until the system is fully calibrated, at which point the sketch makes the arduino print out

X: -0.06 Y: -0.06 Z: -0.06 CALIBRATION: Sys=3 Gyro=3 Accel=3 Mag=3
X: -0.06 Y: -0.06 Z: -0.06 CALIBRATION: Sys=3 Gyro=3 Accel=3 Mag=3

constantly, no matter the orientation. The sketch also runs considerably slower, only printing 2 times a second as oppose to the regular ~5 times a second. It is important to note that I am using the arduino Due.
Any thought on why the sensor freezes at full calibration and doesn't give the correct data?

Please include your code directly in the post, using [­code][­/code] tags.

lg, couka

Did you do all this : ?

Gyroscope: The device must be standing still in any position
Magnetometer: In the past 'figure 8' motions were required in 3 dimensions, but with recent
devices fast magnetic compensation takes place with sufficient normal movement of the device
Accelerometer: The BNO055 must be placed in 6 standing positions for +X, -X, +Y, -Y, +Z and -
Z. This is the most onerous sensor to calibrate, but the best solution to generate the calibration
data is to find a block of wood or similar object, and place the sensor on each of the 6 'faces' of
the block, which will help to maintain sensor alignment during the calibration process. You
should still be able to get reasonable quality data from the BNO055, however, even if the
accelerometer isn't entirely or perfectly calibrated.

The most reliable way to resolve this issue is simply open a support ticket on the Adafruit Support forum. It will take a day or two for them to respond but they answer all the tickets. I have used it and they would be more likely to know what the problem is. I suspect it is "operator error" but no doubt you will swear up and down you did everything correctly so I'll let Adafruit address that issue.

couka:
Please include your code directly in the post, using [­code][­/code] tags.

lg, couka

(it looks like code tags don't work on this board, but I know you guys hate clicking external links, so here it is anyway)
as linked in the OP, code:
[­code]#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>

/* This driver reads raw data from the BNO055
Connections

Connect SCL to analog 5
Connect SDA to analog 4
Connect VDD to 3.3V DC
Connect GROUND to common ground
History

2015/MAR/03 - First release (KTOWN)
*/

/* Set the delay between fresh samples */
#define BNO055_SAMPLERATE_DELAY_MS (100)

Adafruit_BNO055 bno = Adafruit_BNO055();

//
/*
Arduino setup function (automatically called at startup)
*/
/
/
void setup(void)
{
Serial.begin(9600);
Serial.println("Orientation Sensor Raw Data Test"); Serial.println("");

/* Initialise the sensor /
if(!bno.begin())
{
/
There was a problem detecting the BNO055 ... check your connections */
Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
while(1);
}

delay(1000);

/* Display the current temperature */
int8_t temp = bno.getTemp();
Serial.print("Current Temperature: ");
Serial.print(temp);
Serial.println(" C");
Serial.println("");

bno.setExtCrystalUse(true);

Serial.println("Calibration status values: 0=uncalibrated, 3=fully calibrated");
}

//
/*
Arduino loop function, called once 'setup' is complete (your own code
should go here)
*/
/
/
void loop(void)
{
// Possible vector values can be:
// - VECTOR_ACCELEROMETER - m/s^2
// - VECTOR_MAGNETOMETER - uT
// - VECTOR_GYROSCOPE - rad/s
// - VECTOR_EULER - degrees
// - VECTOR_LINEARACCEL - m/s^2
// - VECTOR_GRAVITY - m/s^2
imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);

/* Display the floating point data */
Serial.print("X: ");
Serial.print(euler.x());
Serial.print(" Y: ");
Serial.print(euler.y());
Serial.print(" Z: ");
Serial.print(euler.z());
Serial.print("\t\t");

/*
// Quaternion data
imu::Quaternion quat = bno.getQuat();
Serial.print("qW: ");
Serial.print(quat.w(), 4);
Serial.print(" qX: ");
Serial.print(quat.y(), 4);
Serial.print(" qY: ");
Serial.print(quat.x(), 4);
Serial.print(" qZ: ");
Serial.print(quat.z(), 4);
Serial.print("\t\t");
*/

/* Display calibration status for each sensor. */
uint8_t system, gyro, accel, mag = 0;
bno.getCalibration(&system, &gyro, &accel, &mag);
Serial.print("CALIBRATION: Sys=");
Serial.print(system, DEC);
Serial.print(" Gyro=");
Serial.print(gyro, DEC);
Serial.print(" Accel=");
Serial.print(accel, DEC);
Serial.print(" Mag=");
Serial.println(mag, DEC);

delay(BNO055_SAMPLERATE_DELAY_MS);
}[­/code]

raschemmel:
Did you do all this : ?
The most reliable way to resolve this issue is simply open a support ticket on the Adafruit Support forum. It will take a day or two for them to respond but they answer all the tickets. I have used it and they would be more likely to know what the problem is. I suspect it is "operator error" but no doubt you will swear up and down you did everything correctly so I'll let Adafruit address that issue.

Figure 8-ing the sensor is what jams it.

Figure 8-ing the sensor is what jams it

Magnetometer: In the past 'figure 8' motions were required in 3 dimensions, but with recent
devices fast magnetic compensation takes place with sufficient normal movement of the device

Describe EXACTLY how you did that .

Another thing to be aware of is that until the sensor calibrates it has a relative orientation output (i.e.
orientation will be relative to where the sensor was when it powered on).
A system status value of '0' in NDOF mode means that the device has not yet found the 'north pole',
and orientation values will be relative not absolute. Once calibration and setup is complete (system
status > '0') the heading will jump to an absolute value since the BNO has found magnetic north (the
system calibration status jumps to 1 or higher). See the Device Calibration page in this learning guide
for further details

bno055-absolute-orientation-sensor.pdf

raschemmel:
Describe EXACTLY how you did that .


^moving the sensor along a path that looks like that from the top

moving the sensor along a path that looks like that from the top

Magnetometer: In the past 'figure 8' motions were required in 3 dimensions, but with recent
devices fast magnetic compensation takes place with sufficient normal movement of the device

I would interpret that as meaning 3 figure 8s, one in X axis, one in Y axis and one in Z axis but actually that is very open to interpretation.(like which way is X ? which way is Y? and which way is Z ?)

tried the 3 figure 8s (Xy, Xz, Yz). nada.

new discoveries:
when the sensor dies, the arduino aquires a high-frequency whine.
also, I tried disconnecting the VCC line (+3.3V) while not calibrated, and it will print out the same thing.I'm going to check the connections to the chip

new discoveries:
when the sensor dies, the arduino aquires a high-frequency whine.
also, I tried disconnecting the VCC line (+3.3V) while not calibrated, and it will print out the same thing.I'm going to check the connections to the chip

Is it possible to use it without calibrating it or does it report all zeros ?

raschemmel:
Is it possible to use it without calibrating it or does it report all zeros ?

the data sheet says that it is always calibrating, so I cannot, sadly :frowning:

tuskiomi:
(it looks like code tags don't work on this board, but I know you guys hate clicking external links, so here it is anyway)

They do, but you probably copied my [­code][­/code] tags, which are written in a way that avoids them getting interpreted. Otherwise you couldn't see them :wink:

You can either write them by hand, or use the </>-Button.

lg, couka

Just highlight the code and click the button and then save.

It was a connection issue. solved.

It was a connection issue. solved.

Would you care to elaborate for the benefit of others who may have similar issues or are you simply saying you screwed up when wiring it ?

Geez, no explanation from the OP at all, and here I am a year later, experiencing the exact same thing. Code worked fine on my last board and I have a new board layout that seems to have the same connections => on the new layout the Adafruit BNO055 worked perfectly until I got calibration complete, and then suddenly all values became 0.0625, and upon restart the board is not responding on I2C at all.

OP (Tuskiomi): if you are receiving notifications, please consider this an invitation to provide more detail about the connection issue that led to this problem. :slight_smile:

I'm having the same issue too with the same values even. Did anyone ever find out what this issue was?

Ok so I think its probably a wiring issue as the op originally mentioned. I had just over a foot of unshielded wire leading to my bno055 breakout and was not aware of the issues with i2c over longer cables. I found this article (link below) describing the issue, which specifically mentions the bno055. I'll be implementing the differential i2c solution and report back if that fixed my problems.