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

How to Use IMU: Examples, Pinouts, and Specs

Image of IMU
Cirkit Designer LogoDesign with IMU in Cirkit Designer

Introduction

The Adafruit BNO055 is a sophisticated Inertial Measurement Unit (IMU) that integrates accelerometers, gyroscopes, and a magnetometer into a single package. Unlike traditional IMUs, the BNO055 features an onboard microcontroller that performs sensor fusion, providing orientation data directly without requiring complex calculations on the host microcontroller. This makes it an excellent choice for applications requiring precise motion tracking and orientation sensing.

Explore Projects Built with IMU

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
Battery-Powered Arduino UNO with BNO085 IMU and Bluetooth HC-06 for Orientation Tracking
Image of bno085: A project utilizing IMU 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-Based IMU and Bluetooth Communication System
Image of New one: A project utilizing IMU in a practical application
This circuit features an Arduino UNO microcontroller interfaced with a Bluetooth HC-06 module for wireless communication and an Adafruit BNO085 9-DOF Orientation IMU for motion sensing. The Arduino handles data acquisition from the IMU via I2C and communicates the data wirelessly through the Bluetooth module.
Cirkit Designer LogoOpen Project in Cirkit Designer
ESP32-Controlled Multi-MPU6050 and MPU9250 IMU Data Aggregator
Image of gant vr: A project utilizing IMU in a practical application
This circuit features an ESP32 microcontroller interfaced with multiple MPU-6050 sensors and a single MPU-9250 sensor through an Adafruit TCA9548A I2C multiplexer, allowing for the reading of multiple inertial measurement units (IMUs) over the same I2C bus. The ESP32 collects and processes acceleration and gyroscopic data from the sensors to calculate angles in the X and Y axes. Power management is handled by a TP4056 charging module and an AMS1117 voltage regulator, which together with two 18650 Li-ion batteries, provide a stable power supply for the microcontroller and sensors.
Cirkit Designer LogoOpen Project in Cirkit Designer
Dual MPU6050 and Encoder Interface with myRIO
Image of encoder myRIO MPU6050: A project utilizing IMU in a practical application
This circuit integrates two MPU6050 inertial measurement units (IMUs) and an encoder with a myRIO controller. The IMUs and encoder are powered by the myRIO's VCC and share a common ground. The IMUs communicate with the myRIO via I2C (SCL and SDA lines), while the encoder is connected to the myRIO's phase inputs (Phase A and Phase B) for position or speed sensing.
Cirkit Designer LogoOpen Project in Cirkit Designer

Explore Projects Built with IMU

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 bno085: A project utilizing IMU 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 New one: A project utilizing IMU in a practical application
Arduino UNO-Based IMU and Bluetooth Communication System
This circuit features an Arduino UNO microcontroller interfaced with a Bluetooth HC-06 module for wireless communication and an Adafruit BNO085 9-DOF Orientation IMU for motion sensing. The Arduino handles data acquisition from the IMU via I2C and communicates the data wirelessly through the Bluetooth module.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of gant vr: A project utilizing IMU in a practical application
ESP32-Controlled Multi-MPU6050 and MPU9250 IMU Data Aggregator
This circuit features an ESP32 microcontroller interfaced with multiple MPU-6050 sensors and a single MPU-9250 sensor through an Adafruit TCA9548A I2C multiplexer, allowing for the reading of multiple inertial measurement units (IMUs) over the same I2C bus. The ESP32 collects and processes acceleration and gyroscopic data from the sensors to calculate angles in the X and Y axes. Power management is handled by a TP4056 charging module and an AMS1117 voltage regulator, which together with two 18650 Li-ion batteries, provide a stable power supply for the microcontroller and sensors.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of encoder myRIO MPU6050: A project utilizing IMU in a practical application
Dual MPU6050 and Encoder Interface with myRIO
This circuit integrates two MPU6050 inertial measurement units (IMUs) and an encoder with a myRIO controller. The IMUs and encoder are powered by the myRIO's VCC and share a common ground. The IMUs communicate with the myRIO via I2C (SCL and SDA lines), while the encoder is connected to the myRIO's phase inputs (Phase A and Phase B) for position or speed sensing.
Cirkit Designer LogoOpen Project in Cirkit Designer

Common Applications

  • Robotics and drone navigation
  • Virtual reality (VR) and augmented reality (AR) systems
  • Gesture recognition
  • Wearable devices
  • Automotive navigation and stabilization systems

Technical Specifications

The following table outlines the key technical details of the Adafruit BNO055 IMU:

Parameter Value
Manufacturer Adafruit
Part ID BNO055
Operating Voltage 3.3V to 5V
Communication Interfaces I²C, UART
Accelerometer Range ±2g, ±4g, ±8g, ±16g
Gyroscope Range ±125°/s, ±250°/s, ±500°/s, ±2000°/s
Magnetometer Range ±1300 µT
Operating Temperature -40°C to +85°C
Dimensions 3.8mm x 5.2mm x 1.1mm

Pin Configuration

The BNO055 module has the following pinout:

Pin Name Description
VIN Power input (3.3V to 5V)
GND Ground
SDA I²C data line
SCL I²C clock line
TX UART transmit line
RX UART receive line
PS0 Protocol selection pin (I²C or UART)
PS1 Protocol selection pin (I²C or UART)
RST Reset pin (active low)
INT Interrupt pin

Usage Instructions

Connecting the BNO055 to an Arduino UNO

To use the BNO055 with an Arduino UNO, follow these steps:

  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.
    • Ensure the PS0 and PS1 pins are configured for I²C mode (both pulled low).
  2. Install Required Libraries:

    • Open the Arduino IDE and 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 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(500); // Wait 500ms before the next reading
    }
    

Important Considerations

  • Power Supply: Ensure the BNO055 is powered within its operating voltage range (3.3V to 5V).
  • I²C Pull-Up Resistors: If the BNO055 is used in I²C mode, ensure pull-up resistors (typically 4.7kΩ) are present on the SDA and SCL lines.
  • External Crystal: For optimal performance, enable the external crystal oscillator using the setExtCrystalUse(true) function.
  • Mounting Orientation: The BNO055's orientation affects its readings. Mount it securely and align it with your system's coordinate axes.

Troubleshooting and FAQs

Common Issues

  1. BNO055 Not Detected:

    • Cause: Incorrect wiring or I²C address mismatch.
    • Solution: Double-check the connections and ensure the PS0 and PS1 pins are configured for I²C mode. Verify the I²C address (default is 0x28).
  2. Inaccurate Readings:

    • Cause: Magnetic interference or improper calibration.
    • Solution: Perform a full calibration of the accelerometer, gyroscope, and magnetometer. Use the Adafruit library's calibration functions.
  3. Sensor Freezes or Stops Responding:

    • Cause: Power supply instability or communication errors.
    • Solution: Ensure a stable power supply and check for loose connections. Add decoupling capacitors if necessary.

FAQs

Q: Can the BNO055 be used with a Raspberry Pi?
A: Yes, the BNO055 can be used with a Raspberry Pi via I²C or UART. Use the Adafruit CircuitPython library for easy integration.

Q: How do I calibrate the BNO055?
A: The Adafruit library provides functions to retrieve and save calibration data. Follow the library's examples to perform calibration.

Q: What is the maximum update rate of the BNO055?
A: The BNO055 can provide data at up to 100 Hz, depending on the operating mode and configuration.

Q: Can I disable specific sensors (e.g., magnetometer)?
A: Yes, the BNO055 allows you to configure its operating mode to use only the desired sensors (e.g., accelerometer + gyroscope).

By following this documentation, you can effectively integrate the Adafruit BNO055 IMU into your projects for accurate motion and orientation sensing.