Sensor Pulse Oximeter (SPO2) Arduino

 

Sensor Pulse Oximeter

Bagaimana Cara kerjanya?

 

Oksigen masuk ke paru-paru dan kemudian diteruskan ke dalam darah. Darah membawa oksigen ke berbagai organ di tubuh kita. Cara utama oksigen dibawa dalam darah kita adalah melalui hemoglobin. Selama pembacaan oksimetri nadi, perangkat kecil seperti penjepit ditempatkan di jari tangan, daun telinga, atau kaki.

 

Berkas cahaya kecil melewati darah di jari, mengukur jumlah oksigen. Ini dilakukan dengan mengukur perubahan dalam penyerapan cahaya dalam darah beroksigen atau terdeoksigenasi.

 

 

 

Sensor ini merupakan oksimetri nadi terintegrasi dan solusi sensor monitor detak jantung. Ini menggabungkan dua LED, detektor foto, optik yang dioptimalkan, dan pemrosesan sinyal analog dengan noise rendah untuk mendeteksi sinyal denyut nadi dan detak jantung. Ini beroperasi dari catu daya 1,8V dan 3,3V dan dapat dimatikan melalui perangkat lunak dengan arus stanby yang dapat diabaikan, memungkinkan catu daya untuk tetap terhubung setiap saat.


 Block Diagram Sistem

 Diagram Fungsi 


Detil Deskripsi
MAX30100 adalah solusi sistem yang lengkap dari sensor denyut nadi dan detak jantung  yang dirancang untuk sesuai kebutuhan data dan praktis sebagai perangkat yang dapat dikenakan. MAX30100 mempunyai ukuran yang sangat kecil, sehingga merupakan solusi yang sangat bagus tanpa mengorbankan kinerja secara optimal baik dari sisi optik atau rangkaian. MAX30100 sepenuhnya dapat dikonfigurasi melalui register perangkat lunak, dan data keluaran digital disimpan dalam kedalaman 16 FIFO di dalam perangkat. FIFO memungkinkan MAX30100 untuk dihubungkan ke mikrokontroler atau mikroprosesor
dengan bus terminal secara bersamaan, yang datanya tidak terus-menerus dibaca dari register perangkat.

Subsistem SpO2
Subsistem SpO2 di MAX30100 terdiri dari
ambient light cancellation (ALC), 16-bit sigma delta ADC, dan sebuah filter dengan waktu khusus. SpO2 ADC adalah sigma oversampling waktu berkelanjutan konverter delta dengan resolusi hingga 16-bit. Laju data keluaran ADC dapat diprogram dari 50Hz hingga 1kHz. 
MAX30100 menyertakan filter waktu terpisah untuk tolak interferensi 50Hz / 60Hz dan residu frekuensi rendah terhadap kebisingan sekitar.

Sensor temperatur
MAX30100 memiliki sensor suhu pada chip
(opsional) mengkalibrasi ketergantungan suhu di dalam Subsistem SpO2.
Algoritma SpO2 relatif tidak sensitif terhadap panjang gelombang LED IR, tetapi panjang gelombang LED merah sangat penting untuk mengoreksi interpretasi data. Suhu data sensor dapat digunakan untuk mengkompensasi kesalahan SpO2 dengan perubahan suhu lingkungan.

Driver LED
MAX30100 mengintegrasikan driver LED merah dan IR ke drive Pulsa LED untuk pengukuran SpO2 dan HR. Arus LED  dapat diprogram dari 0mA hingga 50mA dengan tegangan suplai yang tepat. Lebar pulsa LED dapat diprogram dari 200μs hingga 1.6ms untuk dioptimalkan
akurasi pengukuran dan konsumsi daya berdasarkan pada kasus penggunaan.

Sensor Pulse Oximeter (SPO2) Arduino

 Library Max30100

 Library Oled 






List Program
 
#include 
#include "MAX30100_PulseOximeter.h"

#define REPORTING_PERIOD_MS     1000


PulseOximeter pox;

uint32_t tsLastReport = 0;

#include "Wire.h"
#include "Adafruit_GFX.h"
#include "OakOLED.h"


/////// GLOBALS //////

OakOLED oled;

///////////////////////
void onBeatDetected()
{
    Serial.println("B:1");
}

void setup()
{
    Serial.begin(115200);

    // Initialize the PulseOximeter instance and register a beat-detected callback
    // The parameter passed to the begin() method changes the samples flow that
    // the library spews to the serial.
    // Options:
    //  * PULSEOXIMETER_DEBUGGINGMODE_PULSEDETECT : filtered samples and beat detection threshold
    //  * PULSEOXIMETER_DEBUGGINGMODE_RAW_VALUES : sampled values coming from the sensor, with no processing
    //  * PULSEOXIMETER_DEBUGGINGMODE_AC_VALUES : sampled values after the DC removal filter

    // Initialize the PulseOximeter instance
    // Failures are generally due to an improper I2C wiring, missing power supply
    // or wrong target chip
    if (!pox.begin(PULSEOXIMETER_DEBUGGINGMODE_PULSEDETECT)) {
        Serial.println("ERROR: Failed to initialize pulse oximeter");
        for(;;);
    }

    pox.setOnBeatDetectedCallback(onBeatDetected);
     oled.begin();

  oled.setTextSize(1);
  oled.setTextColor(1);
  oled.setCursor(0, 0);

  oled.println("Pulse Oximeter");
  oled.display();
}

void loop()
{
    // Make sure to call update as fast as possible
    pox.update();

    // Asynchronously dump heart rate and oxidation levels to the serial
    // For both, a value of 0 means "invalid"
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
        Serial.print("H:");
        Serial.println(pox.getHeartRate());
        oled.setTextSize(1);
        oled.setTextColor(1);
        oled.setCursor(5, 4);

        oled.println(pox.getHeartRate());
        oled.display();

        Serial.print("O:");
        Serial.println(pox.getSpO2());
        oled.setTextSize(1);
        oled.setTextColor(1);
        oled.setCursor(10, 4);

        oled.println(pox.getSpO2());
        oled.display();
        tsLastReport = millis();
    }
}
 

0 Comments