YouTube player

title

Taking your pulse is as simple as holding a finger to your neck or wrist and timing the beats with your watch. But if you want to record the data or use it to trigger events, you need to turn that mechanical pulsing action into an electrical signal. This pulse sensor fits over a fingertip and uses the amount of infrared light reflected by the blood circulating inside to do just that.

NOTE: While we think it’s pretty obvious, our lawyer just tapped us on the shoulder and asked us to emphasize that this is not a medical device. If your application is life- or health-critical, please use only an FDA-approved medical-grade pulse sensor, OK? Thanks!

Schematic with symbolic op-amp representation.
Schematic with symbolic op-amp representation.

The sensor itself consists of an infrared emitter and detector mounted side-by-side and pressed closely against the skin. When the heart pumps, blood pressure rises sharply, and so does the amount of infrared light from the emitter that gets reflected back to the detector. The detector passes more current when it receives more light, which in turn causes a voltage drop to enter the amplifier circuitry. This design uses two consecutive operational amplifiers (“op-amps”) to establish a steady baseline for the signal, emphasize the peaks, and filter out noise. Both op-amps are contained in a single integrated circuit (IC or “chip”), and hooking them up is really just a matter of interconnecting the pins correctly.

Schematic with physical op-amp representation.
Schematic with physical op-amp representation.

The two op-amps output a clean but weak signal which is amplified by the transistor before output.

Component- and solder-side views of the complete sensor, without finger cuff.
Component- and solder-side views of the complete sensor, without finger cuff.

The complete pulse sensor is a three-wire device that runs on 5V and outputs signal on the white wire. You can visualize and/or record this signal in a number of ways, but we’ve chosen to connect to a personal computer through Arduino, mostly because of the ease of integrating Processing, which in turn is very handy for visualization. But you don’t really need an Arduino to use the sensor. More on that below.

Sample output in Processing.
Sample output in Processing.

Project Steps

Cut the PCB.

NOTE: The PCB pattern is not symmetrical; when making the long cut, be sure you’re removing the correct side of the board. Double-check the photo to be sure.

To cut the PCB, first score it along a line of holes (on the copper or “solder” side), then snap it away from the scoreline over a sharp edge. Remove four “columns” of holes from the board’s long dimension, leaving 13 intact. Score and snap twice more, across the short dimension, to remove the mounting holes at each end and leave 21 “rows” intact.

Smooth the snapped scorelines and corners with a file to dull sharp edges and improve looks.

Align the cable clip with the bottom of the board as shown, and transfer the emitter and detector lead hole locations to the foam tape on the clip’s base by punching through the PCB with a mechanical pencil tip. Count 7 columns over from the corner, and 4 rows up, then punch the next 4 holes up the column.

Drill the cable clip.

The cable clip will be used as a “cuff” to hold the pulse sensor against your fingertip. We have to drill two holes in it for the emitter and detector to poke through.

Use a fine-tip marker to connect the top and bottom pairs of holes on the foam tape with short lines, then bisect each line with a small tic mark. These will be your drilling centers.

Drill the holes where marked, stepping up from 1/16″ to 1/4″ diameter bits in 3 or four 4 to help with accuracy. As you step up the bit diameter, the holes will grow to intersect and overlap a little. The final diameter is slightly oversize to allow for some error.

Mount the emitter/detector pair.

Both the emitter and thedetector are housed in a standard 5mm T 1-3/4 “package” with a small “flat” on one side of the otherwise-round base. They look like LEDs. The emitter is a blue-purple color, while the detector is clear. Align them “flat-to-flat” and pass their leads through the 4 PCB holes you just located. The emitter should be nearer to the end of the board.

Bend the emitter and detector ground leads over and solder them to the near rail. Leave the other leads unsoldered for now.

Attach two resistors on the solder side of the board between the power rail and the remaining emitter and detector leads. The emitter gets a 220Ω resistor and the detector a 39K resistor.

Mount the chip.

The LM324 actually contains 4 identical op-amps. This design only uses 2. To avoid making accidental connections that may cause erratic behavior, clip off the last 3 leads on each side of the chip (5-7 and 8-10).

Insert the chip in the PCB on the end opposite the emitter. It should be one row from the end of the board and should “straddle” the ground and power rails. Make sure the “notch” (i.e. the end with pins 1 and 14) is closer to the emitter/detector pair.

Solder the chip’s pins in place on the underside of the board. Provide power and ground connections by flowing solder between pins 4 and 11 and the rails adjacent to each.

Solder the chip connections.

First, insert and solder the two 0.1 μF ceramic disk capacitors. One goes across pins 1 and 2, and the other across pins 13 and 14.

Working outward from the chip, mount and solder the remaining 6 resistors as shown. All the leads in each row on either side of the chip should be electrically connected to each other.

Finally, mount and solder the two tantalum electrolytic capacitors. These are polarized components; make sure to get them the right way ’round! In each case, the negative lead should be connected to the chip. For now, solder the negative leads only.

Connect the signal pathway.

Add two insulated solder-side jumper wires as shown. One connects the photodetector to the primary op-amp input, the other connects the primary’s output to the secondary-stage input. Each is connected, at one end, to the positive lead of a tantalum capacitor.

TIP: I used short pieces of 24-gauge solid-core wire separated from the 4-conductor intercom cable to make my jumpers. Wire from a breadboard jumper kit would also work.

Install the NPN transistor as shown, making sure it’s oriented correctly, with the emitter lead closest to the PCB edge and the 1.8K resistor connected to the middle leg (the base).

Add two short insulated solder-side jumpers to bridge power and ground across the chip. The red jumper connects the transistor collector to the power rail, jumping over the ground rail. The black jumper connects the primary-stage resistors to the ground rail, jumping over the power rail.

Install the cable.

Cut an 18″ – 36″ length of 4-wire intercom cable. The pulse sensor only needs three conductors—power (red), ground (black), and signal (white)—so peel off the outer green wire and save it for another project.

Separate red, black, and white leads at one end of the cable, over a length of about 3/4″, then strip about 3/8″ of the insulation from each. Bend each lead 90 degrees, as shown.

Install the cable on the end of the PCB with the red wire connected to the power rail, the black wire connected to the ground rail, and the white wire connected to the transistor’s emitter lead.

Connect your data recorder.

Remove the adhesive film from the base of the cable clip and fix it to the component side of the PCB, over the emitter and detector.

Your sensor is now ready to use with the data recorder of your choice. It needs a ground connection on the black wire and +5V DC on the red wire. The pulse signal comes out on the white wire. Your desktop or laptop computer can be configured to visualize and record the output from the pulse sensor in several easy ways. For instance, programs like FreeVIEW-Sound-PRO allow you to receive, display, and record sensor data through your computer’s microphone input. We’ll set up a serial connection through an Arduino development board, which is a nice option because it’s easy to interface with Processing for visualization.

Separate the leads at the free end of the intercom cable over a length of about 1″, and strip about 3/8″ of the insulation from each. Insert the black lead into Arduino’s GND pin header, the white lead into the A0 pin header, and the red lead into the 5V pin header.

When ground and power are connected, you should see a very faint red glow coming from the emitter. Through a digital camera, this glow will appear much brighter and, probably, more violet than red. This is because digital camera image sensors are more sensitive to near-infrared radiation than the human eye.

Download and install the Arduino software, then connect the Arduino to your computer with a USB A/B cable. Grab the SimpleSerialReporter.ino sketch from our Github repository, open it from the Arduino software window, and click the arrow button to upload the sketch to the board. If you open the Serial Monitor tool (Ctrl + Shirt + M) you should now be able to see the raw data streaming off the sensor as a column of numbers.

Visualize your data with Processing.

The SimpleSerialReporter sketch reads values from pin A0 and passes them down the USB cable to your computer as numbers between 0 and 1024. 0 corresponds to a reading of 0V, and 1024 to a reading of 5V. Once it’s running correctly on your Arduino, you can close the Arduino software. The program now lives on the board and will run whenever the Arduino is powered until you overwrite it with something else.

Download the 32-bit version of Processing. No installer is required; just unpack the archive in a convenient folder and double-click the executable file “processing” within. Grab IRPulseSensor.pde from our Github repository, open it from inside Processing, and click the triangle button to run it.

Slip the cable clip over your thumb or finger. You want firm contact between your skin and the emitter and detector, but you shouldn’t have to press down with any force.

TIP: If the clip is too big for any of your fingers, try closing it. If it’s still too big, pad it with something. A short piece of foam weatherstripping is handy for this.

The signal processing circuitry is sensitive, and will need a couple of seconds to stabilize after you insert your finger. Very shortly, however, you will begin to see the rhythm of your pulse in the trace very clearly. You may even see both first and second heart sounds in close pairs: lub-dub, lub-dub, lub-dub

Conclusion

There are lots of opportunities to take this project further, many in software alone. The simple IRPulseSensor sketch we've provided doesn't do much besides display a "sweep" of the signal coming off the sensor. If you want to record the data, you could add code to periodically write the serial values to a file, as well. The next step would be figuring out how to make the software detect peaks. And once you can detect a peak, why not make it beep or play some other sound in response to each heartbeat? And if you can detect peaks, calculating the average pulse rate is as easy as adding them up and dividing by elapsed time. Time is easy to track in software, and at that point you might as well update the display to include time information on the horizontal axis. You could also display real voltage units on the vertical axis (1 unit returned by the Arduino's AnalogRead function represents 0.049 real Volts) and, if you're feeling really fancy, add an auto-ranging feature that calculates average peak height on an ongoing basis and automatically adjusts the vertical scale to fill the full height of the display.

There are interesting possibilities on the hardware side, too. This circuit is a pared-down version of this ambient-light pulse sensor from Let's Make Robots! community member MarkusB. The original design also includes a big noise-filtering capacitor on the power supply, a proper feedback resistor on the primary op-amp, and a 10K trimpot to tune the secondary stage, and is a good starting point if you're interested in tweaking the amplifier design for sharper peaks or greater sensitivity. The emitter that comes in RadioShack's set is a fairly low-intensity IR LED, and though it works great, it would be interesting to swap it for one of the newer high-output IR emitters and see what happens. Likewise, though the solid-core intercom wire is very handy for connecting an Arduino, a 1/8" stereo phone cord with stranded conductors would be more flexible and easier to connect and disconnect.

Whatever your experience with this project, please let us know! We'd love to hear about any uses, mods, improvements, or hacks you dream up!