Neonatal Mortality Rate (NMR) quantifies the number of new-born deaths (i.e in the first month of life) per thousand live births and is responsible for more than 46% of all child deaths before the age of five (2.5 Million in 2018). Which means 7000 deaths every day.
reference:https://data.unicef.org/topic/child-survival/neonatal-mortality/
Neonatal mortality rate (deaths per 1,000 live births) in 2018, by country
Image Source: United Nations Inter-agency Group for Child Mortality Estimation (UN IGME) 2019
The death of the premature neonatal baby occurs due to many reasons, but one of the major reasons is the respiration issues. These premature babies have respiration issues which get serious when there is lack of oxygen inhaled by the body. This can even cause death. Typically, a newborn takes 30 to 60 breaths per minute. This can slow down to 20 times per minute while they sleep.
In order to address this issue with the help of multisensor STM32F4 discovery boards, we will build a smart breath rate analyser. Let's see the functionality of this device.
1. This can report to the mother or caretaker if respiration rate goes below the threshold value.
2. Communication is over Bluetooth hence the data gathered can be recorded for further analysis.
3. The novel smart alert system along with ambient temperature sensing for the remote monitoring by a doctor.
4, Since the system is cost-effective this can be a boon to developing nations where there is a scarce of resources, hospitals, incubators, ventilators etc
5. Can be used where there is a scarcity of ventilators for example in the current scenario of COVID 19.
STEP 1: Let's build :
We will need a basic setup consisting of the STM32F4 discovery board and a computer for the development of proof of concept as the board already has the required accelerometer.
STM32F407G-DISC1 Configuration
STM32F407VG board
- STM32F407VGT6 microcontroller featuring 32-bit ARM® Cortex®-M4 with FPU core, 1-Mbyte Flash memory, 192-Kbyte RAM in an LQFP100 package
- On-board ST-LINK/V2 on STM32F4DISCOVERY or ST-LINK/V2-A on STM32F407G-DISC1
- USB ST-LINK with re-enumeration capability and three different interfaces: Debug port, Virtual Com Port, and Mass storage.
- Board power supply: through USB bus or from an external 5 V supply voltage
- External application power supply: 3 V and 5 V
- LIS302DL or LIS3DSH ST MEMS 3-axis accelerometer
- MP45DT02 ST-MEMS audio sensor omnidirectional digital microphone
- CS43L22 audio DAC with integrated class D speaker driver
- Eight LEDs
- Two push-buttons (user and reset)
Since it's hard to directly test our prototype on neonatal babies lets first build a test rig using an Arduino and a servo motor. The servo will simulate the breathing motion.
Basically, our requirement is to get the data of respiration rate per minute. How do we do it is the question. With careful observation, there is a small change in the accelerometer Z-axis motion whenever the baby's chest moves up and down while breathing. According to the datasheet of the accelerometer and gyroscope sensor will get a precise reading of acceleration values and orientation values with very less false positives i.e less than 9 in 5 mins of continuous reading
Install GNAT community IDE from the official website:https://www.adacore.com/download/more
Download and install toolchain for the GPS.
Since my project requires accelerometer I'll be using the onboard accelerometer for simplicity and for proving the concept.
The basic algorithm is like this by calibrating I found out that the upper threshold for the accelerometer value for Z is 25 and for alower threshold, it is -28 and for theupper threshold, it is 25
Threshold_High : constant LIS3DSH.Axis_Acceleration := 25;
Threshold_Low : constant LIS3DSH.Axis_Acceleration := -28;
So whenever it crosses upper and lower threshold we increment breath rate by 1.
So the actual value would be Breath rate /2.
if abs Values.Z > abs Values.Y then
if Values.Z > Threshold_High then
STM32.Board.Red_LED.Set;
Breath_rate ++;
elsif Values.Z < Threshold_Low then
STM32.Board.Green_LED.Set;
Breath_rate ++;
end if
Breath_rate = Breath_rate/2;
end if;
Step 4: Testing and Demo.The code can be uploaded by pressing the debug button at the top after building the code. We are using USART module to send the data to mobile phone over bluetooth.
Code can be found here.
https://github.com/vishwasnavada/ADA_Project/
Comments