I recently completed the first half of my Pulse Oximeter. Already, one can see some wonderful information about one’s heart and blood from just your finger tip. So far, I’ve interfaced to the TSL230 light sensor, takinging readings, and displaying it in a Python based QT gui. It sounds complicated but its not. Its lots of fun. Check out the video to see the graph of my heart beating from light passing through my fingertip.
Part II is very delayed (and may never happen). I hope to have the heart beats detected so that I can calculate the heart rate. Also, I will be taking measurements from both LEDs and comparing them. By doing this, I hope I can extract the oxygen saturation (amount of oxygen in my blood).
Update: Since filming the video above, I implemented the heartbeat detection and heart rate calculation. In the image below, the heart rate is calculated and show in the upper right. Also, the heart beats are automatically detected and annotated with little hearts.
Screenshot showing automatic heartbeat detection and calculated heartrate (upper right corner)
The objective of this project is to log ones heart rate to an SD card. This could be done for extended periods, including during sleep, for some pretty interesting investigation. The video shows a treadmill session with periods of jogging and walking to show the fluctuations in heart rate.
Details
As a baseboard, we continue to use our custom Atmega8 / Atmega168 through hole board. Attached to this, we have a custom SD breakout since it is a little cleaner than soldering to the SD card adapter sleeve. For power, we simply use a 3 AA battery holder (provides 3.3-3.8v). Most importantly, we use the Poler OEM module from Sparkfun.com to receive the heart rate. Typically, Polar sells chest strap and watch combos. The chest strap goes on your chest (duh) and the signal is picked up by and displayed on the watch. We simply use the OEM receiver module to also listen to the signal.
The Polar OEM heartrate module outputs a pulse each time it detects a heart beat. We tie this signal to an interrupt pin on our AVR. We use the duration between pulses to calculate the heart rate. The F_CPU (frequency of the CPU) is used in the calculation of said heart beat. From the factory, AVR internal oscillators are only accurate +/- 10%. If one calibrates it with the calibration register, you can get it within +/- 1%. Our heart rate is only going to be as accurate as our cpu frequency.
We also use a timer counter to detect when our signal goes away to alert the user they should go back in range.