Milos builds an open-source cardiograph signal measuring device using a Raspberry Pi Pico W. The project explores how blood pressure monitors work—both manual and automatic—while integrating ECG, PPG, and a DIY electronic stethoscope. From hardware design and PCB layout to firmware development and Python-based data analysis, the video covers the full process. All code, schematics, and data are available via the below for educational, non-medical use.
Watch the Project Video
Milos’s grandma, like most people her age, has problems with elevated high blood pressure (hypertension). A daily routine for people like her is using an automatic blood pressure monitor to make sure that the medication keeps it at a normal level. But this is where Milos got curious to explore further, since he saw how the performance of the device degraded from the batteries running low. To demystify this area, he made the blood pressure monitor the main theme of his Master thesis and designed a device for experimenting with different blood pressure measurement algorithms. The device is completely open source, so you can build it as well, or if you just want to play around and analyze data, Milos has provided that as well!
How do Blood Pressure Monitors Work?
Milos begins the video by describing the differences between the manual and the automatic blood pressure method. Even in 2024 the manual method, where a doctor uses a stethoscope, is still considered the gold standard for non-invasive blood pressure measurements! The manual method works by listening to Korotkoff sounds which appear on the stethoscope once the pressure inside the cuff drops below the systolic pressure, and then they disappear once the pressure drops below the diastolic pressure.
Companies keep it a secret for what algorithms they use in the automatic blood pressure monitors, but some of the most famous ones from the literature are the Sapinsky and Geddes methods. These are methods that require only the signal from the pressure sensor, and they work by looking at the envelope of the filtered signal. If any of this sounds interesting, make sure to check out the video, because Milos first describes it in a drawing and shows how the analysis is done on the data recorded by the device!
The Electronics Inside
Before getting into the electronics, Milos began by listing the main system requirements that the system had to fulfill.
- Safety – the first item is safety, when a person is in contact with the device, nothing should be connected directly to the wall, including the PC that is connected to the device. To fulfill that standard, Milos used a specialized USB isolator IC, and an isolated power supply for charging the battery.
- Blood Pressure Measurement – This is of course the focus of the video, these are the critical components for this part of the system:
- Air pump
- EM valve
- Adjustable valve
- Pressure sensor
- Amplifier or 24bit ADC for the pressure sensor
- PPG – PPG Clamps are used often for measuring oxygen saturation in the blood, but they can also be used in blood pressure measurements, since their readings are affected by blood flow in the arm.
- ECG – To ensure the validity of other results (like calculating the heart rate), Milos added the AD8232 IC to the PCB for measuring ECG signals
- Wireless connectivity – To enable the possibility of wirelessly connecting to the device, either using a phone or a PC, Milos decided to go with the Raspberry Pi Pico W as the MCU.
To keep the device compact, all the necessary electronics were placed on a single 4-layer PCB, with many additional I2C connectors to enable future expansions with new sensors.
Since the pressure sensor was connected to the Raspberry Pi Pico W using an instrumentation amplifier with adjustable gain, a calibration procedure was needed to ensure that the system is providing accurate pressure readings. To accomplish this, Milos designed a calibration rig consisting of manometers and syringes which are connected to the pressure sensor. This rig can keep a constant pressure in the system, so that raw ADC readings can be written down at multiple pressures across the desired range, from which the parameters can be calculated for converting the raw ADC measurements into kPa or mmHg.
The Mechanical Design
To keep everything together and to decrease the possibility of touching anything on the PCB, Milos designed, and 3D printed an enclosure out of PLA with all the necessary connectors. Milos went a step further and colour coded everything to ensure a sleek look. While this would have been easy to do with a multi colour printer, this process was a bit tedious, since Milos had to glue in all the letters by hand into their spots.
Besides this, Milos also designed and printed a clamp that goes around a Mikroelektronika Oximeter 5 Click and case for the electronics that convert an old regular stethoscope into an electronic one.
Running the Software
This was all of course accompanied by the necessary software, which includes 3 different codes:
- Raspberry Pi Pico Code – C++
- GUI Software – Python
- Data Analysis – Python
The raspberry can receive commands over serial, where Milos designed commands to mimic the G code commands. Besides that, there is a GUI which shows all the signals in real time and lets you record all of them into a CSV file for further analysis.
Milos dedicated the end of the video to show how Milos analyzed the data using Python and comparing that to the results acquired by a commercial blood pressure monitor. If you’re interested in just the data analysis part, you can download the dataset with the code and try analysing it yourself!
The results Milos got were not too far off from the commercial device, but as Milos discusses in the video, the end results are extremely sensitive to any noise in the signals, the way the data is filtered, or if the person has an irregular heart rate.
Note:
This project is presented 'as is' and neither the project creator or element14 Community vouches for its current capability or alleges that it has medical grade certification, or should be used in place of proper, certified and verified equipment by a qualified person or persons.
Supporting Downloads and Links
Bill of Materials
Product Name | Manufacturer | Quantity | Buy Kit |
---|---|---|---|
TPS63021DSJR | TEXAS INSTRUMENTS | 1 | Buy Now |
RCG06031M00FKEA | VISHAY | 4 | Buy Now |
GRM21BR61A226ME51L | MURATA | 6 | Buy Now |
CL21A106KOQNNNE | SAMSUNG | 9 | Buy Now |
CL10B104KO8NNNC | SAMSUNG | 17 | Buy Now |
CR0603-JW-104ELF | BOURNS | 13 | Buy Now |
SRN3010-1R5Y | BOURNS | 1 | Buy Now |
RT0603BRD0750KL | YAGEO | 1 | Buy Now |
ERJP03F3300V | SAMSUNG | 4 | Buy Now |
NCP716BSN500T1G | ONSEMI | 1 | Buy Now |
MCSR06X7502FTL | MULTICOMP PRO | 2 | Buy Now |
RB055LAM-30TR | ROHM | 3 | Buy Now |
MCP73831T-2ACI/OT | MICROCHIP | 1 | Buy Now |
MCWR06X1002FTL | MULTICOMP PRO | 10 | Buy Now |
DMN2310UW-7 | DIODES INC | 6 | Buy Now |
CR0603-JW-272ELF | MULTICOMP PRO | 1 | Buy Now |
C0805C105K4PACTU | KEMET | 1 | Buy Now |
TPS61085PWR | TEXAS INSTRUMENTS | 1 | Buy Now |
MSS7341-502NLB | COILCRAFT | 1 | Buy Now |
WR06X3002FTL | MULTICOMP PRO | 1 | Buy Now |
MCWF06P6802FTL | MULTICOMP PRO | 1 | Buy Now |
MP003564 | MULTICOMP PRO | 1 | Buy Now |
C0603C112J5GACTU | KEMET | 1 | Buy Now |
MCMR06X102 JTL | MULTICOMP PRO | 1 | Buy Now |
4N32 | VISHAY | 1 | Buy Now |
INA826AIDGK | TEXAS INSTRUMENTS | 1 | Buy Now |
BAR43SFILM | STMICROELECTRONICS | 4 | Buy Now |
AD8232ACPZ-R7 | ANNALOG DEVICES | 1 | Buy Now |
AC0603JR-0710ML | YAGEO | 6 | Buy Now |
MCWR06X184 JTL | MULTICOMP PRO | 2 | Buy Now |
MCWR06X3603FTL | MULTICOMP PRO | 1 | Buy Now |
CRCW06031M40FKEA | VISHAY | 1 | Buy Now |
CL10B102KB85PNC | SAMSUNG | 1 | Buy Now |
MC0603B333K250CT | MULTICOMP PRO | 1 | Buy Now |
C0603C334K8RACTU | KEMET | 1 | Buy Now |
C0603C103J5RACTU | KEMET | 1 | Buy Now |
C0603C152K5RACTU | YAGEO | 1 | Buy Now |
MC0603SAF240JT5E | MULTICOMP PRO | 4 | Buy Now |
ADUM3160BRWZ-RL | ANNALOG DEVICES | 1 | Buy Now |
TBA 2-0511 | TRACO POWER | 1 | Buy Now |
MCWR06X5101FTL | MULTICOMP PRO | 2 | Buy Now |
XS3A4051PWJ | NEXPERIA | 1 | Buy Now |
1825058-7 | ALCOSWITCH - TE CONNECTIVITY | 1 | Buy Now |
LM386M-1/NOPB | TEXAS INSTRUMENTS | 1 | Buy Now |
MCSR06X100 JTL | MULTICOMP PRO | 1 | Buy Now |
MCP6001T-I/OT | MICROCHIP | 1 | Buy Now |
C0603C473K5RACTU | YAGEO | 1 | Buy Now |
ERJP08J8R2V | PANASONIC | 1 | Buy Now |
SMD CAP 865090249008 | WURTH ELEKTRONIK | 1 | Buy Now |
RASPBERRY PI PICO W | RASPBERRY PI | 1 | Buy Now |
67068-8000 | MOLEX | 1 | Buy Now |
MCMR06X472 JTL | MULTICOMP PRO | 4 | Buy Now |
MIKROE-5547 | MIKROELEKTRONIKA | 1 | Buy Now |
Additional Parts
Product Name | Manufacturer | Quantity |
---|---|---|
MPS20N0040D-S | ||
Male & Female Header Pins | 2.54mm | |
Nylon 2.54mm Crimp Connectors - Optional - Header pins are a good alternative | 2P, 3P, 4P, 5P, 6P | |
18650 LION Cell | ||
Air Pump, EM Valve, Adjustable Valve, Stethoscope and Arm Cuff | Salvaged | |
Small soft tubing and connectors for pneumatics to connect the pump and the other penumatic stuff | ||
Anti-vandal buttons - 2 of them - Optional | ||
Small I2C OLED Screen - Optional | ||
NeoPixel LED Strip - Optional | ||
ECG Electrodes | ||
Piezo Microphone with small Amp Circuit |