Skip to content

ultimaterobotics/uMyo

Repository files navigation

uMyo device

This repository contains firmware only, other repositories:

uMyo is a wireless wearable EMG sensor with on-board IMU. By default it uses dry contact electrodes - which can be replaced with connectors to standard gel electrodes for higher signal quality. It acquires data, performs 8-bin FFT and calculates muscle activity level based on presence of high~ish frequencies in the signal. It is not completely immune to 50/60Hz noise but filters out a significant part of it, so can be used in many practical cases.

Measured data are sent via radio in 3 modes (selected via button). One is compatible with popular Arduino nRF24 radio (although that somewhat reduces amount of data which can be sent), another requires nRF5x radio but all the measured data are sent, and yet another mode uses generic BLE advertisement - which significantly limits bandwidth but still can be reasonably used with ESP32's BLE).

Design and firmware are open source with permissive licenses, and also we sell assembled devices on Tindie: https://www.tindie.com/products/28529/

For building it requires urf_lib and arm-none-eabi compiler.

Important code properties:

  • ADC reading using DMA, FFT calculations in a way that won't interrupt data acquisition process (handled in adc_read.c)
  • IMU data integration into orientation quaternion (handled in lsm6ds3.c)
  • Filtering 50/60 Hz noise and sending data via one of 3 configurable radio interfaces (main.c, functions push_adc_data(), prepare_and_send_BLE(), prepare_data_packet32() for nRF24 mode, prepare_data_packet() for base station mode)