جدول المحتويات:

تسجيل مخطط كهربية القلب عالي السرعة أو بيانات أخرى ، بشكل مستمر لأكثر من شهر: 6 خطوات
تسجيل مخطط كهربية القلب عالي السرعة أو بيانات أخرى ، بشكل مستمر لأكثر من شهر: 6 خطوات

فيديو: تسجيل مخطط كهربية القلب عالي السرعة أو بيانات أخرى ، بشكل مستمر لأكثر من شهر: 6 خطوات

فيديو: تسجيل مخطط كهربية القلب عالي السرعة أو بيانات أخرى ، بشكل مستمر لأكثر من شهر: 6 خطوات
فيديو: اتهموها باستغلال الموقف.. ممرضة أميركية تنشر فيديو غريب من داخل مستشفى 2024, يوليو
Anonim
قم بتسجيل مخطط كهربية القلب عالي السرعة أو بيانات أخرى ، بشكل مستمر لأكثر من شهر
قم بتسجيل مخطط كهربية القلب عالي السرعة أو بيانات أخرى ، بشكل مستمر لأكثر من شهر

تم تطوير هذا المشروع لدعم فريق البحث الطبي الجامعي ، الذي كان بحاجة إلى جهاز يمكن ارتداؤه يمكنه تسجيل 2 × إشارات ECG بمعدل 1000 عينة / ثانية (إجمالي 2K عينة / ثانية) بشكل مستمر لمدة 30 يومًا ، من أجل اكتشاف عدم انتظام ضربات القلب. يتضمن المشروع المقدم هنا التحكم عن بعد ومراقبة التسجيل. يتم التحكم عن بعد عبر القوائم المعروضة على محطة طرفية تسلسلية ، إما على جهاز كمبيوتر أو هاتف محمول. لا يغطي هذا المشروع قياس مخطط كهربية القلب أو العبوة أو البطارية المطلوبة للجهاز النهائي القابل للارتداء.

يستخدم هذا الإصدار عالي السرعة / طويل المدة Teensy 3.2 ، وحدة اندلاع Adafruit Micro-SD ، وبطاقة SD 16G SDHC من الفئة 10 عالية الجودة لتسجيل البيانات ووحدة اتصالات Bluetooth للتحكم والمراقبة. يتوفر أيضًا إصدار UNO / Mega2560 أقل تطوراً وأبطأ من هذا المشروع. بينما يستخدم هذا المشروع وحدة اتصالات Bluetooth للتحكم في التسجيل ومراقبته ، يمكنك أيضًا استخدام وحدات WiFi أو BLE.

هذا الإصدار ، المستند إلى Teensy 3.2 ، قادر على معدلات أخذ عينات أعلى بكثير من إصدار UNO / Mega2560. باستخدام هذا الرمز ، يمكن لـ Teensy 3.2 أخذ عينات وتسجيل عيّنتين من ADC عند> 30 كيلو هرتز مع متوسط الأجهزة أكثر من 4 عينات وبالتالي يلبي متطلبات 1000 عينة / ثانية أعلاه بسهولة. يدعم الكود حفظ 100 ملف.bin كل منها 128 كيلو. في 30 كيلو هرتز والتي تغطي 29 ساعة و 30 دقيقة. عند 1000 عينة / ثانية ، تغطي 37 يومًا. يمكن تمديد الكود بسهولة للتعامل مع أكثر من 100 ملف ، وبالتالي إطالة مدة التشغيل. في نهاية التشغيل ، سيكون لديك> 10 جيجا من البيانات ،.bin ، والملفات ، وملف meta. لبيانات التعريف التي تصف التشغيل والنتائج. يمكن استخدام SDtoCSV.jar الموفر (كود المصدر SDtoCSV_src.zip) لتحويل ملفات.bin إلى ملفات.csv على جهاز الكمبيوتر الخاص بك لمزيد من المعالجة. البيانات الناتجة> 60 جيجا. يحتوي إصدار UNO / Mega2560 على تحويل.bin إلى.csv مضمن في رسم Arduino ، ولكن بالنظر إلى حجم البيانات التي تم تسجيلها بواسطة إصدار Teensy ، فهذه ليست طريقة فعالة لإجراء التحويل.

اللوازم

Teensy 3.2 بواسطة PJRC

لوحة اندلاع بطاقة Adafruit MicroSD + أو ما شابه.

16G SDHC فئة 10 بطاقة MicroSD ذات نوعية جيدة على سبيل المثال سانديسك.

إمدادات 5V USB

الصمام مع 470R المقاوم في السلسلة.

مقاومات 2 × 100R (توفر الحماية من التلف الناتج عن أخطاء الأسلاك Tx / Rx)

Bluetooth Mate Silver أو إحدى الوحدات النمطية الموصوفة في Arduino UNO / Mega Starter ، التي يتحكم فيها Android / pfodApp

الخطوة 1: البناء

بناء
بناء

قم بتنزيل وتثبيت Arduino IDE V1.8.9 + من https://arduino.cc/en/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 → Sketch → Include Library → Add. ZIP library menu لتثبيت المكتبات من ملفات zip.

قم بفك ضغط ملف Teensy32AnalogLogger.zip إلى دليل رسومات Arduino وقم ببرمجة لوحة Teensy 3.2 باستخدام Teensy32AnalogLogger.ino (الإصدار 0.01)

قم بتوصيل جهاز Teensy 3.2 ووحدة Bluetooth ووحدة بطاقة SD كما هو موضح أعلاه (إصدار pdf)

الخطوة الثانية: تشغيل البرنامج - الاختبار

قم أولاً بتهيئة بطاقة SD الخاصة بك باستخدام

يجب أن تكون بطاقة SD فارغة لبدء التسجيل.

للاختبار الأولي ، لا تحتاج إلى توصيل وحدة الاتصالات ، ما عليك سوى توصيل وحدة Teensy 3.2 + SD (مع تثبيت بطاقة فارغة) بـ Arduino IDE عبر كبل USB التسلسلي. كما تم توفيره ، يستخدم رسم Teensy32AnalogLogger.ino اتصال USB للتحكم والمراقبة. راجع خطوة تسجيل البيانات الحقيقية أدناه لاستخدام جهاز اتصال للتحكم والمراقبة.

قم بتحرير الجزء العلوي من رسم Teensy32AnalogLogger.ino لتعيين COM_SERIAL على المسلسل ، للإخراج إلى اتصال USB صغير الحجم.

#define COM_SERIAL المسلسل

ثم قم بتحميل المخطط إلى Teensy 3.2

افتح Arduino IDE Serial Monitor على 115200 باود (مع كل من مجموعة NL و CR). بعد بضع ثوانٍ ، سيعرض Teensy 3.2 قائمة بالأوامر

الإصدار: 0.01 أدخل أحد الأوامر التالية:؟ - الوضع الحالي والبيانات الوصفية - تهيئة الملفات - قائمة الملفات>

ال ؟ يعرض cmd تفاصيل الإعدادات الحالية. (انظر الجزء العلوي من Teensy32AnalogLogger.ino لتغيير هذه الإعدادات) يجب إنهاء Cmds باستخدام NL أو CR أو كليهما.

0: 00: 00.000 من 720: 00: 00.000

دبابيس العينة: 16 17 بايت ترتيب: Little-Endian ADC bits: 10 متوسطات عينة ADC فوق: 4 معدل العينة: 1000.00 فترة العينة: 1000uS العينات لكل كتلة: 127 الوقت لملء الكتلة: 127000uS الوقت لملء ملف: 9:01: 52.000 الوقت لملء جميع الملفات: 894: 04: 48.000 أقصى زمن انتقال SD (يشمل إغلاق / فتح الملف): 0uS أقصى إغلاق للملف / زمن انتقال مفتوح: 0uS عدد كتل المخزن المؤقت: 28 الوقت لملء كل المخازن المؤقتة للكتل: 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 الوقت المنقضي: 368 مللي ثانية إنشاء ملف جديد: log01.bin الوقت المنقضي: 520 مللي ثانية… إنشاء ملف جديد: log98.bin الوقت المنقضي: 15660 مللي ثانية إنشاء ملف جديد: log99.bin الوقت المنقضي: 15812 مللي ثانية

يمكنك بعد ذلك استخدام r cmd لبدء تشغيل التسجيل. سيتم التشغيل في الوقت المطلوب أو حتى يتم استخدام s cmd لإيقافه. يمكنك أيضا استخدام؟ cmd أثناء تسجيل الدخول للحصول على التهم والتوقيتات المحدثة. هنا توقف قصير المدى مبكرًا باستخدام s cmd.

بيانات تسجيل الدخول …..

الإصدار: 0.01 أدخل أحد الأوامر التالية:؟ - الوضع الحالي والبيانات الوصفية s - إيقاف تسجيل البيانات

بيانات تسجيل الدخول … تحقق مع؟ أمر

وقت التشغيل المنقضي: 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 بايت ترتيب: Little-Endian ADC bits: 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

ليرة سورية:

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

اكتمل تسجيل البيانات!

الإصدار: 0.01 أدخل أحد الأوامر التالية:؟ - الحالة الحالية والبيانات الوصفية ** r - تسجيل بيانات ADC ** غير متوفرة. البيانات موجودة بالفعل ** i - تهيئة الملفات ** غير متوفرة. البيانات موجودة بالفعل l - قائمة الملفات

هل تم تسجيل البيانات بالفعل ، تحقق مع؟

عرض الصمام

سيتم تشغيل مؤشر LED المتصل بـ D3 (مع توفير D2 لاتصال GND) بشكل ثابت في حالة فقد أي عينة وسيومض إذا كان هناك خطأ. يحاول الرسم الاستمرار بعد الأخطاء ولكنه قد لا ينجح في ذلك.

الخطوة 3: تسجيل البيانات الحقيقية

عند تسجيل بيانات حقيقية على فترات طويلة ، يكون من الأنسب توصيل وحدة اتصالات بدبابيس D0 / D1 والتحكم في التسجيل ومراقبته عن بُعد. هنا تم استخدام وحدة Bluetooth Mate Silver بإعداداتها الافتراضية ، 115200 باود ، بدون مصافحة للأجهزة (RTC ، CTS) ، الرمز السري 1234.

ملاحظة: عند توصيل الطاقة بوحدة Mate Silver ، فإنها تدخل في وضع التكوين ، ويومض مؤشر LED باللون الأحمر السريع ، لمدة 60 ثانية. خلال هذا الوقت ، يمكنك إرسال $$$ عبر الاتصال التسلسلي إلى الوحدة النمطية لتكوينها ولكن لا يمكنك توصيل الوحدة. بمجرد وميض المصباح الأحمر ببطء ، ستقبل وحدة البلوتوث التوصيلات.

قم بتغيير تعريف COM_SERIAL في Teensy32AnalogLogger.ino إلى اتصال الجهاز التسلسلي (D0 / D1) ، Serial1

#define COM_SERIAL المسلسل 1

بعد الاقتران بالكمبيوتر ، تم إنشاء منفذ COM جديد على الكمبيوتر ويمكن استخدام CoolTerm للاتصال والتحكم ومراقبة التسجيل. يمكن أيضًا استخدام وحدات اتصالات أخرى متصلة تسلسليًا ، مثل WiFi أو BLE ، راجع Arduino UNO / Mega Starter ، التي يتحكم فيها Android / pfodApp للحصول على التفاصيل.

يمكنك أيضًا التحكم في التسجيل ومراقبته من هاتف Android الخاص بك باستخدام تطبيق bluetooth Terminal مثل تطبيق Bluetooth Terminal ، أو باستخدام تطبيق WiFi و TCP Terminal مثل TCP Telnet Terminal Pro أو Uart to BLE mdoule وتطبيق طرفي BLE مثل nRF UART V2.0

الخطوة 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 من بيانات التعريف حول التشغيل.

يمكنك استخدام SDtoCSV.jar (كود المصدر SDtoCSV_src.zip) لتحويل ملفات.bin إلى.csv لمزيد من المعالجة. انسخ الملفات من بطاقة SD إلى القرص الصلب لجهاز الكمبيوتر الخاص بك مع مساحة خالية لا تقل عن 70 جيجا بايت وانسخ SDtoCSV.jar إلى نفس الدليل. افتح نافذة أوامر في هذا الدليل وقم بالتشغيل

java -jar سجل SDtoCSV.jar

إذا لم يكن جهاز الكمبيوتر الخاص بك يحتوي على Java ، فقم بتثبيته من www.java.com

سيقوم SDtoCSV بمعالجة ملف log.met ثم كل ملف من ملفات logxx.bin المتاحة في الدليل وإخراج ملف.csv لكل ملف.bin. يحتوي ملف.csv على رقم تسلسل العينة متبوعًا بالقراءتين.

يظهر هنا إخراج نموذج لوحدة التحكم لـ 2 adc مع عينات قراءة 30303 مرة / ثانية ، output.txt. يوضح كيف يتم الإبلاغ عن العينات المفقودة. (مضاعفة عدد المخازن المؤقتة في الرسم النهائي لإصلاح هذه العينات المفقودة)

SD_Logging إلى تحويل CSV. تحقق من SDtoCSV.log بحثًا عن رسائل التقدم والأخطاء. سجل المعالجة 00 معالجة كتل 256000 سجل 01 معالجة كتل 256000… سجل المعالجة 25 كتلة تم معالجتها 256000 سجل معالجة 26 كتلة تمت معالجتها 256000 سجل معالجة 27 كتلة تمت معالجتها 256000 كتلة عينات مفقودة: 2715 سجل معالجة 28 كتلة تم معالجتها 256000 كتلة… سجل المعالجة 29 معالجة 256000 كتلة… سجل المعالجة 47 تمت معالجة 256000 كتلة سجل المعالجة 48 تمت معالجتها 35935 كتلة --- تم الانتهاء من المعالجة

يتم إلحاق ملف سجل كامل ، SDtoCSV.log ، بكل تشغيل من SDtoCSV. يتضمن إخراج البيانات الوصفية وأي رسائل خطأ. هنا العدد: 254 هو عدد البيانات المخزنة في تلك الكتلة ، أي 127 عينة × 2 قراءة adc لكل كتلة. العينات المفقودة هي عدد أزواج القراءة المفقودة ، أي الأسطر في إخراج.csv.

=== ملف السجل من أجل SD_Logging لتحويل CSV السبت 13 يوليو 13:19:51 AEST 2019 لمشاهدة رسائل التقدم على وحدة التحكم ، استخدم java -jar SDtoCSV.jar اسم الملف الأساسي 'log' إصدار البيانات الوصفية: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinCount: 2 Pins: 16، 17 samplePerBlock: 127 noBufferBlocks: 28 المدة مللي ثانية: 51649820 وقت التشغيل المطلوب مللي ثانية: 106216704 maxBuffers المستخدم: 32 تحذير: يتجاوز عدد المخازن المؤقتة المتاحة (28). قد تكون بعض العينات مفقودة. maxLatency uS: 221476 تحذير: يتجاوز الوقت الذي توفره كتل المخزن المؤقت (117348uS). بعض العينات سوف تكون مفقودة. maxFileOpenTime uS: 20998 missedTimers: 0 missedSamplesTotal: 2715 totalBlocks مكتوبة: 12323935 totalSamples Written: 1565139665 معالجة log00.bin معالجة 256000 كتلة معالجة log01.bin معالجة 256000 كتلة… معالجة log26.bin معالجة 256000 كتل معالجة log27.bin !!! الكتلة: 57696 عدد: 254 مفقود عينات: 2339 !!! الكتلة: 57697 عدد: 254 مفقود عينات: 376 معالجة 256000 كتلة --- إجمالي العينات المفقودة: 2715

سجل المعالجة 28.bin تمت معالجته 256000 كتلة

… سجل المعالجة 47.bin تمت معالجة 256000 كتلة سجل المعالجة 48.bin تمت معالجتها 35935 كتلة - تم الانتهاء من المعالجة

عينة من ملف الإخراج log00.csv هي

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

يزيد عداد العينة من ملف إلى ملف بحيث يمكن استخدامه كطابع زمني. إذا كانت هناك عينات مفقودة ، فسيتم زيادة عداد العينة بالعدد المفقود قبل إخراج السطر التالي بحيث يظل ختم العداد / الوقت دقيقًا للعينات المسجلة.

الخطوة 6: التعليقات على الكود والإضافات

Teensy32AnalogLogger هو نسخة معدلة بشكل كبير من مثال Bill Greiman's AnalogBinLogger في مكتبته SdFat Arduino. هنا تمت إعادة كتابة المكتبة لتعمل على Teensy 3.2.

يستخدم Teensy32AnalogLogger timer0 لتعيين الفاصل الزمني العينة. يبدأ معالج المقاطعة لـ timer0 في تحويلات ADC جهازي. يتم استدعاء معالج المقاطعة للوحدة النمطية الثانية ADC باستمرار حتى يتم الانتهاء من كليهما ، وعادة ما تنتهي وحدة ADC الأولى التي تم تشغيلها ADC_0 قبل الثانية ، لذلك يتم استدعاء معالج المقاطعة مرة واحدة فقط. معالج المقاطعة ADC_1 يحفظ العينات إلى مخزن بيانات مؤقت.

في الحلقة الرئيسية () ، يحفظ storeSampleBuffer () أي مخازن مؤقتة كاملة على بطاقة SD ويعيد تدوير المخازن المؤقتة إلى قائمة انتظار المخزن المؤقت الفارغة. تعني الكمية الكبيرة من ذاكرة الوصول العشوائي المتوفرة على Teensy 3.2 إمكانية تخصيص عدد كبير من المخازن المؤقتة وبالتالي لا يحتاج storeSampleBuffer () إلى الاتصال به كثيرًا. هذا يترك الوقت للحلقة الرئيسية () للقيام بأعمال أخرى ، مثل أوامر العملية وإرسال المخرجات.

ملحقات

على الرغم من أن هذا المشروع يعمل كمسجل بيانات عالي السرعة ، فإنه لا يزال بحاجة إلى حزم نظام بطارية وأجهزة استشعار ECG للحصول على جهاز كامل يمكن ارتداؤه. فضلا عن ان هناك بعض الامتدادات التي يجب مراعاتها.

  1. أضف تحكمًا في الوقت الفعلي ومراقبًا لنموذج الموجة المأخوذة من العينة عبر pfodApp باستخدام وظيفة الرسم في pfodApp لإظهار لقطات من شكل الموجة
  2. قم بتمديد أرقام الملفات إلى ما بعد 99 لإجراء عمليات اختبار عينات أطول
  3. أخذ عينة من أكثر من مدخلين. نظرًا لأن Teensy 3.2 يحتوي على وحدات ADC مزدوجة ، يمكنك تعديل الكود لإضافة مدخلات إضافية في أزواج لتعظيم معدل العينة.
  4. أضف مراقبة البطارية لتتبع شحن البطارية. يستخدم Teensy 3.2 حوالي 1100 مللي أمبير على مدار 24 ساعة ، بما في ذلك وحدة البلوتوث و SD ، ولكن باستثناء وحدة المستشعر
  5. أضف دائرة إمداد بطارية مزدوجة للسماح بتغيير البطارية دون مقاطعة التسجيل.

موصى به: