Mundarija:

Bir oy davomida doimiy ravishda yuqori tezlikdagi EKG yoki boshqa ma'lumotlarni yozib oling: 6 qadam
Bir oy davomida doimiy ravishda yuqori tezlikdagi EKG yoki boshqa ma'lumotlarni yozib oling: 6 qadam

Video: Bir oy davomida doimiy ravishda yuqori tezlikdagi EKG yoki boshqa ma'lumotlarni yozib oling: 6 qadam

Video: Bir oy davomida doimiy ravishda yuqori tezlikdagi EKG yoki boshqa ma'lumotlarni yozib oling: 6 qadam
Video: Шиш астит синдромини қиёсий ташхислаш УАШ тактикаси Юрак йетишмовчилигининг замонавий давоси 2024, Iyul
Anonim
Bir oy davomida doimiy ravishda yuqori tezlikdagi EKG yoki boshqa ma'lumotlarni yozib oling
Bir oy davomida doimiy ravishda yuqori tezlikdagi EKG yoki boshqa ma'lumotlarni yozib oling

Ushbu loyiha, aritmiyalarni aniqlash uchun, har kuni 1000 ta/sekundda 2 ta EKG signalini (jami 2K namuna/sek) 2 x EKG signalini yozib oladigan, taqiladigan asbobga muhtoj bo'lgan universitet tibbiy tadqiqot guruhini qo'llab -quvvatlash uchun ishlab chiqilgan. Bu erda taqdim etilgan loyiha masofadan boshqarish va yog'ochni kesish jarayonini kuzatishni o'z ichiga oladi. Masofadan boshqarish pulti terminalda, kompyuterda yoki mobil telefonda taqdim etilgan menyular orqali amalga oshiriladi. Ushbu loyiha EKG o'lchami, qadoqlash yoki oxirgi taqish uchun zarur bo'lgan batareyani qamrab olmaydi.

Bu yuqori tezlikda/uzoq davom etadigan versiyada Teensy 3.2, Adafruit Micro-SD uzilish moduli, ma'lumotlarni saqlash uchun sifatli 16G SDHC 10-sinfli SD-karta va boshqaruv va monitoring uchun Bluetooth aloqa moduli ishlatiladi. Bu loyihaning kam rivojlangan va sekinroq UNO/Mega2560 versiyasi ham mavjud. Ushbu loyihada jurnalni nazorat qilish va kuzatish uchun Bluetooth aloqa modulidan foydalanilsa, siz WiFi yoki BLE modullaridan ham foydalanishingiz mumkin.

Teensy 3.2 -ga asoslangan ushbu versiya UNO/Mega2560 versiyasidan ancha yuqori namuna olish tezligiga ega. Ushbu kodni ishlatib, Teensy 3.2 ikkita ADC namunasini> 30 KGts chastotasida o'rtacha 4 ta namunadan iborat uskuna bilan namuna olishi va qayd qilishi mumkin va shuning uchun yuqoridagi 1000 ta namuna/sek talabini osongina qondiradi. Kod har biri 128K bo'lgan 100 ta.bin fayllarini saqlashni qo'llab -quvvatlaydi. 30 Gts chastotada, u 29 soat 30 minutni qamrab oladi. 1000 ta namuna/soniyada u 37 kunni qamrab oladi. Kodni 100 dan ortiq fayllarga ishlov berish uchun osongina uzaytirish mumkin, shuning uchun ishlash muddati uzaytiriladi. Yugurish oxirida sizda> 10Gig ma'lumotlar,.bin, fayllar va.met fayli bo'ladi. Taqdim etilgan SDtoCSV.jar (manba kodi SDtoCSV_src.zip).bin fayllarini kompyuteringizda.csv fayllariga aylantirish uchun ishlatilishi mumkin. Olingan ma'lumotlar> 60Gig. UNO/Mega2560 versiyasi Arduino eskiziga kiritilgan.bin to.csv konvertatsiyasiga ega, lekin Teensy versiyasi tomonidan yozilgan ma'lumotlar hajmini hisobga olgan holda, bu konvertatsiya qilishning samarali usuli emas.

Ta'minotlar

PJRC tomonidan Teensy 3.2

Adafruit MicroSD kartalarini buzish taxtasi+ yoki shunga o'xshash.

16G SDHC sinf 10 MicroSD kartasi yaxshi sifatli. SanDisk.

5V USB quvvat manbai

470R ketma -ket qarshilikka ega LED.

2 x 100R rezistorlar (Tx/Rx simlari xatosi tufayli shikastlanishdan himoyalanishni ta'minlaydi)

Bluetooth Mate Silver OR Android/pfodApp tomonidan boshqariladigan Arduino UNO/Mega Starter -da tasvirlangan modullardan biri.

1 -qadam: qurilish

Qurilish
Qurilish

Arduino IDE V1.8.9+ ni https://arduino.cc/en/Main/Software dan yuklab oling va o'rnating. Ushbu veb -sahifada turli xil operatsion tizimlar uchun havolalar va GettingStarted havolasi mavjud (https://arduino.cc/en/Guide/HomePage).

Teensyduino -ni yuklab oling va o'rnating (Arduino IDE uchun Teensy Support). Birinchi foydalanish ko'rsatmalariga diqqat bilan e'tibor bering.

Kengash sifatida Teensy 3.2 -ni tanlang va BLINK misol dasturining yuklanishini va ishlashini tekshiring.

Quyidagi kutubxonalarni yuklab oling va o'rnating:- millisDelay va SdFat (bu testlar uchun ishlatiladigan SdFat kutubxonasining mahalliy surati bu erda.) Va pfodParser.zip (pfodBufferedStream va pfodNonBlockingInput klassi uchun)

Kutubxonani zip fayllarini yuklab oling va kutubxonalarni zip fayllaridan o'rnatish uchun Arduino IDE → Sketch → Kutubxonani qo'shish →. ZIP kutubxona menyusidan foydalaning.

Teensy32AnalogLogger.zip faylini Arduino eskizlar katalogiga oching va Teensy32AnalogLogger.ino bilan Teensy 3.2 kartasini dasturlang (versiya 0.01)

Teensy 3.2, Bluetooth moduli va SD -karta modulini yuqorida ko'rsatilgan tarzda ulang (pdf versiyasi)

2 -qadam: Dasturni ishga tushirish - test

Avval SD -kartani https://www.sdcard.org/downloads/formatter/ yordamida formatlang.

Yozishni boshlash uchun SD -karta bo'sh bo'lishi kerak.

Dastlabki sinov uchun siz aloqa modulini ulashingiz shart emas, Teensy 3.2 + SD modulini (bo'sh karta o'rnatilgan) USB seriyali kabel orqali Arduino IDE ga ulang. Taqdim etilganidek, Teensy32AnalogLogger.ino eskizida nazorat va monitoring uchun USB ulanishi ishlatiladi. Aloqa qurilmasini boshqarish va monitoring qilish uchun quyida keltirilgan "Haqiqiy ma'lumotlarni qayd qilish" bosqichiga qarang.

Teensy32AnalogLogger.ino eskizining yuqori qismini COM_SERIAL -ni Serial -ga o'rnatish, Teensy USB -ga ulanish uchun o'zgartirish.

#COM_SERIAL seriyasini aniqlang

Keyin eskizni Teensy 3.2 -ga yuklang

Arduino IDE seriyali monitorini 115200 boddan oching (NL va CR to'plamlari bilan). Bir necha soniyadan so'ng Teensy 3.2 buyruqlar menyusini ko'rsatadi

Ver: 0.01 quyidagi buyruqlardan birini kiriting:? - joriy holat va metadatay - fayllarni ishga tushirish l - fayllar ro'yxati>

? cmd joriy sozlamalar tafsilotlarini ko'rsatadi. (Bu sozlamalarni o'zgartirish uchun Teensy32AnalogLogger.ino yuqori qismiga qarang) Cmds NL yoki CR yoki ikkalasi bilan tugatilishi kerak.

720: 00: 00.000 dan 0: 00: 00.000

Namuna pinlari: 16 17 Bayt tartibi: Little-Endian ADC bitlari: 10 ADC namunasi o'rtacha: 4 Namuna darajasi: 1000.00 Namuna oralig'i: 1000uS Har bir blok uchun namuna: 127 To'ldirish vaqti: 127000uS Faylni to'ldirish vaqti: 9:01: 52.000 BARCHA fayllarni to'ldirish vaqti: 894: 04: 48.000 Maksimal SD kechikishi (yopilish/ochilish faylini o'z ichiga oladi): 0uS Maks fayl yopilish/ochilish kechikishi: 0uS Bufer bloklar soni: 28 ALL blok buferlarini to'ldirish vaqti: 3556000uS Maksimal buferlar soni storeSampleBuffers () ga chaqiruvda saqlangan: 0 O'tkazib yuborilgan taymerlar jami: 0 Hozirgacha jami o'tkazib yuborilgan namunalar: 0 Yozilgan jami bloklar: 0 Yozilgan jami namunalar: 0 qoplama: 0: 00: 00.000 Joriy fayl:

Bunday holda, joriy ro'yxatga olish ish vaqti D16/A2 va D17/A3 (quyida ADC kirishini tanlash cheklovlari uchun) sekundiga 1000 marta so'ralgan 720 soat (30 kun) dan 0 ni tashkil qiladi. Maksimal ish vaqti 894 soatgacha (37.25 kun) bo'lishi mumkin. Asosiy tsikl () 3,5 soniyagacha (ALL blokli buferlarni to'ldirish vaqti) band bo'lishi mumkin, bu erda barcha mavjud buferlar to'ldiriladi va namunalar yo'qoladi. Ishlash jarayonida saqlangan buferlar va boshqalar yangilanadi.

Bo'sh SD -kartani joylashtiring, ma'lumotlarni saqlash uchun ishlatiladigan 99 ta faylni ishga tushirish uchun 'i' cmd -dan foydalaning. Ularni bu erda oldindan ishga tushirish bir fayldan ikkinchisiga o'tish vaqtining kechikishini kamaytiradi va tezroq namuna olish imkonini beradi.

99 ta faylni ishga tushirish

Yangi fayl yaratish: log00.bin O'tgan vaqt: 368mS Yangi fayl yaratish: log01.bin O'tgan vaqt: 520mS… Yangi fayl yaratish: log98.bin O'tgan vaqt: 15660mS Yangi fayl yaratish: log99.bin O'tgan vaqt: 15812mS

Keyin jurnalni ishga tushirish uchun r cmd dan foydalanishingiz mumkin. Yugurish kerakli vaqtda yoki s cmd uni to'xtatish uchun ishlatilguncha bo'ladi. Siz ham foydalanishingiz mumkin? Yangilangan vaqt va hisoblarni olish uchun tizimga kirishda cmd. Bu erda s cmd yordamida erta to'xtatilgan qisqa yugurish.

Ma'lumotlar ro'yxatga olinmoqda ….

Ver: 0.01 quyidagi buyruqlardan birini kiriting:? - joriy holat va metadata s - ma'lumotlarni ro'yxatga olishni to'xtatish

MA'LUMOTLARNI KO'RISH… Bilan tekshirilsinmi? buyruq

O'tgan ish vaqti: 0: 00: 10.000 dan 720: 00: 00.000 O'tgan ish vaqti: 0: 00: 20.000 dan 720: 00: 00.000…

Jurnalni to'xtatish va ishlatilmagan fayllarni o'chirish.

… Foydalanilmayotgan faylni olib tashlash: log98.bin Foydalanilmayotgan faylni olib tashlash: log99.bin

0: 01: 04.976 ning 720: 00: 00.000

Namuna pinlari: 16 17 Bayt tartibi: Little-Endian ADC bitlari: 10 ADC namunasi o'rtacha: 4 Namuna tezligi: 1000.00 Namuna oralig'i: 1000uS Har bir blok uchun namuna: 127 To'ldirish vaqti: 127000uS Faylni to'ldirish vaqti: 9:01: 52.000 HAMMA fayllarni to'ldirish vaqti: 894: 04: 48.000 Maksimal SD kechikishi (yopilish/ochilish faylini o'z ichiga oladi): 204uS Maks fayl yopilish/ochilish kechikishi: 0uS Bufer bloklar soni: 28 ALL blok buferlarini to'ldirish vaqti: 3556000uS Maksimal tamponlar soni storeSampleBuffers () da saqlangan: 1 ta o'tkazib yuborilgan taymerlar: 0 ta jami o'tkazib yuborilgan namunalar: 0 yozilgan jami bloklar: 511 yozilgan jami namunalar: 64832 ta qamrov: 0: 01: 04.832 joriy fayl: log00.bin

ls:

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

DATA LOGGING TAKMILDI!

Ver: 0.01 quyidagi buyruqlardan birini kiriting:? - joriy holat va metadata ** r - ADC ma'lumotlarini yozish ** mavjud emas. Ma'lumotlar allaqachon mavjud ** i - fayllarni ishga tushirish ** mavjud emas. Ma'lumotlar l ro'yxat fayllari allaqachon mavjud

Ma'lumotlar allaqachon ro'yxatga olingan, tekshiringmi?

LED displey

D3 ga ulangan LED (D2 bilan GND ulanishini ta'minlaydi), agar biron bir namuna o'tkazib yuborilgan bo'lsa, yonadi va xato bo'lsa yonadi. Eskiz xatolardan keyin ham davom ettirishga urinadi, lekin buni muvaffaqiyatli bajara olmaydi.

3 -qadam: Haqiqiy ma'lumotlarni ro'yxatga olish

Haqiqiy ma'lumotlarni uzoq vaqt davomida qayd qilishda aloqa modulini D0/D1 pinlariga ulash va jurnalni masofadan boshqarish va nazorat qilish qulayroqdir. Bu erda Bluetooth Mate Silver moduli standart sozlamalari bilan ishlatilgan, 115200 bod, hech qanday uskuna (RTC, CTS), pin kodi 1234.

Eslatma: Mate Silver moduliga quvvat sarflanganda, u konfiguratsiya rejimiga o'tadi, 60 soniya davomida tez qizil chiroq yonadi. Bu vaqt ichida siz modulni sozlash uchun ketma -ket ulanish orqali $$$ yuborishingiz mumkin, lekin siz modulni ulay olmaysiz. Qizil chiroq sekin yonib turganda, bluetooth moduli ulanishlarni qabul qiladi.

Teensy32AnalogLogger.ino -dagi COM_SERIAL ta'rifini apparat ketma -ket (D0/D1) ulanishga, Serial1 ga o'zgartiring.

#COM_SERIAL Serialini belgilang1

Kompyuter bilan bog'langanidan so'ng, kompyuterda yangi COM porti yaratildi va CoolTerm jurnalni ulash va boshqarish va kuzatish uchun ishlatilishi mumkin. Boshqa ketma -ket ulangan aloqa modullaridan ham foydalanish mumkin, masalan, WiFi yoki BLE, batafsil ma'lumot uchun Android/pfodApp tomonidan boshqariladigan Arduino UNO/Mega Starter -ga qarang.

Shuningdek, siz Bluetooth mobil terminali kabi bluetooth terminalli ilova yordamida yoki TCP Telnet Terminal Pro yoki Uart to BLE mdoule va BLE terminalli ilovasi kabi bluetooth terminalli ilova yordamida Android mobil qurilmangizdan kirishni boshqarishingiz va kuzatishingiz mumkin. nRF UART V2

4 -qadam: ADC ma'lumotlarini tanlashda cheklovlar

ADC kirishini tanlash bo'yicha cheklovlar
ADC kirishini tanlash bo'yicha cheklovlar

Teensy 3.2 mikroprotsessorida ikkita alohida ADC apparat moduli-ADC_0 va ADC_1 mavjud, shuning uchun u bir vaqtning o'zida ikkita kirishni tanlay oladi. U, shuningdek, bir nechta ADC namunalarini oladigan va natijani burishdan oldin ularni o'rtacha hisoblab chiqadigan apparat -o'rtacha hisobiga ega.

Kirishlar ADC_0, ADC_1 ga ulanishi mumkin bo'lgan cheklovlar mavjud. Teensy3_1_AnalogCard-p.webp

Xulosa qilib aytganda:-GND ADC_0 ga mos keladigan +voltlar A0 dan A9 gacha, A10, A11, A12, A14 o'qishi mumkin ADC_1 A2, A3, A10, A13, A15 dan A20 gacha o'qishi mumkin. o'qiy olmaydi, u 0 ga qaytadi (har doim)

Ushbu loyihada A2, A3 ishlatiladi, ularning har biriga ADC_0 yoki ADC_1 orqali kirish mumkin.

5 -qadam:.bin fayllarini.csv fayllariga aylantirish

Teensy32AnalogLogger.ino namunalarni logxx.bin fayllarida ikkilik sifatida saqlaydi, ya'ni log00.bin dan log99.bin. Teensy32AnalogLogger.ino, shuningdek, chopish haqidagi meta ma'lumotlarning log.met faylini saqlaydi.

. Bin fayllarini.csv ga qayta ishlash uchun SDtoCSV.jar (manba kodi SDtoCSV_src.zip) dan foydalanishingiz mumkin. Fayllarni SD -kartadan kamida 70 Gigabayt bo'sh joyga ega bo'lgan qattiq diskka nusxalash va SDtoCSV.jar -ni o'sha katalogga nusxalash. Ushbu katalogda buyruq oynasini oching va ishga tushiring

java -jar SDtoCSV.jar jurnali

Agar kompyuteringizda Java o'rnatilmagan bo'lsa, uni www.java.com saytidan o'rnating

SDtoCSV log.met faylini, so'ngra katalogdagi mavjud logxx.bin fayllarini qayta ishlaydi va har bir.bin uchun.csv faylini chiqaradi.. Csv faylida namuna tartib raqami va undan keyin ikkita o'qish mavjud.

Bu erda 30303 marta/sek namunali 2 ta o'qish uchun namunali konsol chiqishi ko'rsatiladi, output.txt. Bu o'tkazib yuborilgan namunalar qanday hisobot berilishini ko'rsatadi. (Oxirgi eskizdagi buferlar sonini ikki barobarga oshirish bu o'tkazib yuborilgan namunalarni aniqladi)

SD_Logging CSV konvertatsiyasiga. SDtoCSV.log -dagi harakat va xatolar haqidagi xabarlarni tekshiring. Log00 -ni qayta ishlash 256000 ta blokni qayta ishlash Log01 -ni qayta ishlash 256000 ta blokni… Jurnal 25 ishlov berildi 256000 ta blok ishlov berildi 26 ta ishlov berildi 256000 ta blokga ishlov berildi 27 ta ishlov berildi 256000 ta blok o'tkazib yuborilgan namunalar: 2715 ta ishlov berish jurnali28 256000 ta blokni qayta ishladi… Qayta ishlash jurnali29 ishlov berilgan 256000 ta blok… Qayta ishlash jurnali47 256000 ta blokni qayta ishlash jurnali48ni qayta ishlash 35935 ta blok --- ishlov berish tugadi

SDtoCSV.log jurnalining har bir ishi SDtoCSV.log jurnaliga qo'shiladi. U meta ma'lumotlar chiqishi va har qanday xato xabarlarini o'z ichiga oladi. Bu erda hisob: 254 - bu blokda saqlangan ma'lumotlarning soni, ya'ni har bir blok uchun 127 ta x 2 ta adc o'qish. MissSamples - bu o'qilmagan juftliklar soni, ya'ni.csv chiqishidagi satrlar.

=== CSV konvertatsiyasiga SD_Logging uchun jurnal fayli 13 -iyul, 13:19:51 33 adcBits: 10 adcAvgs: 4 pin Hisoblash: 2 ta pin: 16, 17 ta namunalar PerBlock: 127 noBufferBlocks: 28 davomiyligi mS: 51649820 talab qilingan ish vaqti mS: 106216704 maxBuffers Foydalanilgan: 32 Ogohlantirish: mavjud buferlar sonidan oshadi (28). Ba'zi namunalar yo'qolishi mumkin. maxLatency uS: 221476 Ogohlantirish: bufer bloklari (117348uS) tomonidan berilgan vaqtdan oshib ketadi. Ba'zi namunalar yo'qoladi. maxFileOpenTime uS: 20998 o'tkazib yuborilgan Taymerlar: 0 o'tkazib yuborilgan Namunalar Jami: 2715 ta jami Bloklar Yozilgan: 12323935 jami Namunalar Yozilgan: 1565139665 Qayta ishlash log00.bin 256000 ta blokni qayta ishlash log01.binni qayta ishladi 256000 ta blok… Log26.bin qayta ishlanmoqda 256000 ta blok qayta ishlanmoqda log27.bin !!! Blok: 57696 soni: 254 o'tkazib yuborilgan Namuna: 2339 !!! Blok: 57697 soni: 254 ta o'tkazib yuborilgan namuna: 376 ta qayta ishlangan 256000 ta blok --- jami o'tkazib yuborilgan namunalar: 2715 ta

Qayta ishlash log28.bin 256000 ta blokni qayta ishladi

… Qayta ishlash log47.bin 256000 ta blokni qayta ishlash log48.binni qayta ishlash 35935 ta blok --- ishlov berish tugadi

Log00.csv chiqish faylining namunasi

Namuna hisoblagichi (33uS uchun), 16 -pin, 170 -pin, 248, 205 1, 273, 195 2, 228, 337 3, 360, 302 4, 355, 369 5, 220, 281…

Namuna hisoblagichi fayldan faylga ko'payadi, shuning uchun uni vaqt tamg'asi sifatida ishlatish mumkin. Agar namunalar etishmayotgan bo'lsa, namuna hisoblagichi keyingi qatorni chiqarishdan oldin o'tkazib yuborilgan sonlar soniga ko'paytiriladi, shunda hisoblagich/vaqt tamg'asi yozilgan namunalar uchun aniq bo'lib qoladi.

6 -qadam: Kod va kengaytmalarga sharhlar

Teensy32AnalogLogger - bu Bill Greimanning AnalogBinLogger misolining SdFat Arduino kutubxonasidagi juda o'zgartirilgan versiyasi. Bu erda kutubxona Teensy 3.2 da ishlash uchun qayta yozilgan.

Teensy32AnalogLogger namuna oralig'ini o'rnatish uchun timer0 dan foydalanadi. Timer0 uchun uzilish ishlovchisi ikkita ADC konvertatsiyasini boshlaydi. Ikkinchi ADC moduli uchun uzilish ishlovchisi, ular tugaguncha, doimiy ravishda chaqiriladi, odatda ADC_0 boshlangan birinchi ADC moduli ikkinchisidan oldin tugaydi, shuning uchun uzilish ishlovchisi faqat bir marta chaqiriladi. ADC_1 uzilish ishlovchisi namunalarni ma'lumotlar buferiga saqlaydi.

Asosiy loopda () storeSampleBuffer () har qanday to'liq buferlarni SD -kartaga saqlaydi va buferlarni bo'sh bufer navbatiga qaytaradi. Teensy 3.2 da mavjud bo'lgan katta hajmdagi RAM ko'p sonli buferlarni ajratish mumkinligini anglatadi, shuning uchun storeSampleBuffer () ga tez -tez qo'ng'iroq qilishning hojati yo'q. Bu asosiy loop () jarayon buyruqlari va chiqishni yuborish kabi boshqa ishlarni bajarish uchun vaqt qoldiradi.

Kengaytmalar

Ushbu loyiha yuqori tezlikdagi ma'lumotlarni yozib oluvchi sifatida funktsional bo'lsa -da, uni to'liq taqib yurish uchun uni qadoqlash va batareya tizimi va EKG datchiklari bilan ta'minlash kerak. Bundan tashqari, ba'zi kengaytmalarni hisobga olish kerak.

  1. PfodApp yordamida to'lqin shaklining rasmlarini ko'rsatish uchun pfodApp yordamida to'lqin shaklini real vaqtda nazorat qilish va monitoringini qo'shing.
  2. Namuna olishning uzoq davom etishi uchun fayllar sonini 99 dan oshiring
  3. 2 dan ortiq kirish namunasi. Teensy 3.2 ikkita ADC moduliga ega bo'lganligi sababli, siz namuna olish tezligini oshirish uchun kodni juftlarga qo'shimcha kiritish uchun o'zgartirishingiz mumkin.
  4. Batareya zaryadini kuzatish uchun batareya monitorini qo'shing. Teensy 3.2 24 soat davomida taxminan 1100 mA / soat tezlikni ishlatadi, shu jumladan bluetooth va SD moduli, lekin sensorlar moduli bundan mustasno.
  5. Batareyani kesishni to'xtatmasdan batareyaning o'zgarishiga imkon berish uchun ikkita batareya ta'minot sxemasini qo'shing.

Tavsiya: