Instructables

Arduino Interfaced with Nonin Pulse Oximeter ( OEM Module) to produce Analog Output

video 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
spsj211 year ago
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.
kunal_djscoe (author)  spsj211 year ago
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
spsj211 year ago
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)  spsj211 year ago
Hey,

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
sejman3 years ago
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)  sejman3 years ago
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.

Kunal
am33 years ago
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!
kunal_djscoe (author)  gvelasquez853 years ago
Hi,

Here are two things that I will recommend..
1> Do not use the NewSoftSerial Library, use the hardware Serial i.e. Serial.begin and Serial.read, 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
http://www.sparkfun.com/commerce/product_info.php?products_id=8745

or use a logic ic like the 74AHC125N


Let me know how it goes.

Kunal
Update:

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)
kunal_djscoe (author)  gvelasquez853 years ago
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)
pksublime4 years ago
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

www.nonin.com/documents/OEM%20III%20Module%20Specifications.pdf

@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)  pksublime4 years ago

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.
 

pksublime4 years ago
 Also I should mention that the Nonin 7500 www.nonin.com/documents/7500_brochure.pdf offers a 0-1 volt analog out for both the SpO2 and PR.
bondy1004 years ago
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)  bondy1004 years ago
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,
Kunal
bondy1004 years ago
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)  bondy1004 years ago
Thanks. I am using Nonin OEM module which gives out serial data, hence dont have to worry about any noise issues