The BNO055 is a highly integrated sensor module manufactured by Pololu (Part ID: BNO055). It combines a 3-axis accelerometer, 3-axis gyroscope, and 3-axis magnetometer to provide absolute orientation in 3D space. Unlike traditional IMUs, the BNO055 features an onboard sensor fusion algorithm, which processes raw sensor data to output orientation in Euler angles (roll, pitch, yaw) or quaternion format. This eliminates the need for complex external computations, making it a plug-and-play solution for motion tracking.
The following table outlines the key technical details of the BNO055 module:
Parameter | Value |
---|---|
Operating Voltage | 2.4V to 3.6V (3.3V typical) |
Communication Interfaces | I²C (default), UART |
I²C Address (Default) | 0x28 (can be changed to 0x29) |
Gyroscope Range | ±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s |
Accelerometer Range | ±2g, ±4g, ±8g, ±16g |
Magnetometer Range | ±1300 µT |
Orientation Output | Euler angles, Quaternion, Linear Acceleration |
Power Consumption | 12 mA (typical) |
Operating Temperature Range | -40°C to +85°C |
Dimensions | 3.8 mm x 5.2 mm x 1.1 mm |
The BNO055 module has the following pinout:
Pin | Name | Description |
---|---|---|
1 | VIN | Power supply input (2.4V to 3.6V, typically 3.3V). |
2 | GND | Ground connection. |
3 | SDA | I²C data line. |
4 | SCL | I²C clock line. |
5 | PS0 | Protocol selection pin 0 (used to select I²C or UART mode). |
6 | PS1 | Protocol selection pin 1 (used to select I²C or UART mode). |
7 | RST | Reset pin (active low). |
8 | INT | Interrupt pin (can be configured for various interrupt sources). |
9 | TX | UART transmit line (used in UART mode). |
10 | RX | UART receive line (used in UART mode). |
Below is an example of how to interface the BNO055 with an Arduino UNO using I²C:
#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);
void setup() {
Serial.begin(9600); // Initialize serial communication
Serial.println("BNO055 Test");
// Initialize the BNO055 sensor
if (!bno.begin()) {
Serial.println("Failed to initialize BNO055! Check connections.");
while (1);
}
// Set the sensor to NDOF mode (sensor fusion for absolute orientation)
bno.setMode(Adafruit_BNO055::OPERATION_MODE_NDOF);
Serial.println("BNO055 initialized successfully!");
delay(1000);
}
void loop() {
// Get Euler angles (roll, pitch, yaw)
sensors_event_t event;
bno.getEvent(&event);
Serial.print("Roll: ");
Serial.print(event.orientation.x);
Serial.print(" Pitch: ");
Serial.print(event.orientation.y);
Serial.print(" Yaw: ");
Serial.println(event.orientation.z);
delay(500); // Delay for readability
}
Sensor Not Detected:
Inaccurate Orientation Data:
Module Not Responding:
Random Resets:
Q: Can the BNO055 output raw sensor data?
A: Yes, the BNO055 can output raw accelerometer, gyroscope, and magnetometer data in addition to fused orientation data.
Q: How do I reset the module?
A: Pull the RST pin low for at least 1 ms, then release it to reset the module.
Q: Can I use the BNO055 with a 5V microcontroller?
A: Yes, but you must use a level shifter for the I²C or UART lines, as the BNO055 operates at 3.3V logic levels.
Q: How do I change the I²C address?
A: Connect the ADR pin to VCC to change the I²C address from 0x28 to 0x29.
By following this documentation, you can effectively integrate the BNO055 into your projects for precise motion tracking and orientation sensing.