ماژول پالس اکسیمتر MAX30102 سنجش ضربان قلب
معرفی ماژول پالس اکسیمتر MAX30102
ماژول پالس اکسیمتر با تراشه MAX30102 است. مناسب برای سنجش ضربان قلب heart-rate/SpO2 است. پروتکل ارتباطی سنسور MAX30102 است و با آردوینو قابل تست و راه اندازی است. MAX30102 پالس اکسیمتر و ماژول بیوسنسور مانیتور ضربان قلب است. این ماژول شامل ردیاب های نوری، عناصر نوری و الکترونیک است. MAX30102 با ولتاژ تغذیه 1.8 ولتی و یک تغذیه 5.0 ولت جداگانه برای LED های داخلی کار می کند. اطلاعات ضربان قلب و اکسیژن خون نیز از طریق ارتباط I2C به Arduino یا سایر میکروکنترلرها منتقل می شود.
ویژگی ماژول پالس اکسیمتر Max30102
برخی از مشخصات فنی ماژول پالس اکسیمتر MAX30102 عبارتند از:
- ولتاژ کاری: ۳.۳ ولت.
- جریان مصرفی: حدود ۱۰ میلی آمپر.
- رابط کاربری: رابط سریال I2C با سرعت انتقال داده ۴۰۰ کیلوبیت بر ثانیه.
- دمای کاری: از -۴۰ درجه سانتیگراد تا +۸۵ درجه سانتیگراد.
- دقت اندازه گیری ضربان قلب: حدود ۱ ضربان در دقیقه.
- دقت اندازه گیری سطح اکسیژن خون: حدود ۲٪.
- نوع سنسور: سنسور نوری دوگانه (سنسور نور پراکنده و سنسور نوری انتقالی).
- سرعت نمونه برداری: تا ۱۰۰۰۰ نمونه در ثانیه.
- قابلیت کارکرد در حالت پرتودهی پایین: به دلیل استفاده از فناوری نوری خاص، ماژول MAX30102 قابلیت کارکرد در حالت پرتودهی پایین را داراست که این موضوع برای کاهش مصرف انرژی و افزایش طول عمر باتری بسیار مهم است.
- قابلیت کارکرد با ولتاژ کم: ماژول MAX30102 با ولتاژ کمتر از ۳.۳ ولت نیز به خوبی کار می کند.
بررسی پایه های ماژول MAX30102
ماژول پالس اکسیمتر MAX30102 دارای پنج پایه است که شامل موارد زیر می باشد:
- VCC: ورودی تغذیه با ولتاژ ۳.۳ ولت.
- GND: زمین ماژول.
- SCL: پایه ساعت رابط سریال I2C.
- SDA: پایه داده رابط سریال I2C.
- INT: پایه خروجی اعلان (Interrupt) که در صورتی که نتایج اندازه گیری آماده شود، از خود اعلام می کند.
از این پایه ها برای اتصال ماژول به میکروکنترلر یا برد آردوینو و انجام اندازه گیری ضربان قلب و سطح اکسیژن خون استفاده می شود.
راه اندازی ماژول MAX30102 با آردوینو
این یک نمونه کد آردوینو برای ارتباط با ماژول پالس اکسیمتر و سنسور ضربان قلب MAX30102 است. این کد از کتابخانه MAX30105 برای آردوینو استفاده می کند و مقادیر ضربان قلب و اشباع اکسیژن را در یک صفحه نمایش OLED نشان می دهد. در این کد، ماژول MAX30102 را اولین بار مقداردهی اولیه می کند، درخشندگی LED را تنظیم، نرخ نمونه برداری و تعداد نمونه ها را برای میانگین گیری مشخص می کند و FIFO را فعال می کند. همچنین، نمایشگر OLED را مقداردهی اولیه می کند و پیامی را بر روی آن نمایش می دهد. در حلقه اصلی، تعداد نمونه های موجود در FIFO را می خواند.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "MAX30105.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
MAX30105 particleSensor;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Initialize the MAX30102 sensor
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
Serial.println("MAX30102 not found!");
while (1);
}
// Set the LED brightness (0-255)
particleSensor.setLEDMode(MAX30105_LED_MODE_RED_PILOT);
particleSensor.setPulseAmplitudeRed(0x0A);
particleSensor.setPulseAmplitudeGreen(0);
particleSensor.setPulseAmplitudeIR(0);
// Set the sample rate (100-1600Hz)
particleSensor.setSampleRate(100);
// Set the number of samples to average (1-255)
particleSensor.setFIFOAverage(MAX30105_FIFO_AVE_4);
// Enable the FIFO
particleSensor.enableFIFO(true);
// Clear the FIFO
particleSensor.clearFIFO();
// Display startup message on OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("MAX30102 Sensor");
display.println("Heart Rate Monitor");
display.display();
}
void loop() {
// Read the number of samples in the FIFO
uint16_t num_samples = particleSensor.getFIFOCount();
if (num_samples > 0) {
// Read the heart rate and oxygen saturation values
uint32_t irValue, redValue;
float SpO2, bpm;
particleSensor.getFIFOIR(&irValue, num_samples);
particleSensor.getFIFORed(&redValue, num_samples);
// Calculate the heart rate and oxygen saturation
particleSensor.calculateSPO2(irValue, redValue, &SpO2, &bpm);
// Print the heart rate and oxygen saturation values to the serial monitor
Serial.print("Heart rate: ");
Serial.print(bpm);
Serial.print(" bpm - SpO2: ");
Serial.print(SpO2);
Serial.println("%");
// Display the heart rate and oxygen saturation values on the OLED
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.print(bpm);
display.setTextSize(1);
display.print(" bpm");
display.setCursor(0, 16);
display.setTextSize(2);
display.print(SpO2);
display.setTextSize(1);
display.print("% SpO2");
display.display();
// Clear the FIFO
particleSensor.clearFIFO();
}
// Wait for 100 milliseconds before reading again
delay(100);
}
راه اندازی سنسور MAX30102 با میکروپایتون با ESP32
این یک نمونه کد Micropython برای ارتباط با سنسور ضربان قلب و اکسیمتر پالس MAX30102 بر روی برد ESP32 است. این کد سنسور MAX30102 را مقداردهی اولیه می کند ، درخشندگی LED ، نرخ نمونه برداری و تعداد نمونه ها را برای میانگین گیری تنظیم می کند و قابلیت پالس اکسیمتری را فعال می کند. همچنین نمایشگر OLED را مقداردهی اولیه کرده و پیام راه اندازی را نمایش می دهد. در حلقه while ، مقادیر سنسور قرمز و مادون قرمز را از MAX30102 خوانده ، ضربان قلب را محاسبه کرده و مقادیر ضربان قلب و اکسیژن سنجی را در نمایشگر OLED نمایش می دهد.
import max30102
import ssd1306
from machine import Pin, I2C
import time
# Initialize OLED display
i2c = I2C(-1, Pin(22), Pin(21))
display = ssd1306.SSD1306_I2C(128, 32, i2c)
# Initialize MAX30102 sensor
sensor = max30102.MAX30102()
# Set LED brightness, sample rate, and number of samples to average
sensor.set_led_pulse_amplitude(0x1F)
sensor.set_sample_rate(max30102.SAMPLE_RATE_100)
sensor.set_pulse_width(max30102.PULSE_WIDTH_160)
sensor.set_finger_threshold(750)
sensor.set_finger_threshold(100)
sensor.enable_spo2()
# Display startup message on OLED display
display.fill(0)
display.text('MAX30102 & ESP32', 0, 0)
display.text('Pulse Oximeter', 0, 10)
display.show()
# Read heart rate and oxygen saturation values and display on OLED display
while True:
red, ir, spo2 = sensor.read_sensor()
bpm = sensor.calculate_heart_rate(ir)
display.fill(0)
display.text('BPM: {}'.format(bpm), 0, 0)
display.text('SpO2: {}%'.format(spo2), 0, 10)
display.show()
time.sleep_ms(10)
راه اندازی سنسور MAX30102 با میکروپایتون و RP2040
اینجا یک نمونه کد Micropython برای اتصال به سنسور ضربان قلب و اکسیمتر MAX30102 روی برد RP2040 آمده است:این کد ابتدا اتصالات I2C، سنسور MAX30102 و نمایشگر OLED را مقداردهی اولیه میکند. سپس حالت سنسور را برای سنجش اکسیژن خون و ضربان قلب تنظیم کرده و فرکانس نمونهبرداری و پارامترهای LED را تنظیم میکند و پیامی را در نمایشگر OLED نمایش میدهد. در حلقه اصلی، این کد مقادیر سنسور را از FIFO میخواند، ضربان قلب و اشباع اکسیژن را محاسبه میکند و آنها را در نمایشگر OLED نمایش میدهد.
import max30102
import ssd1306
from machine import I2C, Pin
# Initialize I2C bus
i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=400000)
# Initialize MAX30102 sensor
pox = max30102.MAX30102(i2c)
pox.set_mode(max30102.MODE_SPO2)
pox.set_spo2_sample_rate(max30102.SPO2_SAMPLING_RATE_100HZ)
pox.set_led_pulse_width(max30102.PULSE_WIDTH_411)
pox.set_led_current(max30102.LED_CURRENT_11_1MA)
# Initialize OLED display
oled = ssd1306.SSD1306_I2C(128, 32, i2c)
# Display startup message
oled.fill(0)
oled.text("MAX30102 &", 0, 0)
oled.text("SSD1306", 0, 10)
oled.show()
while True:
# Read sensor values
red, ir = pox.read_fifo()
# Calculate heart rate and oxygen saturation
hr = pox.get_heart_rate()
spo2 = pox.get_spo2()
# Display values on OLED display
oled.fill(0)
oled.text("HR: %d bpm" % hr, 0, 0)
oled.text("SpO2: %d %%" % spo2, 0, 10)
oled.show()
مشخصات
- کاربری
- مناسب برای استفاده شخصی
- نوع ماژول
- بیومتریک - Biometric
- سطح تجربه مورد نیاز
- نیمه حرفه ای
- ابعاد
- 14x14mm
- سنسور
- Max30102
- پروتکل ارتباطی
- I2C
- پردازنده
- MAX30102
- سایر توضیحات
- مناسب آردوینو
- سایر قابلیتها
- تشخیص heart-rate/SpO2
- نوع سنسور
- ضربان قلب
امکان راه اندازی چند سنسور DHT با ESP8266 با استفاده از MicroPython وجود دارد. سنسورهای DHT با پروتکل دیجیتال و از طریق پایههای GPIO قابل اتصال به میکروکنترلرها هستند.
برای ساخت یک سیستم کنترل دما با برد میکروکنترلر ESP32، به موارد زیر نیاز دارید:
یک برد میکروکنترلر ESP32
یک سنسور دما مثل DHT DS18B20
یک المان سرد کننده
با استفاده از کتابخانه DHT.h، میتوانید از سنسور دما برای خواندن دمای محیط استفاده کنید. سپس، میتوانید از این دما برای کنترل المان گرمایشی یا سرمایشی استفاده کنید.
در خصوص برنامه نویسی از کتابخانه DHT و در صورت نیاز کتابخانه وای فای برای ارسال دادهها به پلتفرم IoT باید استفاده کنید.