

The BNO085, manufactured by 宏维微 (part ID: HW-1002), is a 9-axis absolute orientation sensor that integrates a 3-axis accelerometer, a 3-axis gyroscope, and a 3-axis magnetometer. This sensor is designed to provide precise motion tracking and orientation data, making it ideal for applications in robotics, drones, augmented reality (AR), virtual reality (VR), and wearable devices. Its advanced sensor fusion algorithms ensure high accuracy and reliability in dynamic environments.








The following table outlines the key technical details of the BNO085 sensor:
| Parameter | Value |
|---|---|
| Operating Voltage | 2.4V to 3.6V |
| Communication Interfaces | I²C, SPI, UART |
| Maximum I²C Clock Speed | 400 kHz |
| Gyroscope Range | ±2000°/s |
| Accelerometer Range | ±16g |
| Magnetometer Range | ±1300 µT |
| Operating Temperature | -40°C to +85°C |
| Power Consumption | ~1.3 mA (typical, depends on mode) |
| Dimensions | 3.8 mm x 3.8 mm x 0.95 mm |
The BNO085 is typically available in a 28-pin LGA package. Below is the pin configuration and description:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | VDD | Power supply (2.4V to 3.6V) |
| 2 | GND | Ground |
| 3 | SDA | I²C data line |
| 4 | SCL | I²C clock line |
| 5 | CS | Chip select for SPI communication |
| 6 | SDO | SPI data output |
| 7 | SDI | SPI data input |
| 8 | INT | Interrupt output (active low) |
| 9-28 | NC | Not connected (reserved for future use) |
Below is an example of how to interface the BNO085 with an Arduino UNO using the I²C protocol:
#include <Wire.h>
// BNO085 I2C address
#define BNO085_ADDRESS 0x4A
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Check if the BNO085 is connected
Wire.beginTransmission(BNO085_ADDRESS);
if (Wire.endTransmission() == 0) {
Serial.println("BNO085 connected successfully!");
} else {
Serial.println("Failed to connect to BNO085. Check wiring.");
while (1); // Halt execution if sensor is not detected
}
// Additional initialization code for the BNO085 can be added here
}
void loop() {
// Request data from the BNO085
Wire.beginTransmission(BNO085_ADDRESS);
Wire.write(0x00); // Example register address (replace with actual register)
Wire.endTransmission(false);
Wire.requestFrom(BNO085_ADDRESS, 6); // Request 6 bytes of data
if (Wire.available() == 6) {
int16_t x = Wire.read() | (Wire.read() << 8); // Read X-axis data
int16_t y = Wire.read() | (Wire.read() << 8); // Read Y-axis data
int16_t z = Wire.read() | (Wire.read() << 8); // Read Z-axis data
// Print the data to the serial monitor
Serial.print("X: "); Serial.print(x);
Serial.print(" Y: "); Serial.print(y);
Serial.print(" Z: "); Serial.println(z);
}
delay(100); // Delay for stability
}
Sensor Not Detected:
Inaccurate Readings:
Communication Errors:
By following this documentation, users can effectively integrate the BNO085 into their projects and achieve accurate motion tracking and orientation data.