| Next posts | Description |
|---|---|
| BIBoP 2 - Writing Arduino code with C++ and C (Makefiles) | My hurdles with getting Makefiles to work with Arduino build system for SAMD SoCs |
| BIBoP 3 - Blood Pressure Inference - Machine Learning | The process of creating a Machine Learning model for Blood Pressure estimation, data cleaning and training the model |
| BIBoP 4 - AWS Lambda deployment and MQTT communication | Deploying the trained model on the AWS Lambda and sending secure requests from the Arduino |
| BIBoP 5 - Power efficency and interrupts | Implementing SAMD21 deepsleep mode and external interrupt handling |
| Assembly and debugging | Assembly, 3D designing and debugging of the project |
| Galvanometer creation | Process of creating my own galvanometer |
| Sensor processing algorithms | Overview of various medical algorithms for detecting abnormalities in the cardiovascular activities |
Introduction
Hi! My name is Jakub Duchniewicz and welcome to Brother Industry Band of Power (catchy, right?).
In this post series we plan to describe our progress with the BIBoP project and shed some light on various issues we had to tackle along the way.
Be sure to regularly check the official repository of this project!
Rationale behind the project
Through the last two years our healthcare systems have been under tremendous stress from COVID pandemic. We often hear about overfilled hospitals and people dying in queues for hospital admission. This is not just a sad reminder of how inefficient our resource management is, but also an opportunity to improve it using technology and prevent many of these premature deaths.
For every condition or illness, there is a triage system - a way of classifying patients by their need for immediate intervention. For COVID it is twice as hard as for any other emergency, as it is horrendously infectious. Coming into the emergency department is unfortunately not an option, and calling a paramedic team to take a patient to the hospital may be too early or too late in the course of illness. We believe that moving the triage system especially for COVID cases away from the hospital to people homes is the most efficient way of decreasing the amount of inappropriate hospitalizations. At the same time it would speed up the admission of those that really need it.
Apart from COVID-related goals, BIBoP aims to help in diagnosing and reporting cardiovascular diseases and abnormalities, such as arrhythmia, elevated blood pressure or hypertension and other. Additionally it serves as a viable solution for elderly people who require constant monitoring and assistance.
The solution
Our solution is a wearable band that will measure oxygen saturation, pulse, and body temperature of the potential patient. It will automatically connect to Wi-Fi and on reaching certain thresholds call in the emergency team for hospitalization. Being a cheap and easy to manufacture device, it could be distributed to the patients from high-risk groups which upon falling sick could make use of it. The true beauty lies in the fact that it could stay after the pandemic, once again moving healthcare closer to its recipients.
Additionally, using the built-in accelerometer, we could emit an alert to medical staff if a person suddenly collapsed (based on their age), hence reducing a risk of a stroke related death or just providing support to a person who has fallen down and cannot get up.
The Arduino Nano 33 IoT is the brain of our system and is responsible for collecting all the measurements and performing cheap data processing (also some of the lighter algorithms). A small 0.96 inch OLED display is used for interaction with the user (with two push-buttons). A Li-Po battery is attached to provide battery longevity and constant monitoring. A special 3D printed casing is used for protecting the components from the user and external dangers, such as dust, sweat and water droplets (ugh!). The sensor suite for this device comprises MAX30102 for Photoplethysmography, SpO2 and Heart Rate measurements, Galvanometer to measure skin resistance and a built-in IMU (LSM6DS3). Special stretchable band is used for keeping the device in place on the forearm of our patient.
The device has to be recharged periodically, therefore we will need to build a Li-Po battery charger for this project similar to this one.
Since we need connectivity to either Wi-Fi or BLE, we will be also using the u-blox NINA-W102 module onboard the Arduino. For now we don't plan messing around with the code, but since the firmware is open and accessible here we might do some hacking later. Also, since the data is sensitive, we need to utilize the ATECC608A cryptographic module for authentication and authorization.
Overview of basic functions is visible below:
Initially we wanted to send the data over BLE (assuming no WiFi connection) and then send the data to the server with the ML model via cellular connection. However, we checked and it seems like we cannot send commands to the host device (mobile) via BLE. Therefore we need to change our approach slightly.
We also thought, that some models may be deployable on the device directly. However, since this is medical world, most of the models require quite big complexity (more on that later), and we would require either external memory or offloading the models to a server (what we chose).
The components used in the project are listed here for brevity:
- Arduino Nano 33 IoT - main MCU + WiFi/BLE + Secure + IMU
- MAX30102 - PPG and SpO2
- Galvanometer - skin resistance
- LiPo Battery - mAh still not decided upon
- 0.96" SH1106 - display
- Small bezels, such as pushbuttons or a buzzer
A small graph visualizing the system:
Work so far
So far, we obtained the Arduino and were able to test it with the MAX30102 sensor to prove it works fine.
Also the BP Model is trained and deployed on the AWS Lambda - works flawlessly.
The repository is set and shiny (almost
).
The plan
The plan for the next blog posts is outlined at the top of this page. The remaining work to be done is:
- Design and connect the galvanometer
- Implement the data processing algorithms
- Implement the OLED interaction and interface
- Design the power management and create the Li-Po charger
- Design and print the casing
- Tweak the model
- Test the device
Hopefully we did not miss anything - we will add more details as new challenges arise.
The team
Jakub - I am a student of MSc in Embedded Systems at University of Turku. Apart from field-related knowledge and experience, I am currently pursuing machine learning algorithms related to health signals and their processing. I am particularly interested in utilizing IoT devices for health applications and achieving constant health monitoring. I have already worked commercially in Samsung Electronics, designing the Tizen OS and I am an active developer of the PolyEngine game engine.
Michal - I am a medical student at the University of Cambridge. Previously I competed in Polish National Biology Olympiad, for which I have designed and written two scientific papers. I have previously designed a non-automated growing space. Now, I want to implement my knowledge and help develop an affordable medical device, helping me and my peers in future clinical practice.
Szymon - I am a first year student at University College London studying undergraduate MEng Computer Science. Apart from CS, I am a 3D printing and electronics enthusiast, fixing everyday items and working on projects (like this one!) as a hobby.
Summary
We hope this introduction got you interested in our project and you will take pleasure in following our project! Having almost all the necessary components, I (Jakub) is in process of designing a galvanometer and writing code for data processing onboard the Arduino. Michał is brushing his knowledge on cardiovascular data processing and Szymon is currently honing his 3D printing skills.
Jakub & Szymon & Michał
| Next post |
|---|
| BIBoP 2 - Writing Arduino code with C++ and C (Makefiles) |


Top Comments