Cirkit Designer Logo
Cirkit Designer
Your all-in-one circuit design IDE
Home / 
Component Documentation

How to Use BNO055: Examples, Pinouts, and Specs

Image of BNO055
Cirkit Designer LogoDesign with BNO055 in Cirkit Designer

Introduction

The BNO055 is a 9-axis absolute orientation sensor developed by Bosch and distributed by Adafruit. It integrates a 3-axis accelerometer, a 3-axis gyroscope, and a 3-axis magnetometer, along with an onboard microcontroller that fuses the sensor data to provide accurate orientation information. Unlike traditional sensors, the BNO055 eliminates the need for complex sensor fusion algorithms, making it an ideal choice for applications requiring precise motion tracking and orientation.

Explore Projects Built with BNO055

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
Arduino Nano and BNO055 Sensor with Bluetooth Connectivity
Image of Clutch Pedal Gyro: A project utilizing BNO055 in a practical application
This circuit features an Arduino Nano interfaced with a BNO055 sensor and an HC-05 Bluetooth module. The Arduino communicates with the BNO055 via I2C (using A4 for SDA and A5 for SCL) and with the HC-05 via serial communication (using D0/RX and D1/TX for data transfer). The HC-05's Key and State pins are connected to D2 and D3 of the Arduino for module control, and all components share a common ground with the Arduino powered at 5V and the BNO055 at 3.3V from the Arduino's 3V3 output.
Cirkit Designer LogoOpen Project in Cirkit Designer
ESP32-Based Orientation Sensor Interface
Image of ESP32 Gyro module: A project utilizing BNO055 in a practical application
This circuit connects an ESP32 microcontroller to a BNO055 sensor. The ESP32's I2C pins (D21 for SDA and D22 for SCL) are interfaced with the BNO055's SDA and SCL pins, enabling communication between the microcontroller and the sensor. Power and ground connections are also established from the ESP32 to the BNO055, with the ESP32's 3V3 pin supplying power to the BNO055's Vin pin.
Cirkit Designer LogoOpen Project in Cirkit Designer
Battery-Powered Arduino UNO with BNO085 IMU and Bluetooth HC-06 for Orientation Tracking
Image of bno085: A project utilizing BNO055 in a practical application
This circuit integrates an Arduino UNO with an Adafruit BNO085 9-DOF Orientation IMU and a Bluetooth HC-06 module. The Arduino reads orientation data from the IMU via I2C and transmits it over Bluetooth, powered by a 7.4V battery.
Cirkit Designer LogoOpen Project in Cirkit Designer
Arduino UNO R4 WiFi Controlled Data Logger with BNO055 Sensor and Micro SD Storage
Image of Main Telemetry R4: A project utilizing BNO055 in a practical application
This circuit features an Arduino UNO R4 WiFi microcontroller connected to a Micro SD Card Module for data storage, a BNO055 sensor for orientation data, and three red LEDs for indication purposes. The LEDs are controlled by digital pins D2, D3, and D4, and can be turned on or off using a single-pole single-throw (SPST) toggle switch connected to their common cathodes and ground. The BNO055 sensor interfaces with the Arduino via I2C communication using the SDA and SCL pins, and the Micro SD Card Module is interfaced using SPI with chip select on pin D10 and data lines on pins D11 (MOSI), D12 (MISO), and D13 (SCK).
Cirkit Designer LogoOpen Project in Cirkit Designer

Explore Projects Built with BNO055

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
Image of Clutch Pedal Gyro: A project utilizing BNO055 in a practical application
Arduino Nano and BNO055 Sensor with Bluetooth Connectivity
This circuit features an Arduino Nano interfaced with a BNO055 sensor and an HC-05 Bluetooth module. The Arduino communicates with the BNO055 via I2C (using A4 for SDA and A5 for SCL) and with the HC-05 via serial communication (using D0/RX and D1/TX for data transfer). The HC-05's Key and State pins are connected to D2 and D3 of the Arduino for module control, and all components share a common ground with the Arduino powered at 5V and the BNO055 at 3.3V from the Arduino's 3V3 output.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of ESP32 Gyro module: A project utilizing BNO055 in a practical application
ESP32-Based Orientation Sensor Interface
This circuit connects an ESP32 microcontroller to a BNO055 sensor. The ESP32's I2C pins (D21 for SDA and D22 for SCL) are interfaced with the BNO055's SDA and SCL pins, enabling communication between the microcontroller and the sensor. Power and ground connections are also established from the ESP32 to the BNO055, with the ESP32's 3V3 pin supplying power to the BNO055's Vin pin.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of bno085: A project utilizing BNO055 in a practical application
Battery-Powered Arduino UNO with BNO085 IMU and Bluetooth HC-06 for Orientation Tracking
This circuit integrates an Arduino UNO with an Adafruit BNO085 9-DOF Orientation IMU and a Bluetooth HC-06 module. The Arduino reads orientation data from the IMU via I2C and transmits it over Bluetooth, powered by a 7.4V battery.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of Main Telemetry R4: A project utilizing BNO055 in a practical application
Arduino UNO R4 WiFi Controlled Data Logger with BNO055 Sensor and Micro SD Storage
This circuit features an Arduino UNO R4 WiFi microcontroller connected to a Micro SD Card Module for data storage, a BNO055 sensor for orientation data, and three red LEDs for indication purposes. The LEDs are controlled by digital pins D2, D3, and D4, and can be turned on or off using a single-pole single-throw (SPST) toggle switch connected to their common cathodes and ground. The BNO055 sensor interfaces with the Arduino via I2C communication using the SDA and SCL pins, and the Micro SD Card Module is interfaced using SPI with chip select on pin D10 and data lines on pins D11 (MOSI), D12 (MISO), and D13 (SCK).
Cirkit Designer LogoOpen Project in Cirkit Designer

Common Applications

  • Robotics for navigation and control
  • Drones for stabilization and orientation
  • Virtual reality (VR) and augmented reality (AR) systems
  • Wearable devices for motion tracking
  • Industrial automation and control systems

Technical Specifications

The BNO055 is a highly versatile sensor with the following key specifications:

Parameter Value
Operating Voltage 3.3V to 5V
Communication Interfaces I²C, UART
Operating Current ~12 mA
Measurement Range Accelerometer: ±2g to ±16g
Gyroscope: ±125°/s to ±2000°/s
Magnetometer: ±1300 µT
Output Data Rate Up to 100 Hz
Operating Temperature Range -40°C to +85°C
Dimensions 20.2mm x 18.2mm x 3.8mm

Pin Configuration

The BNO055 breakout board from Adafruit has the following pin layout:

Pin Name Description
1 VIN Power input (3.3V to 5V)
2 GND Ground connection
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 configure I²C or UART mode)
6 PS1 Protocol selection pin 1 (used to configure I²C or UART mode)
7 RST Reset pin (active low)
8 INT Interrupt pin (optional, used for advanced configurations)

Usage Instructions

Connecting the BNO055 to an Arduino UNO

The BNO055 can be easily interfaced with an Arduino UNO using the I²C protocol. Follow these steps to connect the sensor:

  1. Wiring:

    • Connect the VIN pin of the BNO055 to the 5V pin on the Arduino.
    • Connect the GND pin of the BNO055 to the GND pin on the Arduino.
    • Connect the SDA pin of the BNO055 to the A4 pin on the Arduino.
    • Connect the SCL pin of the BNO055 to the A5 pin on the Arduino.
  2. Install the Adafruit BNO055 Library:

    • Open the Arduino IDE.
    • Go to Sketch > Include Library > Manage Libraries.
    • Search for "Adafruit BNO055" and install the library.
  3. Example Code: Use the following example code to read orientation data from the BNO055:

    #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("Error: 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 the Euler angles (heading, roll, pitch)
      sensors_event_t event;
      bno.getEvent(&event);
    
      // Print orientation data to the Serial Monitor
      Serial.print("Heading: ");
      Serial.print(event.orientation.x);
      Serial.print("°, Roll: ");
      Serial.print(event.orientation.y);
      Serial.print("°, Pitch: ");
      Serial.print(event.orientation.z);
      Serial.println("°");
    
      delay(500); // Delay for readability
    }
    

Important Considerations

  • Power Supply: Ensure the sensor is powered within its operating voltage range (3.3V to 5V).
  • I²C Pull-Up Resistors: The BNO055 breakout board includes onboard pull-up resistors for the I²C lines. Avoid adding external pull-ups unless necessary.
  • External Crystal: For improved accuracy, the BNO055 can use an external crystal oscillator. This is enabled by default on the Adafruit breakout board.
  • Mounting Orientation: The sensor's orientation affects its readings. Ensure it is mounted securely and aligned with your system's coordinate axes.

Troubleshooting and FAQs

Common Issues

  1. Sensor Not Detected:

    • Cause: Incorrect wiring or I²C address mismatch.
    • Solution: Double-check the connections and ensure the I²C address is set to 0x28 (default).
  2. Inaccurate Readings:

    • Cause: Magnetic interference or improper calibration.
    • Solution: Perform a full calibration using the Adafruit library's calibration example.
  3. No Output on Serial Monitor:

    • Cause: Incorrect baud rate or missing Serial.begin() in the code.
    • Solution: Ensure the baud rate in the code matches the Serial Monitor's setting.

FAQs

  1. Can the BNO055 be used with a 3.3V microcontroller?

    • Yes, the BNO055 operates at 3.3V and is compatible with 3.3V logic levels.
  2. How do I switch between I²C and UART modes?

    • Use the PS0 and PS1 pins to configure the communication protocol:
      • I²C mode: PS0 = 0, PS1 = 0 (default)
      • UART mode: PS0 = 1, PS1 = 0
  3. What is the maximum cable length for I²C communication?

    • The maximum length depends on the pull-up resistor values and the I²C clock speed. For reliable communication, keep the cable length under 1 meter.

By following this documentation, you can effectively integrate the BNO055 into your projects and leverage its powerful orientation sensing capabilities.