

The BNO085 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 highly accurate motion tracking and orientation data. It is widely used in applications such as robotics, drones, augmented reality (AR), virtual reality (VR), and wearable devices. The BNO085 is capable of fusing sensor data internally, reducing the computational load on the host microcontroller.








The BNO085 has 14 pins. Below is the pinout and description:
| Pin | Name | Type | Description |
|---|---|---|---|
| 1 | VDD | Power | Main power supply (1.8V to 3.6V). |
| 2 | VDDIO | Power | I/O voltage supply (1.8V to 3.6V). |
| 3 | GND | Ground | Ground connection. |
| 4 | PS0 | Input | Protocol selection pin 0. Used to select communication protocol. |
| 5 | PS1 | Input | Protocol selection pin 1. Used to select communication protocol. |
| 6 | RSTN | Input | Active-low reset pin. |
| 7 | INTN | Output | Interrupt pin. Signals data availability or events. |
| 8 | SCL/SCLK | Input | I²C clock or SPI clock, depending on the selected protocol. |
| 9 | SDA/MOSI | Input/Output | I²C data or SPI MOSI, depending on the selected protocol. |
| 10 | SA0/MISO | Input/Output | I²C address selection or SPI MISO, depending on the selected protocol. |
| 11 | CSN | Input | SPI chip select (active low). |
| 12 | BOOTN | Input | Boot mode selection. |
| 13 | NC | - | No connection. |
| 14 | NC | - | No connection. |
Below is an example of how to connect the BNO085 to an Arduino UNO using the I²C protocol:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO08x.h>
// Create an instance of the BNO085 sensor
Adafruit_BNO08x bno = Adafruit_BNO08x();
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10); // Wait for Serial Monitor to open
}
Serial.println("Initializing BNO085...");
// Initialize I2C communication
if (!bno.begin_I2C()) {
Serial.println("Failed to initialize BNO085! Check connections.");
while (1);
}
Serial.println("BNO085 initialized successfully!");
bno.enableReport(BNO_REPORT_ACCELEROMETER); // Enable accelerometer data
}
void loop() {
sensors_event_t event;
// Get accelerometer data
if (bno.getEvent(&event, Adafruit_BNO08x::SENSOR_ACCELEROMETER)) {
Serial.print("Accel X: ");
Serial.print(event.acceleration.x);
Serial.print(" m/s^2, Y: ");
Serial.print(event.acceleration.y);
Serial.print(" m/s^2, Z: ");
Serial.print(event.acceleration.z);
Serial.println(" m/s^2");
}
delay(100); // Delay for readability
}
The sensor is not responding over I²C.
Incorrect or unstable orientation data.
The Arduino code fails to initialize the sensor.
The sensor outputs data at an unexpected rate.
Can the BNO085 be used with 5V logic?
What is the maximum cable length for I²C communication?
Does the BNO085 support raw sensor data output?