فهرست مطالب:

ثبت ECG پرسرعت یا سایر داده ها ، به طور مداوم برای بیش از یک ماه: 6 مرحله
ثبت ECG پرسرعت یا سایر داده ها ، به طور مداوم برای بیش از یک ماه: 6 مرحله

تصویری: ثبت ECG پرسرعت یا سایر داده ها ، به طور مداوم برای بیش از یک ماه: 6 مرحله

تصویری: ثبت ECG پرسرعت یا سایر داده ها ، به طور مداوم برای بیش از یک ماه: 6 مرحله
تصویری: 🡡 POCO X5 PRO - دقیق ترین بررسی و تست ها 2024, جولای
Anonim
ECG پرسرعت یا سایر داده ها را به طور مداوم برای بیش از یک ماه ثبت کنید
ECG پرسرعت یا سایر داده ها را به طور مداوم برای بیش از یک ماه ثبت کنید

این پروژه برای حمایت از یک تیم تحقیقاتی پزشکی دانشگاهی طراحی شده است که برای تشخیص آریتمی به یک دستگاه پوشیدنی نیاز دارد که بتواند سیگنال ECG 2 برابر 1000 نمونه در ثانیه (هر نمونه 2K/ثانیه) را به طور مداوم به مدت 30 روز ثبت کند. پروژه ارائه شده در اینجا شامل کنترل از راه دور و نظارت بر ورود به سیستم است. کنترل از راه دور از طریق منوهای ارائه شده در ترمینال سریال ، روی رایانه یا تلفن همراه است. این پروژه اندازه گیری ECG یا بسته بندی یا باتری مورد نیاز برای پوشیدن نهایی را پوشش نمی دهد.

این نسخه با سرعت بالا/طولانی مدت از Teensy 3.2 ، Adafruit Micro-SD module breakout ، یک کارت SD با کیفیت 16G SDHC کلاس 10 برای ثبت اطلاعات و یک ماژول ارتباطی بلوتوث برای کنترل و نظارت استفاده می کند. نسخه UNO/Mega2560 کمتر توسعه یافته و کندتر از این پروژه نیز در دسترس است. در حالی که این پروژه از یک ماژول ارتباطی بلوتوث برای کنترل و نظارت بر ورود به سیستم استفاده می کند ، شما همچنین می توانید از ماژول های WiFi یا BLE استفاده کنید.

این نسخه ، بر اساس Teensy 3.2 ، می تواند نرخ نمونه برداری بسیار بیشتری نسبت به نسخه UNO/Mega2560 داشته باشد. با استفاده از این کد Teensy 3.2 می تواند دو نمونه ADC را در> 30 کیلوهرتز با سخت افزار به طور متوسط بیش از 4 نمونه نمونه برداری و ثبت کند و بنابراین به راحتی 1000 نمونه/ثانیه مورد نیاز بالا را برآورده می کند. کد از ذخیره 100 فایل.bin با 128K هرکدام پشتیبانی می کند. در 30Khz که 29 ساعت و 30 دقیقه را پوشش می دهد. با 1000 نمونه در ثانیه 37 روز را پوشش می دهد. کد را می توان به راحتی برای مدیریت بیش از 100 پرونده گسترش داد ، بنابراین مدت زمان اجرا را افزایش می دهد. در پایان اجرا> 10Gig داده ،.bin ، فایل ها و یک فایل.met متا داده ها که عملکرد و نتایج را توصیف می کند ، خواهید داشت. SDtoCSV.jar ارائه شده (کد منبع SDtoCSV_src.zip) می تواند برای تبدیل فایل های.bin به فایل های.csv در رایانه شما برای پردازش بیشتر استفاده شود. داده های بدست آمده> 60Gig است. نسخه UNO/Mega2560 دارای تبدیل.bin به.csv در طرح آردوینو است ، اما با توجه به حجم داده های ثبت شده توسط نسخه Teensy ، این روش کارآمدی برای انجام تبدیل نیست.

تدارکات

Teensy 3.2 توسط PJRC

برد شکستن کارت MicroSD Adafruit+ یا مشابه آن.

کارت حافظه MicroSD 16G SDHC کلاس 10 با کیفیت خوب به عنوان مثال SanDisk.

منبع تغذیه USB 5 ولت

هد با مقاومت 470R در سری.

2 مقاومت 100R (محافظت در برابر آسیب ناشی از خطاهای سیم کشی Tx/Rx)

Bluetooth Mate Silver OR یکی از ماژول های توصیف شده در Arduino UNO/Mega Starter ، کنترل شده توسط Android/pfodApp

مرحله 1: ساخت و ساز

ساخت و ساز
ساخت و ساز

Arduino IDE V1.8.9+ را از https://arduino.cc/fa/Main/Software بارگیری و نصب کنید. آن صفحه وب دارای پیوندهایی برای سیستم عامل های مختلف و پیوندی به GettingStarted (https://arduino.cc/en/Guide/HomePage) است.

Teensyduino (پشتیبانی Teensy برای Arduino IDE) را بارگیری و نصب کنید. به دستورالعمل های اولین استفاده با دقت توجه کنید.

Teensy 3.2 را به عنوان برد انتخاب کنید و بررسی کنید که برنامه BLINK بارگیری و اجرا شود.

کتابخانه های زیر را بارگیری و نصب کنید:- millisDelay و SdFat (یک تصویر فوری از کتابخانه SdFat که برای این آزمایش ها استفاده می شود اینجا است.) و pfodParser.zip (برای کلاس pfodBufferedStream و pfodNonBlockingInput)

فایلهای فشرده کتابخانه را بارگیری کرده و سپس از Arduino IDE ket Sketch → Include Library → افزودن منوی کتابخانه. ZIP برای نصب کتابخانه ها از فایل های فشرده استفاده کنید.

فایل Teensy32AnalogLogger.zip را در فهرست طرح های Arduino خود فشرده کرده و برد Teensy 3.2 را با Teensy32AnalogLogger.ino (نسخه 0.01) برنامه ریزی کنید.

مطابق تصویر بالا Teensy 3.2 ، ماژول بلوتوث و کارت SD را سیم کشی کنید (نسخه pdf)

مرحله 2: اجرای برنامه - آزمایش

ابتدا کارت SD خود را با استفاده از https://www.sdcard.org/downloads/formatter/ فرمت کنید

برای شروع ورود ، کارت SD باید خالی باشد.

برای آزمایش اولیه نیازی به اتصال ماژول ارتباطات ندارید ، فقط ماژول Teensy 3.2 + SD (با کارت خالی نصب شده) را از طریق کابل سریال USB به Arduino IDE وصل کنید. همانطور که ارائه شده است ، طرح Teensy32AnalogLogger.ino از اتصال USB برای کنترل و نظارت استفاده می کند. برای استفاده از دستگاه ارتباطی برای کنترل و نظارت ، مرحله ثبت واقعی داده ها را در زیر مشاهده کنید.

بالای طرح Teensy32AnalogLogger.ino را ویرایش کنید تا COM_SERIAL را به Serial ، برای خروجی به اتصال USB Teensy تنظیم کنید.

#سریال COM_SERIAL را تعریف کنید

سپس طرح را در Teensy 3.2 بارگذاری کنید

Arduino IDE Serial Monitor را در 115200 baud (با هر دو مجموعه NL و CR) باز کنید. پس از چند ثانیه Teensy 3.2 منویی از دستورات را نمایش می دهد

نسخه: 0.01 یکی از دستورات زیر را وارد کنید:؟ - وضعیت فعلی و فراداده - مقداردهی اولیه فایل ها - لیست فایل ها>

؟ cmd جزئیات تنظیمات فعلی را نمایش می دهد. (برای تغییر این تنظیمات به بالای Teensy32AnalogLogger.ino مراجعه کنید) Cmds باید با NL یا CR یا هر دو خاتمه یابد.

0: 00: 00.000 از 720: 00: 00.000

پین نمونه: 16 17 ترتیب بایت: بیت ADC Little-Endian: 10 ADC میانگین نمونه بیش از: 4 نرخ نمونه: 1000.00 فاصله نمونه: 1000uS نمونه در هر بلوک: 127 زمان پر کردن بلوک: 127000uS زمان پر کردن یک فایل: 9:01: 52.000 زمان برای پر کردن همه پرونده ها: 894: 04: 48.000 حداکثر تاخیر SD (شامل بسته شدن فایل/باز شدن): 0uS حداکثر بسته شدن فایل/تأخیر باز شدن: 0uS تعداد بلوک های بافر: 28 زمان پر کردن ALL بافرهای بلوک: 3556000uS حداکثر تعداد بافر ذخیره شده در تماس با storeSampleBuffers (): 0 تایمرهای از دست رفته مجموع: 0 مجموع نمونه های از دست رفته تا کنون: 0 مجموع بلوک های نوشته شده: 0 مجموع نمونه های نوشته شده: 0 پوشش: 0: 00: 00.000 فایل فعلی:

در این حالت زمان اجرای ورود به سیستم 0 از 720 ساعت درخواست شده (30 روز) است ، نمونه برداری از D16/A2 و D17/A3 (برای محدودیت های انتخاب ورودی های ADC در زیر به پایین مراجعه کنید) 1000 بار در ثانیه. حداکثر زمان اجرا می تواند تا 894 ساعت (37.25 روز) باشد. حلقه اصلی () را می توان تا 3.5 ثانیه (زمان پر کردن همه بافرهای بلوک) قبل از پر شدن همه بافرهای موجود و از بین رفتن نمونه ها اشغال کرد. بافرهای ذخیره شده و غیره با پیشرفت اجرا به روز می شوند.

یک کارت SD خالی وارد کنید ، از 'i' cmd برای مقداردهی اولیه 99 پرونده مورد استفاده برای ذخیره داده ها استفاده کنید. راه اندازی اولیه آنها در اینجا زمان تعویض از یک فایل به پرونده دیگر را کاهش می دهد و امکان نمونه گیری سریعتر را فراهم می کند.

راه اندازی 99 فایل

ایجاد فایل جدید: log00.bin زمان سپری شده: 368mS ایجاد فایل جدید: log01.bin زمان سپری شده: 520mS. به به ایجاد فایل جدید: log98.bin زمان سپری شده: 15660mS ایجاد فایل جدید: log99.bin مدت زمان سپری شده: 15812mS

سپس می توانید از r cmd برای شروع اجرای logging استفاده کنید. اجرا برای زمان درخواستی یا تا زمانی که s cmd برای متوقف کردن آن استفاده شود انجام می شود. شما همچنین می توانید از؟ cmd هنگام ورود به سیستم برای دریافت زمان و شمارش به روز شده. در اینجا یک حرکت کوتاه متوقف شده با استفاده از s cmd است.

دوست داشتن اطلاعات…..

نسخه: 0.01 یکی از دستورات زیر را وارد کنید:؟ - وضعیت فعلی و فراداده ها - توقف ثبت اطلاعات

ورود به سیستم … بررسی با؟ فرمان

زمان اجرا گذشته: 0: 00: 10.000 از 720: 00: 00.000 زمان اجرا گذشته: 0: 00: 20.000 از 720: 00: 00.000. به به

توقف ورود به سیستم و حذف فایل های بلا استفاده

به به به حذف فایل استفاده نشده: log98.bin حذف فایل استفاده نشده: log99.bin

0: 01: 04.976 از 720: 00: 00.000

پین های نمونه: 16 17 ترتیب بایت: بیت ADC Little-Endian: 10 ADC میانگین نمونه بیش از: 4 نرخ نمونه: 1000.00 فاصله نمونه: 1000uS نمونه در هر بلوک: 127 زمان پر کردن بلوک: 127000uS زمان پر کردن یک فایل: 9:01: 52.000 زمان برای پر کردن همه پرونده ها: 894: 04: 48.000 حداکثر تاخیر SD (شامل بسته شدن فایل/باز شدن): 204uS حداکثر بسته شدن فایل/تاخیر باز شدن: 0uS تعداد بلوک های بافر: 28 زمان پر کردن همه بافرهای بلوک: 3556000uS حداکثر تعداد بافر ذخیره شده در تماس به storeSampleBuffers (): 1 تایمرهای از دست رفته در مجموع: 0 مجموع نمونه های از دست رفته تا کنون: 0 مجموع بلوک های نوشته شده: 511 تعداد نمونه نوشته شده: 64832 پوشش: 0: 01: 04.832 فایل فعلی: log00.bin

ls:

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

ثبت اطلاعات کامل شد!

نسخه: 0.01 یکی از دستورات زیر را وارد کنید:؟ - وضعیت فعلی و فوق داده ** r - ثبت داده های ADC ** در دسترس نیست. داده ها در حال حاضر ** i - مقداردهی اولیه فایل ها ** در دسترس نیست. داده ها در حال حاضر فایلهای لیست لیست وجود دارد

داده ها قبلاً ثبت شده است ، با آنها بررسی کنید؟

نمایشگر ال ای دی

LED متصل به D3 (با D2 که اتصال GND را ارائه می دهد) در صورت از دست دادن نمونه جامد روشن می شود و در صورت بروز خطا چشمک می زند. طرح سعی می کند بعد از خطاها ادامه یابد اما ممکن است این کار را با موفقیت انجام ندهد.

مرحله 3: ثبت داده های واقعی

هنگام ثبت داده های واقعی در مدت زمان طولانی ، راحت تر است که یک ماژول ارتباطی را به پین های D0/D1 متصل کرده و ورود را از راه دور کنترل و نظارت کنید. در اینجا ماژول Bluetooth Mate Silver با تنظیمات پیش فرض خود ، 115200 baud ، بدون دست دادن سخت افزاری (RTC ، CTS) ، کد پین 1234 استفاده شد.

توجه: هنگامی که برق به ماژول Mate Silver اعمال می شود ، به مدت 60 ثانیه به حالت پیکربندی می رود ، چراغ قرمز سریع چشمک می زند. در طول این مدت می توانید $ $ $ را از طریق اتصال سریال به ماژول ارسال کنید تا پیکربندی شود ، اما نمی توانید ماژول را وصل کنید. هنگامی که LED قرمز به آرامی چشمک می زند ، ماژول بلوتوث اتصالات را می پذیرد.

تعریف COM_SERIAL در Teensy32AnalogLogger.ino را به اتصال سخت افزار سریال (D0/D1) ، Serial1 تغییر دهید.

#سریال COM_SERIAL تعریف کنید 1

پس از جفت شدن با رایانه ، یک پورت COM جدید روی رایانه ایجاد شد و می توان از CoolTerm برای اتصال و کنترل و نظارت بر ورود به سیستم استفاده کرد. از سایر ماژول های ارتباطی متصل به سریال نیز می توان استفاده کرد ، مانند WiFi یا BLE ، برای جزئیات بیشتر به Arduino UNO/Mega Starter ، کنترل شده توسط Android/pfodApp مراجعه کنید.

همچنین می توانید ورود به سیستم را از تلفن همراه Android خود با استفاده از یک برنامه ترمینال بلوتوث مانند برنامه ترمینال بلوتوث یا استفاده از برنامه ترمینال WiFi و TCP مانند TCP Telnet Terminal Pro یا یک برنامه Uart to BLE و یک برنامه پایانه BLE مانند nRF UART V2

مرحله 4: محدودیت در انتخاب ورودی های ADC

محدودیت در انتخاب ورودی های ADC
محدودیت در انتخاب ورودی های ADC

Teensy 3.2 دارای دو ماژول سخت افزاری جداگانه ADC ، ADC_0 و ADC_1 ، در ریز پردازنده خود است ، بنابراین می تواند همزمان دو ورودی را نمونه برداری کند. همچنین دارای میانگین سخت افزاری داخلی است که چندین نمونه ADC را گرفته و قبل از چرخاندن نتیجه ، میانگین آنها را بدست می آورد.

محدودیت هایی وجود دارد که می توان ورودی ها را به ADC_0 ، ADC_1 متصل کرد. تصویر Teensy3_1_AnalogCard-p.webp

به طور خلاصه: -برای خواندن های تک تک یعنی +ولت های ارجاع شده به GND ADC_0 می تواند A0 تا A9 ، A10 ، A11 ، A12 ، A14 ADC_1 را بخواند A2 ، A3 ، A10 ، A13 ، A15 تا A20 در صورت انتخاب پین ADC نمی تواند بخواند 0 (همیشه) را برمی گرداند

این پروژه از A2 ، A3 استفاده می کند که هر کدام با ADC_0 یا ADC_1 قابل دسترسی هستند.

مرحله 5: تبدیل فایل های.bin به فایل های.csv

Teensy32AnalogLogger.ino نمونه ها را بصورت باینری در فایل های logxx.bin یعنی log00.bin در log99.bin ذخیره می کند. Teensy32AnalogLogger.ino همچنین یک فایل log.met از متا داده ها در مورد اجرا ذخیره می کند.

برای تبدیل فایل های.bin به.csv برای پردازش بیشتر می توانید از SDtoCSV.jar (کد منبع SDtoCSV_src.zip) استفاده کنید. فایلها را از کارت SD بر روی هارد دیسک کامپیوتر خود با حداقل 70 گیگ فضای خالی کپی کرده و SDtoCSV.jar را در همان دایرکتوری کپی کنید. یک پنجره فرمان در آن فهرست باز کرده و اجرا کنید

java -jar SDtoCSV.jar log

اگر رایانه شما جاوا ندارد ، آن را از www.java.com نصب کنید

SDtoCSV فایل log.met و سپس هر یک از فایلهای logxx.bin موجود در فهرست را پردازش می کند و برای هر.bin یک فایل.csv خروجی می دهد. فایل.csv دارای شماره دنباله نمونه است که پس از آن دو قرائت می شود.

نمونه خروجی کنسول برای خوانش 2 عددی 30303 بار در ثانیه نمونه برداری شده است ، output.txt. این نشان می دهد که چگونه نمونه های از دست رفته گزارش می شوند. (دو برابر شدن تعداد بافرها در طرح نهایی این نمونه های از دست رفته را برطرف کرد)

SD_Logging به تبدیل CSV. SDtoCSV.log را برای پیشرفت و پیام های خطا بررسی کنید. پردازش log00 پردازش 256000 بلوک پردازش log01 پردازش 256000 بلوک. به به پردازش log25 پردازش 256000 بلوک پردازش log26 پردازش 256000 بلوک پردازش log27 پردازش 256000 بلوک نمونه های از دست رفته: 2715 پردازش log28 پردازش 256000 بلوک. به به پردازش log29 پردازش 256000 بلوک. به به پردازش log47 پردازش 256000 بلوک پردازش log48 پردازش 35935 بلوک --- پردازش نهایی

یک فایل گزارش کاملتر ، SDtoCSV.log ، توسط هر اجرای SDtoCSV به آن اضافه می شود. شامل خروجی متا داده و هرگونه پیام خطا می باشد. در اینجا تعداد: 254 تعداد داده های ذخیره شده در آن بلوک است ، یعنی 127 نمونه در 2 قرائت adc در هر بلوک. نمونه های از دست رفته ، تعداد جفت های خطای خوانده نشده یعنی خطوط در خروجی.csv است.

=== Log file for SD_Logging to CSV تبدیل شنبه 13 ژوئیه 13:19:51 AEST 2019 برای مشاهده پیام های پیشرفت در Console از java -jar SDtoCSV.jar از نام فایل اصلی "log" نسخه فراداده: 0 (اندیان کوچک) نمونه Interval uS: 33 adcBits: 10 adcAvgs: 4 پین تعداد: 2 پین: 16 ، 17 نمونه PerBlock: 127 noBufferBlocks: 28 مدت زمان mS: 51649820 درخواست اجرا زمان mS: 106216704 maxBuffers استفاده شده: 32 هشدار: از تعداد بافرهای موجود بیشتر است (28). برخی از نمونه ها ممکن است گم شده باشند. maxLatency uS: 221476 هشدار: بیش از زمان ارائه شده توسط بلوک های بافر (117348uS). برخی از نمونه ها گم می شوند. maxFileOpenTime uS: 20998 missTimers: 0 missSamplesTotal: 2715 totalBlocksWritten: 12323935 totalSamplesWritten: 1565139665 پردازش log00.bin پردازش 256000 بلوک پردازش log01.bin پردازش 256000 بلوک. به به پردازش log26.bin پردازش 256000 بلوک پردازش log27.bin !!! بلوک: 57696 تعداد: 254 از دست رفته نمونه ها: 2339 !!! بلوک: 57697 تعداد: 254 از دست رفته نمونه: 376 پردازش 256000 بلوک --- تعداد کل نمونه های از دست رفته: 2715

پردازش log28.bin پردازش 256000 بلوک

به به به پردازش log47.bin پردازش 256000 بلوک پردازش log48.bin پردازش 35935 بلوک --- پردازش نهایی

نمونه ای از فایل خروجی log00.csv است

SampleCounter (در 33uS) ، پین 16 ، پین 170 ، 248 ، 205 1 ، 273 ، 195 2 ، 228 ، 337 3 ، 360 ، 302 4 ، 355 ، 369 5 ، 220 ، 281. به به

نمونه شمارنده از پرونده ای به پرونده دیگر افزایش می یابد تا بتوان از آن به عنوان مهر زمان استفاده کرد. اگر نمونه های مفقود شده وجود داشته باشد ، شمارنده نمونه قبل از خروج از خط بعدی با تعداد از دست رفته افزایش می یابد تا مهر شمارنده/زمان دقیق برای نمونه های ثبت شده باقی بماند.

مرحله 6: نظرات مربوط به کد و برنامه های افزودنی

Teensy32AnalogLogger یک نسخه بسیار اصلاح شده از مثال AnalogBinLogger بیل گریمن در کتابخانه SdFat Arduino است. در اینجا کتابخانه برای اجرای Teensy 3.2 بازنویسی شده است.

Teensy32AnalogLogger از timer0 برای تنظیم فاصله نمونه استفاده می کند. کنترل کننده وقفه برای timer0 دو تبدیل ADC را شروع می کند. یک کنترل کننده وقفه برای ماژول دوم ADC به طور مداوم فراخوانی می شود تا هر دو به پایان برسند ، معمولاً اولین ماژول ADC شروع شده ADC_0 قبل از دوم روشن می شود ، بنابراین کنترل کننده وقفه فقط یک بار فراخوانی می شود. کنترل کننده وقفه ADC_1 نمونه ها را در بافر داده ذخیره می کند.

در حلقه اصلی () ، storeSampleBuffer () تمام بافرهای کامل را در کارت SD ذخیره می کند و بافرها را در صف بافر خالی بازیافت می کند. مقدار زیاد RAM موجود در Teensy 3.2 به این معنی است که می توان تعداد زیادی بافر را اختصاص داد و بنابراین storeSampleBuffer () نیازی نیست اغلب تماس بگیرید. این زمان را برای حلقه اصلی () برای انجام کارهای دیگر مانند دستورات فرآیند و ارسال خروجی باقی می گذارد.

برنامه های افزودنی

در حالی که این پروژه به عنوان یک دیتالاگر با سرعت بالا عمل می کند ، اما برای پوشیدنی کامل هنوز نیاز به بسته بندی و سیستم باتری و سنسورهای ECG دارد. و همچنین برخی از برنامه های افزودنی وجود دارد که باید در نظر گرفته شوند.

  1. اضافه کردن کنترل زمان واقعی و نظارت بر شکل موج نمونه برداری شده از طریق pfodApp با استفاده از تابع رسم pfodApp برای نشان دادن عکس های فوری از شکل موج
  2. برای نمونه برداری بیشتر ، تعداد فایل ها را از 99 فراتر بگذارید
  3. نمونه گیری بیش از 2 ورودی از آنجا که Teensy 3.2 دارای دو ماژول ADC است ، می توانید کد را تغییر دهید تا ورودی های اضافی را به صورت جفت اضافه کنید تا میزان نمونه را به حداکثر برسانید.
  4. برای ردیابی میزان شارژ ، نظارت بر باتری را اضافه کنید. Teensy 3.2 از حدود 1100 میلی آمپر ساعت در 24 ساعت استفاده می کند ، از جمله ماژول بلوتوث و SD ، اما ماژول سنسور را مستثنی نمی کند.
  5. یک مدار تغذیه باتری دوگانه اضافه کنید تا تغییرات باتری بدون وقفه در ورود به سیستم انجام شود.

توصیه شده: