

The BN0 O55 is a high-performance 9 Degrees of Freedom (9DoF) Inertial Measurement Unit (IMU) developed by Adafruit. It integrates a 3-axis accelerometer, a 3-axis gyroscope, and a 3-axis magnetometer into a single compact module. This combination allows the BN0 O55 to provide precise motion tracking and orientation data, making it ideal for applications such as robotics, drones, augmented reality, and mobile devices.
The BN0 O55 is designed for ease of use, featuring I2C and UART communication interfaces for seamless integration with microcontrollers and development boards like the Arduino UNO. Its onboard sensor fusion algorithms simplify the process of obtaining accurate orientation data, reducing the computational burden on the host system.








The BN0 O55 module has the following pinout:
| Pin | Name | Description |
|---|---|---|
| 1 | VIN | Power input (3.3V to 5V). |
| 2 | GND | Ground connection. |
| 3 | SDA | I2C data line. |
| 4 | SCL | I2C clock line. |
| 5 | TX | UART transmit pin (for serial communication). |
| 6 | RX | UART receive pin (for serial communication). |
| 7 | INT | Interrupt pin (used for event notifications). |
| 8 | RST | Reset pin (active low, used to reset the module). |
Powering the Module:
Connect the VIN pin to a 3.3V or 5V power source and the GND pin to the ground of your circuit.
Communication Interface:
Interrupts and Reset:
Sensor Fusion:
The BN0 O55 includes onboard sensor fusion algorithms to provide orientation data (e.g., Euler angles or quaternions). Use the Adafruit Unified Sensor library to access this data.
Below is an example of how to use the BN0 O55 with an Arduino UNO via I2C:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
// Create an instance of the BNO055 sensor
Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x28); // Default I2C address is 0x28
void setup() {
Serial.begin(9600); // Initialize serial communication
while (!Serial) {
delay(10); // Wait for Serial Monitor to open
}
Serial.println("Initializing BNO055...");
// Initialize the BNO055 sensor
if (!bno.begin()) {
Serial.println("Failed to initialize BNO055! Check connections.");
while (1);
}
bno.setExtCrystalUse(true); // Use external crystal for better accuracy
Serial.println("BNO055 initialized successfully.");
}
void loop() {
// Get orientation data (Euler angles)
sensors_event_t event;
bno.getEvent(&event);
// Print orientation data to 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
}
Sensor Not Detected:
Inaccurate Readings:
Module Not Responding:
Q: Can the BN0 O55 be used with 5V microcontrollers?
A: Yes, the BN0 O55 supports 3.3V to 5V logic levels, making it compatible with 5V microcontrollers like the Arduino UNO.
Q: How do I calibrate the BN0 O55?
A: Use the Adafruit BNO055 library's calibration functions. Follow the instructions in the library documentation to perform a full calibration.
Q: What is the maximum I2C clock speed supported?
A: The BN0 O55 supports I2C clock speeds up to 400 kHz (Fast Mode).
Q: Can I use the BN0 O55 for GPS-based navigation?
A: While the BN0 O55 provides orientation data, it does not include GPS functionality. You can combine it with a GPS module for navigation applications.