Trong suốt thời gian này, chúng tôi đã cho thấy một số lượng lớn Linh kiện điện tử tương thích với bảng như Arduino hoặc tương thích, cũng như cho nhiều công việc sản xuất hoặc DIY khác. Bây giờ chúng tôi sẽ giới thiệu cho bạn mô-đun MAX30102, bao gồm một cảm biến để đo mạch và lượng oxy trong máu.
Bằng cách này, bạn cũng có thể tạo các thiết bị đeo như vòng đeo tay hoạt động tự chế hoặc phần cứng dành cho theo dõi tình trạng sức khỏe của một người, cung cấp dữ liệu sinh trắc học hoặc đo từ xa của người đó nhờ sự tích hợp của máy đo nhịp tim và máy đo oxy trong thiết bị này...
Máy đo nhịp tim là gì? Làm thế nào nó hoạt động?
Un cảm biến xung hoặc máy đo nhịp tim Nó là một thiết bị điện tử dùng để đo nhịp tim của một người trong thời gian thực. Nó chủ yếu được sử dụng trong lĩnh vực thể thao để theo dõi hiệu suất và nỗ lực trong quá trình tập luyện hoặc hàng ngày. Máy đo nhịp tim rất phổ biến đối với các vận động viên, nhưng chúng cũng là thiết bị cơ bản trong các trung tâm y tế để biết nhịp tim, tức là nhịp tim hoặc nhịp đập mỗi phút:
- PR Bpm: hiển thị nhịp tim, tức là nhịp đập mỗi phút.
Trong mọi trường hợp, Cảm biến ghi lại sự thay đổi về lượng máu theo từng nhịp tim. Biến thể này được chuyển thành tín hiệu điện được xử lý để thu được nhịp tim. Một số máy đo nhịp tim còn bao gồm các mạch khuếch đại và khử tiếng ồn để cải thiện độ chính xác của kết quả đo.
Máy đo oxy là gì? Làm thế nào nó hoạt động?
Un máy đo oxy là một thiết bị y tế hoặc thể thao được sử dụng để đo độ bão hòa oxy trong máu. Thiết bị này cung cấp dữ liệu độ bão hòa oxy trong máu với các giá trị từ 0 đến 100%. Thông thường, cùng một thiết bị cũng bao gồm tùy chọn nhịp tim, cho biết tất cả thông tin để theo dõi hoặc ghi lại.
Mất dữ liệu hàng đợi đo máy đo oxy là:
- % SpO2: đề cập đến tỷ lệ bão hòa oxy trong máu.
Máy đo oxy được đặt giống như một chiếc kẹp sao cho phù hợp với hình thái của ngón tay chúng ta hoặc nó cũng có thể được đặt ở những vị trí khác trên cơ thể, như trường hợp của máy đo nhịp tim, chẳng hạn như cổ tay, như có thể được nhìn thấy trong nhiều vòng đeo tay hoạt động. ,
Về hoạt động của chúng, máy đo oxy phát ra các chất khác nhau bước sóng ánh sáng đi qua da. Thứ tác động lên ánh sáng này là huyết sắc tố, một phân tử máu chịu trách nhiệm vận chuyển oxy, hấp thụ lượng ánh sáng khác nhau tùy thuộc vào mức độ oxy mà nó vận chuyển. Quá trình chi tiết như sau:
- phát xạ nhẹ- Máy đo oxy phát ra hai bước sóng ánh sáng, một đỏ và một hồng ngoại, truyền qua ngón tay đặt trên thiết bị.
- Hấp thụ ánh sáng: Hemoglobin, một phân tử trong tế bào hồng cầu mang oxy, hấp thụ lượng ánh sáng này ở mức độ khác nhau. Huyết sắc tố chứa đầy oxy (oxyhemoglobin) và huyết sắc tố không có oxy (deoxyhemoglobin) có đặc tính hấp thụ ánh sáng khác nhau.
- Phát hiện ánh sáng: Một máy dò ở phía đối diện của bộ phát ánh sáng sẽ thu thập ánh sáng truyền qua ngón tay.
- Tính toán độ bão hòa oxy- Thiết bị tính toán tỷ lệ oxyhemoglobin trên tổng lượng hemoglobin hiện diện, cả oxyhemoglobin và deoxyhemoglobin. Tỷ lệ này được trình bày dưới dạng phần trăm độ bão hòa oxy trong máu (%SpO2). Điều này được thực hiện thông qua bộ xử lý có khả năng diễn giải các tín hiệu điện này để chuyển chúng thành giá trị số.
Mô-đun MAX30102 là gì?
Cảm biến MAX30102, được sản xuất bởi Maxim Integrated, là một thiết bị tích hợp kết hợp các chức năng của máy đo nhịp tim và máy đo oxy. Cảm biến này có thể dễ dàng được sử dụng với một bộ vi điều khiển như Arduino. MAX30102 thuộc dòng cảm biến quang học MAX3010x của hãng này.
Hoạt động của nó dựa trên sự thay đổi khả năng hấp thụ ánh sáng của máu, tùy thuộc vào mức độ bão hòa oxy và nhịp tim như tôi đã đề cập ở hai phần trước. Cảm biến này được trang bị hai đèn LED, một màu đỏ và một hồng ngoại. Nó được đặt trên da, chẳng hạn như trên ngón tay hoặc cổ tay, và phát hiện ánh sáng phản chiếu để xác định mức độ bão hòa oxy.
Giao tiếp với MAX30102 được thực hiện thông qua xe buýt I2C, giúp bạn dễ dàng kết nối với bộ vi điều khiển như Arduino. MAX30102 cần nguồn điện kép: 1.8V cho logic và 3.3V cho đèn LED. Thường thấy trên các mô-đun 5V đã bao gồm mức khớp cần thiết.
La đo oxy xung quang Đây là một phương pháp không xâm lấn để xác định phần trăm độ bão hòa oxy trong máu. Như tôi đã đề cập trước đó, nó dựa trên sự khác biệt về hệ số hấp thụ ánh sáng của hemoglobin (Hb) và oxyhemoglobin (HbO2) đối với các bước sóng khác nhau. Máu giàu oxy hấp thụ nhiều tia hồng ngoại hơn, trong khi máu ít oxy hấp thụ nhiều ánh sáng đỏ hơn. Ở những vùng cơ thể có da đủ mỏng và có mạch máu bên dưới, sự khác biệt này có thể được sử dụng để xác định mức độ bão hòa oxy.
Tính năng của mô-đun MAX30102 với cảm biến nhịp tim và oxy trong máu
MAX30102 bao gồm:
- 2x đèn LED, một đèn đỏ (660nm) và một đèn hồng ngoại (880nm)
- 2x điốt quang để đo ánh sáng phản xạ
- Bộ chuyển đổi ADC 18 bit với tốc độ lấy mẫu từ 50 đến 3200 mẫu mỗi giây.
- Ngoài ra, nó còn có các thiết bị điện tử cần thiết để khuếch đại và lọc tín hiệu, khử ánh sáng xung quanh, loại bỏ tần số 50-60Hz (ánh sáng nhân tạo) và bù nhiệt độ.
Tiêu thụ mô-đun có thể đạt tới 50mA trong quá trình đo, mặc dù cường độ có thể được điều chỉnh theo chương trình, với chế độ năng lượng thấp là 0.7µA trong quá trình đo.
Giá và nơi mua
Cảm biến MAX30102 để đo mạch và lượng oxy trong máu chúng khá rẻ. Những mô-đun này có thể là của bạn chỉ với vài euro trên các trang web như eBay, Aliexpress hoặc Amazon. Bạn sẽ thấy rằng có một số loại và chúng tôi khuyên bạn nên sử dụng những loại sau:
Kết nối và ví dụ với Arduino
Để kiểm tra MAX30102 với Arduino, việc đầu tiên là kết nối mô-đun này với bo mạch Arduino. Cái này kết nối rất đơn giản, bạn chỉ cần kết nối như sau:
- Vcc của mô-đun phải được kết nối với đầu ra 5V của bo mạch Arduino.
- GND của mô-đun phải được kết nối với ổ cắm GND của bo mạch Arduino.
- SCL của mô-đun phải được kết nối với một trong các đầu vào tương tự của bo mạch Arduino, chẳng hạn như A5.
- SDA của mô-đun phải được kết nối với một đầu vào tương tự khác của bo mạch Arduino, chẳng hạn như A4.
Khi các kết nối thích hợp đã được thiết lập giữa bo mạch MAX30102 và bo mạch Arduino, việc tiếp theo sẽ là viết mã nguồn hoặc bản phác thảo để nó hoạt động và bắt đầu nhận dữ liệu sinh trắc học từ người được đề cập. Điều này dễ dàng như viết đoạn mã sau vào IDE Arduino và lập trình cho bảng:
#include <Wire.h> #include "MAX30105.h" #include "spo2_algorithm.h" MAX30102 pulsioximetro; #define MAX_BRIGHTNESS 255 #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) //Arduino Uno no tiene suficiente SRAM para almacenar 100 muestreos, por lo que hay que truncar las muestras en 16-bit MSB. uint16_t pulsoBuffer[100]; //infrared LED sensor data uint16_t oxiBuffer[100]; //red LED sensor data #else uint32_t pulsoBuffer[100]; //Sensores uint32_t oxiBuffer[100]; #endif int32_t BufferLongitud; //Longitud de datos int32_t spo2; //Valor de SPO2 int8_t SPO2valido; //Indicador de validez del valor SPO2 int32_t rangopulsacion; //PR BPM o pulsaciones int8_t validrangopulsacion; //Indicador de validez del valor PR BPM byte pulsoLED = 11; //Pin PWM byte lecturaLED = 13; //Titila con cada lectura void setup() { Serial.begin(115200); // Inicia la comunicación con el microcontrolador a 115200 bits/segundo pinMode(pulsoLED, OUTPUT); pinMode(lecturaLED, OUTPUT); // Inicializar sensores if (!pulsioximetro.begin(Wire, I2C_SPEED_FAST)) //Usar el bus I2C a 400kHz { Serial.println(F("MAX30102 no encontrado. Por favor, comprueba la conexión y alimentación del módulo.")); while (1); } Serial.println(F("Pon el sensor en contacto con tu dedo y presiona cualquier tecla para iniciar la conversión.")); while (Serial.available() == 0) ; //Esperar hasta que se pulsa una tecla Serial.read(); byte brilloLED = 60; //Opciones: 0=Apagado hasta 255=50mA byte mediaMuestreo = 4; //Opciones: 1, 2, 4, 8, 16, 32 byte ModoLED = 2; //Opciones: 1 = Rojo solo, 2 = Rojo + IR, 3 = Rojo + IR + Verde byte rangoMuestreo = 100; //Opciones: 50, 100, 200, 400, 800, 1000, 1600, 3200 int anchoPulso = 411; //Opciones: 69, 118, 215, 411 int rangoADC = 4096; //Opciones: 2048, 4096, 8192, 16384 pulsioximetro.setup(brilloLED, mediaMuestreo, ModoLED, rangoMuestreo, anchoPulso, rangoADC); //Configuración del módulo } void loop() { BufferLongitud = 100; //10 almacenamientos en el buffer con 4 segundos corriendo a 25sps //Leer las primeras 100 muestras for (byte i = 0 ; i < BufferLongitud ; i++) { while (pulsioximetro.available() == false) //Comprobar nuevos datos pulsioximetro.check(); oxiBuffer[i] = pulsioximetro.getRed(); pulsoBuffer[i] = pulsioximetro.getIR(); pulsioximetro.siguienteMuestreo(); //Muestreo terminado, ir al siguiente muestreo Serial.print(F("red=")); Serial.print(oxiBuffer[i], DEC); Serial.print(F(", ir=")); Serial.println(pulsoBuffer[i], DEC); } //Calcular el valor del pulso PM y SpO2 tras los primeros 100 samples maxim_heart_rate_and_oxygen_saturation(pulsoBuffer, BufferLongitud, oxiBuffer, &spo2, &SPO2valido, &rangopulsacion, &validrangopulsacion); //Calcular muestreos continuos while (1) { //Volcar los 25 primeros valores en memoria y desplazar los últimos 75 arriba for (byte i = 25; i < 100; i++) { oxiBuffer[i - 25] = oxiBuffer[i]; pulsoBuffer[i - 25] = pulsoBuffer[i]; } for (byte i = 75; i < 100; i++) { while (pulsioximetro.available() == false) //Comprobar si existen nuevos datos pulsioximetro.check(); digitalWrite(lecturaLED, !digitalRead(lecturaLED)); //Parpadea el LED on-board con cada dato oxiBuffer[i] = pulsioximetro.getRed(); pulsoBuffer[i] = pulsioximetro.getIR(); pulsioximetro.siguienteMuestreo(); //Al finalizar, moverse al siguiente muestreo Serial.print(F("Oxígeno=")); Serial.print(oxiBuffer[i], DEC); Serial.print(F(", Pulso=")); Serial.print(pulsoBuffer[i], DEC); Serial.print(F(", HR=")); Serial.print(rangopulsacion, DEC); Serial.print(F(", HRvalid=")); Serial.print(validrangopulsacion, DEC); Serial.print(F(", SPO2=")); Serial.print(spo2, DEC); Serial.print(F(", SPO2 válido=")); Serial.println(SPO2valido, DEC); } //Recalcular tras los primeros muestreos maxim_heart_rate_and_oxygen_saturation(pulsoBuffer, BufferLongitud, oxiBuffer, &spo2, &SPO2valido, &rangopulsacion, &validrangopulsacion); } }
Tất nhiên, bạn có thể sửa đổi mã theo nhu cầu của mình, đây chỉ là một ví dụ...