The following information is for the EMANT300

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).

In this application note, we create a heart rate monitor by using one IR LED & 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

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

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)

private void button1_Click(object sender, EventArgs e)



label2.Text = hrm1.HwId;


private void button2_Click(object sender, EventArgs e)




private void hrm1_onValidHR(object sender, EventArgs e)


label1.Text = hrm1.Value.ToString();


private void button3_Click(object sender, EventArgs e)




When the console program is first run, the user to place his/her finger on the sensor.

When 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.

Clicking on the Show Waveform button shows the filtered waveform seen at the phototransistor. You will achieve a good heart rate if your waveform is as seen below.