ماژول اکسیمتر Max30100 تشخیص اکسیژن خون با رابط I2C
ماژول اکسیمتر Max30100 تشخیص اکسیژن خون با رابط I2C
ماژولهای سنجش ضربان قلب MAX30100 و MAX30102 هر دو توسط شرکت Maxim Integrated توسعه داده شدهاند. این ماژولها برای تشخیص ضربان قلب و غلظت اکسیژن خون (SpO2) بدون نیاز به تجاویز، طراحی شدهاند. آنها از تکنیکی به نام فتوپلتیسموگرافی (PPG) استفاده میکنند تا این پارامترها را اندازهگیری کنند. ماژول سنسور ضربان قلب MAX30100 دارای LEDهای قرمز و مادون قرمز یکپارچه و یک فتودتکتور است.
با استفاده از اصل PPG، این ماژول میتواند ضربان قلب را اندازهگیری و غلظت اکسیژن خون (SpO2) را تخمین بزند. این ماژول در دستگاههای قابل استفاده بر روی بدن مانند ترکرهای تناسب اندام برای نظارت بر ضربان قلب و تخمین میزان SpO2 کاربر استفاده میشود.
برای استفاده از این ماژولهای سنسور، آنها را به میکروکنترلر یا برد توسعه (مانند آردوینو، رزبریپای و غیره) متصل میکنید. سپس میتوانید با ماژول سنسور ارتباط برقرار کرده و درخواست دادههای ضربان قلب و SpO2 کنید. DSP ماژول، پردازش سیگنال را انجام میدهد و پارامترهای محاسبه شده میتوانند از طریق رابط ارتباطی از ثبتهای ماژول خوانده شوند.
مشخصات فنی ماژول اکسیمتر Max30100 تشخیص اکسیژن خون با رابط I2C
- طول موج LED: 660 نانومتر / 880 نانومتر
- ولتاژ LED: 3.3 تا 5 ولت
- نوع سیگنال تشخیص: سیگنال بازتاب نور (PPG)
- رابط سیگنال خروجی: رابط I2C
- ولتاژ رابط ارتباطی: 3.3 تا 5 ولت (اختیاری)
اندازهگیری ضربان و اشباع اکسیژن خون با استفاده از بافت بدن انسان برای ایجاد میزان نفوذ نور متفاوت هنگامی که رگ خون میکوبد؛ منبع نور: یک لامپ الکترونیکی با طول موج خاص که برای هموگلوبین اکسیژنی (HbO2) و هموگلوبین (Hb) در خون شریانی انتخاب میشود؛ تبدیل به سیگنال الکتریکی: حجم ضربان عروقی به نور نفوذی نور تبدیل میشود. در این زمان، نور توسط بافت بدن انسان به کمک تبدیل فوتوالکتریکی بازتاب میشود، به سیگنال الکتریکی تبدیل شده و تقویت و خروجی میشود.
بررسی پایه های ماژول اکسیمتر Max30100 تشخیص اکسیژن خون با رابط I2C
- VIN: ورودی تامین اصلی برق 1.8 ولت تا 5 ولت؛ پین 3 بیتی: انتخاب سطح پول آپ (pull-up) اتصال به اتصال باس، بسته به ولتاژ پین مستر، 1.8 ولت یا 3.3 ولت انتخاب میشود (این ترمینال شامل 3.3 ولت و بالاتر است)
- SCL: اتصال ساعت (clock) باس I2C
- SDA: اتصال دادهها به باس I2C
- INT: پین اختصاصی قطعی (Interrupt) چیپ MAX30102
- RD: قرمز (RED) چیپ MAX30102، ترمینال زمین LED
- IRD: زمین IR (مادون قرمز)، اتصال LED چیپ MAX30102
- GND: سیم زمین (سر کشیدن سیم به زمین)
به همراه ماژول اکسیمتر Max30100 تشخیص اکسیژن خون با رابط I2C چه اقلامی باید خریداری شود؟
- آردوینو
- کابل فلت و برد بورد
- نمایشگر LCD
- تغذیه
راه اندازی ماژول اکسیمتر Max30100 با آردوینو
کد آردوینو جهت راه اندازی ماژول سنسور ضربان قلب و غلظت اکسیژن خون Max30100 یا Max30102 و اندازهگیری ضربان قلب و غلظت اکسیژن خون طراحی شده است. در این کد از کتابخانه MAX30105 استفاده میشود که با ماژولهای سنسور Max30100 و Max30102 سازگار است.
تابع setup سنسور را مقداردهی اولیه میکند و شدت نور LED، نرخ نمونهبرداری و تنظیمات دیگر را تنظیم میکند. تابع loop ضربان قلب و غلظت اکسیژن خون را میخواند و سپس مقادیر را به مانیتور سریال چاپ میکند.
#include <Wire.h>
#include "MAX30105.h"
MAX30105 particleSensor;
void setup() {
Serial.begin(9600);
// مقداردهی اولیه سنسور MAX30105
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
Serial.println("سنسور MAX30105 یافت نشد. لطفاً اتصالات/تغذیه را بررسی کنید.");
while (1);
}
// تنظیمات سنسور
particleSensor.setup();
particleSensor.setPulseAmplitudeRed(0x0A); // تنظیم شدت نور LED (از 0x00 تا 0xFF)
particleSensor.setPulseAmplitudeGreen(0); // 0=خاموش, 255=50mA, 0x19=25mA
particleSensor.setSampleRate(MAX30105_SR_100HZ); // نرخ نمونهبرداری با 100 هرتز
// متغیرهای اولیه
float hr, spo2;
}
void loop() {
// خواندن ضربان قلب و غلظت اکسیژن خون
// توجه: خواندن این مقادیر ممکن است کمی طول بکشد، حدود 1 ثانیه.
// بهتر است برای کاربردهای پیشرفته از نقطه وقفه و تایمرها استفاده کنید.
hr = particleSensor.getHeartRate();
spo2 = particleSensor.getSpO2();
// چاپ نتایج
Serial.print("ضربان قلب (BPM): ");
Serial.println(hr);
Serial.print("غلظت اکسیژن خون (%SpO2): ");
Serial.println(spo2);
// کمی صبر کنید و سپس خواندن مقادیر بعدی را انجام دهید
delay(2000);
}
راه اندازی ماژول اکسیمتر Max30100 با میکروپایتون
در ادامه یک کد میکروپایتون برای راه اندازی ماژول max30100 نوشته شده است. ابتدا ماژول I2C را برای ارتباط با ماژول Max30100/Max30102 مقداردهی اولیه میکند. سپس تنظیمات اولیهای نظیر ریست کردن ماژول، تنظیم شدت نور LEDها، تنظیم حالت و نرخ نمونهبرداری (SPo2 و ضربان قلب) و تنظیم میانگینگیری نمونهها (SPo2) انجام میدهد.
برای خواندن دادهها، تابع read_sensor_data() تعریف شده است. این تابع با ارسال درخواست به ماژول از طریق I2C، دادههای دو LED قرمز و فروسرخ را دریافت کرده و به عنوان دادههای ورودی تابع برمیگرداند. این دادهها با استفاده از کد data[0] << 16 | data[1] << 8 | data[2] و data[3] << 16 | data[4] << 8 | data[5] از 3 بایت مختلف بدست آمده و ترکیب میشوند.
# برنامه میکروپایتون برای ماژول سنسور ضربان قلب و غلظت اکسیژن خون Max30100/Max30102
from machine import Pin, I2C
import time
# آدرس I2C ماژول Max30100/Max30102
MAX3010X_ADDRESS = 0x57
# آدرسهای رجیسترها
REG_INTR_STATUS_1 = 0x00
REG_INTR_STATUS_2 = 0x01
REG_INTR_ENABLE_1 = 0x02
REG_INTR_ENABLE_2 = 0x03
REG_FIFO_WR_PTR = 0x04
REG_OVF_COUNTER = 0x05
REG_FIFO_RD_PTR = 0x06
REG_FIFO_DATA = 0x07
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_MULTI_LED_CTRL1 = 0x11
REG_MULTI_LED_CTRL2 = 0x12
REG_TEMP_INT = 0x1F
REG_TEMP_FRAC = 0x20
REG_TEMP_CONFIG = 0x21
REG_PROX_INT_THRESH = 0x30
REG_REV_ID = 0xFE
REG_PART_ID = 0xFF
# مقادیر شدت نور LED (اینها را برای کاربرد خود تنظیم کنید)
LED_PA_0 = 0x1F # 7.6 میلیآمپر
LED_PA_1 = 0x1F # 7.6 میلیآمپر
LED_PA_2 = 0x1F # 7.6 میلیآمپر
LED_PA_3 = 0x1F # 7.6 میلیآمپر
# مقداردهی اولیه I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
i2c.scan()
# ریست کردن سنسور
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_MODE_CONFIG, 0x40]))
# تنظیم شدت نور LED
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_LED1_PA, LED_PA_0]))
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_LED2_PA, LED_PA_0]))
# تنظیم حالت و نرخ نمونهبرداری (SPo2 و ضربان قلب)
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_MODE_CONFIG, 0x03]))
# تنظیم میانگینگیری نمونهها (SPo2)
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_SPO2_CONFIG, 0x27]))
# تنظیم عرض پالس و برد ADC (SPo2)
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_LED1_PA, 0x24]))
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_LED2_PA, 0x24]))
# فعالسازی قطعات
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_INTR_ENABLE_1, 0xc0])) # فعالسازی اینتراپت آماده برداشت داده
i2c.writeto(MAX3010X_ADDRESS, bytearray([REG_INTR_ENABLE_2, 0x00]))
# خواندن دادههای سنسور
def read_sensor_data():
data = i2c.readfrom(MAX3010X_ADDRESS, 6)
red_led = (data[0] << 16) | (data[1] << 8) | data[2]
ir_led = (data[3] << 16) | (data[4] << 8) | data[5]
return red_led, ir_led
# حلقه اصلی
while True:
# بررسی آماده بودن داده
interrupt_status = i2c.readfrom(MAX3010X_ADDRESS, 1)[0]
if interrupt_status & 0x04: # بررسی اینتراپت آماده برداشت داده
red_data, ir_data = read_sensor_data()
# انجام پردازش روی دادههای red_data و ir_data برای محاسبه ضربان قلب و غلظت اکسیژن خون
# کد پردازش شما اینجا قرار میگیرد
print("داده قرمز:", red_data)
print("داده فروسرخ:", ir_data)
time.sleep(0.1) # با توجه به نرخ نمونهبرداری مورد نظر خود مدتزمان خواب را تنظیم کنید
مشخصات
- نوع ماژول
- بیومتریک - Biometric
- ابعاد
- 15x15mm
- ولتاژ مورد نياز
- 1.8 تا 3.3 ولت DC
- چاپ مس
- مشکی
- تعداد پایه ها
- پایه
- اقلام همراه محصول
- پین هدر
- پردازنده
- Max30100
- سایر توضیحات
- تشخیص اکسیيژن خون
- سایر قابلیتها
- گجت پوشیدنی Wearable
- نوع مبدل
- پروتکل I2C
امکان راه اندازی چند سنسور DHT با ESP8266 با استفاده از MicroPython وجود دارد. سنسورهای DHT با پروتکل دیجیتال و از طریق پایههای GPIO قابل اتصال به میکروکنترلرها هستند.
برای ساخت یک سیستم کنترل دما با برد میکروکنترلر ESP32، به موارد زیر نیاز دارید:
یک برد میکروکنترلر ESP32
یک سنسور دما مثل DHT DS18B20
یک المان سرد کننده
با استفاده از کتابخانه DHT.h، میتوانید از سنسور دما برای خواندن دمای محیط استفاده کنید. سپس، میتوانید از این دما برای کنترل المان گرمایشی یا سرمایشی استفاده کنید.
در خصوص برنامه نویسی از کتابخانه DHT و در صورت نیاز کتابخانه وای فای برای ارسال دادهها به پلتفرم IoT باید استفاده کنید.