There’s lots of schematics and guides online that show how to make your own optical heart rate monitor from scratch. With the rise in popularity and accessibility of powerful microcontrollers like Arduino, hackers and designers and DIY enthusiasts are looking for ways to incorporate Bio-sensing and Bio-feedback into their projects, and the optical heart-rate monitor is one direction many folks go toward. Some of the online tutorials are long and complicated, some of them specify exotic parts or require mad soldering skills, all of them are big and clunky and hard to implement in real world conditions where a user is being active, and there are changes in ambient lighting conditions. We want to publish the current state-of-the-DIY-art for getting optically derived heartbeat data into Arduino, and tell you why our Pulse Sensor is such a great improvement. As an example I’ve put together a very small breadboarded heart rate monitor using parts I have lying around. If you’ve ever tried to build out an idea for a cool project that incorporates live heartbeats, some of this may be familiar to you.
First, a description of how optical heart rate sensors work. Most kids have shined a flashlight through their fingers, or cheek, and seen the light glow through their flesh. It’s a spooky-cool thing to do even as an adult. What it shows is that we are semi transparent. Most of the light is absorbed or reflected by our organs and tissues (skin, bone, muscle, blood), but some light will pass through our tissues if they are thin enough. When blood is pumped through your body, it gets squeezed into the capillary tissues, and the volume of those tissues increases very slightly. Then, between heart beats, the volume decreases. The change in volume effects the amount of light that will transmit through. This fluctuation is very small, but we can sense it with electronics. Here’s how it’s done.
We start with a light source and a light detector. I’m using an Infrared LED, and a photodiode sensor. It’s important that the two devices are matched well, so that the light wavelength output from the LED is detected strongly by the photodiode (see below for part numbers). The photodiode is essentially a teeny tiny solar cell, just like the panels on rooftops, but really small. It will generate a small voltage and current when it is blasted with photons. The Infrared LED is what we will use for our photon blaster.
The next thing we need is a way to amplify the tiny signal coming off of the photodiode. Happily enough, the configuration of this circuit is well-known in analog electronics circles as a ‘Current to Voltage Converter’ and it is a classic.
(Schematic drawn in Design Spark, an open source circuit layout software. Go Spark!)
I’m specifying a SA5230 Op Amp from ON Semi. I’ve also had success with Texas Instrument OPA177.
The photodiode is Osram SFH 203 P.
The LED is Everlight EL-IR204-A, peak wavelength at 940nm.
Here’s a picture of the breadboarded circuit
I had to make one modification to the Photodiode, it needs to be shielded from ambient light, which generates alot of noise in the signal. Putting some heat shrink tubing around it worked great. If you plug this circuit into an O-scope, or some basic visualization software, you might get a waveform that looks like this:
Vertical height of the red line represents voltage. Horizontal axis is Time. The waveform here is usable, but as you can see, the pulse signal is distorted by even small movements. Also any misalignment or movement of the IR LED will muddy up the signal. It’s hard enough to get this clear of a signal, even if you don’t know anything about Low Pass filters and Op Amps. Once you get this far, having to overcome the challenge of building the circuit into an ergonomic and robust form pulls designers further away from getting to the fun part of building their cool project. Designers and hackers who want to use heartbeats end up spending too much time building sketchy work-arounds for the problems with this bulky hardware. Most of the time this will kill the project before it gets very far, and finished projects are clunky, hard to set up, not really repeatable, and look more like science demonstrations than anything else.
We wanted to make a Pulse Sensor that is small enough to be worn comfortably in many configurations, and immune to signal noise generated by moving around, or changes in ambient lighting conditions. In our search for the right components, we found a super small integrated circuit that has an on-board photodiode and op amp circuit combined. The super smallness means that we can maintain close, steady contact with the skin. This shields the sensor from changes in ambient light and makes noise from moving around minimal at most. Here is an example of our Pulse Sensor in action.
We made our Pulse Sensor small and easy to connect to Arduino so that you don’t have to spend all your time tweaking hardware and can get down to the fun part of building your project. If you like our Pulse Sensor, please support it and become a backer at Kickstarter today!
Our plan is to open source the hardware design, and we will do a Full Monty on the Pulse Sensor here in the near future. Stay tuned!