ماژول MAX30102 ضربان قلب و اکسیمتر
ماژول MAX30102 یک سنسور پالس اکسیمتر و ضربان قلب است که توسط شرکت مکسیم اینتگریتد تولید شده است. این ماژول از دو سنسور اپتیکال به همراه یک الکترود جهت اندازهگیری نبض و اکسیمتری استفاده میکند. این ماژول با استفاده از تکنولوژی تشدید نور، پالسهای قلب را از روی پوست اندازهگیری میکند و به صورت دیجیتال از طریق رابط ارتباطی مثل SPI یا I2C خروجی داده میشود. این ماژول برای اندازهگیری نبض و اکسیژن خون در مواردی مانند دستگاههای پزشکی، دستگاههای پوشیدنی، دستگاههای تنفسی و دستگاههای ورزشی استفاده میشود.
ویژگیهای فنی ماژول MAX30102
- ولتاژ کاری: 1.8 تا 5 ولت
- مصرف جریان: کمتر از 50 میلی آمپر در حالت فعال و کمتر از 1 میکروآمپر در حالت استندبای
- دارای دو سنسور اپتیکال (LED قرمز و فرابنفش) و یک الکترود (برای اندازهگیری نبض)
- توانایی اندازهگیری نبض و اکسیژن خون با دقت بالا
- فرکانس نمونهبرداری: تا 3200 سمپل در ثانیه
- ارتباط با سیستم: رابط SPI یا I2C
- قابلیت برنامهریزی از طریق رابط ارتباطی
- قابلیت کنترل شدن شدت نور LED
- دارای فیلتر دیجیتال برای کاهش نویز سیگنال
- اندازه کوچک و قابلیت نصب راحت
- مناسب برای استفاده در دستگاههای پزشکی، دستگاههای پوشیدنی، دستگاههای تنفسی و دستگاههای ورزشی.
راه اندازی سنسور پالس اکسیمتر MAX3010 با آردوینو
کتابخانه MAX30105 برای سنسور ضربان قلب MAX30102 درنرم افزار آردوینو موجود است. این کتابخانه را میتوان از طریق مدیریت کتابخانههای لایبرری آردوینو نصب کرد. برای نصب این کتابخانه، میتوانید به صورت زیر عمل کنید:
- ابتدا نرمافزار آردوینو IDE را باز کنید.
- در قسمت Sketch از منوی بالا، گزینه Include Library > Manage Libraries را انتخاب کنید.
- در پنجره باز شده، در جستجوی کتابخانه MAX30105 باشید.
- پس از پیدا شدن کتابخانه، آن را انتخاب کرده و گزینه Install را انتخاب کنید.
- صبر کنید تا فرآیند نصب کتابخانه به پایان برسد.
- حالا میتوانید از این کتابخانه در کد آردوینو خود استفاده کنید.
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 particleSensor;
void setup()
{
Serial.begin(115200); // شروع ارتباط با سریال
while (!Serial); // صبر برای ارتباط با سریال
// تعریف و شروع ارتباط با ماژول
particleSensor.begin(Wire, I2C_SPEED_FAST);
// تنظیم سرعت نمونهبرداری به 400 سمپل در ثانیه
particleSensor.setPulseAmplitudeRed(0x0A);
particleSensor.setPulseAmplitudeGreen(0);
particleSensor.setup();
}
void loop()
{
uint32_t ir, red;
// خواندن دادههای سنسور
while (particleSensor.getFIFOBytes() > 0)
{
particleSensor.check();
ir = particleSensor.getIR();
red = particleSensor.getRed();
}
// محاسبه ضربان قلب
float bpm = getHeartRate(ir, red);
// نمایش دادههای اندازهگیری شده در مانیتور سریال
Serial.print("IR=");
Serial.print(ir);
Serial.print(", Red=");
Serial.print(red);
Serial.print(", BPM=");
Serial.println(bpm);
delay(20);
}
کد آردوینو برای استفاده از سنسور MAX30102 به صورت زیر است. ابتدا کتابخانه های مورد نیاز را وارد کنید.این کد دادههای سنسور را از طریق رابط سریال به کامپیوتر ارسال میکند و میتوانید ضربان قلب را در مانیتور سریال مشاهده کنید. لازم به ذکر است که این کد به کتابخانههای MAX30105 و heartRate نیاز دارد که باید از قسمت کتابخانههای لایبرری آردوینو نصب شود.
راه اندازی سنسور پالس اکسیمتر MAX30102 با میکروپایتون و ESP32
جهت راه اندازی سنسور پالس اکسیمتر MAX30102 با ESP32 از زبان برنامه نویسی میکروپایتون استفاده میکنیم. برای راه اندازی از نرم افزار Thonny IDE میتوانید استفاده کنید. کد زیر را کپی و در Thonny IDE اجرا کنید.
اتصال سنسور پالس اکسیمتر MAX30102 به برد ESP32
- پین VCC و GND سنسور MAX30102 را به پینهای 3.3V و GND برد ESP32 متصل کنید.
- پینهای SCL و SDA سنسور MAX30102 را به پینهای SCL و SDA برد ESP32 متصل کنید.
- این پینها همچنین به عنوان GPIO22 و GPIO21 شناخته میشوند.
- برای خطوط SCL و SDA نیز نیاز به اضافه کردن مقاومت pull-up دارید. میتوانید مقاومت pull-up با مقدار 4.7kΩ بین پینهای SCL و VCC و بین پینهای SDA و VCC اضافه کنید.
import machine
import time
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21))
sensor = i2c.scan()[0]
# MAX30102 Registers
REG_INT_STATUS_1 = 0x00
REG_INT_STATUS_2 = 0x01
REG_FIFO_WR_PTR = 0x02
REG_FIFO_RD_PTR = 0x03
REG_FIFO_OVERFLOW_COUNTER = 0x04
REG_FIFO_DATA = 0x05
REG_FIFO_CONFIG = 0x08
REG_MODE_CONFIG = 0x09
REG_SPO2_CONFIG = 0x0A
REG_LED1_PA = 0x0C
REG_LED2_PA = 0x0D
REG_PILOT_PA = 0x10
REG_MULTILED_MODE_CONFIG1 = 0x11
REG_MULTILED_MODE_CONFIG2 = 0x12
# Mode configuration
i2c.writeto_mem(sensor, REG_MODE_CONFIG, bytes([0x02]))
# SpO2 configuration
i2c.writeto_mem(sensor, REG_SPO2_CONFIG, bytes([0x27]))
# LED pulse amplitude configuration
i2c.writeto_mem(sensor, REG_LED1_PA, bytes([0x1F]))
i2c.writeto_mem(sensor, REG_LED2_PA, bytes([0x1F]))
# Multi-LED mode configuration
i2c.writeto_mem(sensor, REG_MULTILED_MODE_CONFIG1, bytes([0x03]))
# Read the FIFO data
def read_fifo_data():
ptr = i2c.readfrom_mem(sensor, REG_FIFO_RD_PTR, 1)[0]
wr_ptr = i2c.readfrom_mem(sensor, REG_FIFO_WR_PTR, 1)[0]
if ptr == wr_ptr:
return None
n_samples = (wr_ptr - ptr) % 32
bytes_to_read = 4 * n_samples
data = i2c.readfrom_mem(sensor, REG_FIFO_DATA, bytes_to_read)
return data
# Continuously read the data from the sensor
while True:
data = read_fifo_data()
if data is not None:
for i in range(0, len(data), 4):
red = data[i]
ir = data[i + 1]
print("Red: %d, IR: %d" % (red, ir))
time.sleep_ms(10)
راه اندازی سنسور پالس اکسیمتر MAX30102 با میکروپایتون و Pico RP2040
جهت راه اندازی سنسور پالس اکسیمتر MAX30102 با برد رزبری پای پیکو و تراشه RP2040 از میکروپایتون استفاده میکنیم. برای استفاده از کد از نرم افزار Thonny IDE استفاده کنید.
import time
from machine import I2C, Pin
# Initialize I2C bus and set up MAX30102 sensor
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=400000)
sensor_address = 0x57
i2c.writeto(sensor_address, bytes([0x06, 0x03]))
i2c.writeto(sensor_address, bytes([0x08, 0xFF]))
i2c.writeto(sensor_address, bytes([0x09, 0x03]))
i2c.writeto(sensor_address, bytes([0x21, 0x03]))
i2c.writeto(sensor_address, bytes([0x10, 0x7F]))
i2c.writeto(sensor_address, bytes([0x01, 0xE0]))
i2c.writeto(sensor_address, bytes([0x02, 0x00]))
i2c.writeto(sensor_address, bytes([0x03, 0x00]))
# Define function to read sensor data
def read_sensor():
# Read sensor data
data = i2c.readfrom(sensor_address, 6)
ir = (data[0] << 16) | (data[1] << 8) | data[2]
red = (data[3] << 16) | (data[4] << 8) | data[5]
return ir, red
# Main loop to read sensor data and print to console
while True:
ir, red = read_sensor()
print("IR:", ir, "RED:", red)
time.sleep(0.1)
امکان راه اندازی چند سنسور DHT با ESP8266 با استفاده از MicroPython وجود دارد. سنسورهای DHT با پروتکل دیجیتال و از طریق پایههای GPIO قابل اتصال به میکروکنترلرها هستند.
برای ساخت یک سیستم کنترل دما با برد میکروکنترلر ESP32، به موارد زیر نیاز دارید:
یک برد میکروکنترلر ESP32
یک سنسور دما مثل DHT DS18B20
یک المان سرد کننده
با استفاده از کتابخانه DHT.h، میتوانید از سنسور دما برای خواندن دمای محیط استفاده کنید. سپس، میتوانید از این دما برای کنترل المان گرمایشی یا سرمایشی استفاده کنید.
در خصوص برنامه نویسی از کتابخانه DHT و در صورت نیاز کتابخانه وای فای برای ارسال دادهها به پلتفرم IoT باید استفاده کنید.