Daftar Isi:

Catat EKG Berkecepatan Tinggi atau Data Lainnya, Terus Menerus Selama Lebih dari Sebulan: 6 Langkah
Catat EKG Berkecepatan Tinggi atau Data Lainnya, Terus Menerus Selama Lebih dari Sebulan: 6 Langkah

Video: Catat EKG Berkecepatan Tinggi atau Data Lainnya, Terus Menerus Selama Lebih dari Sebulan: 6 Langkah

Video: Catat EKG Berkecepatan Tinggi atau Data Lainnya, Terus Menerus Selama Lebih dari Sebulan: 6 Langkah
Video: 5 CARA Menormalkan Detak Jantung Terlalu Cepat (TAKIKARDIA) | Coffee Talk With dr.Yansen, Sp.JP (K) 2024, November
Anonim
Catat EKG Berkecepatan Tinggi atau Data Lainnya, Terus Menerus Selama Lebih dari Sebulan
Catat EKG Berkecepatan Tinggi atau Data Lainnya, Terus Menerus Selama Lebih dari Sebulan

Proyek ini dikembangkan untuk mendukung tim peneliti medis universitas, yang membutuhkan perangkat yang dapat merekam 2 x sinyal EKG pada 1000 sampel/dtk masing-masing (total 2K sampel/dtk) selama 30 hari, untuk mendeteksi aritmia. Proyek yang disajikan di sini mencakup kendali jarak jauh dan pemantauan penebangan. Remote control adalah melalui menu yang disajikan pada terminal serial, baik di komputer atau ponsel. Proyek ini tidak mencakup pengukuran EKG atau pengemasan atau baterai yang diperlukan untuk perangkat yang dapat dikenakan akhir.

Versi kecepatan tinggi/durasi panjang ini menggunakan Teensy 3.2, modul breakout Micro-SD Adafruit, kartu SD 16G SDHC kelas 10 berkualitas untuk mencatat data dan modul komunikasi Bluetooth untuk kontrol dan pemantauan. Versi UNO/Mega2560 yang kurang berkembang dan lebih lambat dari proyek ini juga tersedia. Meskipun proyek ini menggunakan modul komunikasi Bluetooth untuk mengontrol dan memantau pencatatan, Anda juga dapat menggunakan modul WiFi atau BLE.

Versi ini, berdasarkan Teensy 3.2, mampu melakukan sampling rate yang jauh lebih tinggi daripada versi UNO/Mega2560. Dengan menggunakan kode ini, Teensy 3.2 dapat mengambil sampel dan mencatat dua sampel ADC pada >30Khz dengan rata-rata perangkat keras lebih dari 4 sampel dan dengan mudah memenuhi persyaratan 1000 sampel/detik di atas. Kode mendukung penyimpanan 100 file.bin masing-masing 128K. Pada 30Khz yang mencakup 29 jam 30 menit. Pada 1000 sampel/detik itu mencakup 37 hari. Kode dapat dengan mudah diperluas untuk menangani lebih dari 100 file, sehingga memperpanjang durasi proses. Di akhir proses, Anda akan memiliki >10Gig data,.bin, file, dan file.met dari meta data yang menjelaskan proses dan hasil. SDtoCSV.jar (kode sumber SDtoCSV_src.zip) yang disediakan dapat digunakan untuk mengonversi file.bin ke file.csv di komputer Anda untuk diproses lebih lanjut. Data yang dihasilkan adalah >60Gig. Versi UNO/Mega2560 memiliki konversi.bin ke.csv yang disertakan dalam sketsa Arduino, tetapi mengingat volume data yang dicatat oleh versi Teensy, itu bukan cara yang efisien untuk melakukan konversi.

Perlengkapan

Teensy 3.2 oleh PJRC

Papan breakout kartu MicroSD Adafruit+ atau sejenisnya.

Kartu MicroSD 16G SDHC kelas 10 berkualitas baik mis. SanDisk.

Pasokan USB 5V

Sebuah led dengan resistor 470R secara seri.

2 x 100R resistor (memberikan perlindungan dari kerusakan karena kesalahan kabel Tx/Rx)

Bluetooth Mate Silver ATAU salah satu modul yang dijelaskan pada Arduino UNO/Mega Starter, dikendalikan oleh Android/pfodApp

Langkah 1: Konstruksi

Konstruksi
Konstruksi

Unduh dan instal Arduino IDE V1.8.9+ dari https://arduino.cc/en/Main/Software. Halaman web tersebut memiliki tautan untuk berbagai sistem operasi dan tautan ke Memulai (https://arduino.cc/en/Guide/HomePage).

Unduh dan instal Teensyduino (Dukungan Teensy untuk Arduino IDE). PERHATIKAN dengan seksama petunjuk Penggunaan Pertama.

Pilih Teensy 3.2 sebagai papan dan periksa apakah program contoh BLINK dimuat dan berjalan.

Unduh dan instal pustaka berikut:- millisDelay dan SdFat (Snapshot lokal pustaka SdFat yang digunakan untuk pengujian ini ada di sini.) dan pfodParser.zip (untuk kelas pfodBufferedStream dan pfodNonBlockingInput)

Unduh file zip perpustakaan dan kemudian gunakan Arduino IDE → Sketsa → Sertakan Perpustakaan → Tambahkan menu perpustakaan. ZIP untuk menginstal perpustakaan dari file zip.

Buka zip file Teensy32AnalogLogger.zip ke direktori sketsa Arduino Anda dan program papan Teensy 3.2 dengan Teensy32AnalogLogger.ino (Versi 0.01)

Hubungkan Teensy 3.2, modul Bluetooth dan modul kartu SD seperti yang ditunjukkan di atas (versi pdf)

Langkah 2: Menjalankan Program -- Pengujian

Pertama format kartu SD Anda menggunakan

Kartu SD harus kosong untuk mulai masuk.

Untuk pengujian awal tidak perlu menghubungkan modul Communications, cukup sambungkan modul Teensy 3.2+ SD (dengan kartu kosong terpasang) ke Arduino IDE melalui kabel serial USB. Seperti yang disediakan, sketsa Teensy32AnalogLogger.ino menggunakan koneksi USB untuk kontrol dan pemantauan. Lihat Logging Real Data langkah di bawah ini untuk menggunakan perangkat komunikasi untuk kontrol dan pemantauan.

Edit bagian atas sketsa Teensy32AnalogLogger.ino untuk mengatur COM_SERIAL ke Serial, untuk menghasilkan koneksi USB Teensy.

#tentukan Serial COM_SERIAL

Kemudian unggah sketsa ke Teensy 3.2

Buka Serial Monitor Arduino IDE pada 115200 baud (dengan set NL & CR). Setelah beberapa detik, Teensy 3.2 akan menampilkan menu perintah

Ver:0.01 masukkan salah satu perintah berikut:? - status dan metadatai saat ini - inisialisasi filel - daftar file>

NS ? cmd menampilkan detail pengaturan saat ini. (Lihat bagian atas Teensy32AnalogLogger.ino untuk mengubah pengaturan ini) Cmds harus diakhiri dengan NL atau CR atau keduanya.

0:00:00.000 dari 720:00:00.000

Pin sampel: 16 17 Urutan byte: Bit ADC Little-Endian: 10 rata-rata sampel ADC lebih dari: 4 Kecepatan Sampel: 1000.00 Interval sampel: 1000uS Sampel per blok: 127 Waktu untuk mengisi blok: 127000uS Waktu untuk mengisi file: 9:01: 52.000 Waktu untuk mengisi SEMUA file: 894:04:48.000 Latensi maksimum SD (termasuk tutup/buka file): 0uS Latensi tutup/buka file maksimum: 0uS Jumlah blok buffer: 28 Waktu untuk mengisi SEMUA buffer blok: 3556000uS Jumlah maksimum buffer disimpan dalam panggilan ke storeSampleBuffers(): 0 Total Timer yang Terlewatkan: 0 Total Sampel yang Terlewatkan sejauh ini: 0 Total Blok yang ditulis: 0 Total Sampel yang ditulis: 0 meliputi: 0:00:00.000 File Saat Ini:

Dalam hal ini runtime logging saat ini adalah 0 dari 720 jam (30 hari) yang diminta, pengambilan sampel D16/A2 dan D17/A3 (lihat di bawah untuk Pembatasan Pilihan Input ADC di bawah) 1000 kali per detik. Waktu proses maksimum dapat mencapai 894 jam (37,25 hari). Loop utama() dapat ditempati hingga 3,5 detik (Waktu untuk mengisi SEMUA buffer blok) sebelum semua buffer yang tersedia terisi dan sampel mulai hilang. Buffer yang disimpan dll diperbarui saat proses berjalan.

Masukkan kartu SD kosong, gunakan cmd 'i' untuk menginisialisasi 99 file yang digunakan untuk menyimpan data. Pra-inisialisasi mereka di sini mengurangi waktu tunda saat beralih dari satu file ke file berikutnya dan memungkinkan pengambilan sampel yang lebih cepat.

Inisialisasi 99 file

Membuat file baru: log00.bin Waktu berlalu: 368mS Membuat file baru: log01.bin Waktu berlalu: 520mS… Membuat file baru: log98.bin Waktu berlalu: 15660mS Membuat file baru: log99.bin Waktu berlalu: 15812mS

Anda kemudian dapat menggunakan r cmd untuk memulai proses logging. Jalankan akan untuk waktu yang diminta atau sampai s cmd digunakan untuk menghentikannya. Anda juga dapat menggunakan ? cmd saat masuk untuk mendapatkan waktu dan jumlah yang diperbarui. Berikut adalah jangka pendek yang dihentikan lebih awal menggunakan s cmd.

PENDAFTARAN DATA…..

Ver:0.01 masukkan salah satu perintah berikut: ? - status dan metadata saat ini - hentikan pencatatan data

PENDAFTARAN DATA… Periksa dengan ? memerintah

Waktu berjalan yang telah berlalu: 0:00:10.000 dari 720:00:00.000 Waktu berjalan yang telah berlalu: 0:00:20.000 dari 720:00:00.000…

Menghentikan Logging dan menghapus file yang tidak digunakan.

… Menghapus file yang tidak digunakan: log98.bin Menghapus file yang tidak digunakan: log99.bin

0:01:04,976 dari 720:00:00.000

Pin sampel: 16 17 Urutan byte: Bit ADC Little-Endian: 10 rata-rata sampel ADC lebih dari: 4 Kecepatan Sampel: 1000.00 Interval sampel: 1000uS Sampel per blok: 127 Waktu untuk mengisi blok: 127000uS Waktu untuk mengisi file: 9:01: 52.000 Waktu untuk mengisi SEMUA file: 894:04:48.000 Latensi maksimum SD (termasuk tutup/buka file): 204uS Latensi tutup/buka file maksimum: 0uS Jumlah blok buffer: 28 Waktu untuk mengisi SEMUA buffer blok: 3556000uS Jumlah maksimum buffer disimpan dalam panggilan ke storeSampleBuffers(): 1 Total Timer yang Terlewatkan: 0 Total Sampel yang Terlewatkan sejauh ini: 0 Total Blok yang ditulis: 511 Total Sampel yang ditulis: 64832 meliputi: 0:01:04,832 File Saat Ini: log00.bin

ls:

2000-01-01 01:00:00 261632 log00.bin 2000-01-01 01:00:00 240 log.met

PENDAFTARAN DATA SELESAI!

Ver:0.01 masukkan salah satu perintah berikut: ? - status dan metadata saat ini ** r - merekam data ADC ** tidak tersedia. Data sudah ada ** i - inisialisasi file ** tidak tersedia. Data sudah ada l - daftar file

DATA SUDAH MASUK, periksa dengan ?

Display LED

LED yang terhubung ke D3 (dengan D2 menyediakan koneksi GND) akan menyala solid jika ada sampel yang terlewat dan akan berkedip jika ada kesalahan. Sketsa mencoba untuk melanjutkan setelah kesalahan tetapi mungkin tidak berhasil melakukannya.

Langkah 3: Mencatat Data Nyata

Saat mencatat data nyata dalam jangka waktu yang lama, akan lebih mudah untuk menghubungkan modul komunikasi ke pin D0/D1 dan mengontrol serta memantau pencatatan dari jarak jauh. Di sini modul Bluetooth Mate Silver digunakan dengan pengaturan default, 115200 baud, tanpa handshaking perangkat keras (RTC, CTS), kode pin 1234.

Catatan: Saat daya diterapkan ke modul Mate Silver, ia masuk ke mode konfigurasi, led merah cepat berkedip, selama 60 detik. Selama waktu ini Anda dapat mengirim $$$ melalui koneksi serial ke modul untuk mengonfigurasinya tetapi Anda tidak dapat menghubungkan modul tersebut. Setelah led merah berkedip lambat, modul bluetooth akan menerima koneksi.

Ubah definisi COM_SERIAL di Teensy32AnalogLogger.ino ke koneksi serial perangkat keras (D0/D1), Serial1

#define COM_SERIAL Serial1

Setelah memasangkan dengan komputer, port COM baru dibuat di komputer dan CoolTerm dapat digunakan untuk menghubungkan dan mengontrol serta memantau pencatatan. Modul komunikasi lain yang terhubung secara serial juga dapat digunakan, seperti WiFi atau BLE, lihat Arduino UNO/Mega Starter, dikendalikan oleh Android/pfodApp untuk detailnya.

Anda juga dapat mengontrol dan memantau pencatatan dari ponsel Android Anda menggunakan aplikasi terminal bluetooth seperti aplikasi Terminal Bluetooth, atau menggunakan aplikasi terminal WiFi dan TCP seperti TCP Telnet Terminal Pro, atau mdoule Uart ke BLE dan aplikasi terminal BLE seperti nRF UART V2

Langkah 4: Pembatasan Pilihan Input ADC

Pembatasan pada Pilihan Input ADC
Pembatasan pada Pilihan Input ADC

Teensy 3.2 memiliki dua modul perangkat keras ADC terpisah, ADC_0 dan ADC_1, dalam mikroprosesornya sehingga dapat mengambil sampel dua input pada saat yang bersamaan. Ini juga memiliki rata-rata perangkat keras bawaan yang mengambil beberapa sampel ADC dan meratakannya sebelum mengubah hasilnya.

Ada batasan input mana yang dapat dihubungkan ke ADC_0, ADC_1. Gambar Teensy3_1_AnalogCard-p.webp

Singkatnya:-Untuk Pembacaan Berakhir Tunggal yaitu +Volt yang dirujuk ke GND ADC_0 dapat membaca A0 hingga A9, A10, A11, A12, A14 ADC_1 dapat membaca A2, A3, A10, A13, A15 hingga A20 Jika Anda memilih pin yang ADC tidak bisa membacanya akan mengembalikan 0 (selalu)

Proyek ini menggunakan A2, A3 yang masing-masing dapat diakses oleh ADC_0 atau ADC_1.

Langkah 5: Mengonversi File.bin ke File.csv

Teensy32AnalogLogger.ino menyimpan sampel sebagai biner dalam file logxx.bin yaitu log00.bin ke log99.bin. Teensy32AnalogLogger.ino juga menyimpan file log.met tentang meta data yang dijalankan.

Anda dapat menggunakan SDtoCSV.jar (kode sumber SDtoCSV_src.zip) untuk mengonversi file.bin ke.csv untuk diproses lebih lanjut. Salin file dari kartu SD ke hard disk komputer Anda dengan setidaknya 70Gig ruang kosong dan salin SDtoCSV.jar ke direktori yang sama. Buka jendela perintah di direktori itu dan jalankan

java -jar SDtoCSV.jar log

Jika komputer Anda tidak menginstal Java, instal dari www.java.com

SDtoCSV akan memproses file log.met dan kemudian setiap file logxx.bin yang tersedia di direktori dan mengeluarkan file.csv untuk setiap.bin. File.csv memiliki nomor urut sampel yang diikuti oleh dua bacaan.

Contoh keluaran konsol untuk pembacaan 2 adc yang diambil sampelnya 30303 kali/dtk ditampilkan di sini, output.txt. Ini menggambarkan bagaimana sampel yang terlewat dilaporkan. (Menggandakan jumlah buffer dalam sketsa akhir memperbaiki sampel yang terlewat ini)

SD_Logging ke konversi CSV. Periksa SDtoCSV.log untuk kemajuan dan pesan kesalahan. Memproses log00 Diproses 256000 blok Memproses log01 Diproses 256000 blok… Memproses log25 Diproses 256000 blok Memproses log26 Diproses 256000 blok Memproses log27 Diproses 256000 blok Sampel yang terlewat: 2715 Memproses log28 Diproses 256000 blok… Memproses log29 Memproses 256000 blok… Memproses log47 Diproses 256000 blok Memproses log48 Diproses 35935 blok --- Selesai Diproses

File log yang lebih lengkap, SDtoCSV.log, ditambahkan ke setiap menjalankan SDtoCSV. Ini termasuk output meta data dan pesan kesalahan apa pun. Di sini count:254 adalah jumlah data yang disimpan di blok itu yaitu 127 sampel x 2 pembacaan adc per blok. MissedSamples adalah jumlah pasangan pembacaan yang terlewat, yaitu baris dalam output.csv.

=== File Log untuk konversi SD_Logging ke CSV Sab 13 Jul 13:19:51 AEST 2019 Untuk melihat pesan kemajuan di Konsol, gunakan java -jar SDtoCSV.jar Nama File Dasar 'log' Versi Metadata: 0 (Little Endian) sampleInterval uS: 33 adcBits:10 adcAvgs:4 pinCount:2 Pins: 16, 17 sampelPerBlock:127 noBufferBlocks:28 durasi mS:51649820 diminta runTime mS:106216704 maxBuffersUsed:32 Peringatan: Melebihi jumlah buffer yang tersedia (28). Beberapa sampel mungkin hilang. maxLatency uS:221476 Peringatan: Melebihi waktu yang disediakan oleh blok penyangga (117348uS). Beberapa sampel akan hilang. maxFileOpenTime uS:20998 missingTimer:0 missSamplesTotal:2715 totalBlocksDitulis: 12323935 totalSamplesWritten:1565139665 Memproses log00.bin Diproses 256000 blok Memproses log01.bin Diproses 256000 blok… Memproses log26.bin Diproses 256000 blok Memproses log27.bin !!! Blok:57696 hitungan:254 tidak terjawabSampel:2339 !!! Blok:57697 hitungan:254 tidak terjawabSampel:376 Diproses 256000 blok --- Total Sampel yang Terlewatkan: 2715

Memproses log28.bin Memproses 256000 blok

… Memproses log47.bin Diproses 256000 blok Memproses log48.bin Diproses 35935 blok --- Selesai Diproses

Contoh file keluaran log00.csv adalah

SampleCounter (per 33uS), Pin 16, Pin 170, 248, 205 1, 273, 195 2, 228, 337 3, 360, 302 4, 355, 369 5, 220, 281…

Penghitung sampel meningkat dari file ke file sehingga dapat digunakan sebagai cap waktu. Jika ada sampel yang hilang maka penghitung sampel ditambah dengan hitungan yang terlewat sebelum mengeluarkan baris berikutnya sehingga penghitung/cap waktu tetap akurat untuk sampel yang direkam.

Langkah 6: Komentar pada Kode dan Ekstensi

Teensy32AnalogLogger adalah versi yang sangat dimodifikasi dari contoh AnalogBinLogger Bill Greiman di perpustakaan SdFat Arduino-nya. Di sini perpustakaan telah ditulis ulang untuk berjalan di Teensy 3.2.

Teensy32AnalogLogger menggunakan timer0 untuk mengatur interval sampel. Handler interupsi untuk timer0 memulai dua konversi ADC. Handler interupsi untuk modul ADC kedua terus dipanggil sampai keduanya selesai, biasanya modul ADC pertama yang dimulai ADC_0 akan selesai sebelum yang kedua on sehingga handler interupsi hanya dipanggil sekali. Penangan interupsi ADC_1 menyimpan sampel ke buffer data.

Di loop utama(), storeSampleBuffer() menyimpan semua buffer penuh ke kartu SD dan mendaur ulang buffer ke antrian buffer kosong. Jumlah besar RAM yang tersedia pada Teensy 3.2 berarti sejumlah besar buffer dapat dialokasikan sehingga storeSampleBuffer() tidak perlu sering dipanggil. Ini menyisakan waktu untuk loop utama() untuk melakukan pekerjaan lain, seperti perintah proses dan mengirim output.

Ekstensi

Meskipun proyek ini berfungsi sebagai pencatat data berkecepatan tinggi, untuk perangkat yang dapat dikenakan secara lengkap, proyek ini masih perlu dikemas dan sistem baterai serta sensor EKG disediakan. Selain itu ada beberapa ekstensi yang harus dipertimbangkan.

  1. Tambahkan kontrol waktu nyata dan pemantauan bentuk gelombang sampel melalui pfodApp menggunakan fungsi plot pfodApp untuk menampilkan snapshot bentuk gelombang
  2. Perpanjang nomor file melewati 99 untuk pengambilan sampel yang lebih lama
  3. Sampel lebih dari 2 input. Karena Teensy 3.2 memiliki modul ADC ganda, Anda dapat memodifikasi kode untuk menambahkan input tambahan berpasangan untuk memaksimalkan laju sampel.
  4. Tambahkan pemantauan baterai untuk melacak pengisian baterai. Teensy 3.2 menggunakan sekitar 1100mAhrs selama 24 jam, termasuk modul bluetooth dan SD, tetapi tidak termasuk modul sensor
  5. Tambahkan sirkuit suplai baterai ganda untuk memungkinkan penggantian baterai tanpa mengganggu pencatatan.

Direkomendasikan: