Ear-clip heart rate meter

ইতোমধ্যে আমরা হার্ট রেট মিটার তৈরী করেছি। আজ যে হার্ট রেট মিটারটি তৈরী করা হবে সেটি আগেরটির চেয়ে একটু আলাদা। এই মিটারটিতে যে সেন্সরটি ব্যবহার করা হবে সেটি একটি ইয়ার-ক্লিপের মাধ্যমে কানের সাথে যুক্ত করা থাকবে। ইয়ার-ক্লিপ হার্ট রেট সেন্সর ব্যবহার করা সুবিধাজনক। কারণ, কানের সাথে যুক্ত থাকায় হাঁটাচলা বা দৌড়ানোর সময়ও হার্টরেট পরিমাপ করা যায় সহজেই।

প্রয়োজনীয় যন্ত্রপাতি পরিমাণ প্রডাক্ট লিংক
Arduino UNO R3 1 http://bit.ly/2KhV84M
Grove-ear clip heart rate sensor 1 http://bit.ly/37caZxL
Breadboard 1 http://bit.ly/2IjyUPg  
Male to male jumpers 6 http://bit.ly/2IkA1hy  
OLED Display Blue I2C 128×64 0.96″ 1 http://bit.ly/3aqoHiz
9V battery1http://bit.ly/2JWWj99


9V Battery Connector with Power Jack
1http://bit.ly/2QrofVV

সার্কিটঃ

আরডুইনো এবং ওলেডের মধ্যে নিচের কানেকশনটি সম্পন্ন করুন।

Arduino UNO R3 OLED Display Blue I2C 128×64 0.96″
3.3VCC
GNDGND
A4SDA
A5SCL

হার্ট রেট সেন্সর এবং আরডুইনোর মধ্যে নিচের কানেকশনটি সম্পন্ন করুন।

Arduino UNO R3 Grove-ear clip heart rate sensor
5VRED
GNDGND
2Yellow

ব্যাটারি দিয়ে সার্কিটে পাওয়ার দিন। পুরো সার্কিটটি দেখতে ছিল নিচের ছবিটির মতো।

প্রোগ্রামঃ


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

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

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

Leave a Reply

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