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

Mendeteksi Detak Jantung dengan Fotoresistor

Komponen dan persediaan

Digilent OpenScope MZ
× 1
Arduino UNO
× 1
Texas Instruments General Purpose Quad Op-Amp
× 1
Komparator Tunggal Instrumen Texas Berkecepatan Tinggi
× 1
Potensiometer Presisi Multi Putaran- 10k ohm (25 Putaran)
× 2
Potensiometer Putaran Tunggal- 100k ohm
Jika Anda bisa mendapatkan potensiometer multi-putaran, akan lebih mudah untuk menyesuaikannya.
× 1
Potensiometer Putaran Tunggal- 10k ohm
× 1
Kapasitor 100 F
× 1
Kapasitor 100 nF
× 1
Resistor 10k ohm
Atau 20rb
× 2
Resistor 4.75k ohm
× 1
Resistor 82k ohm
Anda juga bisa mendapatkan dua dari 100k potensiometer dan menyetel satu ke 82k.
× 1

Aplikasi dan layanan online

Arduino IDE
Digilent WaveForms Live

Tentang proyek ini

Pendahuluan

Proyek ini terinspirasi oleh video YouTube yang diposting oleh CapitanoRed , dimana penulis membuat monitor detak jantung berbasis photoresistor untuk ditampilkan pada osiloskop. Setelah melihat video mereka, saya ingin mereplikasi proyek dan menambahkan Arduino untuk menghitung dan menampilkan detak jantung. Dengan begitu Anda bisa melihat bentuk gelombang pada osiloskop sambil juga mendapatkan pembacaan detak jantung Anda.

Ketika jantung berkontraksi dan mendorong darah ke seluruh tubuh, fluktuasi sesaat dalam tekanan darah dapat dideteksi. Inilah alasan mengapa kita bisa merasakan denyut nadi kita. Di area tubuh yang kulit dan dagingnya cukup tipis, denyut ini dapat dideteksi dalam sedikit variasi cahaya yang melewatinya. Meskipun mata kita tidak cukup sensitif untuk melihat cahaya yang melewati tubuh kita, belum lagi fluktuasinya, photoresistor memang memiliki tingkat sensitivitas ini.

Sebuah fotoresistor memvariasikan resistansinya dengan intensitas cahaya yang jatuh di atasnya. Meskipun variasi resistansi bisa sangat kecil untuk perubahan halus dalam intensitas pencahayaan, mereka dapat diperkuat menggunakan beberapa IC penguat operasional.

Prinsip Operasi

Diagram di bawah ini menunjukkan skema rangkaian serta papan tempat memotong roti yang digunakan dalam proyek ini.

Fotoresistor berada dalam pembagi tegangan dengan resistor 20kΩ, yang berarti bahwa ketika jumlah cahaya pada resistor meningkat, tegangan pada pembagi juga meningkat. Penguat operasional pertama ("Amp1" pada gambar di atas) berfungsi sebagai filter untuk pembagi tegangan, menghilangkan noise frekuensi tinggi dari sinyal. Op amp kedua ("Amp2") berfungsi sebagai penguat pembalik, diatur untuk memaksimalkan sinyal yang masuk melalui filter. Penguat operasional ketiga ("Amp3") mengatur tanah virtual, yang memusatkan sinyal pada 2.5V. Ini memastikan bahwa op amp mampu memberikan ayunan sinyal maksimum dari 0V ke 5V. Setelah difilter dan diperkuat sinyalnya akan terlihat seperti ini.

Agar Arduino dapat mengukur detak jantung Anda, sinyal harus melewati komparator ("Cmp" dalam skema). Komparator adalah op amp khusus yang dirancang untuk menghasilkan sinyal tinggi atau rendah. Ketika tegangan pada input positif lebih besar dari input negatif, komparator mengeluarkan output tinggi, dan ketika tegangan pada input positif lebih kecil dari input negatif, output komparator rendah. Dalam konfigurasi yang paling dasar komparator berfungsi sebagai detektor ambang batas, sinyal ketika tegangan diukur di atas atau di bawah ambang batas itu. Karena keluaran komparator baik tinggi (5V) atau rendah (0V), ini sempurna untuk berinteraksi dengan pin digital Arduino.

Melihat lebih dekat pada gambar sinyal yang datang dari op amp, terlihat jelas bahwa ada pulsa sekunder sebelum tegangan turun (ini disebut dicrotic notch). Selain itu, ada sejumlah besar kebisingan dalam sinyal. Kedua fakta ini berarti bahwa konfigurasi komparator dasar tidak akan dapat mendeteksi pulsa dengan benar. Alih-alih satu pulsa persegi untuk setiap detak jantung, komparator akan menghasilkan beberapa pulsa. Ini akan terjadi karena noise akan menyebabkan sinyal melewati ambang batas beberapa kali saat naik dan turun, dan, tergantung di mana ambang ditetapkan, mungkin selama takik dikrotik. Ini akan mengakibatkan Arduino menghitung lebih banyak pulsa daripada yang sebenarnya ada.

Sinyal yang bising dapat diatasi dengan menggunakan histeresis. Dokumen ini oleh Texas Instruments menyajikan diskusi yang sangat baik tentang topik pengkondisian sinyal dengan histeresis, menunjukkan bagaimana gangguan sinyal mempengaruhi kinerja komparator, dan bagaimana menangani masalah ini. Saya menggunakan skema dan persamaan turunan (halaman 5 dan 7, masing-masing, dari dokumen) untuk merancang komparator asimetris untuk proyek ini. Ide keseluruhannya adalah bahwa loop umpan balik dari output akan mengubah tegangan pada input positif, yang berarti bahwa ambang batas untuk beralih dari rendah ke tinggi akan berbeda dari ambang batas untuk beralih dari tinggi ke rendah. Apa artinya ini dalam konteks denyut jantung adalah bahwa komparator dapat diatur untuk memicu pada satu titik pada saat naik, dan kemudian pada titik yang berbeda pada saat turun, lebih disukai setelah takik dikrotik. Dengan cara ini Arduino akan melihat satu pulsa persegi untuk setiap detak jantung, seperti yang ditunjukkan di bawah ini.

Persiapan Fotoresistor

Saya sangat merekomendasikan menggunakan semacam penutup bening pada fotoresistor, seperti heat shrink bening. Paling tidak, pastikan ujungnya benar-benar tertutup untuk menghindari menyentuhnya ke kulit Anda. Tegangan yang dihasilkan oleh tubuh Anda berada dalam kisaran yang dihasilkan oleh fotoresistor saat mendeteksi denyut nadi Anda, sehingga kontak dengan kulit Anda dapat mengubah hasilnya.

Menyetel Monitor Detak Jantung

Untuk potensiometer dalam skema (R7), gunakan potensiometer satu putaran dan sesuaikan untuk memaksimalkan penguatan op amp tanpa menjadi saturasi. Mulailah dengan menyetel satu sisi potensiometer ke sekitar 375Ω dan menghubungkan filter ("Amp1") ke sisi ini. Jumlah perolehan ini harus menghasilkan pulsa yang cukup sehingga Anda dapat melihatnya di WaveForms Live. Setelah mengikuti langkah-langkah di bagian berikutnya ("Melihat Pulsa di WaveForms Live") dan berhasil melihat pulsa Anda, Anda dapat mengubah gain jika perlu. Tingkatkan amplitudo pulsa dengan memutar potensiometer untuk membuat resistansi sisi filter lebih kecil. Jika amplitudo sudah terlalu besar dan menyebabkan kliping, buat resistansi sisi filter lebih besar. Baca keterangan pada gambar berikut untuk menentukan seperti apa sinyal yang diinginkan.

Saya merekomendasikan penggunaan potensiometer multi-putaran untuk resistor R3 dan R4 agar dapat secara tepat mengatur ambang batas untuk komparator. Resistor R5 dapat berupa resistor apa saja dalam kisaran 10-100kΩ, asalkan diukur dengan tepat. Anda dapat menggunakan spreadsheet di bagian lampiran untuk menentukan nilai yang akan ditetapkan R3 dan R4 berdasarkan nilai terukur R5 dan tegangan ambang. Ambang batas "Vl" dan "Vh" perlu diubah berdasarkan pulsa yang akan Anda lihat melalui osiloskop (lihat bagian berjudul "Menyetel Ambang Batas Pembanding").

Resistor R8 dan R9 dapat diganti dengan satu potensiometer, dengan pin tengah terhubung ke input positif op amp. Dengan cara ini tanah virtual dapat dengan mudah disesuaikan tanpa harus menemukan resistor yang cocok. Gunakan voltmeter atau OpenScope sambil mengatur output menjadi 2.5V.

Melihat Pulsa di WaveForms Live

Untuk melihat detak jantung Anda melalui WaveForms Live, Anda perlu mengubah beberapa pengaturan di menu. Secara default, output akan memanjang dan sulit untuk ditafsirkan, atau kecepatan pembaruan akan sangat lambat dan akan sulit untuk menyesuaikan cengkeraman Anda pada fotoresistor untuk menghasilkan pulsa yang jernih.

Hubungkan Osiloskop OpenScope Channel 2 (kabel biru) ke output "Amp2" dan pastikan kabel ground terhubung ke ground pada breadboard. Di WaveForms, ubah langsung Waktu ke "1s" dan di Pemicu menu tekan tombol MATI tombol. Untuk keduanya Osc Ch 1 dan Osc Ch2 set menu Offset ke 2.5V dan di sebelah Sampel klik ikon kunci dan ketik "1000" ke dalam bidang yang tersedia. Ini akan membuat sinyal muncul pada skala waktu yang mudah diinterpretasikan tetapi akan membuat pembaruan terjadi lebih sering daripada secara default. Layar harus diperbarui setiap 4 detik atau lebih. Jika ini masih terlalu lambat, Anda dapat meningkatkan Sampel nilai, tetapi dengan mengorbankan potongan sinyal yang lebih pendek ("2000" akan menangkap sekitar satu detak jantung pada satu waktu).

Tekan tombol JALAN tombol dan ambil denyut nadi Anda dengan jari Anda pada fotoresistor. Anda harus mencari cara terbaik untuk mendapatkan hasil yang konsisten. Sistem ini sangat sensitif terhadap perubahan tekanan, jadi Anda perlu menemukan cara untuk menjaga jari Anda tetap diam. Saya menemukan tempat terbaik untuk mengambil denyut nadi saya adalah di sendi pertama jari telunjuk. Dibutuhkan sedikit waktu untuk melatih diri sendiri, tetapi pada akhirnya Anda akan menemukan metode terbaik. Jika denyut nadi Anda terlihat terlalu kecil, sesuaikan potensiometer seperti yang diinstruksikan pada paragraf pertama bagian sebelumnya ("Menyetel Monitor Detak Jantung").

Menyetel Ambang Batas Pembanding

Setelah sinyal terlihat di osiloskop, Anda harus mengatur ambang batas di mana komparator akan memicu dan memberi sinyal ke Arduino. Dapatkan bentuk gelombang yang representatif dan hentikan pengambilan untuk mempertahankan bentuk gelombang di layar. Di bagian bawah layar, tekan KURSOR tombol. Di bawah Ketik pilih "Voltage" dan atur keduanya CursorChannels ke "Osc 2". Dua garis putus-putus horizontal akan muncul di layar. Seret segitiga di sisi kiri untuk memindahkannya. Tempatkan salah satu garis pada titik dekat puncak pulsa, dan garis lainnya pada titik di bawah takik dikrotik. Lihat bagian bawah layar dan catat dua voltase yang ditunjukkan dalam tanda kurung. Masukkan nilai-nilai ini sebagai tegangan ambang "Vl" dan "Vh" di spreadsheet yang terlampir di bagian akhir. Nilai yang lebih kecil akan menjadi "Vl" dan yang lebih besar akan menjadi "Vh". Berdasarkan nilai ini dan nilai resistor R5 yang Anda pilih, atur nilai potensiometer R3 dan R4 yang dihitung oleh spreadsheet.

Setelah komparator disetel, komparator akan mulai mengeluarkan sinyal yang menyerupai sinyal sebelum bagian "Persiapan Fotoresistor".

Kode Arduino

Kode Arduino terdiri dari penghitung frekuensi dan metode untuk menghitung detak jantung dalam denyut per menit. Penghitung frekuensi memperhitungkan lebar pulsa yang datang dari komparator dan menolak apa pun yang kurang dari 200 milidetik atau lebih besar dari 800 milidetik. Ini akan mencegahnya menampilkan data palsu ketika fotoresistor tidak digunakan untuk pengukuran dan komparator mungkin tinggi, rendah, atau beralih cepat antara dua keadaan. Kode menjaga rata-rata detak jantung selama 15 detik sebelumnya untuk menyaring pulsa yang terlewat karena kebisingan sinyal yang disebabkan oleh gerakan yang tidak disengaja.

Perbaikan di Masa Depan

Kelemahan utama proyek ini adalah sulit untuk menahan fotoresistor sedemikian rupa sehingga pulsa memiliki amplitudo yang sama di antara penggunaan. Karena sensor bergantung pada cahaya sekitar untuk mendeteksi denyut nadi, mengubah tingkat cahaya sepanjang hari dapat menyebabkan hasil yang berbeda. Saya perhatikan bahwa pada hari-hari berawan, ambang pembanding saya terlalu lebar, dan pada hari-hari terang, takik dikrotik sangat menonjol dan dapat menyebabkan deteksi pulsa palsu. Selain itu, bahkan perubahan cahaya halus yang disebabkan oleh gerakan di dalam ruangan dapat dideteksi oleh fotoresistor. Masalah konsistensi dapat diatasi dengan beberapa cara berbeda.

Sistem sensor dapat menyertakan LED untuk memberikan cahaya yang konsisten. Ini akan menyerupai klip pemantau jantung yang digunakan di kantor dokter atau monitor detak jantung yang terlihat di ponsel. Saya mencoba memegang LED merah di bagian atas jari saya dengan fotoresistor di sisi lain. Hasilnya menggembirakan, jadi ini mungkin pilihan yang layak jika penutup yang baik dapat dibuat.

Di sisi perangkat lunak, solusi potensial adalah dengan menggunakan algoritma auto-ranging di Arduino. Itu akan mendeteksi pulsa dan menemukan puncak dan palungnya. Namun, ini tidak akan cukup untuk melakukan pengukuran detak jantung. Penghitung frekuensi yang tepat membutuhkan interupsi. Tanpa interupsi, prosesor Arduino mungkin melakukan sesuatu yang lain selain memeriksa pin input dan melewatkan pulsa. Karena interupsi hanya tersedia pada pin digital, cara terbaik untuk menerapkan rentang otomatis adalah melalui penggunaan potensiometer digital. Arduino akan menggunakan pin analog untuk menemukan kisaran pulsa yang muncul, menentukan ambang batas komparator yang seharusnya, menerapkannya melalui potensiometer digital, dan kemudian menggunakan sinyal digital dari komparator untuk melakukan penghitungan frekuensi.

Kode

  • pembanding calcs.xlsx
  • Penghitung Detak Jantung Arduino
pembanding calcs.xlsxArduino
Spreadsheet Excel ini akan menghitung nilai R3 dan R4 untuk menetapkan ambang batas asimetris untuk pembanding. Anda dapat mengubah kolom R5 ke nilai resistor yang diukur. Vl dan Vh perlu diubah ke ambang batas apa pun yang diperlukan untuk mendapatkan denyut nadi yang bersih dari detak jantung.
Tidak ada pratinjau (hanya unduhan).
Penghitung Detak Jantung ArduinoArduino
Kode ini akan menghitung detak jantung Anda berdasarkan pulsa yang dikirimkan oleh pembanding.
#define INT0 3float frequency;long timeCount;int counter;long pulseStart;int inputPin =3;boolean low;float freqAvg;float total;void setup() { attachInterrupt(digitalPinToInterrupt(INT0), gangguan, GANTI); penghitung =0; waktuhitung =0; frekuensi =0; rendah =salah; Serial.begin(9600); total =15;}void loop() { timeCount =milis(); while(millis() - timeCount <5000){ frekuensi =penghitung; } if(frekuensi> 3){ total +=frekuensi; total -=frekuensiRata-rata; freqAvg =jumlah/3; } showHR(); penghitung =0;}batalkan gangguan(){ if(digitalRead(3) ==0){ fallDetect(); rendah =benar; } else if(digitalRead(3) ==1){ widthCheck(); }}void fallDetect(){ pulseStart =millis();}void widthCheck(){ long pulseEnd =millis(); if((pulseEnd - pulseStart> 200) &&(pulseEnd - pulseStart <800) &&rendah){ counter++; rendah =salah; }}void showHR(){ Serial.print("Detak jantung ="); Serial.println(freqAvg * 12); }

Skema

hr_monitor_tnffXlVQQV.fzz

Proses manufaktur

  1. Defibrillator Eksternal
  2. Hati Buatan
  3. Katup Jantung Buatan
  4. Mesin EKG
  5. Mendeteksi Petir dengan Raspberry Pi
  6. Windows 10 IoT Core – Membaca Denyut Jantung
  7. Monitor Detak Jantung Jarak Jauh
  8. Mendeteksi Magnetisme Inti Atom Tunggal
  9. Sensor Terintegrasi dalam Pakaian Memantau Denyut Jantung
  10. Kesehatan Jantung Dimulai dengan Udara Terkompresi Bebas Minyak