Have a Heart

While browsing SparkFun‘s catalogue I noticed the RMCM01 Polar heart module. This is an OEM reader for Polar’s heart rate monitors bands. After looking at the data-sheet, it looked like a very simple project. I ordered one from SparkFun and borrowed a Polar T31 heart rate band from a friend. Now time for some hacking fun.

How do heart rate monitors work?
Heart rate watches work like medical EKG. Whenever the heart is about to beats, the heart’s natural pacemaker emits an electric charge that causes all the cells in an atria to  contract at the same time. The Electrodes in the band detect this electric emission and a transmitter in the module sends a signal to the receiver module.
Each transmission is about 1msec long. In order to prevent cross-talk between several transmitter-receiver pairs, each transmitter gets automatically coded to a receiver.

The Circuit

Wiring the module is straight forward. The circuit uses a 32khz crystal and a pullup resistor for the reset pin. The module pinout is as follows:


The circuit:

RMCM01 circuit diagram

Eagle schematics for the heart rate sensor

Eagle .sch file can be downloaded here. You’ll need SFE Footprint Library.

The circuit has been tested with both Polar T31 coded and WearLink straps. It works well with both. However, it does not work with other brand transmitters (tested Suunto transmitter).

The Code

Download the sources (.pde file) here.

The idea behind the code is to accumulate several readings and calculate an average. At any time we keep 8 samples. The samples are kept in a cyclic buffer, so the oldest is dropped.
Heart rate is printed to the serial every second. The code is fairly straight forward and documented.

What’s Next

Adding a GPS and a logger for SD can make a pretty simple project. Make sure to check out the nice heart-rate logger project at tinkerish. Sources are available upon request.
You may also want to look at a heart monitor breakout board with plethora of interfaces with the RMCM01.



Filed under sensor

13 responses to “Have a Heart

  1. Thanks for the link (pingback). You mentioned that source is not available. I’ll gladly make it available to anyone who asks. I haven’t posted it yet just because I haven’t taken the time to clean it up. Thanks for sharing your similar project. I’m subscribing to your RSS now.

    I noticed that you are using Arduino. I normally do vanilla AVR stuff (just plugging an AVR directly into a breadboard from scratch). I recently started using Arduino hardware. Now that I am standardizing on Arduino hardware, I’m making a library that aims to be as easy to use as Arduino processing language but pure C. If you like to code in C, perhaps you would find it useful. I haven’t “released” it yet as I’m still trying to set up svn and working on the look and feel of the wiki. In the meantime, it is still available to download.


    • Ami

      Fixed the post, thanks for the comment.

      I find Arduino especially attractive since it offers such a big standard codebase. The break out boards are also a plus. They make development easier, especially with hard to solder SMD parts.
      I’ll be sure to look at the library, it sounds really interesting. For an svn solution you might want to consider Google Code. It’s where I host all the code for the blog. It’s really a hassle free solution.

  2. Martin


    finally had a chance to buy the module in Europe. Build up the circuit as proposed and …
    only got peeks from the FLPS pin, no signal at all from the HR pin.
    Not quite sure what the pull-up resistor on the reset pin is ment to be ? i just left it blank.

    Any help would be really appreciated.

    Thanks , Martin

  3. Ami

    Martin, the pull-up resistor is mandatory to get the module out of reset.
    If you connect the reset pin directly to 3.3V the module doesn’t have a reference. Since VCC is connected to 3.3V, the module considers 3.3V to be ‘infinity’. The pull-up resistor gives it a logical positive voltage that is lower than 3.3V.

    I used a 100-Ohm. Maybe the scheme doesn’t explain it well. Will a photo of the circuit help?

  4. Hi, I am making my final undergraduate project, and since I have an old Treadmill, I want to replace the onboard computer for an ARM based kit with a big LCD.

    I saw this module on SparkFun, and I want to get it.
    I already have a 652X Polar HRM, with a Coded Band. I read that this Receiver works with coded and non coded… and here you verify it.

    I wonder if there is any extra info provided by the module on a Coded-Band. I want to know if i can receive from several coded polar bands at once. I understand that the range is very limited (around 80cm). I do not actually need to identify more than one Polar Band, but since I plan to use this on a Gym, with several treadmills next to each other, i dont want to have mixed signals from different coded bands.

    I guess the Receiver resolves this by itself.

    • Ami

      @edgardo, I couldn’t find any information on Polar’s coding. From my experience, it takes a few seconds for the module to pair with a coded strap and it keeps pairing even when other straps near, unless the paired strap is out of range. If you do get a chance to learn more about this I’d be glad to hear.

      • crazyhorse

        I’m trying to get the RMCM01 to talk to the arduino, so far without success.
        I’ve soldered a 32.768khz crystal (standard one bought from Maplins) to the board, and fed 3 pins with 3v power from the arduino, & 1 with ground. These all meter perfectly.
        After reading your instructions, I’ve fed the reset pin with 3.3v through a 500 ohm resistor.
        Still can’t get a squeak out of it, either with the miltimeter or the arduino.
        My chest strap is a polar coded one but is about 12 years old. It does work with a watch.
        Can you please tell me where I might be going wrong?
        Thanks very much for your assistance.

      • Ami

        @crazyhorse, your connections look right. First thing I can think of is the belt battery. Is it fresh?
        Since the module is really a blackbox, I can’t think of any way to check if it ‘hears’ the belt. I’d recommend you to double check the pin numbering like the picture in the post.
        BTW I tested the circuit with two different belts, one brand new and a ~6 years old. Both coded.

        Good luck!

  5. Pingback: My Beating heart « The Rest Of You

  6. crazyhorse

    Hi Ami,
    Thanks for your reply.
    I have just bought a polar FS1 with T31 strap, and it works perfectly with the RMCM01.

    The cause of the problem was my old Polar strap. It has no serial numbers on, but is the plain rectangular shaped one without any scuplpting around the sensors (for anyone else having trouble).

  7. Hello! Thanks for the guide!

    I got inspired by this to build the the HRM sensing at DreamArena AMD/Sapphire, Europe’s biggest E-Sport Arena (http://dreamhack.se/splash/dreamarena/)

    Check out the Starcraft 2 finals the November 26 to see it in action.

    I didn’t use the Arduino or the sample code though, but your schematic was very helpful in understanding the POLAR RMCM01.

    Thanks again1

  8. Does anyone know if it’s possible to get the Polar RMCM01 module on it’s own from any supplier online?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s