Isi kandungan:

Log ECG Berkelajuan Tinggi atau Data Lain, Terus Berlangsung Selama Lebih Sebulan: 6 Langkah
Log ECG Berkelajuan Tinggi atau Data Lain, Terus Berlangsung Selama Lebih Sebulan: 6 Langkah

Video: Log ECG Berkelajuan Tinggi atau Data Lain, Terus Berlangsung Selama Lebih Sebulan: 6 Langkah

Video: Log ECG Berkelajuan Tinggi atau Data Lain, Terus Berlangsung Selama Lebih Sebulan: 6 Langkah
Video: ✨A Will Eternal EP 01 - 106 Full Version [MULTI SUB] 2024, November
Anonim
Log ECG Berkelajuan Tinggi atau Data Lain, Berterusan Selama Lebih Dari Satu Bulan
Log ECG Berkelajuan Tinggi atau Data Lain, Berterusan Selama Lebih Dari Satu Bulan

Projek ini dibangunkan untuk menyokong pasukan penyelidikan perubatan universiti, yang memerlukan alat pemakai yang dapat log 2 x isyarat ECG pada 1000 sampel / saat masing-masing (jumlah sampel 2K / saat) berterusan selama 30 hari, untuk mengesan aritmia. Projek yang dibentangkan di sini merangkumi kawalan jauh dan pemantauan pembalakan. Alat kawalan jauh dilakukan melalui menu yang ditunjukkan pada terminal bersiri, sama ada di komputer atau telefon bimbit. Projek ini tidak merangkumi pengukuran atau pembungkusan EKG atau bateri yang diperlukan untuk pemakaian akhir.

Versi berkelajuan tinggi / panjang ini menggunakan Teensy 3.2, modul pelarian Adafruit Micro-SD, kad SD 16G SDHC kelas 10 berkualiti untuk log data dan modul komunikasi Bluetooth untuk kawalan dan pemantauan. Versi UNO / Mega2560 yang kurang maju dan lebih perlahan juga tersedia. Walaupun projek ini menggunakan modul komunikasi Bluetooth untuk kawalan dan pemantauan pembalakan, anda juga dapat menggunakan modul WiFi atau BLE.

Versi ini, berdasarkan Teensy 3.2, mampu memperoleh kadar persampelan yang jauh lebih tinggi daripada versi UNO / Mega2560. Dengan menggunakan kod ini, Teensy 3.2 dapat mengambil sampel dan mencatat dua sampel ADC pada> 30Khz dengan perkakasan rata-rata lebih dari 4 sampel dan dengan begitu mudah memenuhi keperluan 1000 sampel / saat di atas. Kod ini menyokong menyimpan 100 fail bin masing-masing 128K. Pada 30Khz yang meliputi 29jam 30min. Pada 1000 sampel / saat ia merangkumi 37 hari. Kod ini dapat diperluas dengan mudah untuk menangani lebih dari 100 fail, sehingga memperpanjang jangka masa larian. Pada akhir larian, anda akan mempunyai> 10Gig data,.bin, file dan fail.met meta data yang menerangkan tentang larian dan hasilnya. SDtoCSV.jar (kod sumber SDtoCSV_src.zip) yang disediakan boleh digunakan untuk menukar fail.bin ke fail.csv di komputer anda untuk proses selanjutnya. Data yang dihasilkan adalah> 60Gig. Versi UNO / Mega2560 mempunyai penukaran.bin ke.csv yang termasuk dalam sketsa Arduino, tetapi memandangkan jumlah data yang dicatat oleh versi Teensy, itu bukan cara yang berkesan untuk melakukan penukaran.

Bekalan

Teensy 3.2 oleh PJRC

Adafruit MicroSD card breakout board + atau yang serupa.

Kad MicroSD 16G SDHC kelas 10 berkualiti baik cth. SanDisk.

Bekalan USB 5V

A yang dipimpin dengan 470R resister dalam siri.

2 x 100R perintang (memberikan perlindungan dari kerosakan akibat kesalahan pendawaian Tx / Rx)

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

Langkah 1: Pembinaan

Pembinaan
Pembinaan

Muat turun dan pasang Arduino IDE V1.8.9 + dari https://arduino.cc/en/Main/Software. Halaman web itu mempunyai pautan untuk pelbagai sistem operasi dan pautan ke GettingStarted (https://arduino.cc/en/Guide/HomePage).

Muat turun dan pasang Teensyduino (Teensy Support untuk Arduino IDE). Perhatikan arahan Penggunaan Pertama dengan teliti.

Pilih Teensy 3.2 sebagai papan dan periksa bahawa program contoh BLINK dimuat dan dijalankan.

Muat turun dan pasang pustaka berikut: - millisDelay dan SdFat (Petikan tempatan pustaka SdFat yang digunakan untuk ujian ini ada di sini.) Dan pfodParser.zip (untuk kelas pfodBufferedStream dan pfodNonBlockingInput)

Muat turun fail zip perpustakaan dan kemudian gunakan Arduino IDE → Sketsa → Sertakan Perpustakaan → Tambahkan menu perpustakaan. ZIP untuk memasang perpustakaan dari fail zip.

Buka zip fail Teensy32AnalogLogger.zip ke direktori sketsa Arduino anda dan atur papan Teensy 3.2 dengan Teensy32AnalogLogger.ino (Versi 0.01)

Wire up modul Teensy 3.2, Bluetooth dan modul kad SD seperti gambar di atas (versi pdf)

Langkah 2: Menjalankan Program - Menguji

Format kad SD anda terlebih dahulu menggunakan

Kad SD mesti kosong untuk memulakan pembalakan.

Untuk ujian awal, anda tidak perlu menyambungkan modul Komunikasi, cukup sambungkan modul Teensy 3.2 + SD (dengan kad kosong terpasang) ke Arduino IDE melalui kabel bersiri USB. Seperti yang disediakan sketsa Teensy32AnalogLogger.ino menggunakan sambungan USB untuk kawalan dan pemantauan. Lihat Log Data Sebenar langkah di bawah untuk menggunakan alat komunikasi untuk kawalan dan pemantauan.

Edit bahagian atas lakaran Teensy32AnalogLogger.ino untuk menetapkan COM_SERIAL ke Serial, untuk menghasilkan sambungan USB Teensy.

#tentukan Siri COM_SERIAL

Kemudian muat naik lakaran ke Teensy 3.2

Buka Monitor Serial Arduino IDE pada 115200 baud (dengan kedua-dua set NL & CR). Setelah beberapa saat, Teensy 3.2 akan memaparkan menu perintah

Ver: 0.01 masukkan salah satu arahan berikut:? - status dan metadatai semasa - memulakan filel - senarai fail>

The? cmd memaparkan perincian tetapan semasa. (Lihat bahagian atas Teensy32AnalogLogger.ino untuk menukar tetapan ini) Cmds mesti ditamatkan dengan NL atau CR atau kedua-duanya.

0: 00: 00.000 daripada 720: 00: 00.000

Pin sampel: 16 17 Bait pesanan: Bit ADC Little-Endian: 10 purata sampel ADC melebihi: 4 Kadar Sampel: 1000.00 Selang sampel: 1000uS Sampel setiap blok: 127 Masa mengisi blok: 127000uS Masa untuk mengisi fail: 9:01: 52.000 Masa untuk mengisi SEMUA fail: 894: 04: 48.000 Latensi SD maksimum (termasuk tutup / buka fail): 0uS Latensi penutupan / buka fail maksimum: 0uS Bilangan blok penampan: 28 Masa untuk mengisi SEMUA penyangga blok: 3556000uS Jumlah penampan maksimum disimpan dalam panggilan ke kedaiSampleBuffers (): 0 Jumlah Timer Terlepas: 0 Jumlah Sampel Terlepas setakat ini: 0 Jumlah Blok ditulis: 0 Jumlah Sampel yang ditulis: 0 meliputi: 0: 00: 00.000 Fail Semasa:

Dalam kes ini, jangka masa pembalakan semasa adalah 0 dari 720 jam yang diminta (30 hari), mengambil sampel D16 / A2 dan D17 / A3 (lihat di bawah untuk Sekatan pada Pilihan Masukan ADC di bawah) 1000 kali sesaat. Masa operasi maksimum boleh mencapai 894 jam (37.25 hari). Gelung utama () dapat dihuni hingga 3.5sec (Masa untuk mengisi SEMUA penyangga blok) sebelum semua penyangga yang tersedia diisi dan sampel mula hilang. Penyangga yang disimpan dan lain-lain dikemas kini semasa proses berjalan.

Masukkan kad SD kosong, gunakan cmd 'i' untuk menginisialisasi 99 fail yang digunakan untuk menyimpan data. Pra-inisialisasi di sini mengurangkan kelewatan masa ketika beralih dari satu fail ke fail yang lain dan memungkinkan pengambilan sampel lebih cepat.

Memulakan 99 fail

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

Anda kemudian boleh menggunakan r cmd untuk memulakan proses pembalakan. Jalankan akan untuk waktu yang diminta atau sehingga s cmd digunakan untuk menghentikannya. Anda juga boleh menggunakan? cmd semasa log masuk untuk mendapatkan masa dan kiraan yang dikemas kini. Berikut adalah jangka pendek yang dihentikan lebih awal menggunakan s cmd.

DATA MASUK…..

Ver: 0.01 masukkan salah satu arahan berikut:? - status semasa dan metadata - menghentikan pembalakan data

MENGHASILKAN DATA … Periksa dengan? arahan

Masa Larian yang Berlalu: 0: 00: 10.000 dari 720: 00: 00.000 Masa Larian yang Berlalu: 0: 00: 20.000 dari 720: 00: 00.000..

Menghentikan Log dan membuang fail yang tidak digunakan.

… Membuang fail yang tidak digunakan: log98.bin Membuang fail yang tidak digunakan: log99.bin

0: 01: 04.976 daripada 720: 00: 00.000

Pin sampel: 16 17 Susunan bait: Bit ADC Little-Endian: 10 purata sampel ADC melebihi: 4 Kadar Sampel: 1000.00 Selang sampel: 1000uS Sampel setiap blok: 127 Masa mengisi blok: 127000uS Masa untuk mengisi fail: 9:01: 52.000 Masa untuk mengisi SEMUA fail: 894: 04: 48.000 Latensi SD maksimum (termasuk tutup / buka fail): 204uS Latensi penutupan / buka fail maksimum: 0uS Bilangan blok penampan: 28 Masa untuk mengisi SEMUA penyangga blok: 3556000uS Bilangan maksimum penyangga disimpan dalam panggilan ke kedaiSampleBuffers (): 1 Jumlah Timer Terlepas: 0 Jumlah Sampel Terlepas setakat ini: 0 Jumlah Blok ditulis: 511 Jumlah Sampel ditulis: 64832 meliputi: 0: 01: 04.832 Fail Semasa: log00.bin

ls:

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

MASUK DATA SELESAI!

Ver: 0.01 masukkan salah satu arahan berikut:? - status dan metadata terkini ** r - rekod data ADC ** tidak tersedia. Data sudah ada ** i - memulakan fail ** tidak tersedia. Data sudah ada fail l - senarai

DATA TELAH MASUK, periksa dengan?

Paparan led

LED yang disambungkan ke D3 (dengan D2 menyediakan sambungan GND) akan menyala padat jika ada sampel yang terlewat dan akan berkelip sekiranya terdapat ralat. Lakaran tersebut cuba diteruskan setelah berlaku kesilapan tetapi mungkin tidak berjaya dilakukan.

Langkah 3: Log Data Sebenar

Semasa mencatat data sebenar dalam jangka masa yang lama, lebih mudah untuk menyambungkan modul komunikasi ke pin D0 / D1 dan mengawal dan memantau pembalakan dari jarak jauh. Di sini modul Bluetooth Mate Silver digunakan dengan tetapan lalai, 115200 baud, tidak ada jabat tangan perkakasan (RTC, CTS), kod pin 1234.

Catatan: Apabila kuasa digunakan pada modul Mate Silver, ia masuk ke mod konfigurasi, berkelip merah cepat berkedip, selama 60 saat. Selama ini anda boleh menghantar $$$ melalui sambungan bersiri ke modul untuk mengkonfigurasinya tetapi anda tidak dapat menyambungkan modul. Setelah lampu merah berkelip perlahan, modul bluetooth akan menerima sambungan.

Ubah definisi COM_SERIAL dalam Teensy32AnalogLogger.ino ke sambungan siri perkakasan (D0 / D1), Serial1

#tentukan COM_SERIAL Serial1

Setelah berpasangan dengan komputer, port COM baru dibuat di komputer dan CoolTerm dapat digunakan untuk menyambung dan mengawal dan memantau pembalakan. Modul komunikasi bersambung yang lain juga dapat digunakan, seperti WiFi atau BLE, lihat Arduino UNO / Mega Starter, dikendalikan oleh Android / pfodApp untuk perinciannya.

Anda juga dapat mengawal dan memantau pembalakan dari telefon bimbit Android anda menggunakan aplikasi terminal bluetooth seperti aplikasi Terminal Bluetooth, atau menggunakan aplikasi terminal WiFi dan TCP seperti TCP Telnet Terminal Pro, atau Uart to BLE mdoule dan aplikasi terminal BLE seperti nRF UART V2

Langkah 4: Sekatan pada Pilihan Masukan ADC

Sekatan pada Pilihan Masukan ADC
Sekatan pada Pilihan Masukan ADC

Teensy 3.2 mempunyai dua modul perkakasan ADC yang berasingan, ADC_0 dan ADC_1, dalam pemproses mikro sehingga ia dapat mengambil sampel dua input pada masa yang sama. Ia juga mempunyai rata-rata perkakasan bawaan yang mengambil banyak sampel ADC dan menaksirnya sebelum mengubah hasilnya.

Terdapat sekatan di mana input dapat dihubungkan ke ADC_0, ADC_1. Imej Teensy3_1_AnalogCard-p.webp

Ringkasnya: -Untuk Pembacaan Berakhir Tunggal iaitu + 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 Sekiranya anda memilih pin yang ADC tidak dapat membacanya akan mengembalikan 0 (selalu)

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

Langkah 5: Menukar Fail.bin ke Fail.csv

Teensy32AnalogLogger.ino menyimpan sampel sebagai binari dalam fail logxx.bin iaitu log00.bin ke log99.bin. Teensy32AnalogLogger.ino juga menyimpan fail log.met meta data mengenai larian.

Anda boleh menggunakan SDtoCSV.jar (kod sumber SDtoCSV_src.zip) untuk menukar fail.bin ke.csv untuk proses selanjutnya. Salin fail dari kad SD ke cakera keras komputer anda dengan sekurang-kurangnya 70Gig ruang kosong dan salin SDtoCSV.jar ke direktori yang sama. Buka tetingkap arahan di direktori itu dan jalankan

log java -jar SDtoCSV.jar

Sekiranya komputer anda tidak mempunyai Java, pasang dari www.java.com

SDtoCSV akan memproses fail log.met dan kemudian setiap fail logxx.bin yang tersedia dalam direktori dan mengeluarkan fail.csv untuk setiap.bin. Fail.csv mempunyai nombor urutan sampel diikuti oleh dua bacaan.

Contoh output konsol untuk bacaan 2 adc 30303 kali / saat ditunjukkan di sini, output.txt. Ini menggambarkan bagaimana sampel yang tidak dijawab dilaporkan. (Menggandakan jumlah penyangga dalam lakaran akhir menetapkan ini sampel yang tidak dijawab)

SD_Logging ke penukaran CSV. Periksa SDtoCSV.log untuk mengetahui kemajuan dan mesej ralat. Memproses log00 Blok diproses 256000 blok Memproses log01 Memproses 256000 blok… Log pemprosesan 25 blok 256000 diproses Log pemprosesan 26 blok 256000 diproses Log pemprosesan 27 Blok diproses 256000 blok Sampel yang tidak dijawab: 2715 Log pemprosesan 28 Diproses 256000 blok… Memproses log29 Memproses 256000 blok… Memproses log47 Blok diproses 256000 blok Memproses log48 Memproses 35935 blok --- Selesai Memproses

Fail log yang lebih lengkap, SDtoCSV.log, ditambahkan oleh setiap jalan masuk SDtoCSV. Ini termasuk output data meta dan sebarang mesej ralat. Di sini hitungan: 254 adalah jumlah data yang disimpan di blok itu, iaitu 127 sampel x 2 bacaan adc setiap blok. MissSamples adalah bilangan pasang bacaan yang terlepas iaitu baris dalam output.csv.

=== Fail Log untuk penukaran SD_Logging ke CSV Sabtu 13 Jul 13:19:51 AEST 2019 Untuk melihat mesej kemajuan di Konsol gunakan java -jar SDtoCSV.jar Nama Fail Asas 'log' Metadata Versi: 0 (Little Endian) sampelInterval uS: 33 adcBits: 10 adcAvgs: 4 pinCount: 2 Pin: 16, 17 samplesPerBlock: 127 noBufferBlocks: 28 durasi mS: 51649820 jangka masa yang dimintaMS: 106216704 maxBuffersDigunakan: 32 Amaran: Melebihi bilangan penyangga yang tersedia (28). Sebilangan sampel mungkin hilang. maxLatency uS: 221476 Amaran: Melebihi masa yang disediakan oleh blok penyangga (117348uS). Beberapa sampel akan hilang. maxFileOpenTime uS: 20998 missTimers: 0 missSamplesJumlah: 2715 totalBlocksWritten: 12323935 totalSamplesWritten: 1565139665 Processing log00.bin Diproses 256000 blok Memproses log01.bin Diproses 256000 blok… Memproses log26.bin Diproses 256000 blok Memproses log27.bin !!! Blok: 57696 kiraan: 254 terlepas Contoh: 2339 !!! Blok: 57697 kiraan: 254 terlepas Sampel: 376 diproses 256000 blok --- Jumlah Sampel Terlepas: 2715

Memproses log28.bin Diproses 256000 blok

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

Contoh fail output log00.csv adalah

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

Kaunter sampel meningkat dari fail ke fail sehingga dapat digunakan sebagai cap waktu. Sekiranya terdapat sampel yang hilang, maka pembilang sampel akan bertambah dengan jumlah yang terlewat sebelum mengeluarkan baris seterusnya supaya setem / cap waktu tetap tepat untuk sampel yang direkodkan.

Langkah 6: Komen mengenai Kod dan Sambungan

Teensy32AnalogLogger adalah versi yang banyak diubah suai contoh Bill Greiman's AnalogBinLogger di perpustakaan SdFat Arduino miliknya. Di sini perpustakaan telah ditulis semula untuk dijalankan pada Teensy 3.2.

Teensy32AnalogLogger menggunakan pemasa0 untuk menetapkan selang sampel. Pengendali gangguan untuk pemasa0 memulakan dua penukaran ADC. Pengendali interrupt untuk modul ADC kedua terus dipanggil sehingga kedua-duanya selesai, biasanya modul ADC pertama yang dimulakan ADC_0 akan selesai sebelum yang kedua sehingga pengendali interrupt hanya dipanggil sekali. Pengendali gangguan ADC_1 menyimpan sampel ke penyangga data.

Dalam gelung utama (), storeSampleBuffer () menyimpan sebarang penyangga penuh ke kad SD dan mengitar semula penyangga ke barisan penyangga kosong. Jumlah RAM yang banyak terdapat pada Teensy 3.2 bermaksud sebilangan besar penyangga dapat diperuntukkan dan jadi storeSampleBuffer () tidak perlu kerap dipanggil. Ini meninggalkan masa untuk gelung utama () melakukan kerja lain, seperti perintah proses dan menghantar output.

Sambungan

Walaupun projek ini berfungsi sebagai pencatat data berkelajuan tinggi, untuk dipakai sepenuhnya, ia masih perlu dikemas dan dibekalkan sistem bateri dan sensor ECG. Serta ada beberapa peluasan yang harus dipertimbangkan.

  1. Tambahkan kawalan dan pemantauan masa nyata bentuk gelombang sampel melalui pfodApp menggunakan fungsi plot pfodApp untuk menunjukkan gambar bentuk gelombang
  2. Panjangkan nombor fail melebihi 99 untuk jangka masa pensampelan yang lebih lama
  3. Contoh lebih daripada 2 input. Oleh kerana Teensy 3.2 mempunyai modul ADC dua, anda boleh mengubah kod untuk menambahkan input tambahan secara berpasangan untuk memaksimumkan kadar sampel.
  4. Tambahkan pemantauan bateri untuk mengesan pengisian bateri. Teensy 3.2 menggunakan sekitar 1100mAhrs selama 24 jam, termasuk modul bluetooth dan SD, tetapi tidak termasuk modul sensor
  5. Tambahkan litar bekalan bateri berganda untuk membolehkan perubahan bateri tanpa mengganggu pembalakan.

Disyorkan: