Arduino Interfaced With Nonin Pulse Oximeter ( OEM Module) to Produce Analog Output

Introduction: Arduino Interfaced With Nonin Pulse Oximeter ( OEM Module) to Produce Analog Output

This project was conceived to have a reliable Analog signal that can be interfaced directly with Labview for data collection in a research study that we were trying to do. Also most commercially available pulse oximeter do not have an analog output option



    • Metalworking Contest

      Metalworking Contest
    • Tiny Home Contest

      Tiny Home Contest
    • Creative Misuse Contest

      Creative Misuse Contest

    27 Discussions

    Yes Kunal ..... i connected OEM III directly to PC through MAX232 and it gives correct data on hyperterminal. but doesn't give anything to Silabs, Tx of controller was already connected to PC through MAX232 for OEM data reception on hyperterminal. I connected Rx of controller directly to Tx of OEM III, i think that should be fine.

    4 replies

    The fact that OEM III starts spitting out data as soon as you power it means only one thing you not reading right (assuming that you have it wired right). I would say make like a serial pass thru... meaning make your silab controller do the job of max232... read of serial and show it on hyper-terminal... this is assuming that you have two serial ports on it. If not flash an led. This way we can rule out issues with your program.

    Let me know

    Please Share me the project, I really need this for my graduation project.

    I do not have any credit card to buy this project pdf, please help me !!

    Can you kindly give me a Evaluation board circuit diagram for

    Nonin Pulse Oximeter ( OEM ModuleIII)?


    Very impressive, yet simple solution. I am currently working with a different pulse oximeter, but ultimately, I too would like to use a NONIN OEM III.

    I hate to bother you, but I just have a couple questions. I would be very appreciative of any help.

    1. What in the world is going on with your wiring of the OEM in this video? Surely we want a 3.3V in, but can you give me a more intricate idea as to which ports of the OEM you had to wire? Surely some go to the TLV chip, but which ones? I am a mechanical engineer, not an electrical, so the datasheet is a bit confusing.

    2. Which finger probe did you use?

    3. What was your Arduino code?

    1 reply

    can you help me . i need the project if you can help me. please can sherr pdf project

    hi kunal.

    i am looking for a solution for my project. I am using PIC32MX270F256B from Microchip,nonin oem III module and UART. When I checked the data transmission at the terminal, 3 bytes of data (status, HR, SPO2) were sent but in state of 00, 00, 00 which means the sensor could not read the user HR and SPO2. I have checked the UART line that is connected to PIC (U2RX) but nothing seems wrong with it.

    could you give any idea or solution to this problem?

    hi kunal! Nice work ..... i am also trying to interface OEM III with Silabs C8051F340 controller .... this controller works at 3.3V.

    First, i developed a loopback program for controller UART at 9600 to make sure that serial port is working fine. it worked beautifully with a serial cable to the PC. Then i simply removed controller UART Rx connection from line driver IC (MAX232) and connected to OEM III Tx line .... here it fails :(

    Do you have any clue for my problem ..... plz help :)

    1 reply


    did you try to connect the OEM III to the pc directly via an emulated serial port or other means and reading the data of it using hyper terminal or something similar?

    I would be curious to know if that worked. Maybe the Silab controller doesn't like the Tx line to be floating; you should connect it to Rx of OEM or maybe ground it.

    Good luck

    Cool project. How much does the Nonin OEM III module cost?

    Kunal_djscoe: can you include more information on the TI module...I could not find it. I'm looking for a good module to build some Biomed curriculum around.

    1 reply

    Thanks. The Nonin OEM III I think costs somewhere arnd 150-200$. I am sorry, I don't know the TI module that you are talking about.. if you were asking about the D to A chip... I am using TLV5618. Feel, free to ask more questions.


    Hi, cool project! Can you send a copy of your Arduino sketch and any schematics you have? Any additional info would be greatly appreciated! Thanks, AM

    Hello Kunal, I'm working in my undergraduate project, and I want to interface the Xpod module with Arduino. Maybe, you can help me with the interfacing, I'm working with the NewSoftSerial Library and can't get the correct data (don't know why), it's adding some bits in some way and I get four bytes instead of the three with the data format # 1. Please, help me, I'm totally lost, if you have some example sketch, or some suggestions.... I will be very very greateful.... Thannk you in advance!

    5 replies


    Here are two things that I will recommend..
    1> Do not use the NewSoftSerial Library, use the hardware Serial i.e. Serial.begin and, nonin xpod transmits data asynchronously i.e. continuously even if Arduino is not reading it and since software serial doesnot have an internal buffer you loose those bits, probably thats the reason for the incorrect data that you getting.

    2> Nonin works on 3.3v logic and Arduino works on 5V logic. Though since we are only reading from nonin, a level shifter is not necessarily needed, it worked for me only with the level shifter.... you can either buy the logic level converter from spakfun

    or use a logic ic like the 74AHC125N

    Let me know how it goes.



    Now I'm getting 3 bytes of info, but, wrong bytes.... don't know why, do you know something that I should know?.... some hack, some special function to show the received data?....Actually I'm only doing a passtrough, just to see if the received data are correct...I'm lost... but... not the same way that yesterday... Thank you... (by the way, now I'm using one of the Hardware UART's of the Arduino Mega)

    lol...... some special function.. lol

    dude... try this.... since the data coming on the serial port is 1 byte at a time... initialize the variable reading it as a byte (not as a int because an int is 2 bytes long)

    Also how do you know that the data that you getting is wrong? Do you print it out on Serial port???

    Dont forget that.. if you will be trying to produce the analog waveform from the received data, you will have to make sure that Arduino is in sync with nonin, i.e. since a packet is say 3 bytes long, you read it in the right sequence, this is imp in asynchronous transmission ( your software has to take care of this)

    mmmm..... I didn't tried with byte type, I'm going to try it, I know that the data that I'm getting is wrong because I'm printing the received data to the serial port... I don't want to make an analog waveform, I only want to monitor and activate an alarm if the pulse is getting low or high.... I'll tell you how is it going...

    Thanks Kunal, I'm going to try it.... about the NSS lib, you're rigth... and I didn't see it... about the level converter, I have two of it, I'm going to look if it works without it (I'm only reading) if not, I'll work with the level converter.

    Thanks for your help, and I'll let you know how can I survive! (XD)