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.