• Project Intro: Wireless IMU

    David Wheeler04/08/2019 at 14:32 0 comments

    My team and I were looking for an interesting way to demonstrate a BNO080 IMU.  After creating a list of potential projects, we realized most of our ideas required a wireless link between the IMU and host. So, we decided our first step would be to implement a wireless IMU module using BLE as the communications technology.

    We are building this using an Adafruit Feather nrf52 processor and a Sparkfun BNO080 IMU.

    We’re hoping to solve a common challenge related to implementing sensors. When using an IMU, the sensor is usually attached to something that moves. It’s a major inconvenience to connect wires to moving parts (lots of tangling and accidental unplugging), so we were looking for a way to transfer data wirelessly from our IMU over BLE (Bluetooth Low Energy).


    The processor that we’ve chosen is an Adafruit Feather nrf52 Bluefruit that’s been programmed using the Arduino environment. It has a native Bluetooth chip and supports BLE. It also has a built-in USB port, which is helpful since we want the system as a whole to be entirely pre-packaged and easy-to-integrate.

    Adafruit Feather nrf52 Bluefruit product highlights and specs:

    • ARM Cortex M4F
    • 512KB flash and 64KB SRAM
    • Bluetooth Low Energy compatible 2.4GHz radio

    For the IMU, which will sense movement and orientation, we’ve chosen a Sparkfun BNO080. The Sparkfun module utilizes a chip based on Hillcrest Labs’ firmware. It’s a multi-axis SiP (System in Package) with an accelerometer, gyroscope and magnetometer for 9DOF (Degrees of Freedom) motion measurement. This IMU provides extremely accurate dynamic heading, making it perfect for VR or robotics applications.

    Sparkfun BNO080 product highlights and specs:

    • 32-bit ARM Cortex M0+
    • Operating Voltage: 1.65V - 3.6V
    • Gravity Angle Error: 1.5°
    • Linear Acceleration Accuracy: 0.35m/s2
    • Accelerometer Accuracy: 0.3m/s2
    • Gyroscope Accuracy: 3.1° / sec
    • Magnetometer Accuracy: 1.4µT

    We’re using an I2C bus and one interrupt to connect the IMU to the processor. In the photo below, you can see both of these components wired up on our breadboard:

    Look out for our next project log for an update on how the system is coming along. We’re planning to port the Hillcrest sh2 sensor hub library to this platform and then define a BLE profile to use with it. If you’re looking to learn more about IMUs, check out this short video from Sparkfun, or read this blog from Hillcrest Labs: What is an IMU Sensor?