...

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.

    gr%C3%A1fica-de-las-medidas-del-ox%C3%ADmetro-de-pulso-con-Calc-de-LibreOffice Librería Arduino para monitorización de la frecuencia cardíaca con oxímetro de pulso

    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.

    .

    medida-de-la-presencia-de-oxihemoglobina-a-lo-largo-del-tiempo-con-un-ox%C3%ADmetro-de-pulso Librería Arduino para monitorización de la frecuencia cardíaca con oxímetro de pulso

    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.

      Para evitar medidas falsas (como el dispositivo midiendo en vacío, por ejemplo) se verifica que el resultado se encuentra entre unos valores máximos y mínimos antes de darlo por cierto. Aunque se considera como media que un valor normal para un adulto sano en reposo se encuentra entre 60 y 100 ppm, hay valores admisibles por debajo, es fácil encontrar 40 ppm en un atleta en reposo, hasta 200 ppm sometido a un ejercicio intenso y más de 100 ppm en adultos sedentarios en estados de excitación, precisamente un factor interesante para el proyecto de gestión del sueño que me lleva a desarrollar este 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

    Akselerator SeraphiniteDioptimalkan oleh Akselerator Seraphinite
    Ternyata situs berkecepatan tinggi menjadi menarik bagi orang-orang dan mesin pencari.