lmsuda
Published

Heart Beat Sleep Sensor

A heart beat sensor that calibrates itself and then detects your heartbeat. Must be places at base of earlobe for best reading.

BeginnerFull instructions provided3 hours52
Heart Beat Sleep Sensor

Things used in this project

Hardware components

Photon 2
Particle Photon 2
×1
PulseSensor Heart Rate Sensor Module
×1
LED (generic)
LED (generic)
×1
Resistor 1k ohm
Resistor 1k ohm
×1
Breadboard (generic)
Breadboard (generic)
×1
Male/Male Jumper Wires
×10
Female/Female Jumper Wires
Female/Female Jumper Wires
×3

Software apps and online services

Particle Build Web IDE
Particle Build Web IDE
Arduino IDE
Arduino IDE

Story

Read more

Code

Heart Beat Sensor

C/C++
Calibrates the heartbeat sensor a reads a persons heartbeat
#include "Particle.h"


SYSTEM_MODE(AUTOMATIC);
#include "Particle.h"


SYSTEM_MODE(AUTOMATIC);

SerialLogHandler logHandler(LOG_LEVEL_INFO);

int heartPin = 6;
int analogPin = A5;
int led = 7;
int sensor;
int lastSample;
int beats = 0;
unsigned long minuteStart = 0;
int highestNum = 0;
int lowestNum = 4000;
int threshHold;
bool readingStart = true;
unsigned long time2;
unsigned long timePassed1 = 10000;
unsigned long timePassed2 = 10000;
int countDownLength = 10;
double beats10Sec;
int cycleTimes = 1;


void setup() {
    pinMode(led, OUTPUT);
    pinMode(heartPin, OUTPUT);
    Serial.begin(9600);
    digitalWrite(heartPin, HIGH);
}

void loop() {
    if(countDownLength > 0){
        Serial.print("Count Down: ");
        Serial.println(countDownLength);
        countDownLength -= 1;
        delay(1000);
        minuteStart = millis();
    }
    else {
        time2 = millis();
        sensor = analogRead(analogPin);
        //Serial.println(sensor);
        if(time2-minuteStart<timePassed2){
            if(sensor>highestNum && sensor<3400){
                highestNum = sensor;
            }
            if(sensor<lowestNum && sensor>1300){
                lowestNum = sensor;
            }
        }
        else{
            if (readingStart){
                Serial.println("Calibration Ended");
                Serial.println("Reading Started");
                readingStart = false;        
            }
            threshHold = (lowestNum+highestNum)/2;
            if(sensor >= threshHold && lastSample < threshHold){
                digitalWrite(led, HIGH);
                //Serial.println(sensor);
                beats++;
            }else if(sensor < threshHold && lastSample > threshHold){
                digitalWrite(led, LOW);
                //Serial.println(sensor);
            }
            lastSample = sensor;
            if (time2-minuteStart > timePassed1*cycleTimes+timePassed2){
                beats10Sec = (double)beats*(6.0/cycleTimes);
                cycleTimes ++;
                Serial.print("BPM: ");
                Serial.println(beats10Sec);
                if(beats10Sec>40 && beats10Sec<60){
                    Serial.println("Good Sleep");
                }else{
                    Serial.println("Bad Sleep");
                }
                if(time2 - minuteStart >= timePassed2 + 60000){
                    //Serial.print(" BPM: ");
                    //Serial.println(beats);
                    beats = 0;
                    minuteStart = time2;
                    Serial.println("Reading ended");
                    readingStart = true;
                    cycleTimes = 1;
                }
            }
        }
        delay(100);
    }
}

Credits

lmsuda
1 project • 0 followers

Comments