ספריית Arduino לניטור דופק עם דופק אוקסימטר

ספריית Arduino לניטור דופק עם דופק אוקסימטר

ספריית Arduino לניטור דופק עם דופק אוקסימטר

אחד הפרמטרים המנוטרים בפרויקט ניהול השינה שלי

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

תוכן עניינים

    בשלב התכנון והבדיקה של ה מכשיר למדידת דופק פיתחתי כמה תוכנות קטנות שיעזרו לי לוודא שההרכבה הייתה נכונה. ראשית כתבתי את הקוד למטה, שלקח את הערכים הנמדדים מעת לעת (לפחות כל MAXIMUM_MEASUREMENT_TIME ולכל היותר כל אחד MINIMUM_MEASUREMENT_TIME) כאשר הם השתנו מינימום בין אחד לקודם (הערך שמתאים לו MINIMUM_SIZE) וה מנוטר ממחשב עם יישום Python כדי להיות מסוגל לנתח אותם מאוחר יותר.

    ברגע שהערכים הותאמו (החל ממדידות צפופות מאוד) קיבלתי אוסף של ערכים מה- דופק אוקסימטר עם הזמן שיכולתי לצייר גרף באמצעות גיליון אלקטרוני, חישוב LibreOffice de LibreOffice, ספציפי.

    גרף של מדידות דופק אוקסימטר עם

    עם הנתונים שנאספו, כפי שמוצגים בתמונה למעלה, הפעולה הבאה הייתה לקבוע אם צפיפות הערכים מותרת לחשב בצורה אמינה אך "חסכונית" (לא מדגימה יותר מהנתונים הדרושים) את הערך של pulso; כפי שניתן לראות בגרף להלן, נראה כי האמצעים שננקטו שימשו להשגת התוצאות שסביר לצפות.

    .

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

    לאחר מכן, עם המידע מדגימת הנתונים, היה צורך לפתח אלגוריתם שימדד את קצב הדופק. היצמדות לגרף שלמען הפשטות, ההנחה היא שהוא מייצג פריסה דומה ל- מתחם QRS, נראה שהדבר הפשוט ביותר הוא למדוד את הזמנים בין החלקים הבולטים ביותר, עם ערכים גבוהים יותר (המתאימים לאזור qRs של דה-פולריזציה של החדרים) להשליך את האזור השטוח וה"רועש" יותר, ולכן קשה יותר לבצע מידה. הפתרון שאומץ, המתאים לקוד הבדיקה שלהלן, פועל לפי הנוהל הבא:

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

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

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

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

      כדי למנוע מדידות שגויות (כגון המכשיר המודד בוואקום, למשל), יש לוודא שהתוצאה היא בין ערכי מקסימום למינימום לפני קבלתה כמובן מאליו. למרות שנחשב כממוצע שערך תקין למבוגר בריא במנוחה הוא בין 60 ל-100 עמודים לדקה, ישנם ערכים קבילים להלן, קל למצוא 40 עמודים לדקה בספורטאי במנוחה, עד 200 עמודים לדקה במהלך פעילות גופנית אינטנסיבית ועוד של 100 עמודים לדקה אצל מבוגרים בישיבה במצבי התרגשות, בדיוק גורם מעניין לפרויקט ניהול השינה מה שמוביל אותי לפתח את זה מכשיר למדידת דופק. מסיבה זו, מומלץ להרגיע הרבה את הערכים הללו כדי שהקצוות לא יאבדו, שיכולים להראות בדיוק היבטים רלוונטיים.

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

    לבסוף, באמצעות האלגוריתם שתואר קודם לכן, פיתחתי את הספרייה כדי לחשב את הדופק על ידי זיהוי נוכחות של הֵמוֹגלוֹבִּין o אוקסיהמוגלובין (בהתאם לאורך הגל של האור בשימוש) מהקוד למטה.

    הספרייה מצפה שפונקציית הדגימה תיקרא מעת לעת monitor_pulse() כדי לחשב את הדופק, אשר ניתן להתייעץ עם הפונקציה last_pulse() או עם הפונקציה average_pulse() הדופק הממוצע. בנוסף להיותי משאב מוגבל, שללתי שימוש בהפרעות מכיוון שלא הייתי זקוק לערכים מיידיים אלא לערכים מתמשכים לאורך זמן כדי לפקח על pulso בפרויקט ניהול השינה שלי

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

    התוכנית הבאה לדוגמה מראה כיצד להשתמש בספרייה הקודמת כדי למדוד את pulso עם דופק אוקסימטר. בנוסף לאינסטציה של השיעור דופק ניטור רמת אוקסיהמוגלובין/הֵמוֹגלוֹבִּין ועם מחזוריות קטנה יותר הערך של ה pulso מחושב וממוצע.

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

    לפרסם תגובה

    אולי פספסת