Ear-clip heart rate meter
ইতোমধ্যে আমরা হার্ট রেট মিটার তৈরী করেছি। আজ যে হার্ট রেট মিটারটি তৈরী করা হবে সেটি আগেরটির চেয়ে একটু আলাদা। এই মিটারটিতে যে সেন্সরটি ব্যবহার করা হবে সেটি একটি ইয়ার-ক্লিপের মাধ্যমে কানের সাথে যুক্ত করা থাকবে। ইয়ার-ক্লিপ হার্ট রেট সেন্সর ব্যবহার করা সুবিধাজনক। কারণ, কানের সাথে যুক্ত থাকায় হাঁটাচলা বা দৌড়ানোর সময়ও হার্টরেট পরিমাপ করা যায় সহজেই।
প্রয়োজনীয় যন্ত্রপাতি | পরিমাণ | প্রডাক্ট লিংক |
Arduino UNO R3 | 1 | এখানে ক্লিক করুন |
Grove-ear clip heart rate sensor | 1 | এখানে ক্লিক করুন |
Breadboard | 1 | এখানে ক্লিক করুন |
Male to male jumpers | 6 | এখানে ক্লিক করুন |
OLED Display Blue I2C 128×64 0.96″ | 1 | এখানে ক্লিক করুন |
9V battery | 1 | এখানে ক্লিক করুন |
9V Battery Connector with Power Jack | 1 | এখানে ক্লিক করুন |
সার্কিটঃ
আরডুইনো এবং ওলেডের মধ্যে নিচের কানেকশনটি সম্পন্ন করুন।
Arduino UNO R3 | OLED Display Blue I2C 128×64 0.96″ |
3.3 | VCC |
GND | GND |
A4 | SDA |
A5 | SCL |
হার্ট রেট সেন্সর এবং আরডুইনোর মধ্যে নিচের কানেকশনটি সম্পন্ন করুন।
Arduino UNO R3 | Grove-ear clip heart rate sensor |
5V | RED |
GND | GND |
2 | Yellow |
ব্যাটারি দিয়ে সার্কিটে পাওয়ার দিন। পুরো সার্কিটটি দেখতে ছিল নিচের ছবিটির মতো।
প্রোগ্রামঃ
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display;
boolean led_state = LOW;//state of LED, each time an external interrupt
//will change the state of LED
unsigned char counter;
unsigned long temp[21];
unsigned long sub;
bool data_effect=true;
unsigned int heart_rate;//the measurement result of heart rate
int resetpin=12;
const int max_heartpluse_duty = 2000;//you can change it follow your system's request.
//2000 meams 2 seconds. System return error
//if the duty overtrip 2 second.
void setup()
{
pinMode(resetpin, OUTPUT);
Serial.begin(9600);
Serial.println("Please ready your chest belt.");
delay(5000);
arrayInit();
Serial.println("Heart rate test begin.");
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// display.drawBitmap(5,0,myBitmap,64,32 , WHITE);
//
//
display.display();
//display.clearDisplay();
// Clear the buffer.
attachInterrupt(0, interrupt, RISING);//set interrupt 0,digital port 2
}
void loop()
{
// digitalWrite(LED, led_state);//Update the state of the indicator
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(35,15);
display.print(heart_rate);
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(" BPM");
display.display();
display.clearDisplay();
}
/*Function: calculate the heart rate*/
void sum()
{
if(data_effect)
{
heart_rate=1200000/(temp[20]-temp[0]);//60*20*1000/20_total_time
Serial.print("Heart_rate_is:\t");
Serial.println(heart_rate);
}
data_effect=1;//sign bit
}
/*Function: Interrupt service routine.Get the sigal from the external interrupt*/
void interrupt()
{
temp[counter]=millis();
//Serial.println(counter,DEC);
// Serial.println(temp[counter]);
switch(counter)
{
case 0:
sub=temp[counter]-temp[20];
// Serial.println(sub);
//Serial.println("Processing ");
break;
default:
sub=temp[counter]-temp[counter-1];
//Serial.println(sub);
//Serial.println("Processing ");
break;
}
if(sub>max_heartpluse_duty)//set 2 seconds as max heart pluse duty
{
data_effect=0;//sign bit
counter=0;
Serial.println("Heart rate measure error,test will restart!" );
//display.display();
arrayInit();
}
if (counter==20&&data_effect)
{
counter=0;
sum();
}
else if(counter!=20&&data_effect)
counter++;
else
{
counter=0;
data_effect=1;
}
}
/*Function: Initialization for the array(temp)*/
void arrayInit()
{
for(unsigned char i=0;i < 20;i ++)
{
temp[i]=0;
}
temp[20]=millis();
}
ইয়ার ক্লিপটি আপনার কানের লতিতে পরুন।
কিছুক্ষন পর ওলেড ডিসপ্লেতে আপনার হার্ট রেট দেখা যাবে।