A 3D printed thimble has a few sensors that measure various parameters from the fingertip. The parameters are fed into a neural network along with measured blood pressure values. To measure the real blood pressure, I'm using a conventional digital blood pressure monitor with an arm cuff.
The idea is that machine learning will reveal how the measured parameters correlate with blood pressure.
The measured parameters are as follows:
1. Infrared light (IR)
When the heart beats, the pressure rises in the blood vessels and the vessels dilate. The more dilated, the more blood absorbes infrared light. This is mainly used to measure the pulse rate. But in theory, the dilation is all about blood pressure, so it makes perfect sense that blood pressure could be measured this way.
2. Visible light
Blood doesn't absorb visible light in the same way as it absorbs IR. The amount of visible light shining through the finger will give a measure of how swollen the tissues are - due to the time of day, or any other reason.
3. Temperature
A simple thermistor measures the temperature of the finger skin. Conditions that make the temperature vary, might also affect the other measurements.
4. Resistance
The electrical resistance on the finger skin may vary between 2 and 4 MOhm. Conditions that make it vary, might as well affect the other measurements.
About the IR measurementAn IR led flashes through the fingertip. On the opposite side, an IR phototransistor records the amount of IR coming through. The generated current is converted into a potential measured by an analog input pin. This value has to be filtered strongly. What I do is I calculate the average of all measurements within a 20 ms timeframe. The reason for the 20 ms frame is that we are surrounded by electrical equipment that radiates IR light at 50 Hz. The 20 ms frame will cancel out the effect that this radiation has.
This will give me 50 samples per second. This is how the readings look like, when drawn in a spreadsheet chart:
From the curve we can read the heart rate (around 60 BPM). From the curve we can also read the breath rate - that is the longer wave. My first attempt will be to pick a few crucial values from this curve. The heart rate is definitely an important parameter. The breath rate itself might not be, since we can control our breath rate deliberately. But I will pick values relating to the breath rate:
The lower the curve goes, the more dilated blood vessels. Each high peak of the curve is the start of a beat, the lowest pressure of a heart beat cycle, corresponding to the diastolic pressure. From there, the curve goes straight down to a minimum, correponding to the systolic pressure. The returning phase shows more details, kind of echo beats. The parameters I pick from here are the lowest measured systolic phase and its preceeding diastolic phase. And the time inbetween. These are the two marked spots to the left. Furthermore I pick the highest measured diastolic phase and its succeeding diastolic phase, or the two marked spots to the right. As well as the time inbetween.
Finding these points is a simple and straight forward task. But whether or not they provide enough information is yet to be verified. If they don't, more data can be extracted from this and fed into the machine learning. Fast Fourier Transform could be applied to the signal to obtain the very characteristics of the wave forms. This I will leave to a future stage of the project.
About the visible light measuring
A simple RGB led flashes through the fingertip. A phototransistor sensible to 570 nm light reads the amount of light coming through. The used phototransistor has a bandwidth wide enough to catch red, green and blue light from an RGB led. An average of a few seconds measurement is calculated. The only thing we are so far interested in is how swollen the tissues are in the finger.
Resistance and temperature
When I measure the resistance from hand to hand, I get some 2 MOhm on my multimeter. I needed a simple circuit that could measure something similar. I ended up with this circuit:
I decided that R1 would be my fingertip resistance. The used voltage is 3.3 V. With a voltage divider, I take the Ve voltage down to 0.39 V. When R1 goes to infinity, Vs saturates to 3.3 V. R2 is fixed to 2 MOhm. With R1 varying from 1 MOhm to 5 MOhm, I get:
R1 Vs
============
1 0.59
2 0.78
3 0.98
4 1.17
5 1.37
Table
1.
The thermistor forms together with a 5 kOhm resistor a simple voltage divider, which provides info about the skin temperature. None of these measurements will be converted to actual values in specified units. The neural network will work with the numbers as they come from the AD circuit of the board.
Whether or not these measurements will provide accuracy to predicting the blood pressure is for the neural network to find out.
With this setup I'm quite capable of reading varying resistances from my fingertip. The actual values converted to Megaohms are not relevant, only that I can get values which change according to the resistance.
The thimble
a) IR phototransistor
b) 570 nm visible light phototransistor
c) resistance probes (pins cut from a salvaged 220 V socket plug)
d) tiny thermistor
e) IR led (5 mm)
f) SMD RGB led (5050)
The components in the thimble are really very quick hack type. The IR photoresistor as well as the IR led are taken from a KY-039 sensor, the very same sensor I used in this project, which was a good starting project aiming to this project.
The 570 nm phototransistor is a tiny 3 mm one, with a bandwidth wide enough to catch red, green and blue light.
The pins forming the resistance probe are taken from a salvaged 220 V phone charger, the USB contact of which had broken. I cut the socket pegs, drilled 1 mm holes in them and with a cable tool pressed wiresinto them.
The thermistor is a very small one, about 2 mm. My hope was it would be fast enough to catch the right temperature of the finger skin.
After failing a few times to solder wires directly to a SMD RGB led, which I had picked from a led strip, I cut a piece from the led strip itself and soldered to the leads of the strip. I chose to use an SMD RGB led because of its brightness, knowing that the visible light doesn't shine through tissue as well as IR light.
The perfboard
The image 7 shows a continuous strip of the perfboard to the right, which reaches from the analog pins at the bottom to the digital pins on the top. The left part of the perfboard I had to cut in two, because of the Arduino Uno form factor, where the top row of pins (SCL, SDA...) don't line up with the bottom row of pins (N.C., VIO...). A few resistors and wires keep the left part and the right part together.
This perfboard combo is soldered to the Sense Expansion Kit at pins MISO, MOSI, CS and NC at the top, as well as at pins V3.3, GND, A1, A2 and A3. The Sense Expansion Kit doesn't have pins A6 and A7, therefore I have a male header pin soldered at A7, which connects down to the corresponding header at the main board.
With this setup I have dedicated the Sense Expansion Kit to this very project, while the main board still can be used for other projects.
What data I get from the circuit
This is the data I collect at this stage of the project:
Here I have 8 measurements, done at different times of the day. Each measurement consists of a 20 second period, during which the IR phototransistor records the amount of IR light (look at image #2). After that, the SMD RGB led emits red, green and blue light in 3 second periods, during which the 570 nm light resistor records an average of each colour. After that, the temperature and the resistance are measured in similar 3 second periods.
hihi, hilo, lohi and lolo are the four values I pick from the "cardiography" I showed in image #2. The numbers are so far just a 16 bit value taken from the analog pins. hitime is the time between the hihi and hilo events, actually the number of 20 ms cycles. lotime in turn is the time between lohi and lolo events.
The bpm (heart beats per minute) is taken from the whole 20 second period. The time stamp of each low peak of the graph is recorded and an average of all intervals is converted to the bpm measure. It turned out to give the same value as my blood pressure monitor, differing only 2 beats at its maximum.
systol and diastol are the systolic and diastolic pressure I measured at the same time with a conventional blood pressure monitor.
This data will be fed into a neural network. The target is to find the correlation between the data collected from the thimble and the measured systolic and diastolic pressures.
Things to concider
Looking at image 2, there could be more to extract from the "cardiography". Right now I only focus on the hihi, hilo, hitime, lohi, lolo and lotime values, but one could think of treating the "cardiography" as images, where machine learning and neural networks could find deeper correlations.
Looking at table 2, there need to be more testing to detect how reliable the measurements are. My main focus is so far the IR readings. The thimble itself is not isolated at all from ambient light, not visible, nor IR. For this I use a sheet of aluminium foil inside a plastic bag, whith which I cover the thimble while measuring.
Especially the hitime column doesn't look right. The values ought to be in the range of 5 - 10 something. The algorithm for monitoring the IR has to be improved, including disqualifying suspected values.
Comments
Please log in or sign up to comment.