Optical Heart Rate Monitor

Pulse Oximetry is a non invasive method of measuring a person's oxygenation level. It monitors the percentage of haemoglobin (Hb) which is saturated with oxygen. A probe is attached to the patient's finger or ear lobe comprising LEDs and photodetector. As the light from the two LEDs (red - 660 nm and infrared - 950 nm) pass through the body tissues to a photodetector, it is absorbed by blood and soft tissue.

The light absorption rate at the two wavelengths by the hemoglobin is different and depends on the degree of oxygenation. The light level changes as the blood is pumped by the heart. As a consequence, the oximeter also measures the heart rate in beats per minute (BPM).

TCRT1010In this application note, we create a heart rate monitor by using one IR LED and phototransistor pair and observing the waveform at the phototransistor output. This is intended for illustrating a typical light sensor application and not intended for actual medical use. The accompanying video also shows the typical low level signals involved in this type of circuit and how the dynamic range from a 24 bit ADC EMANT300 USB DAQ allows such signals to be observed without further signal conditioning.

The TCRT1010 have a compact construction where the emitting-light source and the detector are arranged in the same direction to sense the presence of an object by using the reflective IR-beam from the object. The operating wavelength is 950 nm. The detector is a phototransistor. Together with the EMANT300 USB DAQ, they form a computerbased optical heart monitor

Heart Rate Monitor circuit

Fig 1 : Optical heart rate monitor schematic - Connections to the EMANT300 USB DAQ

TCRT1010 encased in Velcro

IR emitter and detector encased in velcro

The following C# .NET program uses the EmantHRM component. This component takes the voltage read at the emitter of the phototransistor and converts it to heart rate in BPM (beats per minute)

Heart Rate Monitor C# Form
private void button1_Click(object sender, EventArgs e) { hrm1.Open(); label2.Text = hrm1.HwId; } private void button2_Click(object sender, EventArgs e) { hrm1.Close(); } private void hrm1_onValidHR(object sender, EventArgs e) { label1.Text = hrm1.Value.ToString(); } private void button3_Click(object sender, EventArgs e) { hrm1.Show(); }

HRM using the EMANT300 USB DAQWhen a finger is placed on the phototransistor, the voltage read rises above 0.3V. If a good contact is made, a sinusoidal type signal is observed. As the signal rides on a fluctuating DC signal, a simple differential signal is created. From maths, we know that when a max or min is reached, its differential value is zero. After this an autocorrelation function is applied and the peaks extracted to obtain the heart rate. When the signal is noisy, a wrong BPM will be calculated. Any count that is obviously wrong is ignored. This is all taken care of by the HRM class. The HRM class is written in C#. You can improve on it using the Visual C# 2005 Express.

The figure below shows the filtered waveform seen at the phototransistor. The waveform is filtered by software using averaging.

Heart Rate Monitor Filtered Output