Author Topic: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab  (Read 47055 times)

0 Members and 1 Guest are viewing this topic.

Offline elektronchika

  • Contributor
  • Posts: 42
  • Country: bg
    • Elektronchika's blog
Re: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab
« Reply #25 on: February 04, 2016, 07:39:46 am »
Interesting threat.

I also try to make a HR and SPO2 monitoring. I have all the hardware and I can plot the graphs of the IR and RED leds. Everything is good so far but HOW DO I DO the calculations inside a low-power microcontroller. In TI's SLAA274B there is a band-pass filter, zero-crossings (I thing the block diagram is wrong - zero crossing should be done after the BP filtering) and RMS calculations. All of these are too hard to make in a MSP430. That's why in all these App notes they send the data to a PC and the PC makes the calculations.

So, I'm stuck at this points. Any suggestions from you guys?

Cheers!
 

Online coppice

  • Super Contributor
  • ***
  • Posts: 8634
  • Country: gb
Re: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab
« Reply #26 on: February 04, 2016, 08:59:11 am »
Interesting threat.

I also try to make a HR and SPO2 monitoring. I have all the hardware and I can plot the graphs of the IR and RED leds. Everything is good so far but HOW DO I DO the calculations inside a low-power microcontroller. In TI's SLAA274B there is a band-pass filter, zero-crossings (I thing the block diagram is wrong - zero crossing should be done after the BP filtering) and RMS calculations. All of these are too hard to make in a MSP430. That's why in all these App notes they send the data to a PC and the PC makes the calculations.

So, I'm stuck at this points. Any suggestions from you guys?

Cheers!
All the calculations in that app. note are performed on the MSP430. Only the final results are sent to the PC for display.
 

Offline HAL-42b

  • Frequent Contributor
  • **
  • Posts: 423
Re: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab
« Reply #27 on: February 04, 2016, 09:58:48 am »
Turns out an Open Source Pulse Oxymeter is A LOT more important than any of us realized.



From around 20:00 but obviously watch the whole thing to get the context.
 

Offline jpereira.ca

  • Newbie
  • Posts: 1
  • Country: ca
Re: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab
« Reply #28 on: October 20, 2020, 05:30:18 am »
In the end, was anyone able to connect a Nellcor Pulse Oximeter to an Arduino, and get the calibration data from the OTP EPROM on DB-9 pins 4 and 8?

Also, what OP-AMP did you end up using to convert the current range to an Arduino-readable voltage range?

Many thanks in advance!
 

Offline GVidinski

  • Newbie
  • Posts: 2
  • Country: bg
Re: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab
« Reply #29 on: March 22, 2024, 01:06:14 pm »
Hi guys,
I'll try to resurrect this thread If I may.
I just got couple of SPO2 sensors from China. They were offered as "Compatible for Nellcor DS-100A Spo2 Sensor with Oximax Tech" and they are equipped with 9 pin DB9 female connector.

I managed to read their PROM using esp8266 nodeMcu board and sensor wired using previously mentioned connection - GND pin4 & DATA on pin8 of the DB9 connector. Despite they are both labeled with unique serial numbers, the data from their PROM is absolutely identical.
On the PROM request they both respond with following 8 bytes:
Code: [Select]
93 20 18 FF 0 0 60 51Where 0x51 was confirmed by the OneWire.crc8() function to be correct.
It turns out the contents of the memory were also identical:
Code: [Select]
Data is[0000h]: DE E0 E4 64 60 62 60 A8 B2 86 0 2 2 3 4 4 1 FE 7 2 FF 2F 34 9 4 8B C8 E 7F 69 D4 21
Data is[0020h]: 92 31 2C C2 78 3D 30 D6 A2 69 2F 93 FF B5 CC EB B8 D6 A2 23 AB A5 B6 F5 6B 55 30 B0 BF A5 E1 76
Data is[0040h]: C0 C7 3E 9D 21 80 DE ED 43 7D B8 2B 9 F3 21 20 B 9A E6 C6 3E A7 C0 17 CA 14 EF 3A 5F CF ED DC
Data is[0060h]: C9 5E 50 EE 3 7E 68 B8 1E 15 65 C8 E8 7A ED D6 17 47 76 AE 40 C2 A6 2 BD 84 74 4 50 C 1A E
Data is[0080h]: 2 7 80 A7 86 FE 2C 92 64 96 9A AA 97 4B CC DB 5C DD 44 A2 41 4C 69 27 71 FF FF FF FF FF FF FF
Data is[00A0h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[00C0h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[00E0h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[0100h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[0120h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[0140h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[0160h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[0180h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[01A0h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[01C0h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Data is[01E0h]: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 3 0 0 FE FF FF FF FF FF 19 0 0 FE FF FF FF FF

So nothing to match the serials on the labels of the cables.

Unfortunately neither of the crc functions (crc8() & crc16) does not return the same code as the one red from the device:
Code: [Select]
Data is[0000h]: Calculated CRC8:8D
Data is[0000h]: DS250x ->  CRC8:87
Data is[0020h]: Calculated CRC8:4C
Data is[0020h]: DS250x ->  CRC8:21
Data is[0040h]: Calculated CRC8:16
Data is[0040h]: DS250x ->  CRC8:77
Data is[0060h]: Calculated CRC8:D7
Data is[0060h]: DS250x ->  CRC8:DD
Data is[0080h]: Calculated CRC8:A2
Data is[0080h]: DS250x ->  CRC8:F
Data is[00A0h]: Calculated CRC8:63
Data is[00A0h]: DS250x ->  CRC8:FF
Data is[00C0h]: Calculated CRC8:39
Data is[00C0h]: DS250x ->  CRC8:FF
Data is[00E0h]: Calculated CRC8:F8
Data is[00E0h]: DS250x ->  CRC8:FF
Data is[0100h]: Calculated CRC:D3
Data is[0100h]: DS250x ->  CRC:FF
Data is[0120h]: Calculated CRC:12
Data is[0120h]: DS250x ->  CRC:FF
Data is[0140h]: Calculated CRC:48
Data is[0140h]: DS250x ->  CRC:FF
Data is[0160h]: Calculated CRC:89
Data is[0160h]: DS250x ->  CRC:FF
Data is[0180h]: Calculated CRC:FC
Data is[0180h]: DS250x ->  CRC:FF
Data is[01A0h]: Calculated CRC:3D
Data is[01A0h]: DS250x ->  CRC:FF
Data is[01C0h]: Calculated CRC:67
Data is[01C0h]: DS250x ->  CRC:FF
Data is[01E0h]: Calculated CRC:A6
Data is[01E0h]: DS250x ->  CRC:FF
 
 
But you can see how memory contents affect the received crc8 code. Unfortunately I wasn't able to confirm those codes with the crc() functions no matter what I was trying. Still I can confirm that the data is identical on every read cycle.

I hope this will help.
So, having this information does anyone knows how all that memory contents are structured and how to extract calibration data?

Cheers!


 

Offline Phoenix

  • Frequent Contributor
  • **
  • Posts: 420
  • Country: au
Re: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab
« Reply #30 on: March 23, 2024, 05:52:41 am »
Due to the ratiometric calculation of standard pulse oximeters the sensors don't need calibration.

https://www.nxp.com/docs/en/application-note/AN4327.pdf
 

Offline GVidinski

  • Newbie
  • Posts: 2
  • Country: bg
Re: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab
« Reply #31 on: March 25, 2024, 06:50:18 pm »
Would the same be true for let's say Ti's AFE4490 based project? Or there will be additional steps required?

https://www.ti.com/lit/gpn/afe4490
 

Offline Phoenix

  • Frequent Contributor
  • **
  • Posts: 420
  • Country: au
Re: Pulse Oximeter using Arduino Uno, Raspberry Pi and Xprotolab
« Reply #32 on: March 27, 2024, 02:02:04 am »
Would the same be true for let's say Ti's AFE4490 based project? Or there will be additional steps required?

The same is true for any standard pulse oximeter. TI have a similar app note for their ICs.
https://www.ti.com/lit/ug/tidu475/tidu475.pdf
TI also make an AFE4490 dev kit that includes a DB9 "Nellcor style" finger clip sensor.
https://www.ti.com/tool/AFE4490SPO2EVM

The main thing you need is the R-SpO2 curve that suits your specific sensor (or use someone else's as "close enough").
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf