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


SumayyahH (author)2015-10-08

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?

SamuelS17 (author)2015-08-10


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?

spsj21 (author)2013-03-31

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.

Hasan2015 (author)spsj212015-06-23

Can you kindly give me a Evaluation board circuit diagram for

Nonin Pulse Oximeter ( OEM ModuleIII)?

kunal_djscoe (author)spsj212013-04-01

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

shrirajn (author)2015-01-31

i need step by step approach please help me out

spsj21 (author)2013-03-28

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

kunal_djscoe (author)spsj212013-03-29


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

sejman (author)2011-03-25

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.

kunal_djscoe (author)sejman2011-03-25

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.


am3 (author)2010-11-29

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

gvelasquez85 (author)2010-10-20

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!



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)

pksublime (author)2010-05-21

neat project, but I have to ask why you would want an analog out instead of the various serial data formats the OEMIII module can provide?

also, which data format are you using for this?  if you aren't using data format 7 see page 9 of

@bondy100 - "SpO2" always is after processing of the light level information.  the actual raw values of the light levels are not available outside the company.

kunal_djscoe (author)pksublime2010-05-21

Firstly, thanks... Yes I am using serial format 2 ( which sucks because it has 8 bit resolution while OEM 3 can give me 16 bit resolution with serial format 7 however I just had a 12 bit dac).  The reason that we wanted a serial out is that we collect a number of analog channel data along with the the pulse ox and labview program works more efficiently if all are either analog or digitals.... 

Also all the commercial models give analog waveform for spo2 or pr but not true plethysmograph waveform.

pksublime (author)2010-05-21

 Also I should mention that the Nonin 7500 offers a 0-1 volt analog out for both the SpO2 and PR.

bondy100 (author)2010-05-10

Me again. I'm using an Xpod instead of an OEM 3 module. Have you found a way to get to the raw SpO2 signals? In other words, the output from the photo diode w/o any calculations done to it? I want just an electrical measurement from the reflectance or absorption (depending on sensor type) of the diode so that I can perform my own calculations. Let me know if you have any ideas and thanks in advance for your time and consideration.

kunal_djscoe (author)bondy1002010-05-15

Hey Bondy, I have worked with XPOD before working with the OEM III module. Even the XPOD gives out the o/p as RS232 data..... if you get rid of the IC on the PC end of the XPOD. You will be left with 4 wires. Red and Black are power, green is serial data out and yellow is N/C. You can rebuild analog waveform in the same way as I do in this video.

If you want to get raw waveform you will have to build you own circuit else TI sells a OEM module which I believe gives you the raw waveform.

Hope that helps,

bondy100 (author)2010-05-03

Awsome job. I'm trying to build the exact same thing. Even using a Nonin/Arduino/Labview combination. How did you filter out the noise and are you using any sort of operational amplifier?

kunal_djscoe (author)bondy1002010-05-04

Thanks. I am using Nonin OEM module which gives out serial data, hence dont have to worry about any noise issues

About This Instructable




More by kunal_djscoe:Digital Name PlateDabangg GlassesBluetooth Pulse Oximeter
Add instructable to: