หน้าแรก ดูโปรเจกต์ทั้งหมด
Intermediate

โปรเจกต์ Baumanometer ด้วย Python และ Arduino UNO (ESP/ENG)

Digital Baumanometer ที่สร้างขึ้นโดยใช้บอร์ด Arduino Uno โดยมีการวิเคราะห์ข้อมูลด้วย Slope Method ใน Python

โปรเจกต์ Baumanometer ด้วย Python และ Arduino UNO (ESP/ENG)

รายการอุปกรณ์และเครื่องมือ

4x Resistor 1 M ohm
-
1x MPX2050DP
-
2x Resistor 100k ohm
-
1x inflatable armband
-
1x Rotary potentiometer (generic)
🛒 สั่งซื้อ

รายละเอียดและวิธีทำ

โปรเจกต์นี้คือเครื่องวัดความดัน (Baumanometer) ที่สร้างขึ้นด้วย Board Arduino, Pressure Sensor และ Python โดยที่ Arduino ถูกใช้เพื่อรับข้อมูลที่ส่งมาจาก Pressure Sensor และใช้ Python ในการวิเคราะห์ข้อมูลเพื่อหาทั้งค่าความดัน Diastolic และ Systolic

--------------------------------------------------------------------------------------

เครื่องวัดความดันดิจิทัลถูกสร้างขึ้นโดยใช้ Board Arduino UNO, Sensor MPX2050DP และ Operational Amplifier โดยมีการวิเคราะห์ข้อมูลด้วยวิธีหาความชัน (Slope Method) เพื่อหาจุดสูงสุดของชีพจรในแต่ละช่วงเวลา

The Background:

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

มีสองวิธีหลักในการวัดความดันโลหิต: วิธีแรกคือวิธีแบบไม่ต่อเนื่อง (Intermittent Methods) ซึ่งให้ค่าความดันเฉพาะจุด เช่น Systolic (PS), Diastolic (PD) และค่าเฉลี่ย (PM) โดยคำนวณในช่วงระยะเวลาที่ครอบคลุมการเต้นของหัวใจมากกว่าหนึ่งครั้ง วิธีที่สองคือวิธีแบบต่อเนื่อง (Continuous Methods) ซึ่งให้ค่าความดันแบบจุดต่อจุดในทุกจังหวะการเต้นของหัวใจ หรือรูปแบบคลื่นความดันโลหิตแบบต่อเนื่อง หรือทั้งสองอย่าง

ความดันโลหิตสามารถวัดได้ทั้งแบบสอดใส่ (Invasive/ทางตรง) และแบบไม่สอดใส่ (Non-invasive/ทางอ้อม) โดยวิธีแบบสอดใส่มีโอกาสให้ความแม่นยำสูงกว่า แต่เนื่องจากความซับซ้อนและความไม่สะดวกในการใช้งาน ทำให้วิธีแบบไม่สอดใส่เป็นที่นิยมแพร่หลายมากกว่า อุปกรณ์วัดแบบไม่สอดใส่นั้นปลอดภัยกว่าและใช้งานง่ายกว่าแบบสอดใส่ และสามารถใช้ในสถานการณ์ที่การวัดแบบสอดใส่ไม่มีความจำเป็นอย่างยิ่งยวด

--------------------------------------------------------------------------------------

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

มีสองวิธีหลักในการวัดความดันโลหิต: วิธีแรกคือวิธีแบบไม่ต่อเนื่อง (Intermittent Methods) ซึ่งให้ค่าความดันเฉพาะจุด เช่น Systolic (PS), Diastolic (PD) และค่าเฉลี่ย (PM) โดยคำนวณในช่วงระยะเวลาที่ครอบคลุมการเต้นของหัวใจมากกว่าหนึ่งครั้ง วิธีที่สองคือวิธีแบบต่อเนื่อง (Continuous Methods) ซึ่งให้ค่าความดันแบบจุดต่อจุดในทุกจังหวะการเต้นของหัวใจ หรือรูปแบบคลื่นความดันโลหิตแบบต่อเนื่อง หรือทั้งสองอย่าง

ความดันโลหิตสามารถวัดได้ทั้งแบบสอดใส่ (Invasive/ทางตรง) และแบบไม่สอดใส่ (Non-invasive/ทางอ้อม) โดยวิธีแบบสอดใส่มีโอกาสให้ความแม่นยำสูงกว่า แต่เนื่องจากความซับซ้อนและความไม่สะดวกในการใช้งาน ทำให้วิธีแบบไม่สอดใส่เป็นที่นิยมแพร่หลายมากกว่า อุปกรณ์วัดแบบไม่สอดใส่นั้นปลอดภัยกว่าและใช้งานง่ายกว่าแบบสอดใส่ และสามารถใช้ในสถานการณ์ที่การวัดแบบสอดใส่ไม่มีความจำเป็นอย่างยิ่งยวด

The Project:

ในการวัดความดันโดยใช้ Pressure Sensor นั้น ตัว Sensor จะให้ค่าความต่างศักย์ที่เป็นสัดส่วนกับความดันที่วัดได้ ซึ่งค่าความต่างศักย์นี้มีขนาดเล็กเกินกว่าที่ Arduino จะตรวจจับได้ ด้วยเหตุนี้จึงต้องใช้ Operational Amplifier เพื่อขยาย Voltage ที่ส่งมาจาก Sensor เมื่อดำเนินการเสร็จแล้ว Output Voltage จะถูกเชื่อมต่อเข้ากับ Pin A0 ในการทำงาน Sensor ต้องการแหล่งจ่ายไฟน้อยกว่า 5 Volts ซึ่งได้รับมาจาก Port 5V ของ Arduino

Pressure Sensor มีช่องรับสัญญาณสองช่อง ช่องหนึ่งจะถูกต่อเข้ากับสายยางที่มาจากสายรัดแขน (Bracelet) ที่พันไว้รอบแขน ส่วนช่องรับสัญญาณอีกช่องของ Sensor จะเปิดรับความดันบรรยากาศ เมื่อสายรัดแขนถูกปั๊มลมเข้าไป Sensor จะส่ง Voltage ที่ถูกขยายแล้วออกมา ซึ่ง Voltage นี้จะถูกเปลี่ยนเป็นหน่วยของความดัน หรือ mm Hg ในภายหลัง

หลังจากนั้น ได้มีการทดสอบ Output Voltage ว่ามีการเปลี่ยนแปลงไปตามความดันในสายรัดแขนที่เพิ่มขึ้นหรือไม่ มีการเขียน Code ง่ายๆ และบันทึกข้อมูลเพื่อตรวจสอบการทำงานร่วมกันของ Arduino และเครื่องมือ มีการทดสอบเพื่อดูว่า Sensor มี Resolution เพียงพอที่จะมองเห็นจังหวะการเต้นของชีพจรใน Serial Plotter ของ Arduino หรือไม่ ซึ่งจะแสดงผลออกมาในรูปแบบของ Peaks

หลังจากทำการทดสอบที่จำเป็นทั้งหมดแล้ว จึงเริ่มขั้นตอนการพัฒนา Code เพื่อตรวจจับ Peaks ที่สังเกตได้ ซึ่งตรงกับจังหวะชีพจร Peak ของความดันจุดแรกจะปรากฏขึ้นเมื่อความดันโลหิตสูงพอที่จะเอาชนะความดันที่เกิดจากสายรัดแขนได้ Peak แรกนี้ตรงกับค่าความดันที่เรียกว่า Systolic ดังนั้น Code จะต้องตรวจจับ Peak แรกนี้และแปลงค่าเป็นหน่วย mm Hg ส่วน Peaks ที่ตามมาจะตรงกับจังหวะการเต้นของชีพจร โดยปกติความดัน Diastolic จะตรงกับ Peak ของชีพจรจุดสุดท้าย แต่ตามมาตรฐานของผู้ผลิตเครื่องวัดความดันดิจิทัล เมื่อมีการใช้ Sensor จะกำหนดให้ค่าความดัน Diastolic คือจุดที่มีความสูงเป็น 60% ของ Peak แรก

ในการตรวจจับ Peaks เหล่านั้น ได้มีการใช้วิธีตรวจจับการเปลี่ยนเครื่องหมายของ Slopes ข้อมูลที่ส่งมายัง Arduino จะถูกส่งต่อไปยัง Python เมื่อถึง Python ข้อมูลจะถูกแปลงเป็นหน่วยความดัน (mm Hg) โดยใช้สูตรที่ได้จากการ Calibrate ตัว Sensor กับ Mercury Manometer มีการวัด Voltage ที่ Sensor ส่งออกมาที่ระดับความดันต่างๆ หลายครั้ง เพื่อหาค่าสถิติของค่า Voltage ในแต่ละระดับความดัน ข้อมูลจำเพาะของ Sensor ระบุว่าการเปลี่ยนแปลงของ Voltage ตามความดันเป็นแบบ Linear ดังนั้นเมื่อพิจารณาเรื่องนี้ร่วมกับข้อมูลจากการ Calibrate จึงมีการปรับจูนให้เป็นกราฟเส้นตรง ซึ่งจะได้สมการ Voltage ที่แปรผันตามความดัน และเมื่อแก้สมการหาค่าความดัน ก็จะได้สูตรในการแปลง Voltage เป็นความดัน

เมื่อได้ข้อมูลในหน่วย mm Hg แล้ว จึงเข้าสู่กระบวนการวิเคราะห์ ข้อมูลจะถูกเพิ่มลงใน List และสามารถนำไป Plot กราฟได้ ซึ่งจะสังเกตเห็น Peaks ต่างๆ เมื่อเกิด Peak เครื่องหมายของ Slope จะเปลี่ยนไป จากค่าบวกกลายเป็นค่าลบ ตัวโปรแกรมจะทำหน้าที่ตรวจจับสิ่งนี้ อย่างไรก็ตาม มีข้อเสียคือโปรแกรมจะตรวจจับการเปลี่ยนเครื่องหมายทั้งหมด ซึ่งรวมถึงช่วงระหว่าง Peak ที่ Slope เปลี่ยนจากลบเป็นบวกด้วย ดังนั้น Code ส่วนถัดไปจึงออกแบบมาเพื่อเลือกว่าจุดไหนคือ Maximum หรือ Minimum เราสนใจเฉพาะค่า Maximum จึงเก็บค่าเหล่านั้นไว้ใน List เพื่อนำมาหาค่าความดัน Diastolic และ Systolic ต่อไป

-----------------------------------------------------------------------------------

ในการวัดความดันได้มีการใช้ Pressure Sensor ซึ่งจะให้ค่าความต่างศักย์ที่เป็นสัดส่วนกับความดันที่วัดได้ ค่าความต่างศักย์ที่ส่งออกมานั้นเล็กเกินกว่าที่ Arduino จะตรวจจับได้ จึงต้องใช้ Operational Amplifier เพื่อขยาย Voltage ที่ส่งออกมาจาก Sensor เมื่อได้ค่านี้แล้วจึงเชื่อมต่อ Output Voltage เข้ากับ Pin A0 ในการทำงาน Sensor ต้องการแหล่งจ่ายไฟอย่างน้อย 5 Volts ซึ่งได้รับมาจาก Port 5V ของ Arduino

Pressure Sensor มีช่องรับสัญญาณสองช่อง ช่องหนึ่งต่อเข้ากับสายยางที่มาจากสายรัดแขนที่วางไว้ตรงกล้ามแขน (Bicep) ส่วนอีกช่องเปิดรับความดันบรรยากาศ เมื่อสายรัดแขนพองตัว Sensor จะส่ง Voltage ที่ผ่านการขยายแล้วออกมา ซึ่ง Voltage นี้จะถูกแปลงเป็นหน่วยความดัน mm Hg ในเวลาต่อมา

หลังจากนั้นได้ทดสอบว่า Output Voltage ของ Amplifier มีการเปลี่ยนแปลงเมื่อความดันในสายรัดแขนเปลี่ยนไปจริงหรือไม่ โดยการเขียน Code ง่ายๆ เพื่อ Plot กราฟข้อมูลที่ Arduino รับมาผ่านเครื่องมือ Serial Plotter หลังจากตรวจสอบแล้วจึงทำการทดสอบเพื่อดูว่า Sensor มี Resolution เพียงพอที่จะมองเห็นชีพจรใน Serial Plotter ของ Arduino หรือไม่ และพบว่าชีพจรแสดงผลออกมาในรูปแบบของ Peaks

หลังจากทำการทดสอบที่จำเป็นทั้งหมดแล้ว จึงเริ่มพัฒนา Code เพื่อตรวจจับ Peaks ที่สังเกตเห็นซึ่งตรงกับชีพจร Peak แรกจะปรากฏเมื่อความดันโลหิตสูงพอที่จะเอาชนะความดันจากสายรัดแขน ซึ่ง Peak แรกนี้คือความดัน Systolic ดังนั้น Code ต้องตรวจจับ Peak แรกนี้และแปลงเป็นหน่วย mm Hg ส่วน Peaks ถัดมาคือจังหวะชีพจร โดยปกติความดัน Diastolic ควรจะตรงกับ Peak สุดท้าย แต่ตามที่ผู้ผลิตเครื่องวัดความดันดิจิทัลระบุไว้ เมื่อใช้ Sensor จะกำหนดให้ความดัน Diastolic คือจุดที่ Peak มีความสูงเป็น 60% ของ Peak แรก

ในการตรวจจับ Peaks เหล่านี้ใช้วิธีตรวจจับการเปลี่ยนเครื่องหมายของ Slopes ข้อมูลที่มาถึง Arduino จะถูกส่งไปยัง Python และแปลงเป็นหน่วยความดัน (mm Hg) ด้วยสูตรที่ได้จากการ Calibrate ตัว Sensor กับ Manometer ปรอท มีการวัด Voltage ที่ Sensor ส่งออกมาในความดันที่ต่างกันหลายๆ ครั้งเพื่อหาค่าสถิติ ข้อมูลของ Sensor ระบุว่า Voltage เปลี่ยนตามความดันแบบ Linear ดังนั้นจึงใช้ข้อมูลการ Calibrate มาสร้างสมการเส้นตรงเพื่อให้ได้สูตรการแปลง Voltage เป็นความดัน

เมื่อมีข้อมูลหน่วย mm Hg แล้วก็นำมาวิเคราะห์ โดยเก็บข้อมูลใน List และนำไป Plot กราฟ ซึ่งจะเห็น Peaks ต่างๆ เมื่อมี Peak เครื่องหมายของ Slope จะเปลี่ยนจากบวกเป็นลบ โปรแกรมจะตรวจจับสิ่งนี้ แต่เนื่องจากโปรแกรมตรวจจับการเปลี่ยนเครื่องหมายทั้งหมด รวมถึงช่วงที่ Slope เปลี่ยนจากลบเป็นบวกด้วย Code ส่วนถัดไปจึงทำหน้าที่แยกแยะ Maximum และ Minimum โดยเราจะเก็บค่า Maximum ไว้ใน List เพื่อหาค่าความดัน Diastolic และ Systolic

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: baumanometer-with-python-and-arduino-uno-espeng-e96d8d
2450 บาท
PromptPay QR Code