MAX30105 یک سنسور یکپارچه مبتنی بر IR است که قابلیت اندازه گیری ذرات معلق موجود در هوا را دارد . MAX30105 از فرستنده های IR ، گیرنده IR شبکه ای و همچنین گیرنده های نور قرمز و سبز 527 تا 660 نانومتری تشکیل شده است  . MAX30100 قابلیت اندازه گیری نور محیط ، فاصله تا اجسام و همچنین ذرات معلق در هوا را دارد . حساسیت این سنسور بسیار بالا می باشد لذا علاوه بر سنجش ذرات هوا ، می توان از آن به عنوان پالس اکسیمتر نیز استفاده کرد . در این آموزش از MAX30105 به عنوان پالس اکسیمتر استفاده می کنیم . پالس اکسیمتر ها در واقع سنسور های اندازه گیری اکسیژن خون هستند . به نسبت اکسیژن موجود در خون ، رنگ خون می تواند تیره یا روشن تر باشد که همین امر بر رنگ پوست تاثیر گذار است . تغییرات کم اکسیژن خون تغییرات ناچیژ رنگ پوست را به همراه دارد که توسط چشم انسان قابل تشخیص نمی باشد . سنسور های پالس اکسیمتر از طریق سنجش رنگ پوست  و همچنین میزان بازتاب IR ، قادر به اندازه گیری شدت اکسیژن خون می باشند . همچنین در هر باز منقبض شدن قلب فشار خون در رگ ها افزایش یافته که همین موضوع نیز باعث تغییر رنگ پوست بر اساس ضربان قلب می شود که این تغییرات توسط چشم قابل تشخیص نمی باشند . MAX30105 علاوه بر اندازه گیری اکسیژن خون قابلیت اندازه گیری ضربان قلب را نیز دارد .

 

راه اندازی ماژول :

این ماژول دارای رابط ارتباطی I2C می باشد لذا تنها از طریق دو پین می توان آن را راه اندازی نمود . در این آموزش ما از کتابخانه آماده Sparkfun MAX30105 استفاده می کنیم .

قبل از هر چیز لازم است به پایه های این ماژول بپردازیم . ماژول MAX30105 دارای 5 پایه به صورت زیر است :

  • Vcc که به تغذیه +3 ولت آردوینو متصل می شود .
  • GND پایه زمین ماژول
  • SDA و SCL پایه های ارتباط I2C
  • INT پایه وقفه خارجی ماژول

 

کتابخانه Sparkfun MAX30105 کلیه متد ها و توابع لازم برای این راه اندازی این ماژول را دارد لذا نیازی به ارسال و تغییر رجیستری ها به صورت دستی و از طریق کتابخانه Wire نمی باشد .

برنامه راه اندازی ماژول توسط آردوینو :

/*
  Optical Heart Rate Detection (PBA Algorithm) using the MAX30105 Breakout
  By: Nathan Seidle @ SparkFun Electronics
  Date: October 2nd, 2016
  https://github.com/sparkfun/MAX30105_Breakout
  This is a demo to show the reading of heart rate or beats per minute (BPM) using
  a Penpheral Beat Amplitude (PBA) algorithm.
  It is best to attach the sensor to your finger using a rubber band or other tightening
  device. Humans are generally bad at applying constant pressure to a thing. When you
  press your finger against the sensor it varies enough to cause the blood in your
  finger to flow differently which causes the sensor readings to go wonky.
  Hardware Connections (Breakoutboard to Arduino):
  -5V = 5V (3.3V is allowed)
  -GND = GND
  -SDA = A4 (or SDA)
  -SCL = A5 (or SCL)
  -INT = Not connected
  The MAX30105 Breakout can handle 5V or 3.3V I2C logic. We recommend powering the board with 5V
  but it will also run at 3.3V.
*/

#include <Wire.h>
#include "MAX30105.h"

#include "heartRate.h"

MAX30105 particleSensor;

const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred

float beatsPerMinute;
int beatAvg;

void setup()
{
  Serial.begin(115200);
  Serial.println("Initializing...");

  // Initialize sensor
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
  {
    Serial.println("MAX30105 was not found. Please check wiring/power. ");
    while (1);
  }
  Serial.println("Place your index finger on the sensor with steady pressure.");

  particleSensor.setup(); //Configure sensor with default settings
  particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
  particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
}

void loop()
{
  long irValue = particleSensor.getIR();

  if (checkForBeat(irValue) == true)
  {
    //We sensed a beat!
    long delta = millis() - lastBeat;
    lastBeat = millis();

    beatsPerMinute = 60 / (delta / 1000.0);

    if (beatsPerMinute < 255 && beatsPerMinute > 20)
    {
      rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
      rateSpot %= RATE_SIZE; //Wrap variable

      //Take average of readings
      beatAvg = 0;
      for (byte x = 0 ; x < RATE_SIZE ; x++)
        beatAvg += rates[x];
      beatAvg /= RATE_SIZE;
    }
  }

  Serial.print("IR=");
  Serial.print(irValue);
  Serial.print(", BPM=");
  Serial.print(beatsPerMinute);
  Serial.print(", Avg BPM=");
  Serial.print(beatAvg);

  if (irValue < 50000)
    Serial.print(" No finger?");

  Serial.println();
}

ابتدا پین های آردوینو را به ترتیب زیر به ماژول متصل کرده و سپس کد های بالا را بر روی برد خود آپلود کنید .

پین SCL ماژول را به پین A5 آردوینو متصل کنید .

پین SDA را به پین A4 آردوینو متصل کنید .

VCC و GND را نیز به ترتیب به +3.3V و GND برد آردوینو متصل نمایید .

پس از اتصال ماژول به آردوینو و پروگرام کردن برنامه فوق ، محیط Serial monitor آردوینو IDE را باز کرده و انگشت خود را بر روی سنسور ماژول قرار دهید .

Tags:
About Author: USER_4