0

I have recently purchased this Heart rate sensor and was trying to make it work. I used this MAX30100 library I found on Github. For some reason when I use any of the given examples, they seem to work well when I use a Mega2560 I have but not on the Uno or Nano. Does this have to do with the processor? I don't think so because the README on Github mentions that they tested it on an Uno. But if it is so, how could I change the code to make it work with the Uno and nano?

Example Code I used:

// This example can be used to test connectivity and operation of the sensor
// check the README file on the repo's root for a troubleshooting guide in casem
// any of the tests running fail
#include <Wire.h>
#include "MAX30100.h"
MAX30100 sensor;
void setup()
{
 Serial.begin(9600);
 Serial.print("Initializing MAX30100..");
 if (!sensor.begin()) {
 Serial.print("FAILED: ");
 uint8_t partId = sensor.getPartId();
 if (partId == 0xff) {
 Serial.println("I2C error");
 } else {
 Serial.print("wrong part ID 0x");
 Serial.print(partId, HEX);
 Serial.print(" (expected: 0x");
 Serial.println(EXPECTED_PART_ID, HEX);
 }
 // Stop here
 for(;;);
 } else {
 Serial.println("Success");
 }
 Serial.print("Enabling HR/SPO2 mode..");
 sensor.setMode(MAX30100_MODE_SPO2_HR);
 Serial.println("done.");
 Serial.print("Configuring LEDs biases to 50mA..");
 sensor.setLedsCurrent(MAX30100_LED_CURR_50MA, MAX30100_LED_CURR_50MA);
 Serial.println("done.");
 delay(1000);
 Serial.print("Lowering the current to 7.6mA..");
 sensor.setLedsCurrent(MAX30100_LED_CURR_7_6MA, MAX30100_LED_CURR_7_6MA);
 Serial.println("done.");
 delay(1000);
 Serial.print("Shutting down..");
 sensor.shutdown();
 Serial.println("done.");
 delay(1000);
 Serial.print("Resuming normal operation..");
 sensor.resume();
 delay(500);
 Serial.println("done.");
 uint32_t tsTempSampStart = millis();
 Serial.print("Sampling die temperature..");
 sensor.startTemperatureSampling();
 while(!sensor.isTemperatureReady()) {
 if (millis() - tsTempSampStart > 1000) {
 Serial.println("ERROR: timeout");
 // Stop here
 for(;;);
 }
 }
 float temperature = sensor.retrieveTemperature();
 Serial.print("done, temp=");
 Serial.print(temperature);
 Serial.println("C");
 if (temperature < 5) {
 Serial.println("WARNING: Temperature probe reported an odd value");
 } else {
 Serial.println("All test pass.");
 }
 Serial.println();
 Serial.println("Press any key to go into sampling loop mode");
 while (!Serial.available());
 sensor.resetFifo();
}
void loop()
{
 uint16_t ir, red;
 sensor.update();
 while (sensor.getRawValues(&ir, &red)) {
 Serial.print("IR=");
 Serial.print(ir);
 Serial.print(" RED=");
 Serial.println(red);
 }
}
asked Nov 12, 2019 at 7:51
5
  • What code are you using? Please show us. Also: Have you connected it correctly? As I remember the I2C hardware is on different pins for Uno/Nano and Mega Commented Nov 12, 2019 at 8:10
  • Also: What does not work well on Uno/Nano? What error do you get? Have you checked for the result of the tester example of the library? Commented Nov 12, 2019 at 8:20
  • I have added the example I was using in the question. For the connections, I simply connected Vin to 3.3V, SDA to SDA, SCL to SCL and GND to GND. Commented Nov 12, 2019 at 8:56
  • The main difference is that Arduino mega has pull up resistors on SCL/SDA lines. Commented Nov 12, 2019 at 9:11
  • Please test with the tester example of the library. It might show, what problem we have here exactly. Have you tried adding pullup resistors to the lines as mentioned in the troubleshooting section of the libraries readme? Commented Nov 12, 2019 at 10:22

1 Answer 1

1

I added pull-up resistors to the board and it started working. Turns out that the boards weren't well designed and the I2C lines were pulled up to 1.8V instead of Vin. By removing the pull-ups and adding pull-ups to Vin, the circuit started functioning. The circuit worked with Mega because it has in-built Pull-up Resistors.

answered Nov 12, 2019 at 11:14
1
  • And this can be done because those pins can be pulled up to 6V (absolute max). Commented Nov 12, 2019 at 11:26

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.