Go Down

Topic: Help with a pulse detection func (Read 1 time) previous topic - next topic

PaulS

Quote
but couldn't figure out how to spot the big changes in the pulse which would trigger pin nr 13.

Did you read the code walk through link? They do a pretty good job of describing the relationship between the code and the physical phenomenon being measured.

sven_paul

Hi again, yes i did read the walk through link, the problem is that i don't under stand how to bring the code together -- i also understand that it dose exactly what i want.
I got the sensor running but then it just blinks in the pase of the pulse..
/
S-P

PaulS

Quote
I got the sensor running but then it just blinks in the pase of the pulse..

So, you need to count the number of pulses in some period of time, and calculate beats per minute. Then, do something when beats per minute is above your threshold. Or below it.

GoForSmoke

You can read analog pulses on digital pins by having the pulse charge a resistor-capacitor circuit and time how many loops until it drains from HIGH to LOW. That is the way that all cheap A/D converters (PC joystick port) work.

What size resistor and capacitor? Hehehe, I'm not the guy to ask as I don't know the best answer!

I find it harder to express logic in English than in Code.
Sometimes an example says more than many times as many words.

sven_paul


Quote
I got the sensor running but then it just blinks in the pase of the pulse..

So, you need to count the number of pulses in some period of time, and calculate beats per minute. Then, do something when beats per minute is above your threshold. Or below it.


Isn't that what the sample code is doing, the code which is described on http://pulsesensor.myshopify.com/pages/pulse-sensor-amped-arduino-v1dot1? Which is the code ive been trying to compile.

Im running the code below to

Code: [Select]
//  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


// these variables are volatile because they are used during the interrupt service routine!
volatile int BPM;                   // used to hold the pulse rate
volatile int Signal;                // holds the incoming raw data
volatile int IBI = 600;             // holds the time between beats, the Inter-Beat Interval
volatile boolean Pulse = false;     // true when pulse wave is high, false when it's low
volatile boolean QS = false;        // becomes true when Arduoino finds a beat.


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
   // UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE,
   // AND APPLY THAT VOLTAGE TO THE A-REF PIN
   //analogReference(EXTERNAL);   
}



void loop(){
  sendDataToProcessing('S', Signal);     // send Processing the raw Pulse Sensor data
  if (QS == true){                       // Quantified Self flag is true when arduino finds a heartbeat
        fadeRate = 255;                  // Set 'fadeRate' Variable to 255 to fade LED with pulse
        sendDataToProcessing('B',BPM);   // send heart rate with a 'B' prefix
        sendDataToProcessing('Q',IBI);   // send time between beats with a 'Q' prefix
        QS = false;                      // reset the Quantified Self flag for next time   
     }
 
  ledFadeToBeat();
 
  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
  }


void sendDataToProcessing(char symbol, int data ){
    Serial.print(symbol);                // symbol prefix tells Processing what type of data is coming
    Serial.println(data);                // the data to send culminating in a carriage return
  }

Go Up