MAX30102 not working?

So, I'm trying to measure BPM using MAX30102 sensor. I have downloaded the Sparkfun library for this module. Then, I tried to run the "heartrate" example, but it is just printing random characters into the serial monitor.

Here is my code and schematic:

/*
  Optical Heart Rate Detection (PBA Algorithm) using the MAX30105 Breakout
  By: Nathan Seidle @ SparkFun Electronics
  Date: October 2nd, 2016
  https://github.com/sparkfun/MAX30105_Breakout

  This is a demo to show the reading of heart rate or beats per minute (BPM) using
  a Penpheral Beat Amplitude (PBA) algorithm.

  It is best to attach the sensor to your finger using a rubber band or other tightening
  device. Humans are generally bad at applying constant pressure to a thing. When you
  press your finger against the sensor it varies enough to cause the blood in your
  finger to flow differently which causes the sensor readings to go wonky.

  Hardware Connections (Breakoutboard to Arduino):
  -5V = 5V (3.3V is allowed)
  -GND = GND
  -SDA = A4 (or SDA)
  -SCL = A5 (or SCL)
  -INT = Not connected

  The MAX30105 Breakout can handle 5V or 3.3V I2C logic. We recommend powering the board with 5V
  but it will also run at 3.3V.
*/

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

#include "heartRate.h"

MAX30105 particleSensor;

const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred

float beatsPerMinute;
int beatAvg;

void setup()
{
  Serial.begin(115200);
  Serial.println("Initializing...");

  // Initialize sensor
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
  {
    Serial.println("MAX30105 was not found. Please check wiring/power. ");
    while (1);
  }
  Serial.println("Place your index finger on the sensor with steady pressure.");

  particleSensor.setup(); //Configure sensor with default settings
  particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
  particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
}

void loop()
{
  long irValue = particleSensor.getIR();

  if (checkForBeat(irValue) == true)
  {
    //We sensed a beat!
    long delta = millis() - lastBeat;
    lastBeat = millis();

    beatsPerMinute = 60 / (delta / 1000.0);

    if (beatsPerMinute < 255 && beatsPerMinute > 20)
    {
      rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
      rateSpot %= RATE_SIZE; //Wrap variable

      //Take average of readings
      beatAvg = 0;
      for (byte x = 0 ; x < RATE_SIZE ; x++)
        beatAvg += rates[x];
      beatAvg /= RATE_SIZE;
    }
  }

  Serial.print("IR=");
  Serial.print(irValue);
  Serial.print(", BPM=");
  Serial.print(beatsPerMinute);
  Serial.print(", Avg BPM=");
  Serial.print(beatAvg);

  if (irValue < 50000)
    Serial.print(" No finger?");

  Serial.println();
}


circuit (1)

Anyone have any idea about what I'm doing wrong?

NOTE: I am using the 5v version of the board, but I read here that I could do that as long as I inputted 5v into the VCC pin and chose the 8mhz option in the settings. (but I have not removed the voltage regulator, I'm not that confident in my soldering skills and don't want to mess up my board).

Hi, @roshan-baig

Have you checked that you have the IDE monitor set at 115200 baud?

Thanks.. Tom.. :grinning: :+1: :coffee: :australia:

yes, I had it set at that baud rate, but it still wasn't working. The only difference was that the random characters started printing faster.

In case it matters, the red LED on the module was on.

Would it be helpful if I copy-pasted the characters onto here? (I'm guessing not but not sure)

Hi,
Are you getting any of the serial.print in the void setup(), coming up on the monitor that is legible?

Is all that is printed random, or are you getting the formatted text you have in the serial prints appearing legible?

Thanks.. Tom.. :grinning: :+1: :coffee: :australia:

Put a delay(250); as the last line in the loop. It will slow the output and let you see if the characters are because of one Serial.print() giving all the characters or if all the Serial.print() are doing it.

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