Perpustakaan Arduino untuk pemantauan detak jantung dengan oksimeter pulsa

Perpustakaan Arduino untuk pemantauan detak jantung dengan oksimeter pulsa

Perpustakaan Arduino untuk pemantauan detak jantung dengan oksimeter pulsa

Salah satu parameter yang dipantau dalam proyek manajemen tidur saya

Itu denyut nadinya. untuk mengukurnya Saya mengembangkan perangkat berdasarkan perilaku hemoglobin dan oksihemoglobin terhadap panjang gelombang cahaya yang berbeda. Pada dasarnya ini tentang mengukur seberapa banyak cahaya jenis tertentu yang dapat melewati atau dipantulkan di area tubuh yang memiliki pengairan baik. Frekuensi terjadinya siklus lengkap fenomena ini memungkinkan pengukuran denyut nadi.

Daftar Isi

    Dalam tahap desain dan pengujian alat pengukur denyut nadi Saya mengembangkan beberapa program kecil untuk membantu saya memverifikasi bahwa perakitan sudah benar. Pertama saya menulis kode di bawah ini, yang mengambil nilai terukur dari waktu ke waktu (setidaknya setiap MAXIMUM_MEASUREMENT_TIME dan paling banyak masing-masing MINIMUM_MEASUREMENT_TIME) ketika mereka memvariasikan minimum antara satu dan yang sebelumnya (nilai yang sesuai dengan MINIMUM_SIZE) dan dipantau dari komputer dengan aplikasi Python untuk dapat menganalisisnya nanti.

    Setelah nilainya disesuaikan (dimulai dengan pengukuran yang sangat padat) saya mendapatkan kumpulan nilai dari oksimeter denyut seiring berjalannya waktu saya dapat membuat grafik menggunakan spreadsheet, Kalkulator LibreOffice de LibreOffice, spesifik.

    grafik pengukuran pulse oximeter dengan

    Dengan data yang dikumpulkan, seperti yang ditunjukkan pada gambar di atas, operasi selanjutnya adalah menentukan apakah kepadatan nilai memungkinkan kita menghitung dengan cara yang andal namun "ekonomis" (tidak mengambil sampel lebih dari data yang diperlukan) nilai dari denyut nadi; Seperti terlihat pada grafik di bawah ini, langkah-langkah yang diambil tampaknya memberikan hasil yang sesuai dengan harapan.

    .

    pengukuran keberadaan oksihemoglobin dari waktu ke waktu dengan oksimeter pulsa

    Selanjutnya, berdasarkan informasi dari pengambilan sampel data, perlu dikembangkan suatu algoritma yang dapat mengukur denyut nadi. Berpegang pada grafik yang, untuk kesederhanaan, diasumsikan mewakili tata letak yang mirip dengan Kompleks QRS, hal paling sederhana adalah mengukur waktu antara bagian yang paling menonjol, dengan nilai yang lebih tinggi (yang sesuai dengan zona depolarisasi qRs ventrikel), membuang zona yang lebih datar dan "lebih berisik", yang karenanya lebih sulit untuk mengukur. Solusi yang diadopsi, yang sesuai dengan kode pengujian di bawah ini, bekerja sesuai dengan prosedur berikut:

    • Deteksi area yang diukur dalam setiap kasus untuk hanya memperhatikan puncak nilai qRs dan membuang lembah itu. Untuk melakukan hal ini, nilai yang lebih tinggi dari konstanta tertentu dapat diukur, namun terdapat risiko bahwa individu dan/atau keadaan dapat, meskipun secara proporsional, menaikkan atau menurunkan nilai tersebut. Untuk menghindari hal ini, suatu nilai dalam luas dianggap lebih besar dari nilai yang melebihi nilai rata-rata dengan koefisien tertentu. Dengan cara ini, pengukuran dikalibrasi sendiri secara sensitif dan dapat disesuaikan lebih jauh lagi dengan menyempurnakan koefisien, yang dalam kasus saya telah saya capai secara eksperimental selama pengujian.

      Pilih nilai zona menurun untuk pengukuran (Rs) dari puncak qRs, sedekat mungkin dengan kurva maksimum. Untuk mengetahui bahwa zona menaik ditinggalkan, cukup dengan memverifikasi bahwa nilai baru lebih kecil dari yang sebelumnya dan memverifikasi bahwa nilai yang dicari belum ditemukan karena pada umumnya ada beberapa nilai di zona menurun. zona qRs tergantung pada kepadatan pengambilan sampel. Untuk menentukan waktu denyut nadi, nilai waktu saat titik ditemukan disimpan (milidetik dikembalikan oleh milis ()) dan membandingkannya dengan yang berikutnya.

      Untuk memastikan bahwa nilai yang diukur adalah yang terbesar di zona menurun pada kurva tertinggi, digunakan variabel boolean (ukur_pulsa dalam contoh ini dan pengukuran_pulsa_aktif di perpustakaan) yang diaktifkan ketika memasuki zona menaik dari kurva utama dan dinonaktifkan setelah nilai turun pertama ditemukan, yaitu nilai waktunya.

      Seperti biasa untuk menyatakan durasi pulsa sebagai detak per menit (ppm), nilai waktu antara pulsa yang diperoleh dikoreksi dengan menghitung dengan membagi total waktu representasi (satu menit, 60000 milidetik) dengan interval yang diperoleh dengan mengurangkan milidetik saat ini (dari nilai saat ini) di antara milidetik yang dihitung sebelumnya.

      Untuk menghindari pengukuran yang salah (seperti alat yang mengukur dalam ruang hampa, misalnya), diverifikasi bahwa hasilnya berada di antara nilai maksimum dan minimum sebelum menerima begitu saja. Meskipun rata-rata dianggap bahwa nilai normal untuk orang dewasa sehat saat istirahat adalah antara 60 dan 100 ppm, ada nilai yang dapat diterima di bawah ini, mudah untuk menemukan 40 ppm pada atlet saat istirahat, hingga 200 ppm selama olahraga intens dan lebih dari 100 ppm pada orang dewasa yang tidak banyak bergerak dalam keadaan gembira, merupakan faktor yang menarik untuk proyek manajemen tidur yang mengarahkan saya untuk mengembangkan ini alat pengukur denyut nadi. Oleh karena itu, disarankan untuk banyak mengendurkan nilai-nilai tersebut agar nilai-nilai ekstrem tidak hilang, yang justru dapat menunjukkan aspek-aspek yang relevan.

      Nilai rata-rata baru dihitung dengan cara menurunkan relevansi rata-rata saat ini berdasarkan jumlah nilai yang diambil sampelnya dan nilai terakhir yang ditambahkan, juga ditimbang dengan koefisien yang semakin memperkecil semakin banyak nilai yang diukur selama ini. .

    Terakhir, dengan menggunakan algoritma yang dijelaskan sebelumnya, saya mengembangkan perpustakaan untuk menghitung denyut nadi dengan mendeteksi keberadaannya hemoglobin o la oksihemoglobin (tergantung panjang gelombang cahaya yang digunakan) dari kode di bawah ini.

    Perpustakaan mengharapkan fungsi sampling dipanggil secara berkala monitor_pulsa() untuk menghitung pulsa, yang dapat dikonsultasikan dengan fungsinya pulsa_terakhir() atau dengan fungsinya rata-rata_pulsa() denyut nadi rata-rata. Selain karena sumber daya yang terbatas, saya mengesampingkan penggunaan interupsi karena saya tidak memerlukan nilai langsung melainkan nilai berkelanjutan dari waktu ke waktu untuk memantau denyut nadi dalam proyek manajemen tidur saya

    . Bagaimanapun, dari tes yang telah saya lakukan, sepertinya hal itu tidak perlu; baik oleh perangkat atau oleh perilaku denyut nadi, pengambilan sampel pada frekuensi tertentu memberikan informasi yang cukup dan tidak lebih banyak (relevan) yang diperoleh dengan meningkatkannya, juga tidak mungkin untuk menguranginya banyak tanpa kehilangan data yang relevan untuk perhitungan; di versi awal kode untuk memantau pembacaan oksimeter denyut Saya menemukan bahwa tidak perlu terpaku pada waktu pengukuran maksimum karena, jika variasi nilai yang berurutan dipertimbangkan dengan benar, itu akan sangat mendekati waktu minimum.

    Contoh program berikut menunjukkan cara menggunakan perpustakaan sebelumnya untuk mengukur denyut nadi dengan oksimeter denyut. Selain membuat instance kelas Denyut nadi pemantauan tingkat oksihemoglobin/hemoglobin dan dengan periodisitas yang lebih kecil nilai denyut nadi dihitung dan rata-rata.

    Untuk memastikan bahwa pengukuran relevan, waktu tunggu diprogram sebelum menampilkan nilai apa pun. Karena nilainya mungkin salah (misalnya jika pengguna melepas perangkat), nilai hanya ditampilkan jika berada dalam rentang yang dianggap valid.

    Anda mungkin melewatkannya