Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Sensor Oksimeter Buatan Sendiri

Komponen dan persediaan

Emitter Inframerah, 18 °
Panjang gelombang antara 805nm dan 1000nm
× 1
Photodiode LPT80A
Fotodioda yang dibutuhkan adalah yang rentang lebar, harus dapat menerima kedua sinyal merah (600nm) dan sinyal inframerah (940nm).
× 1
LED 5 mm:Merah
Panjang gelombang mendekati 600nm
× 1
Resistor 10k ohm
× 1
Resistor 330 ohm
× 2
DFRobot I2C 16x2 Arduino LCD Display Module
Atau layar lcd lain untuk menampilkan nilai.
× 1
Arduino UNO
× 1
Kabel jumper (generik)
× 1
LED Kecerahan Tinggi, Putih
Led ketiga opsional, lihat bagian peningkatan proyek
× 1

Alat dan mesin yang diperlukan

Ujung Solder, Sayap Camar

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Dalam periode isolasi ini, saya telah membuat oksimeter dengan bagian-bagian yang sudah ada di rumah. Lagi pula, oksimeter hanya dibuat oleh dua led dan fotodioda.

Saya bukan ahli pengetahuan medis dan pada tahap proyek ini saya tidak yakin bahwa pekerjaan ini memiliki nilai diagnostik, tetapi ini adalah proyek pendidikan yang baik untuk mempelajari cara kerjanya, dan mungkin dengan beberapa tips bisa menjadi alat medis buatan sendiri.

Saturasi oksigen dan COVID-19

Dalam periode hidup kita yang luar biasa ini, kita telah belajar banyak hal tentang virus, paru-paru, masker bedah, sabun, dan cuci tangan. Semua orang membaca tentang gejala seperti batuk, demam, dan kesulitan bernapas. Kita juga telah mengetahui bahwa salah satu cara untuk mengukur kesulitan bernapas adalah dengan membaca jumlah oksigen dalam darah kita.

Pengukuran ini dapat dibaca secara tidak langsung dengan alat medis yang disebut Oksimeter . Anda mungkin sudah melihatnya, ini adalah perangkat non-invasif yang ditempatkan di jari dengan beberapa lampu berdenyut yang berfungsi. Seperti ini:

Biasanya, saat Anda baik-baik saja, persentase saturasi oksigen (SpO2) Anda mendekati atau lebih dari 95%. Ketika saturasi turun di bawah 90% dan Anda mengalami batuk dan demam, itu masalah.

Jika ada pembuat yang dapat membuat oksimeter, menemukan infeksi akan lebih mudah dan dapat membantu orang memutuskan untuk pergi ke rumah sakit ketika masalahnya benar-benar ada dan bukan karena serangan panik.

Pertama, pahami cara kerja sensor detak jantung

Saya telah memulai proyek ini dengan bermain dengan sensor detak jantung KY-039 yang saya temukan di sensor kit yang banyak dari kita miliki di rumah. Seperti yang Anda lihat pada rangkaian di bawah ini, itu hanya led inframerah yang menyalakan fotodioda. Ada juga dua resistor untuk melindungi led dan membaca sinyal kecil dari sensor.

Jadi, jika Anda tidak memiliki sensor KY-039, Anda dapat membuat sensor sendiri dengan beberapa komponen.

Jari diletakkan di antara sensor dan photodiode seperti pada foto ini (asli diambil dari situs ini dan dimodifikasi):

Cahaya yang dipancarkan oleh led inframerah sebagian diserap oleh kuku, kulit, dan semua bagian lain dari jari Anda, tetapi tidak konstan karena berubah mengikuti perubahan darah yang mengalir di pembuluh darah Anda. Ketika jantung Anda berdetak, darah didorong ke dalam pembuluh darah Anda dan penyerapan cahaya berubah. Kita dapat mengukur arus yang dihasilkan oleh fotodioda yang diterangi oleh cahaya inframerah yang mencapainya.

Sensor KY-039 memiliki S (sinyal) pin untuk membaca nilai yang berubah itu.

Kita dapat mengukur detak jantung dengan menghitung puncak sinyal

Membaca nilai dari sinyal variabel dari sensor tidaklah mudah, karena ada banyak noise, sinyalnya sangat rendah, dan kita perlu membuat beberapa matematika untuk menemukan nilai yang baik untuk diplot.

Saya harus berterima kasih pada postingan bermanfaat dari Johan Ha ini, yang menjelaskan cara menghitung rata-rata sinyal dan juga menjelaskan cara menghilangkan noise yang dihasilkan oleh lampu rumah (lampu itu adalah noise!).

Triknya adalah membuat array di mana kita mendorong nilai dan menjatuhkan nilai untuk membuat rata-rata nilai X terakhir dibaca dari sensor. Dia juga telah menjelaskan cara untuk menemukan kenaikan sinyal, dengan menghitung nilai pertumbuhan N. Maksud saya, ketika suatu nilai lebih besar dari nilai sebelumnya untuk N kali, itu adalah puncaknya.

Menggunakan alat plot Serial Arduino atau alat serial lain untuk menganalisis nilai yang dicetak pada port COM (seperti SerialPlot), dan mencoba nilai yang berbeda, kita dapat menentukan angka N yang benar (rise_threshold konstan n kode). Jika Anda menentukan angka yang terlalu besar atau terlalu kecil, Anda dapat melewatkan beberapa ketukan atau menghitung takik dikrotik sebagai ketukan.

Setelah Anda memahami cara memperhalus puncak, hitung saja, atau hitung waktu antara serangkaian ketukan kecil untuk menentukan BPM Anda tingkat (Detak Per Menit ).

Membangun oksimeter (meretas sensor KY-039) untuk menemukan saturasi oksigen

Darah kita menyerap cahaya dengan cara yang berbeda dengan perubahan panjang gelombang cahaya. Lampu merah (~600nm ) diserap lebih baik oleh darah yang mengandung lebih banyak oksigen, sehingga kita dapat membandingkan tindakan yang dilakukan dengan led inframerah (~950nm ) dengan yang dibuat dengan led merah dan temukan persentase oksigen dalam darah kita. Nilai itu disebut Sp02% (saturasi oksigen kapiler perifer ).

Karena saya memiliki sensor KY-039, saya memutuskan untuk memodifikasinya. Ini hanya memiliki led inframerah, jadi saya telah menambahkan MERAH led, lepaskan IR dipimpin dari Vcc dan hubungkan dengan 330 ohm resistor dua led ke dua pin Arduino yang berbeda.

(Jika Anda tidak memiliki sensor KY-039 untuk dimodifikasi, Anda dapat membuatnya, hanya beberapa led, fotodioda, dan 3 resistor, dan skemanya sangat sederhana!)

Berikut adalah skema dari sensor yang dimodifikasi:

Dengan cara ini kita dapat mengaktifkan IR led dan baca nilai dari KY-039 S pin, maka kita dapat mematikan IR led dan nyalakan MERAH led, dan baca nilai dari KY-039 S pin.

Ini punya saya:

Jika Anda memplot dua sinyal, Anda dapat melihat bahwa nilai IR selalu lebih rendah daripada nilai Merah.

Untuk menemukan sinyal yang baik ingatlah untuk menempatkan ujung jari dengan benar pada fotodioda dan led harus menyentuh paku, ketika Anda menemukan posisi yang nyaman dengan pembacaan yang baik pada plot jangan ubah.

Karena sinyalnya rendah dan noise sangat bermasalah, untuk mendapatkan tindakan yang berguna, saya perhatikan bahwa cahaya sekitar yang baik selalu dibutuhkan. Jadi, jangan gerakkan jari Anda saat mengukur dan jangan mengubah cahaya, bayangan pada sensor saja bisa mengubah segalanya.

Bagaimana mengukur saturasi SpO2%

Tingkat saturasi oksigen (SpO2) adalah fraksi hemoglobin jenuh oksigen relatif terhadap hemoglobin total dan merupakan fungsi dari parameter yang disebut R (Saya menemukan informasi ini dalam makalah akademis dari Politecnico Milan), yang dihitung menggunakan nilai minimum dan maksimum dari dua sinyal:

R =( (REDmax-REDmin) / REDmin ) / ((IRmax-IRmin) / IRmin)

Setiap instrumen memiliki R -nya sendiri-sendiri dan diperlukan kalibrasi untuk mencari kurva (fungsi) yang menghubungkan R dengan SpO2%.

Kami telah menghitung jumlah puncak, tetapi sekarang kami perlu menemukan maks dan min nilai dari dua kurva (MERAH dipimpin dan IR dipimpin).

Untuk menyelesaikan tugas ini, kami mengevaluasi "periode" detak jantung (artinya, berapa milidetik satu detak berlangsung) dan membaginya untuk laju pengambilan sampel guna menentukan berapa banyak sampel yang menghasilkan satu periode. Kecepatan pengambilan sampel dalam kasus kami adalah 40 milidetik karena kami membaca LED IR selama 20 milidetik dan kemudian LED MERAH selama 20 milidetik.

Periode ketukan adalah waktu yang lewat di antara dua kurva naik dalam sinyal.

Jadi saya bisa menganalisis L last terakhir sampel (di mana L =periode / 40), yang telah saya simpan dalam array, untuk menemukan REDmax , REDmin , IRmaks dan IRmin nilai.

Dengan nilai maksimum dan minimum saya dapat menghitung R .

R, L dan periode dihitung setiap ketukan, sehingga perhitungan R juga dilakukan untuk setiap ketukan.

Dari R ke SpO2%:Bagaimana cara mengkalibrasi oksimeter?

Fungsi yang menghubungkan R dengan SpO2 dapat disederhanakan dengan garis lurus:

SpO2 =K * R + M

Jadi kita membutuhkan dua titik (dua pasangan nilai SpO2 dan R) untuk menentukan K dan M. Satu-satunya cara untuk menemukan 2 titik ini adalah dengan menggunakan oksimeter lain dan membaca nilainya dari tampilannya.

Oksimeter baru akan menjadi referensi, kami membaca nilai SpO2 sambil mengukur nilai R dari oksimeter buatan kami.

Napas pertama dengan normal, dan baca nilai SpO2 dan R. Tulislah.

Kemudian cobalah untuk menahan napas dan setelah 10-20 detik Anda akan membaca SpO2 di oksimeter baru menurun, Anda juga akan melihat parameter R dari oksimeter Anda tumbuh. Sebelum pingsan, tuliskan nilai SpO2 yang dicapai dan nilai parameter R Anda.

Selesaikan persamaan derajat 2 dan temukan K dan M untuk oksimeter Anda.

Sekarang mungkin untuk menghitung keduanya bpm dan SpO2 nilai untuk setiap ukuran R .

Saya juga telah menambahkan tampilan untuk menampilkan semua angka, saya menunjukkan nilai hanya jika saya telah menemukan setidaknya 5 ukuran periode yang tidak terlalu banyak berubah (±10% dari panjang periode). Dengan cara ini saya menghapus nilai yang terlalu banyak berubah yang bergantung pada komponen yang buruk atau perubahan lampu sekitar atau gerakan jari.

c nilai menunjukkan bahwa nilai yang ditampilkan dihitung dengan c langkah-langkah yang stabil.

Peningkatan proyek:hapus variabilitas cahaya sekitar

Setelah beberapa hari bermain dengan proyek saya, saya menemukan cara untuk meningkatkannya.

Saya perhatikan bahwa dengan komponen berbiaya rendah ini (kami hanya menggunakan led dan dioda foto!) ukurannya terlalu banyak bergantung pada cahaya sekitar dan ini bukan hal yang baik, jika kami ingin membaca data dengan benar secara nyata. lingkungan kerja. Karena saya perhatikan bahwa di hari yang cerah hasilnya lebih baik daripada dengan cahaya mendung atau di malam hari ketika saya menggunakan lampu listrik, saya memutuskan untuk menambahkan led ketiga, yang selalu menyala dan hanya memberikan cahaya di jari. .

Dengan sensor 3-led ini, tindakan juga diambil di bawah kain hitam untuk mengecualikan cahaya sekitar yang selalu bisa berubah.

Kini, hasilnya lebih baik dan tidak bergantung lagi pada cahaya sekitar.

Saya juga harus mengkalibrasi ulang oksimeter, seperti yang Anda lihat dari video setelah beberapa detik, ia menemukan bpm dengan benar ans SpO2% :


Kode

  • oksimeter-diy-ver-0.92.ino
oksimeter-diy-ver-0.92.inoArduino
Ini adalah kode sumber Oksimeter DIY, yang dibuat dengan beberapa komponen yang dapat dimiliki oleh pembuatnya di rumah.
/* * sebuah oksimeter diy. v.0.92 (perbaikan kecil) * dengan meretas sensor detak jantung ky-039 atau menggunakan led inframerah * led merah dan fotodioda. * https://hackaday.io/project/170752-oximeter-do-it-yourself */#include  #include #define maxperiod_siz 80 // jumlah sampel maksimal dalam satu periode# define measure 10 // jumlah periode yang disimpan#define samp_siz 4 // jumlah sampel untuk rata-rata#define rise_threshold 3 // jumlah pengukuran rise untuk menentukan peak // kristal cair menampilkan BPM LiquidCrystal_I2C lcd(0x3F, 16, 2);int T =20; // slot milidetik untuk membaca nilai dari sensorint sensorPin =A1; int REDLed =3;int IRLed =4;byte sym[3][8] ={ { B00000, B01010, B11111, B11111, B01110, B00100, B00000, B00000},{ B00000, B00000, B00000, B11000, B00100, B01000 , B10000, B11100},{ B00000, B00100, B01010, B00010, B00100, B00100, B00000, B00100}};pengaturan batal() { Serial.begin(9600); Serial.flush(); pinMode(sensorPin,INPUT); pinMode(REDLED,OUTPUT); pinMode(IRLed,OUTPUT); // inisialisasi LCD lcd.init(); lcd.lampu latar(); // matikan led digitalWrite(REDLed,LOW); digitalWrite(IRLed,RENDAH); for(int i=0;i<8;i++) lcd.createChar(i, sym[i]);}void loop (){ bool finger_status =true; float readsIR[samp_siz], sumIR,lastIR, reader, start; float readsRED[samp_siz], sumRED,lastRED; int periode, sampel; periode=0; sampel=0; int sampelPenghitung =0; float readsIRMM[maxperiod_siz],readsREDMM[maxperiod_siz]; int ptrMM =0; for (int i =0; i =samples){ sampleCounter =0; IRmaks =0; IRmin=1023; REDmaks =0; REDmin=1023; for(int i=0;i IRmax) IRmax =readsIRMM[i]; if( readsIRMM[i]>0 &&readsIRMM[i] REDmax) REDmax =readsREDMM[i]; if( readsREDMM[i]>0 &&readsREDMM[i] 4) { // // SATURSI ADALAH FUNGSI R (kalibrasi) // Y =k*x + m // k dan m dihitung dengan oksimeter lain int SpO2 =-19 * R + 112; lcd.setCursor(4,0); if(avBPM> 40 &&avBPM <220) lcd.print(String(avBPM)+" "); //else lcd.print("---"); lcd.setCursor(4,1); if(SpO2> 70 &&SpO2 <150) lcd.print( " " + String(SpO2) +"% "); //else lcd.print("--% "); } else { if(c <3) { // jika kurang dari 2 ukuran tambahkan ? lcd.setCursor(3,0); lcd.tulis( 2 ); // bpm ? lcd.setCursor(4,1); lcd.tulis( 2 ); //SpO2 ? } } } } else { // Oke, kurvanya turun naik =false; naik_jumlah =0; lcd.setCursor(3,0);lcd.print(" "); } // membandingkannya dengan nilai baru dan mencari puncak beforeIR =lastIR; } // jari ada di dalam // PLOT semuanya Serial.print(lastIR); Serial.print(","); Serial.print(merah terakhir); /* * Serial.print(","); Serial.print(R); Serial.print(","); Serial.print(IRmax); Serial.print(","); Serial.print(IRmin); Serial.print(","); Serial.print(REDmax); Serial.print(","); Serial.print(REDmin); Serial.print(","); Serial.print(avR); Serial.print(","); Serial.print(avBPM); */ Serial.println(); // menangani array ptr++; ptr %=samp_siz; } // loop while 1}

Skema

Dalam proyek saya, saya telah memodifikasi KY-039 tetapi sensor itu tidak tersedia di perpustakaan fritzing jadi saya telah membuatnya dengan beberapa komponen yang terbuat dari tetapi saya tidak menemukan fotodioda yang tepat di perpustakaan fritizing. oximeter-diy_oW9ZI5zQtJ.fzzOksimeter sederhana untuk membaca oksigen dalam darah dapat dibuat dengan meretas sensor KY-039, atau dengan membangun sensor dari awal,

Proses manufaktur

  1. Sirkuit Penghemat Daya Berbasis Sensor Inframerah dan Bekerja
  2. Memahami pilihan panjang gelombang dalam sistem LiDAR
  3. Sistem Sensor Gerak Inframerah DIY untuk Raspberry Pi
  4. Sensor Gerak menggunakan Raspberry Pi
  5. Sensor Kelembaban Tanah Raspberry Pi
  6. Uji sensor DS18B20
  7. Sensor Suhu Raspberry Pi
  8. Sensor Telemetri 2.0.1
  9. Sensor Emosi / EEG
  10. Pengukuran Suhu Sensor Inframerah