ห้องสมุด Arduino สำหรับการตรวจวัดอัตราการเต้นของหัวใจด้วยเครื่องวัดออกซิเจนในเลือด

ห้องสมุด Arduino สำหรับการตรวจวัดอัตราการเต้นของหัวใจด้วยเครื่องวัดออกซิเจนในเลือด

ห้องสมุด Arduino สำหรับการตรวจวัดอัตราการเต้นของหัวใจด้วยเครื่องวัดออกซิเจนในเลือด

หนึ่งในพารามิเตอร์ที่ได้รับการตรวจสอบในโครงการการจัดการการนอนหลับของฉัน

มันคือชีพจร เพื่อวัดมัน ฉันพัฒนาอุปกรณ์โดยอาศัยพฤติกรรมของฮีโมโกลบินและออกซีฮีโมโกลบินต่อความยาวคลื่นแสงที่แตกต่างกัน. โดยพื้นฐานแล้วเป็นเรื่องเกี่ยวกับการวัดปริมาณแสงบางประเภทที่สามารถผ่านหรือสะท้อนไปยังบริเวณที่มีการชลประทานที่ดีของร่างกายได้ ความถี่ที่เกิดวัฏจักรที่สมบูรณ์ของปรากฏการณ์นี้ทำให้สามารถวัดค่าได้ ชีพจร.

สารบัญ

    ในขั้นตอนการออกแบบและการทดสอบของ อุปกรณ์วัดชีพจร ฉันพัฒนาโปรแกรมเล็กๆ ขึ้นมาเพื่อช่วยตรวจสอบความถูกต้องของแอสเซมบลี ก่อนอื่นฉันเขียนโค้ดด้านล่างซึ่งใช้ค่าที่วัดได้เป็นครั้งคราว (อย่างน้อยทุกครั้ง MAXIMUM_MEASUREMENT_TIME และอย่างมากที่สุดในแต่ละครั้ง MINIMUM_MEASUREMENT_TIME) เมื่อพวกเขาเปลี่ยนแปลงค่าต่ำสุดระหว่างอันหนึ่งกับอันก่อนหน้า (ค่าที่สอดคล้องกับ MINIMUM_SIZE) และ ตรวจสอบจากคอมพิวเตอร์ด้วยแอปพลิเคชัน Python เพื่อให้สามารถวิเคราะห์ได้ในภายหลัง

    เมื่อปรับค่าแล้ว (เริ่มจากการวัดที่มีความหนาแน่นมาก) ฉันได้รวบรวมค่าต่างๆ จาก เครื่องวัดความอิ่มตัวของออกซิเจน เมื่อเวลาผ่านไป ผมสามารถสร้างกราฟโดยใช้สเปรดชีต Lotus Symphony Spreadsheets de LibreOffice, เฉพาะเจาะจง.

    กราฟการวัดค่าออกซิเจนในเลือดด้วย

    ด้วยข้อมูลที่รวบรวมดังที่แสดงในภาพด้านบน การดำเนินการต่อไปคือการพิจารณาว่าความหนาแน่นของค่าช่วยให้เราคำนวณด้วยวิธีที่เชื่อถือได้ แต่ "ประหยัด" (ไม่สุ่มตัวอย่างมากกว่าข้อมูลที่จำเป็น) ค่าของ ชีพจร; ดังที่เห็นในกราฟด้านล่าง มาตรการที่ใช้ดูเหมือนจะให้ผลลัพธ์ที่สมเหตุสมผลที่คาดหวัง

    .

    การวัดการมีอยู่ของออกซีเฮโมโกลบินเมื่อเวลาผ่านไปด้วยเครื่องวัดออกซิเจนในเลือด

    ต่อไปด้วยข้อมูลจากการเก็บตัวอย่างข้อมูล จำเป็นต้องพัฒนาอัลกอริธึมที่จะวัดอัตราชีพจร โดยยึดตามกราฟว่า เพื่อความง่าย จะถือว่ากราฟแสดงเค้าโครงที่คล้ายกับ คิวอาร์เอส คอมเพล็กซ์ดูเหมือนว่าสิ่งที่ง่ายที่สุดคือการวัดเวลาระหว่างส่วนที่โดดเด่นที่สุดด้วยค่าที่สูงกว่า (ซึ่งสอดคล้องกับโซน qRs ของการสลับขั้วของโพรง) ละทิ้งโซนที่ประจบประแจงและ "ดังกว่า" ซึ่งจึงยากกว่า เพื่อวัด โซลูชันที่นำมาใช้ซึ่งสอดคล้องกับโค้ดทดสอบด้านล่างนั้นทำงานตามขั้นตอนต่อไปนี้:

    • ตรวจจับพื้นที่ที่ถูกวัดในแต่ละกรณีเพื่อสนใจเฉพาะค่าสูงสุดเท่านั้น คิวอาร์เอส และโยนหุบเขาทิ้งไป ในการทำเช่นนี้ สามารถวัดค่าที่สูงกว่าค่าคงที่ที่แน่นอนได้ แต่มีความเสี่ยงที่บุคคลและ/หรือสถานการณ์สามารถเพิ่มหรือลดค่าได้ แม้ว่าจะตามสัดส่วนก็ตาม เพื่อหลีกเลี่ยงปัญหานี้ ค่าในพื้นที่จะถือว่ามากกว่าค่าที่เกินค่าเฉลี่ยด้วยค่าสัมประสิทธิ์ที่แน่นอน ด้วยวิธีนี้ การวัดจะถูกปรับเทียบด้วยตนเองอย่างละเอียดอ่อน และสามารถปรับเพิ่มเติมได้อีกโดยการปรับค่าสัมประสิทธิ์อย่างละเอียด ซึ่งในกรณีของฉัน ฉันได้ทำการทดลองในระหว่างการทดสอบ

      เลือกค่าของโซนจากมากไปน้อยสำหรับการวัด (Rs) ของจุดสูงสุด คิวอาร์เอสให้ใกล้กับจุดสูงสุดของเส้นโค้งมากที่สุด หากต้องการทราบว่าโซนจากน้อยไปหามากถูกยกเลิกก็เพียงพอแล้วที่จะตรวจสอบว่าค่าใหม่น้อยกว่าค่าก่อนหน้าและตรวจสอบว่ายังไม่พบค่าที่ค้นหาเนื่องจากโดยทั่วไปมีหลายค่าในจากมากไปน้อย โซนของ คิวอาร์เอส ขึ้นอยู่กับความหนาแน่นของการสุ่มตัวอย่าง ในการจับเวลาพัลส์ ค่าของช่วงเวลาที่พบจุดนั้นจะถูกจัดเก็บไว้ (หน่วยมิลลิวินาทีที่ส่งคืน มิลลิวินาที ()) และเปรียบเทียบกับอันถัดไป

      เพื่อให้แน่ใจว่าค่าที่วัดได้ใหญ่ที่สุดในโซนจากมากไปหาน้อยของเส้นโค้งสูงสุด จึงมีการใช้ตัวแปร บูลีน (วัด_ชีพจร ในตัวอย่างนี้และ active_pulse_การวัด ในห้องสมุด) ซึ่งจะเปิดใช้งานเมื่อเข้าสู่โซนขึ้นของเส้นโค้งหลักและปิดใช้งานเมื่อพบค่าแรกจากมากไปน้อยซึ่งเป็นค่ากำหนดเวลา

      ตามปกติแล้วจะแสดงระยะเวลาของพัลส์เป็นจำนวนครั้งต่อนาที (ppm) ค่าของเวลาระหว่างพัลส์ที่ได้รับจะถูกแก้ไขโดยการคำนวณโดยการหารเวลารวมของการแสดง (หนึ่งนาที 60000 มิลลิวินาที) ด้วยช่วงเวลาที่ได้รับ ลบมิลลิวินาทีปัจจุบัน (ของค่าปัจจุบัน) ในช่วงเวลาก่อนหน้านี้

      เพื่อหลีกเลี่ยงการวัดที่ผิดพลาด (เช่น อุปกรณ์วัดในสุญญากาศ เป็นต้น) จะมีการตรวจสอบว่าผลลัพธ์อยู่ระหว่างค่าสูงสุดและต่ำสุดก่อนที่จะนำไปพิจารณา แม้ว่าจะถือเป็นค่าเฉลี่ยที่ค่าปกติสำหรับผู้ใหญ่ที่มีสุขภาพแข็งแรงขณะพักอยู่ระหว่าง 60 ถึง 100 ppm แต่มีค่าที่ยอมรับได้ด้านล่างนี้ แต่ก็เป็นเรื่องง่ายที่จะหาค่า 40 ppm ในนักกีฬาขณะพัก สูงถึง 200 ppm ในระหว่าง การออกกำลังกายเข้มข้นและอื่น ๆ 100 ppm ในผู้ใหญ่ที่อยู่ประจำที่ในสภาวะตื่นเต้นซึ่งเป็นปัจจัยที่น่าสนใจสำหรับโครงการจัดการการนอนหลับอย่างแม่นยำ ซึ่งทำให้ฉันพัฒนาสิ่งนี้ อุปกรณ์วัดชีพจร. ด้วยเหตุนี้จึงแนะนำให้ผ่อนคลายค่านิยมเหล่านี้ให้มากเพื่อไม่ให้ความสุดขั้วหายไปซึ่งสามารถแสดงแง่มุมที่เกี่ยวข้องได้อย่างแม่นยำ

      ค่าเฉลี่ยใหม่คำนวณโดยการลดความเกี่ยวข้องของค่าเฉลี่ยปัจจุบันตามจำนวนค่าที่สุ่มตัวอย่างและเพิ่มค่าสุดท้าย นอกจากนี้ ยังถ่วงน้ำหนักด้วยค่าสัมประสิทธิ์ที่ช่วยลดค่าที่วัดได้มากขึ้น .

    ในที่สุด โดยใช้อัลกอริธึมที่อธิบายไว้ก่อนหน้านี้ ฉันพัฒนาไลบรารีเพื่อคำนวณพัลส์โดยการตรวจจับการมีอยู่ของ เฮโมโกลบิน หรือ ออกซีเฮโมโกลบิน (ขึ้นอยู่กับความยาวคลื่นของแสงที่ใช้) จากโค้ดด้านล่างนี้

    ห้องสมุดคาดว่าฟังก์ชันการสุ่มตัวอย่างจะถูกเรียกเป็นระยะ monitor_pulse() เพื่อคำนวณชีพจรซึ่งสามารถปรึกษากับฟังก์ชันได้ สุดท้าย_ชีพจร() หรือด้วยฟังก์ชั่น Average_pulse() ชีพจรเฉลี่ย นอกเหนือจากการเป็นทรัพยากรที่จำกัดแล้ว ฉันยังตัดการใช้การหยุดชะงักเพราะฉันไม่ต้องการคุณค่าในทันที แต่ต้องการค่าที่คงอยู่ตลอดเวลาเพื่อตรวจสอบ ชีพจร ในโครงการจัดการการนอนหลับของฉัน

    . ไม่ว่าในกรณีใด จากการทดสอบที่ฉันทำไป ดูเหมือนจะไม่จำเป็น ไม่ว่าจะโดยอุปกรณ์หรือโดยพฤติกรรมของ ชีพจรการสุ่มตัวอย่างที่ความถี่หนึ่งจะให้ข้อมูลที่เพียงพอและไม่ได้อะไรมาก (ที่เกี่ยวข้อง) จากการเพิ่ม และไม่สามารถลดลงได้มากโดยไม่สูญเสียข้อมูลที่เกี่ยวข้องสำหรับการคำนวณ ในโค้ดเวอร์ชันแรกๆ เพื่อตรวจสอบการอ่านของ เครื่องวัดความอิ่มตัวของออกซิเจน ฉันค้นพบว่าไม่จำเป็นต้องยึดติดกับเวลาการวัดสูงสุด เนื่องจากหากพิจารณาความแปรผันของค่าที่ต่อเนื่องกันอย่างถูกต้อง ก็จะใกล้เคียงกับค่าต่ำสุดมาก

    โปรแกรมตัวอย่างต่อไปนี้แสดงวิธีการใช้ไลบรารีก่อนหน้าในการวัด ชีพจร ด้วย เครื่องวัดความอิ่มตัวของออกซิเจน. นอกจากจะยกตัวอย่างชั้นเรียนแล้ว Pulso การติดตามระดับของ ออกซีเฮโมโกลบิน/เฮโมโกลบิน และด้วยระยะเวลาที่น้อยลงมูลค่าของ ชีพจร คำนวณและเฉลี่ย

    เพื่อให้แน่ใจว่าการวัดมีความเกี่ยวข้อง มีการตั้งโปรแกรมรอก่อนที่จะแสดงค่าใดๆ เนื่องจากค่าอาจไม่ถูกต้อง (เช่น หากผู้ใช้ถอดอุปกรณ์ออก) ค่าต่างๆ จะแสดงเฉพาะเมื่ออยู่ในช่วงที่ถือว่าถูกต้องเท่านั้น

    แสดงความคิดเห็น

    คุณอาจจะพลาด