תוכן עניינים:

רשום ECG במהירות גבוהה או נתונים אחרים, ברציפות במשך יותר מחודש: 6 שלבים
רשום ECG במהירות גבוהה או נתונים אחרים, ברציפות במשך יותר מחודש: 6 שלבים

וִידֵאוֹ: רשום ECG במהירות גבוהה או נתונים אחרים, ברציפות במשך יותר מחודש: 6 שלבים

וִידֵאוֹ: רשום ECG במהירות גבוהה או נתונים אחרים, ברציפות במשך יותר מחודש: 6 שלבים
וִידֵאוֹ: אל תיגע לבחורה באיפור בחייםםם !!!! don't do that !!! 2024, יולי
Anonim
רשום ECG במהירות גבוהה או נתונים אחרים, ברציפות במשך יותר מחודש
רשום ECG במהירות גבוהה או נתונים אחרים, ברציפות במשך יותר מחודש

פרויקט זה פותח לתמיכה בצוות מחקר רפואי באוניברסיטה, הזקוק לביש שיכול לרשום 2 x אותות א.ק.ג ב -1000 דגימות/שניות כל אחת (2K דגימות/שניות סה"כ) ברציפות למשך 30 יום, על מנת לזהות הפרעות קצב. הפרויקט המוצג כאן כולל שליטה מרחוק ומעקב אחר הכריתה. השלט רחוק הוא באמצעות תפריטים המוצגים במסוף סדרתי, במחשב או בטלפון נייד. פרויקט זה אינו מכסה את מדידת האק"ג או האריזה או הסוללה הדרושים לביש הסופי.

גרסה זו במהירות/משך זמן רב משתמשת ב- Teensy 3.2, מודול פריצת מיקרו SD של Adafruit, כרטיס SD SD באיכות 16G מסוג SDHC לרישום הנתונים ומודול תקשורת Bluetooth לשליטה וניטור. יש גם גרסה פחות מפותחת ואיטית יותר של UNO/Mega2560 של הפרויקט הזה. בעוד שפרויקט זה משתמש במודול תקשורת Bluetooth לשליטה וניטור של הרישום, אתה יכול גם להשתמש במודולי WiFi או BLE.

גרסה זו, המבוססת על ה- Teensy 3.2, מסוגלת לקבל קצבי דגימה גבוהים בהרבה מגרסת UNO/Mega2560. באמצעות קוד זה ה- Teensy 3.2 יכול לדגום ולרשום שתי דגימות ADC במהירות של> 30Khz עם חומרה ממוצעת על 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 הכלולה בסקיצה של Arduino, אך בהתחשב בנפח הנתונים שנרשמה על ידי גירסת Teensy, זו לא דרך יעילה לבצע את ההמרה.

אספקה

Teensy 3.2 מאת PJRC

לוח פריצת כרטיס MicroSD Adafruit+ או דומה.

16G כרטיס SDHC מסוג 10 מסוג MicroSD באיכות טובה למשל SanDisk.

אספקת USB 5V

לד עם רסיס 470R בסדרה.

נגדים 2 x 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)

הורד את קבצי ה- zip של הספרייה ולאחר מכן השתמש ב- Arduino IDE → סקיצה → כלול ספרייה → הוסף תפריט ספריית. ZIP להתקנת הספריות מתוך קבצי ה- zip.

לפתוח את קובץ Teensy32AnalogLogger.zip לספריית הסקיצות של Arduino ולתכנת את לוח Teensy 3.2 עם Teensy32AnalogLogger.ino (גרסה 0.01)

חבר את מודול ה- Teensy 3.2, Bluetooth ומודול כרטיס ה- SD כפי שמוצג למעלה (גירסת pdf)

שלב 2: הפעלת התוכנית - בדיקה

פרמט ראשון את כרטיס ה- SD שלך באמצעות

כרטיס ה- SD חייב להיות ריק כדי להתחיל בכניסה.

לבדיקה ראשונית אין צורך לחבר את מודול התקשורת, פשוט חבר את מודול ה- Teensy 3.2 + SD (עם כרטיס ריק מותקן) ל- Arduino IDE באמצעות הכבל הטורי USB. כפי שסופק המערכון של Teensy32AnalogLogger.ino משתמש בחיבור ה- USB לשליטה וניטור. ראה שלב רישום נתונים אמיתיים להלן לשימוש בהתקן תקשורת לשליטה וניטור.

ערוך את החלק העליון של הסקיצה Teensy32AnalogLogger.ino כדי להגדיר את COM_SERIAL ל- Serial, לפלט לחיבור ה- USB של Teensy.

#define סדרת COM_SERIAL

לאחר מכן העלה את המערכון ל- Teensy 3.2

פתח את הצג הסידורי Arduino IDE בגודל 115200 באוד (עם ערכת NL ו- CR כאחד). לאחר מספר שניות ה- Teensy 3.2 יציג תפריט של פקודות

Ver: 0.01 הזן אחת מהפקודות הבאות:? - המצב הנוכחי ו metadatai - לאתחל קבצים l - קבצי רשימה>

ה ? cmd מציג פרטים על ההגדרות הנוכחיות. (עיין בחלק העליון של Teensy32AnalogLogger.ino כדי לשנות הגדרות אלה) יש לסיים את ה- CMS עם 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 זמן מילוי כל מאגרי החסימות: 3556000uS מספר מקסימלי של מאגר נשמר בשיחה לחנות דוגמא בופרים (): 0 טיימרים חסרים סה"כ: 0 סה"כ חסרות דוגמאות עד כה: 0 סה"כ בלוקים שנכתבו: 0 סה"כ דוגמאות שנכתבו: 0 כיסוי: 0: 00: 00.000 קובץ נוכחי:

במקרה זה זמן הריצה הנוכחי הוא 0 מתוך 720 שעות מבוקשות (30 ימים), דגימה D16/A2 ו- D17/A3 (ראה להלן הגבלות על בחירת כניסות ADC להלן) 1000 פעמים בשנייה. זמן הריצה המרבי יכול להיות עד 894 שעות (37.25 ימים). ניתן להשתמש בלולאה הראשית () עד 3.5 שניות (זמן למלא את כל מאגרי הבלוק) לפני מילוי כל המאגרים הזמינים והדגימות מתחילות ללכת לאיבוד. מאגרים שנשמרו וכו 'מתעדכנים ככל שהריצה מתקדמת.

הכנס כרטיס SD ריק, השתמש ב- cm i 'כדי לאתחל את 99 הקבצים המשמשים לאחסון הנתונים. אתחול מראש כאן מקטין את עיכוב הזמן בעת מעבר מקובץ אחד למשנהו ומאפשר דגימה מהירה יותר.

אתחול 99 קבצים

יצירת קובץ חדש: log00.bin זמן שחלף: 368mS יצירת קובץ חדש: log01.bin זמן שחלף: 520mS… יצירת קובץ חדש: log98.bin זמן שחלף: 15660mS יצירת קובץ חדש: log99.bin זמן שחלף: 15812mS

לאחר מכן תוכל להשתמש ב- r cmd כדי להתחיל ריצת רישום. ההרצה תעשה את הזמן המבוקש או עד שישתמשו ב- cmd לעצירתו. אתה יכול גם להשתמש ב? cmd בזמן הרישום כדי לקבל תזמונים וספירות מעודכנים. להלן ריצה קצרה שהופסקה מוקדם באמצעות ה- cmd.

נתוני רישום…..

Ver: 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 סדר בתים: סיביות ADC של Little-Endian: 10 ממוצעים של מדגם ADC מעל: 4 קצב דגימה: 1000.00 מרווח לדוגמא: 1000uS דוגמאות לגוש: 127 זמן מילוי בלוק: 127000uS זמן מילוי קובץ: 9:01: 52.000 זמן למלא את כל הקבצים: 894: 04: 48.000 זמן אחזור מקסימלי של SD (כולל סגירת/פתיחת קבצים): 204uS חביון מקסימלי של סגירת/פתיחת קובץ: 0uS מספר חסימות חיץ: 28 זמן למלא את כל מאגרי החסימות: 3556000uS מספר מקסימלי של מאגרים נשמר בשיחה לחנות דוגמאות בופרים (): 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

רישום הנתונים הושלם!

Ver: 0.01 הזן אחת מהפקודות הבאות:? - המצב הנוכחי והמטא נתונים ** r - רשמו נתוני ADC ** אינם זמינים. הנתונים כבר קיימים ** i - אתחול קבצים ** לא זמין. הנתונים קיימים כבר בקבצי רשימה

הנתונים כבר נרשמו, בדוק עם?

תצוגת לד

נורית ה- LED המחוברת ל- D3 (כאשר D2 מספקת את חיבור ה- GND) תידלק אם לא תפספס דוגמה כלשהי ותבהב אם יש שגיאה. המערכון מנסה להמשיך לאחר שגיאות אך ייתכן שלא יעשה זאת בהצלחה.

שלב 3: רישום נתונים אמיתיים

בעת רישום נתונים אמיתיים לאורך זמן רב יותר, נוח יותר לחבר מודול תקשורת לסיכות D0/D1 ולשלוט ולפקח על הרישום מרחוק. כאן נעשה שימוש במודול Bluetooth Mate Silver עם הגדרות ברירת המחדל שלו, 115200 באוד, ללא לחיצת יד חומרה (RTC, CTS), קוד PIN 1234.

הערה: כאשר מופעל כוח למודול Mate Silver הוא נכנס למצב תצורה, מהבהב נורית מהירה אדומה במשך 60 שניות. במהלך תקופה זו אתה יכול לשלוח $$$ דרך החיבור הטורי למודול כדי להגדיר אותו אך לא ניתן לחבר את המודול. ברגע שה LED האדום מהבהב לאט, מודול ה- Bluetooth יקבל חיבורים.

שנה את ההגדרה COM_SERIAL ב- Teensy32AnalogLogger.ino לחיבור הטורי של החומרה (D0/D1), Serial1

#define סדרת COM_SERIAL1

לאחר ההתאמה למחשב נוצרה יציאת COM חדשה במחשב וניתן להשתמש ב- CoolTerm לחיבור ובקרה וניטור הרישום. ניתן להשתמש גם במודולי תקשורת אחרים המחוברים באופן סדרתי, כגון WiFi או BLE, ראה Arduino UNO/Mega Starter, הנשלט על ידי Android/pfodApp לפרטים.

אתה יכול גם לשלוט ולפקח על הרישום מהנייד אנדרואיד שלך באמצעות אפליקציית מסוף Bluetooth כגון אפליקציית Terminal Terminal, או באמצעות אפליקציית מסוף WiFi ו- TCP כגון TCP Telnet Terminal Pro, או Uart to BLE mdoule ואפליקציית מסוף 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 של נתוני מטא על הריצה.

תוכל להשתמש ב- 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_ כניסה להמרת CSV. בדוק אם SDtoCSV.log קיים התקדמות ושגיאות. עיבוד log00 מעובד 256000 בלוקים עיבוד log01 מעובד 256000 בלוקים… יומן עיבוד 25 מעובד 256000 בלוקים עיבוד יומן 26 מעובד 256000 בלוקים עיבוד יומן 27 עיבוד 256000 בלוקים דוגמאות שהוחמצו: 2715 יומן עיבוד 28 מעובד 256000 בלוקים… עיבוד יומן 29 מעובד 256000 בלוקים… עיבוד יומן 47 מעובד 256000 בלוקים עיבוד יומן 48 מעובד 35935 בלוקים --- עיבוד סיים

קובץ יומן מלא יותר, SDtoCSV.log, מצורף לכל הפעלה של SDtoCSV. הוא כולל את פלט נתוני המטא וכל הודעות שגיאה. כאן הספירה: 254 היא ספירת הנתונים המאוחסנים בלוק זה, כלומר 127 דוגמאות x 2 קריאות ADC לכל בלוק. ה- MissSamples הוא מספר זוגות הקריאה שהוחמצו, כלומר שורות בפלט CSV.

=== קובץ יומן עבור SD_ כניסה להמרת CSV שבת 13 ביולי 13:19:51 AEST 2019 כדי לראות הודעות התקדמות במסוף השתמש ב- java -jar SDtoCSV.jar שם קובץ בסיס 'log' גרסת מטא נתונים: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adc ממוצעים: 4 פינים מספר: 2 סיכות: 16, 17 דוגמאות PerBlock: 127 noBufferBlocks: 28 משך mS: 51649820 ריצה מבוקשת זמן mS: 106216704 maxBuffers בשימוש: 32 אזהרה: עולה על מספר המאגרים הזמינים (28). ייתכן שחסרות כמה דוגמאות. maxLatency uS: 221476 אזהרה: חורג מהזמן המסופק על ידי בלוקים מאגר (117348uS). כמה דוגמאות יחסרו. maxFileOpenTime uS: 20998 missing Timers: 0 missingSamplesTotal: 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 בלוקים

… עיבוד יומן 47.bin מעובד 256000 בלוקים עיבוד יומן 48.bin מעובד 35935 בלוקים --- עיבוד סיים

דוגמה לקובץ הפלט log00.csv הוא

מדגם מדגם (לכל 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 משתמש בטיימר 0 כדי להגדיר את מרווח המדגם. מטפל הפרעות עבור טיימר 0 מתחיל את שתי המרות ה- ADC. מטפל להפסקה עבור מודול ה- ADC השני נקרא ללא הרף עד ששניהם מסיימים, בדרך כלל מודול ה- ADC הראשון שהתחיל ADC_0 יסתיים לפני השני, כך שמטפל ההפרעה נקרא פעם אחת בלבד. מטפל הפרעות ADC_1 שומר את הדגימות למאגר נתונים.

בלולאה הראשית (), storeSampleBuffer () שומר את כל המאגרים המלאים לכרטיס ה- SD ומחזר את המאגרים לתור המאגר הריק. כמות RAM הנגישה הזמינה ב- Teensy 3.2 פירושה שניתן להקצות מספר רב של מאגרים ולכן אין צורך להתקשר ל- storeSampleBuffer () לעתים קרובות. זה משאיר זמן ללולאה הראשית () לבצע עבודות אחרות, כמו פקודות תהליך ושליחת פלט.

הרחבות

הפרויקט הזה אמנם מתפקד ככונן נתונים במהירות גבוהה, אך לצורך לבישה מלאה הוא עדיין צריך לארוז ולספק מערכת סוללות וחיישני א.ק.ג. כמו גם שיש כמה הרחבות שכדאי לקחת בחשבון.

  1. הוסף שליטה וניטור בזמן אמת של צורת הגל שנדגמה באמצעות pfodApp באמצעות פונקציית התכנון של pfodApp כדי להציג תמונות של צורת הגל
  2. הרחב את מספרי הקבצים מעל 99 לריצות דגימה ארוכות יותר
  3. לדוגמא יותר משתי תשומות. מכיוון של- Teensy 3.2 יש מודולי ADC כפולים, אתה יכול לשנות את הקוד כדי להוסיף כניסות נוספות בזוגות כדי למקסם את קצב המדגם.
  4. הוסף ניטור סוללה כדי לעקוב אחר טעינת הסוללה. ה- Teensy 3.2 משתמש בערך 1100mAhrs במשך 24 שעות, כולל מודול ה- bluetooth ו- SD, אך לא כולל מודול החיישן
  5. הוסף מעגל אספקת סוללות כפול כדי לאפשר החלפות סוללה ללא הפרעה של הרישום.

מוּמלָץ: