/MultiSensorHardwareSetup

MCU code for our Capstone project at METU NCC

Primary LanguageC++MIT LicenseMIT

MultiSensorHardwareSetup

Embedded program that collects data from multiple 6+3 axis sensors and sends them over to a local server via Bluetooth LE for ML inference. Designed to be deployed and synchronized on multiple MCUs.

This repository is part of our Capstone project at METU NCC: Multi Sensor Activity Detection Based Health Monitoring System

Context

The sensors are placed on various locations on the body (arms, wrists, knee, etc.), replicating a subset of the setup used in the OPPORTUNITY dataset for Human Activity Recognition:

 

 

Setup

  • Each group of closely placed sensors is connected on an I2C bus to an MCU that collects the data, filters it, serializes it, and sends it over Bluetooth LE to a separate on-body device.

  • The on-body device synchronizes the packets from the MCU nodes, and sends the aggregated data to a Python server.

  • The Python server performs inference on the data using a Random Forest ML model for activity recognition (trained using this same setup).

  • The results of the inference are displayed on an Android app connected to the same local WiFi network as the server.


Features

  • Compatibility with different MCU architectures using the PlatformIO ecosystem (we're using Xtensa and ARM devices together).

  • Stabilized sensor output using a hardware (built-in) low-pass filter and a software Kalman filter.

  • Efficient Bluetooth LE operation that uses advertising for connecting and notifications for transmitting the data periodically.

  • Compact serialized packets using MessagePack to fit the MTU size for Bluetooth LE.

  • Reliable recovery implementation that detects any disconnections and reinitializes the sensors/connection.

Hardware


Showcase

  • Project demo

Multi Sensor Project Demo

  • Poster and Hardware setup