Pulse Rate Sensor . Not stable

Hello to everyone,

i am using an Heart Rate sensor (the classic one) and my Arduino (my Mega or my UNO).

It has 3 wires (Supply,GND,Analog signal).

I am using the examples from it’s library but as i can see… BPM is not stable.It can be 69,70 and then 230 etc.

No matter where i place the sensor, the results are the same.

Did anyone fixed it by software or something else?

asdasd.png

Either your calculations are not correct or you are picking up noise. Without a schematic and source code there is no way to know.

I don't know what a classic heart rate sensor is. Is the output analog or digital? Is there any filtering?

I am using the below example code:

/*  Pulse Sensor Amped 1.5    by Joel Murphy and Yury Gitman   http://www.pulsesensor.com

----------------------  Notes ----------------------  ----------------------
This code:
1) Blinks an LED to User's Live Heartbeat   PIN 13
2) Fades an LED to User's Live HeartBeat    PIN 5
3) Determines BPM
4) Prints All of the Above to Serial

Read Me:
https://github.com/WorldFamousElectronics/PulseSensor_Amped_Arduino/blob/master/README.md
 ----------------------       ----------------------  ----------------------
*/

#define PROCESSING_VISUALIZER 1
#define SERIAL_PLOTTER  2

//  Variables
int pulsePin = 0;                 // Pulse Sensor purple wire connected to analog pin 0
int blinkPin = 13;                // pin to blink led at each beat
int fadePin = 5;                  // pin to do fancy classy fading blink at each beat
int fadeRate = 0;                 // used to fade LED on with PWM on fadePin

// Volatile Variables, used in the interrupt service routine!
volatile int BPM;                   // int that holds raw Analog in 0. updated every 2mS
volatile int Signal;                // holds the incoming raw data
volatile int IBI = 600;             // int that holds the time interval between beats! Must be seeded!
volatile boolean Pulse = false;     // "True" when User's live heartbeat is detected. "False" when not a "live beat".
volatile boolean QS = false;        // becomes true when Arduoino finds a beat.

// SET THE SERIAL OUTPUT TYPE TO YOUR NEEDS
// PROCESSING_VISUALIZER works with Pulse Sensor Processing Visualizer
//      https://github.com/WorldFamousElectronics/PulseSensor_Amped_Processing_Visualizer
// SERIAL_PLOTTER outputs sensor data for viewing with the Arduino Serial Plotter
//      run the Serial Plotter at 115200 baud: Tools/Serial Plotter or Command+L
static int outputType = SERIAL_PLOTTER;


void setup(){
  pinMode(blinkPin,OUTPUT);         // pin that will blink to your heartbeat!
  pinMode(fadePin,OUTPUT);          // pin that will fade to your heartbeat!
  Serial.begin(115200);             // we agree to talk fast!
  interruptSetup();                 // sets up to read Pulse Sensor signal every 2mS
   // IF YOU ARE POWERING The Pulse Sensor AT VOLTAGE LESS THAN THE BOARD VOLTAGE,
   // UN-COMMENT THE NEXT LINE AND APPLY THAT VOLTAGE TO THE A-REF PIN
//   analogReference(EXTERNAL);
}


//  Where the Magic Happens
void loop(){

    serialOutput() ;

  if (QS == true){     // A Heartbeat Was Found
                       // BPM and IBI have been Determined
                       // Quantified Self "QS" true when arduino finds a heartbeat
        fadeRate = 255;         // Makes the LED Fade Effect Happen
                                // Set 'fadeRate' Variable to 255 to fade LED with pulse
        serialOutputWhenBeatHappens();   // A Beat Happened, Output that to serial.
        QS = false;                      // reset the Quantified Self flag for next time
  }

  ledFadeToBeat();                      // Makes the LED Fade Effect Happen
  delay(20);                             //  take a break
}





void ledFadeToBeat(){
    fadeRate -= 15;                         //  set LED fade value
    fadeRate = constrain(fadeRate,0,255);   //  keep LED fade value from going into negative numbers!
    analogWrite(fadePin,fadeRate);          //  fade LED
  }

THe sensor i use is the one i attached on first post.

The sketch you posted doesn't do much. I followed the link in the code. All the processing is done in the interrupt code. That is where you need to look for any programming issues. The simplest fix is to change the minimum timing. Unless you are monitoring extreme athletes or people in life or death situations, you won't ever get a heart rate over 200 BPM.

Are you getting noise? do you have a stable power supply to the sensor? Does the sensor have a bypass capacitor across the power lines? Have you tried adding an RC filter to the signal? The picture doesn't really tell us anything about the sensor. It looks like it might be optical. Could flickering fluorescent or LED lights be triggering it?

When you get a bad reading does the time between beats agree with the BPM report? Does the LED blink faster?

Try sending the threshold values to the serial port. Maybe you need to put limits on the range that the threshold values can be.

I am not sure if this is going to help. When I used the Same Code, It produced the values around 230 only. It got solved when i properly handled the Pulse Sensor. I was holding the Pulse Sensor with Two of my fingers (Touching the Circuit part too). But When I placed my finger only on the sensor at back, I got proper output. So touching the circuit seems to create some issue.

For RC filter what is the values are we looking forward?