

The BNO-055 is a 9-axis absolute orientation sensor that integrates a 3-axis accelerometer, a 3-axis gyroscope, and a 3-axis magnetometer. Unlike traditional sensors that require external processing, the BNO-055 features an onboard microcontroller that fuses sensor data to provide accurate orientation information in real-time. This makes it an excellent choice for applications requiring precise motion tracking, such as robotics, drones, augmented reality, and wearable devices.








The BNO-055 is a highly versatile sensor with the following key specifications:
| Parameter | Value | 
|---|---|
| Operating Voltage | 2.4V to 3.6V | 
| Communication Interfaces | I²C, UART, SPI | 
| Power Consumption | 12 mA (typical in normal mode) | 
| Operating Temperature | -40°C to +85°C | 
| Accelerometer Range | ±2g, ±4g, ±8g, ±16g | 
| Gyroscope Range | ±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s | 
| Magnetometer Range | ±1300 µT | 
| Output Data Rate | Up to 100 Hz | 
| Dimensions | 3.8 mm x 5.2 mm x 1.1 mm | 
The BNO-055 has 10 pins, as described in the table below:
| Pin | Name | Description | 
|---|---|---|
| 1 | GND | Ground connection | 
| 2 | VDD | Power supply (2.4V to 3.6V) | 
| 3 | SDA | I²C data line (or UART TX in UART mode) | 
| 4 | SCL | I²C clock line (or UART RX in UART mode) | 
| 5 | PS0 | Protocol selection pin 0 (used to select I²C, UART, or SPI mode) | 
| 6 | PS1 | Protocol selection pin 1 (used to select I²C, UART, or SPI mode) | 
| 7 | RST | Reset pin (active low) | 
| 8 | INT | Interrupt pin (used for event notifications) | 
| 9 | BOOT | Boot mode selection pin | 
| 10 | NC | Not connected | 
The BNO-055 can be easily interfaced with an Arduino UNO using the I²C protocol. Below is a step-by-step guide:
Wiring:
VDD pin of the BNO-055 to the 3.3V pin on the Arduino.GND pin of the BNO-055 to the GND pin on the Arduino.SDA pin of the BNO-055 to the A4 pin on the Arduino (I²C data line).SCL pin of the BNO-055 to the A5 pin on the Arduino (I²C clock line).PS0 and PS1 pins to LOW to enable I²C mode.Install Required Libraries:
Example Code: Use the following code to read orientation data from the BNO-055:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
// Create an instance of the BNO055 sensor
Adafruit_BNO055 bno = Adafruit_BNO055(55);
void setup() {
  Serial.begin(9600);
  // Initialize the BNO055 sensor
  if (!bno.begin()) {
    Serial.println("BNO055 not detected. Check wiring or I2C address!");
    while (1);
  }
  Serial.println("BNO055 initialized successfully!");
  bno.setExtCrystalUse(true); // Use external crystal for better accuracy
}
void loop() {
  // Get orientation data (Euler angles)
  sensors_event_t event;
  bno.getEvent(&event);
  // Print orientation data to the Serial Monitor
  Serial.print("Heading: ");
  Serial.print(event.orientation.x);
  Serial.print("°, Pitch: ");
  Serial.print(event.orientation.y);
  Serial.print("°, Roll: ");
  Serial.print(event.orientation.z);
  Serial.println("°");
  delay(100); // Delay for readability
}
SDA/SCL and VDD.BNO-055 Not Detected:
PS0 and PS1 pins are set for I²C mode. Verify the I²C address in the code (default is 0x28).Inaccurate Orientation Data:
No Data Output:
Random Spikes in Data:
Q: Can the BNO-055 be used with a 5V microcontroller?
Q: How do I reset the BNO-055?
RST pin low for at least 1 ms, then release it.Q: What is the maximum cable length for I²C communication?
Q: Can I use the BNO-055 in SPI mode?
By following this documentation, you can effectively integrate the BNO-055 into your projects and troubleshoot common issues.