

The BNO085 is a high-performance Inertial Measurement Unit (IMU) developed by Adafruit Industries LLC (Manufacturer Part ID: 4754). It integrates a 3-axis accelerometer, 3-axis gyroscope, and 3-axis magnetometer to provide precise orientation and motion tracking. The module leverages advanced sensor fusion algorithms to deliver accurate 9-degree-of-freedom (9-DOF) data, making it a versatile solution for a wide range of applications.








The following table outlines the key technical details of the BNO085 sensor module:
| Parameter | Value |
|---|---|
| Manufacturer | Adafruit Industries LLC |
| Manufacturer Part ID | 4754 - Adafruit 9-DOF Orientation IMU Fusion Breakout |
| Sensor Type | 3-axis accelerometer, 3-axis gyroscope, 3-axis magnetometer |
| Operating Voltage | 3.3V to 5V |
| Communication Interfaces | I2C, SPI, UART |
| I2C Address (Default) | 0x4A |
| Operating Temperature Range | -40°C to +85°C |
| Dimensions | 25.4mm x 17.8mm x 3.2mm |
| Weight | 1.5g |
The BNO085 breakout board features the following pins:
| Pin Name | Description |
|---|---|
| VIN | Power input (3.3V to 5V) |
| GND | Ground connection |
| SDA | I2C data line |
| SCL | I2C clock line |
| CS | Chip select for SPI communication (active low) |
| SDO | SPI data output (MISO) |
| SDI | SPI data input (MOSI) |
| SCK | SPI clock line |
| INT | Interrupt pin (used for event notifications) |
| RST | Reset pin (active low, optional for resetting the module) |
Below is an example of how to use the BNO085 with an Arduino UNO via I2C:
#include <Wire.h>
#include <Adafruit_BNO08x.h>
// Create an instance of the BNO085 sensor
Adafruit_BNO08x bno = Adafruit_BNO08x();
// Define the I2C port
#define BNO08X_I2C_ADDRESS 0x4A
void setup() {
Serial.begin(115200); // Initialize serial communication for debugging
while (!Serial) delay(10); // Wait for Serial Monitor to open
Serial.println("Initializing BNO085...");
// Initialize the BNO085 sensor
if (!bno.begin_I2C(BNO08X_I2C_ADDRESS)) {
Serial.println("Failed to initialize BNO085! Check connections.");
while (1); // Halt execution if initialization fails
}
Serial.println("BNO085 initialized successfully!");
// Enable the accelerometer sensor
if (!bno.enableReport(BNO08X_REPORT_ACCELEROMETER)) {
Serial.println("Failed to enable accelerometer report!");
while (1); // Halt execution if enabling fails
}
Serial.println("Accelerometer report enabled.");
}
void loop() {
// Read accelerometer data
sensors_event_t accelEvent;
if (bno.getEvent(&accelEvent, Adafruit_BNO08x::SENSOR_REPORT_ACCELEROMETER)) {
Serial.print("Accel X: "); Serial.print(accelEvent.acceleration.x);
Serial.print(" m/s^2, Y: "); Serial.print(accelEvent.acceleration.y);
Serial.print(" m/s^2, Z: "); Serial.print(accelEvent.acceleration.z);
Serial.println(" m/s^2");
}
delay(100); // Delay for readability
}
Sensor Not Detected:
Incorrect or No Data:
Module Not Responding:
Q: Can the BNO085 be used with 5V logic microcontrollers?
A: Yes, the BNO085 breakout board includes level-shifting circuitry, making it compatible with both 3.3V and 5V logic.
Q: How do I calibrate the sensor?
A: Calibration can be performed using the Adafruit BNO08x library. Follow the library's documentation for detailed calibration instructions.
Q: What is the maximum data rate for the BNO085?
A: The maximum data rate depends on the specific sensor report and communication interface. Refer to the sensor's datasheet for detailed information.
Q: Can I use multiple BNO085 modules on the same I2C bus?
A: Yes, but you will need to change the I2C address of additional modules. This can be done by modifying the ADDR pin configuration (if available).