Max30100 with MLX90614 not working pulse and oxygenlevel Arduino UNO

@runaway_pancake if I give 3.3v values not reading when I test the sensor individually

Have you a link to the MAX30100 board that you are using?

Post Ed. - I reckon some level-translation is necessary.

Have you got 1 sensor and the lcd screen to work?

This is why I suspect there's trouble with mixing the MAX30100's 3V3 and the MLX90614 (and there's a 3V and a 5V version of that).

@runaway_pancake i checked and i changed to 3.3v but still values are not reading from the sensor but is connected.

@Idahowalker i removed the pullout resistors but still it is not working

help me

Is #include "MAX30100_PulseOximeter.h"
supposed to be like that ?
Or should it be #include <MAX30100_PulseOximeter.h> ?

@vidhyaprakash85
Are you using one of these?
I bought one (this one) and I see, with the DVM, that SDA and SCL are pulled up to 1.8V

Trying to work this out with you, I get erratic readings.
Is my finger supposed to be on it or away some small distance?
If my finger is right on it -- nothing; from 1cm or so there is "Beat!" and bpm etc, but inconsistent and lots of variation.
This may be related to the LED brightness (which surprised me when it first came on). I ran one of the other Examples that reduced it considerable (why I cannot say).
I wanted to get this working reliably before bringing the '90614 into the mix.

BTW -- You posted a link where the one fellow got his project turned around by changing #define I2C_BUS_SPEED 400000UL in MAX30100.h to #define I2C_BUS_SPEED 100000UL. Did you do that? (I have not.)

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"

#define REPORTING_PERIOD_MS     2000

// PulseOximeter is the higher level interface to the sensor
// it offers:
//  * beat detection reporting
//  * heart rate calculation
//  * SpO2 (oxidation level) calculation
PulseOximeter pox;

unsigned long tsLastReport = 0;

// Callback (registered below) fired when a pulse is detected
void onBeatDetected()
{
  Serial.println("Beat!");
}

void setup()
{
  Serial.begin(19200);
  Serial.print("Initializing pulse oximeter..");
  if (!pox.begin()) 
  {
    Serial.println("FAILED");
    for(;;);
  } 
  else 
  {
    Serial.println("30100 ok");
  }
  pox.setOnBeatDetectedCallback(onBeatDetected);
}

void loop()
{
  pox.update();

  // Asynch dump heart rate and oxi levels to the serial
  // For both, a value of 0 means "invalid"
  if (millis() - tsLastReport > REPORTING_PERIOD_MS) 
  {
    Serial.print("Heart rate:");
    Serial.print(pox.getHeartRate());
    Serial.print("bpm / SpO2:");
    Serial.print(pox.getSpO2());
    Serial.println("%");
    tsLastReport = millis();
  }
}

@runaway_pancake thank you for your efforts. Yes sir i use this. I using pull resistor with 4.7 ohm

@runaway_pancake yes sir i did that. When i mix with other sensor and if i add any delay then pulse oximeter values are not read.

@vidhyaprakash85
My 30100 doesn't work right, but I don't know what to expect from it. Perhaps you could tell me about how it works for you. Do you place your finger right on it and readings are basically consistent?
I'll recap my experience, I have to keep my finger 1cm away and the results are "all over the place" --

Heart rate:79.60bpm / SpO2:95%
Beat!
Beat!
Heart rate:50.03bpm / SpO2:95%
Beat!
Heart rate:62.36bpm / SpO2:95%
Beat!
Beat!
Heart rate:75.73bpm / SpO2:0%
Beat!
Beat!
Beat!
Beat!
Heart rate:169.04bpm / SpO2:94%
Beat!
Beat!
Heart rate:79.16bpm / SpO2:94%
Beat!
Beat!
Beat!
Beat!
Beat!
Heart rate:108.83bpm / SpO2:94%
Beat!
Heart rate:51.64bpm / SpO2:94%
Heart rate:0.00bpm / SpO2:0%
Beat!

For the record, I modified my board so that its SCL and SDA are pulled-up to its (onboard) 3V3 --


and then I run those into a 3v-5V level shifter.

@vidhyaprakash85
Post links to the exact boards you used. I don't expect you to use the sensor chips directly so we need to know what other components are on the boards. I guess, each board has on-board pull-ups so the sinking current got too big but that's wild guessing without knowing the exact circuitry.

All I2C devices use different power voltages (given you use the mostly used 3.3V version of the MLX90614) so the bus voltage may be another problem.

same problem happen with me

in this video idk how it works

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.