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();
    }

ইয়ার ক্লিপটি আপনার কানের লতিতে পরুন।

কিছুক্ষন পর ওলেড ডিসপ্লেতে আপনার হার্ট রেট দেখা যাবে।

3.3/5 - (6 votes)
Share with your friends
Default image
A. R
Articles: 116

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.