- ส่วนประกอบที่จำเป็น
- พัลส์เซนเซอร์ SEN-11574
- แผนภาพวงจรสำหรับ Pulse Sensor ที่เชื่อมต่อกับไมโครคอนโทรลเลอร์ PIC
- คำอธิบายรหัส PIC16F877A สำหรับ Heart Beat Monitor
อัตราการเต้นของหัวใจเป็นตัวแปรที่สำคัญที่สุดในการตรวจสอบสุขภาพของบุคคลใด ๆ ในยุคปัจจุบันของอุปกรณ์สวมใส่มีอุปกรณ์มากมายที่สามารถวัดการเต้นของหัวใจความดันโลหิตรอยเท้าแคลอรี่ที่เผาผลาญและอื่น ๆ อีกมากมาย อุปกรณ์เหล่านี้มีเซ็นเซอร์ชีพจรอยู่ภายในเพื่อตรวจจับอัตราชีพจร วันนี้เราจะใช้เซ็นเซอร์วัดชีพจรกับไมโครคอนโทรลเลอร์ PIC เพื่อนับการเต้นของหัวใจต่อนาทีและช่วงจังหวะระหว่างจังหวะค่าเหล่านี้จะแสดงเพิ่มเติมบนจอ LCD 16x2 เราจะใช้ไมโครคอนโทรลเลอร์PIC16F877A PIC ในโครงการนี้ เราได้เชื่อมต่อเซ็นเซอร์ชีพจรกับ Arduino สำหรับระบบตรวจสอบผู้ป่วยแล้ว
ส่วนประกอบที่จำเป็น
- ไมโครคอนโทรลเลอร์ PIC16F877A
- คริสตัล 20 Mhz
- 33pF คาปาซิเตอร์ 2 ชิ้น
- ตัวต้านทาน 4.7k 1 ชิ้น
- 16x2 ตัวอักษร LCD
- หม้อ 10K สำหรับควบคุมความคมชัดของ LCD
- SEN-11574 เซ็นเซอร์พัลส์
- สายรัดเวลโคร
- อะแดปเตอร์ไฟ 5V
- เขียงหั่นขนมและสายเชื่อมต่อ
พัลส์เซนเซอร์ SEN-11574
ในการวัดการเต้นของหัวใจเราจำเป็นต้องมีเซ็นเซอร์ชีพจร ที่นี่เราได้เลือกเซ็นเซอร์ชีพจร SEN-11574ซึ่งหาซื้อได้ง่ายในร้านค้าออนไลน์หรือออฟไลน์ เราใช้เซ็นเซอร์นี้เนื่องจากมีรหัสตัวอย่างจากผู้ผลิต แต่นั่นคือรหัส Arduino เราแปลงรหัสนั้นสำหรับไมโครคอนโทรลเลอร์ PIC ของเรา
เซ็นเซอร์มีขนาดเล็กมากและเหมาะอย่างยิ่งสำหรับการอ่านการเต้นของหัวใจผ่านติ่งหูหรือที่ปลายนิ้ว มีเส้นผ่านศูนย์กลาง 0.625 นิ้วและหนา 0.125 นิ้วจากด้าน PCB กลม
เซ็นเซอร์นี้ให้สัญญาณอนาล็อกและเซ็นเซอร์สามารถขับเคลื่อนด้วย 3V หรือ 5V ปริมาณการใช้ปัจจุบันของเซ็นเซอร์คือ 4 mA ซึ่งเหมาะสำหรับแอปพลิเคชันมือถือ เซ็นเซอร์มาพร้อมกับสายไฟสามเส้นพร้อมสายเชื่อมต่อยาว 24 นิ้วและส่วนหัวของเบอร์กตัวผู้ที่ส่วนท้าย นอกจากนี้เซ็นเซอร์ยังมาพร้อมกับ Velcro Finger Strap เพื่อสวมเข้ากับปลายนิ้ว
ผู้ผลิตยังมีแผนผัง Pulse Sensor และมีจำหน่ายที่ sparkfun.com
แผนผังของเซ็นเซอร์ประกอบด้วยเซ็นเซอร์วัดอัตราการเต้นของหัวใจแบบออปติคอลวงจร RC ตัดเสียงรบกวนหรือตัวกรองซึ่งสามารถเห็นได้ในแผนภาพ R2, C2, C1, C3 และแอมพลิฟายเออร์ที่ใช้งานได้ MCP6001 ใช้สำหรับเอาต์พุตแอนะล็อกแบบขยายที่เชื่อถือได้
มีเซ็นเซอร์อื่น ๆ สำหรับ Heart Beat Monitoring แต่เซ็นเซอร์ชีพจร SEN-11574ใช้กันอย่างแพร่หลายในโครงการอิเล็กทรอนิกส์
แผนภาพวงจรสำหรับ Pulse Sensor ที่เชื่อมต่อกับไมโครคอนโทรลเลอร์ PIC
ที่นี่เราได้เชื่อมต่อเซ็นเซอร์พัลส์ผ่านขา2 ndของหน่วยไมโครคอนโทรลเลอร์ เนื่องจากเซ็นเซอร์ให้ข้อมูลแอนะล็อกเราจึงต้องแปลงข้อมูลอนาล็อกเป็นสัญญาณดิจิทัลโดยทำการคำนวณที่จำเป็น
oscillator ผลึกของ 20MHzมีการเชื่อมต่อทั่วทั้งสองขา OSC ของหน่วยไมโครคอนโทรลเลอร์ที่มีสองตัวเก็บประจุ 33pF เซรามิก จอแอลซีดีมีการเชื่อมต่อผ่านพอร์ต RB ของไมโครคอนโทรลเลอร์
คำอธิบายรหัส PIC16F877A สำหรับ Heart Beat Monitor
โค้ดค่อนข้างซับซ้อนสำหรับผู้เริ่มต้น ผู้ผลิตระบุรหัสตัวอย่างสำหรับเซ็นเซอร์ SEN-11574 แต่เขียนขึ้นสำหรับแพลตฟอร์ม Arduino เราจำเป็นต้องแปลงการคำนวณสำหรับไมโครชิป PIC16F877A ของเรา รหัสเสร็จสมบูรณ์จะได้รับในตอนท้ายของโครงการนี้กับที่วิดีโอสาธิตและสามารถดาวน์โหลดไฟล์ C ที่รองรับได้จากที่นี่
โฟลว์โค้ดของเราค่อนข้างง่ายและเราทำตามขั้นตอนโดยใช้เคส สวิตช์ ตามผู้ผลิตเราจำเป็นต้องได้รับข้อมูลจากเซ็นเซอร์ในทุกๆ 2 มิลลิวินาที ดังนั้นเราจึงใช้รูทีนบริการขัดจังหวะตัวจับเวลาซึ่งจะเริ่มการทำงานของฟังก์ชันในทุกๆ 2 มิลลิวินาที
การไหลของรหัสของเราในคำสั่ง สวิตช์ จะเป็นดังนี้:
กรณีที่ 1: อ่าน ADC
กรณีที่ 2: คำนวณ Heart Beat และ IBI
กรณีที่ 3: แสดงการเต้นของหัวใจและ IBI บน LCD
กรณีที่ 4: IDLE (ไม่ต้องทำอะไรเลย)
ภายในฟังก์ชั่นขัดจังหวะตัวจับเวลาเราเปลี่ยนสถานะของโปรแกรมเป็นกรณีที่ 1: อ่าน ADC ทุกๆ 2 มิลลิวินาที
ดังนั้นในฟังก์ชัน หลัก เราจึงกำหนดสถานะของโปรแกรมและกรณี สวิตช์ ทั้งหมด
เป็นโมฆะ main () { system_init (); main_state = READ_ADC; ในขณะที่ (1) { สวิตช์ (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 คือหมายเลขช่อง main_state = CALCULATE_HEART_BEAT; หยุดพัก; } กรณี CALCULATE_HEART_BEAT: { คำนวณ_heart_beat (adc_value); main_state = SHOW_HEART_BEAT; หยุดพัก; } case SHOW_HEART_BEAT: { if (QS == true) {// A Heartbeat Was Found // BPM and IBI has been Determined // Quantified Self "QS" true เมื่อ Arduino พบ heartbeat QS = false; // รีเซ็ตค่าสถานะ Quantified Self ในครั้งต่อไป // 0.9 ใช้เพื่อรับข้อมูลที่ดีขึ้น ที่จริงไม่ควรใช้ BPM = BPM * 0.9; IBI = IBI / 0.9; lcd_com (0x80); lcd_puts ("BPM: -"); lcd_print_number (BPM); lcd_com (0xC0); lcd_puts ("IBI: -"); lcd_print_number (IBI); } } main_state = IDLE; หยุดพัก; กรณี IDLE: { แบ่ง; } ค่าเริ่มต้น: { } } } }
เราจะใช้สองอุปกรณ์ฮาร์ดแวร์ของ PIC16F877A นี้: Timer0 และ ADC
ภายในไฟล์ timer0.c
TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
การคำนวณนี้ให้ตัวจับเวลา 2 มิลลิวินาทีขัดจังหวะ สูตรการคำนวณคือ
// TimerCountMax - (((ล่าช้า (มิลลิวินาที) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
ถ้าเราเห็นฟังก์ชัน timer_isr แสดง ว่า -
เป็นโมฆะ timer_isr () { main_state = READ_ADC; }
ในฟังก์ชั่นนี้สถานะของโปรแกรมจะเปลี่ยนเป็น READ_ADC ในทุกๆ 2ms
จากนั้นฟังก์ชัน CALCULATE_HEART_BEAT จะนำมาจากโค้ดตัวอย่าง Arduino
เป็นโมฆะคำนวณ_heart_beat (int adc_value) { Signal = adc_value; ตัวอย่างเคาน์เตอร์ + = 2; // ติดตามเวลาใน mS ด้วยตัวแปรนี้ int N = sampleCounter - lastBeatTime; // ตรวจสอบเวลาตั้งแต่จังหวะสุดท้ายเพื่อหลีกเลี่ยงเสียงรบกวน // ค้นหาจุดสูงสุดและรางของคลื่นพัลส์ ถ้า (สัญญาณ <thresh && N> (IBI / 5) * 3) {// หลีกเลี่ยงเสียงที่แตกต่างกันโดยรอ 3/5 ของ IBI ล่าสุด ถ้า (Signal <T) {// T คือราง T = Signal; // ติดตามจุดต่ำสุดของคลื่นชีพจร } } …………. ………………………..
นอกจากนี้รหัสที่สมบูรณ์จะได้รับด้านล่างและอธิบายได้ดีจากความคิดเห็น ข้อมูลเซ็นเซอร์การเต้นของหัวใจนี้สามารถอัปโหลดเพิ่มเติมไปยังคลาวด์และตรวจสอบผ่านอินเทอร์เน็ตได้จากทุกที่ซึ่งทำให้เป็นระบบตรวจสอบการเต้นของหัวใจที่ใช้ IoT ตามลิงค์เพื่อเรียนรู้เพิ่มเติม
ดาวน์โหลดไฟล์ C ที่รองรับสำหรับโครงการ PIC Pulse Sensor จากที่นี่