สารบัญ:

บันทึก ECG ความเร็วสูงหรือข้อมูลอื่น ๆ อย่างต่อเนื่องนานกว่าหนึ่งเดือน: 6 ขั้นตอน
บันทึก ECG ความเร็วสูงหรือข้อมูลอื่น ๆ อย่างต่อเนื่องนานกว่าหนึ่งเดือน: 6 ขั้นตอน

วีดีโอ: บันทึก ECG ความเร็วสูงหรือข้อมูลอื่น ๆ อย่างต่อเนื่องนานกว่าหนึ่งเดือน: 6 ขั้นตอน

วีดีโอ: บันทึก ECG ความเร็วสูงหรือข้อมูลอื่น ๆ อย่างต่อเนื่องนานกว่าหนึ่งเดือน: 6 ขั้นตอน
วีดีโอ: [spin9] เจาะลึก เปิดใช้ฟีเจอร์ ECG สำหรับ Apple Watch ในไทย พร้อมตอบทุกข้อสงสัยกับหมอโรคหัวใจ 2024, กรกฎาคม
Anonim
บันทึก ECG ความเร็วสูงหรือข้อมูลอื่น ๆ อย่างต่อเนื่องนานกว่าหนึ่งเดือน
บันทึก ECG ความเร็วสูงหรือข้อมูลอื่น ๆ อย่างต่อเนื่องนานกว่าหนึ่งเดือน

โปรเจ็กต์นี้พัฒนาขึ้นเพื่อสนับสนุนทีมวิจัยทางการแพทย์ของมหาวิทยาลัย ซึ่งต้องการอุปกรณ์สวมใส่ที่สามารถบันทึกสัญญาณ ECG 2 x ที่ 1,000 ตัวอย่าง/วินาทีในแต่ละ (รวม 2K ตัวอย่าง/วินาที) อย่างต่อเนื่องเป็นเวลา 30 วัน เพื่อตรวจหาภาวะหัวใจเต้นผิดจังหวะ โครงการที่นำเสนอนี้รวมถึงการควบคุมระยะไกลและการตรวจสอบการบันทึก การควบคุมระยะไกลทำได้ผ่านเมนูที่แสดงบนเทอร์มินัลอนุกรม ไม่ว่าจะบนคอมพิวเตอร์หรือโทรศัพท์มือถือ โปรเจ็กต์นี้ไม่ครอบคลุมการวัด ECG หรือบรรจุภัณฑ์หรือแบตเตอรี่ที่จำเป็นสำหรับอุปกรณ์สวมใส่ขั้นสุดท้าย

เวอร์ชันความเร็วสูง/ระยะเวลายาวนานนี้ใช้ Teensy 3.2, Adafruit Micro-SD breakout module, การ์ด SD 16G SDHC class 10 ที่มีคุณภาพเพื่อบันทึกข้อมูลและโมดูลการสื่อสาร Bluetooth สำหรับการควบคุมและตรวจสอบ โครงการนี้มีเวอร์ชัน UNO/Mega2560 ที่พัฒนาน้อยกว่าและช้ากว่าด้วย แม้ว่าโปรเจ็กต์นี้ใช้โมดูลการสื่อสาร Bluetooth เพื่อควบคุมและตรวจสอบการบันทึก คุณยังสามารถใช้โมดูล WiFi หรือ BLE ได้

เวอร์ชันนี้มีพื้นฐานมาจาก Teensy 3.2 มีอัตราการสุ่มตัวอย่างที่สูงกว่าเวอร์ชัน UNO/Mega2560 มาก การใช้โค้ดนี้ Teensy 3.2 สามารถสุ่มตัวอย่างและบันทึกตัวอย่าง ADC สองตัวอย่างที่ >30Khz ด้วยฮาร์ดแวร์ที่มีค่าเฉลี่ยมากกว่า 4 ตัวอย่าง และตอบสนองความต้องการ 1,000 ตัวอย่าง/วินาทีข้างต้นได้อย่างง่ายดาย รหัสรองรับการบันทึกไฟล์.bin 100 ไฟล์ แต่ละไฟล์มี 128K ที่ 30Khz ครอบคลุม 29hrs 30min. ที่ 1,000 ตัวอย่าง/วินาที ครอบคลุม 37 วัน สามารถขยายรหัสเพื่อจัดการไฟล์มากกว่า 100 ไฟล์ได้อย่างง่ายดาย ดังนั้นจึงขยายระยะเวลาของการทำงาน เมื่อสิ้นสุดการรัน คุณจะมีข้อมูล >10Gig,.bin, ไฟล์ และไฟล์.met ของข้อมูลเมตาที่อธิบายการทำงานและผลลัพธ์ SDtoCSV.jar ที่ให้มา (ซอร์สโค้ด SDtoCSV_src.zip) สามารถใช้ในการแปลงไฟล์.bin เป็นไฟล์.csv บนคอมพิวเตอร์ของคุณเพื่อดำเนินการต่อไป ข้อมูลผลลัพธ์คือ >60Gig เวอร์ชัน UNO/Mega2560 มีการแปลง.bin เป็น.csv รวมอยู่ในร่าง Arduino แต่ด้วยปริมาณข้อมูลที่บันทึกโดยเวอร์ชัน Teensy นั่นไม่ใช่วิธีที่มีประสิทธิภาพในการแปลง

เสบียง

Teensy 3.2 โดย PJRC

Adafruit MicroSD card breakout board+ หรือเทียบเท่า

การ์ด MicroSD 16G SDHC class 10 คุณภาพดีเช่น แซนดิสก์.

แหล่งจ่าย USB 5V

ไฟ LED ที่มีตัวต้านทาน 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 Support สำหรับ Arduino IDE) หมายเหตุอย่างระมัดระวังคำแนะนำการใช้งานครั้งแรก

เลือก Teensy 3.2 เป็นบอร์ดและตรวจสอบว่าโปรแกรมตัวอย่าง BLINK โหลดและรัน

ดาวน์โหลดและติดตั้งไลบรารีต่อไปนี้: - millisDelay และ SdFat (สแน็ปช็อตในเครื่องของไลบรารี SdFat ที่ใช้สำหรับการทดสอบเหล่านี้อยู่ที่นี่) และ pfodParser.zip (สำหรับคลาส pfodBufferedStream และ pfodNonBlockingInput)

ดาวน์โหลดไฟล์ zip ของไลบรารี แล้วใช้ Arduino IDE → Sketch → รวมไลบรารี → เพิ่มเมนูไลบรารี. 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 เพื่อส่งออกไปยังการเชื่อมต่อ Teensy USB

#define COM_SERIAL Serial

จากนั้นอัปโหลดภาพร่างไปที่ Teensy 3.2

เปิด Arduino IDE Serial Monitor ที่ 115200 baud (พร้อมทั้งชุด NL & CR) หลังจากนั้นไม่กี่วินาที Teensy 3.2 จะแสดงเมนูคำสั่ง

Ver:0.01 ป้อนหนึ่งในคำสั่งต่อไปนี้:? - สถานะปัจจุบันและข้อมูลเมตา - เริ่มต้นไฟล์l - รายการไฟล์>

NS ? cmd แสดงรายละเอียดของการตั้งค่าปัจจุบัน (ดูด้านบนสุดของ Teensy32AnalogLogger.ino เพื่อเปลี่ยนการตั้งค่าเหล่านี้) Cmds ต้องยุติด้วย NL หรือ CR หรือทั้งสองอย่าง

0:00:00.000 จาก 720:00:00.000

พินตัวอย่าง: 16 17 ลำดับไบต์: บิต ADC แบบปลายเล็ก: 10 ค่าเฉลี่ยตัวอย่าง ADC มากกว่า: 4 อัตราตัวอย่าง: 1000.00 ช่วงตัวอย่าง: 1000uS ตัวอย่างต่อบล็อก: 127 เวลาเติมบล็อก: 127000uS เวลาเติมไฟล์: 9:01: 52.000 เวลาเติมไฟล์ทั้งหมด: 894:04:48.000 เวลาแฝงสูงสุดของ SD (รวมไฟล์ปิด/เปิด): 0uS เวลาแฝงไฟล์สูงสุด/ปิด/เปิด: 0uS จำนวนบล็อกบัฟเฟอร์: 28 เวลาเติมบัฟเฟอร์บล็อกทั้งหมด: 3556000uS จำนวนบัฟเฟอร์สูงสุด บันทึกไว้ในการเรียก storeSampleBuffers(): 0 Missed Timers total: 0 Total Missed Samples: 0 Total Blocks ที่เขียน: 0 ตัวอย่างทั้งหมดที่เขียน: 0 ครอบคลุม: 0:00:00.000 ไฟล์ปัจจุบัน:

ในกรณีนี้ รันไทม์การบันทึกปัจจุบันคือ 0 ของ 720 ชั่วโมงที่ร้องขอ (30 วัน) การสุ่มตัวอย่าง D16/A2 และ D17/A3 (ดูด้านล่างสำหรับข้อจำกัดในการเลือกอินพุต ADC ด้านล่าง) 1,000 ครั้งต่อวินาที รันไทม์สูงสุดได้ถึง 894 ชั่วโมง (37.25 วัน) ลูปหลัก () สามารถถูกครอบครองได้ไม่เกิน 3.5 วินาที (เวลาในการเติมบัฟเฟอร์บล็อกทั้งหมด) ก่อนที่บัฟเฟอร์ที่มีอยู่ทั้งหมดจะถูกเติมและตัวอย่างจะเริ่มสูญหาย บัฟเฟอร์ที่บันทึกไว้ ฯลฯ จะได้รับการอัปเดตเมื่อการรันดำเนินไป

ใส่การ์ด SD เปล่า ใช้ 'i' cmd เพื่อเริ่มต้น 99 ไฟล์ที่ใช้ในการจัดเก็บข้อมูล การกำหนดค่าเริ่มต้นล่วงหน้าที่นี่ช่วยลดการหน่วงเวลาเมื่อเปลี่ยนจากไฟล์หนึ่งเป็นไฟล์ถัดไป และช่วยให้สุ่มตัวอย่างเร็วขึ้น

กำลังเริ่มต้น 99 ไฟล์

การสร้างไฟล์ใหม่: log00.bin เวลาที่ผ่านไป: 368mS การสร้างไฟล์ใหม่: log01.bin เวลาที่ผ่านไป: 520mS.. การสร้างไฟล์ใหม่: log98.bin เวลาที่ผ่านไป: 15660mS กำลังสร้างไฟล์ใหม่: log99.bin เวลาที่ผ่านไป: 15812mS

จากนั้นคุณสามารถใช้ r cmd เพื่อเริ่มการบันทึกการทำงาน การรันจะใช้เวลาตามที่ร้องขอหรือจนกว่า s cmd จะถูกใช้เพื่อหยุดการทำงาน คุณยังสามารถใช้ ? cmd ขณะบันทึกเพื่อรับการกำหนดเวลาและจำนวนที่อัปเดต นี่คือการหยุดวิ่งระยะสั้นก่อนโดยใช้ s cmd

กำลังบันทึกข้อมูล…..

Ver:0.01 ป้อนหนึ่งในคำสั่งต่อไปนี้: ? - สถานะปัจจุบันและข้อมูลเมตา - หยุดการบันทึกข้อมูล

กำลังบันทึกข้อมูล… ตรวจสอบด้วย ? สั่งการ

เวลาที่ผ่านไป: 0:00:10.000 จาก 720:00:00.000 เวลาที่ผ่านไป: 0:00:20,0000 จาก 720:00:00.000..

การหยุดการบันทึกและลบไฟล์ที่ไม่ได้ใช้

… การลบไฟล์ที่ไม่ได้ใช้: log98.bin การลบไฟล์ที่ไม่ได้ใช้: log99.bin

0:01:04.976 จาก 720:00:00.000

พินตัวอย่าง: 16 17 ลำดับไบต์: บิต ADC แบบปลายเล็ก: 10 ค่าเฉลี่ยตัวอย่าง ADC มากกว่า: 4 อัตราตัวอย่าง: 1000.00 ช่วงตัวอย่าง: 1000uS ตัวอย่างต่อบล็อก: 127 เวลาเติมบล็อก: 127000uS เวลาเติมไฟล์: 9:01: 52.000 เวลาเติมไฟล์ทั้งหมด: 894:04:48.000 เวลาแฝงสูงสุดของ SD (รวมไฟล์ปิด/เปิด): 204uS เวลาแฝงไฟล์สูงสุด/ปิด/เปิด: 0uS จำนวนบล็อกบัฟเฟอร์: 28 เวลาเติมบัฟเฟอร์บล็อกทั้งหมด: 3556000uS จำนวนบัฟเฟอร์สูงสุด บันทึกไว้ในการโทรไปยัง storeSampleBuffers(): 1 Missed Timers total: 0 Total Missed Samples จนถึงตอนนี้: 0 Total Blocks ที่เขียน: 511 ตัวอย่างทั้งหมดที่เขียน: 64832 ครอบคลุม: 0:01:04.832 ไฟล์ปัจจุบัน: log00.bin

ลส:

2000-01-01 01:00:00 261632 log00.bin 2000-01-01 01:00:00 240 log.met

เสร็จสิ้นการบันทึกข้อมูล!

Ver:0.01 ป้อนหนึ่งในคำสั่งต่อไปนี้: ? - สถานะปัจจุบันและข้อมูลเมตา ** r - บันทึกข้อมูล ADC ** ไม่พร้อมใช้งาน มีข้อมูลอยู่แล้ว ** i - เริ่มต้นไฟล์ ** ไม่พร้อมใช้งาน มีข้อมูลอยู่แล้ว l - รายการไฟล์

ข้อมูลถูกบันทึกไว้แล้ว ตรวจสอบด้วย ?

จอแสดงผล LED

ไฟ LED ที่เชื่อมต่อกับ D3 (โดย D2 ให้การเชื่อมต่อ GND) จะเปิดติดสว่าง หากพลาดตัวอย่างใดๆ และจะกะพริบหากมีข้อผิดพลาด ภาพสเก็ตช์พยายามดำเนินการต่อหลังจากเกิดข้อผิดพลาดแต่อาจไม่สำเร็จ

ขั้นตอนที่ 3: การบันทึกข้อมูลจริง

เมื่อบันทึกข้อมูลจริงในระยะเวลานาน จะสะดวกกว่าในการเชื่อมต่อโมดูลการสื่อสารกับพิน D0/D1 และควบคุมและตรวจสอบการบันทึกจากระยะไกล ที่นี่ใช้โมดูล Bluetooth Mate Silver กับการตั้งค่าเริ่มต้น 115200 บอด ไม่มีการจับมือฮาร์ดแวร์ (RTC, CTS) รหัสพิน 1234

หมายเหตุ: เมื่อจ่ายไฟให้กับโมดูล Mate Silver จะเข้าสู่โหมดการกำหนดค่า ไฟ LED สีแดงจะกะพริบเป็นเวลา 60 วินาที ในช่วงเวลานี้ คุณสามารถส่ง $$$ ผ่านการเชื่อมต่อแบบอนุกรมไปยังโมดูลเพื่อกำหนดค่าได้ แต่คุณไม่สามารถเชื่อมต่อโมดูลได้ เมื่อไฟ LED สีแดงกะพริบช้าๆ โมดูล Bluetooth จะยอมรับการเชื่อมต่อ

เปลี่ยนการกำหนด COM_SERIAL ใน Teensy32AnalogLogger.ino เป็นการเชื่อมต่อฮาร์ดแวร์ซีเรียล (D0/D1), Serial1

#define COM_SERIAL Serial1

หลังจากจับคู่กับคอมพิวเตอร์แล้ว พอร์ต COM ใหม่จะถูกสร้างขึ้นบนคอมพิวเตอร์ และสามารถใช้ CoolTerm เพื่อเชื่อมต่อและควบคุมและตรวจสอบการบันทึกได้ โมดูลการสื่อสารที่เชื่อมต่อแบบอนุกรมอื่นๆ ยังสามารถใช้ได้ เช่น WiFi หรือ BLE โปรดดูรายละเอียดที่ Arduino UNO/Mega Starter ซึ่งควบคุมโดย Android/pfodApp

คุณยังสามารถควบคุมและตรวจสอบการบันทึกจากมือถือ Android ของคุณโดยใช้แอพเทอร์มินัลบลูทู ธ เช่นแอพ Bluetooth Terminal หรือใช้แอพเทอร์มินัล WiFi และ TCP เช่น TCP Telnet Terminal Pro หรือ Uart ถึง 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

โดยสรุป: - สำหรับการอ่านแบบ Single Ended เช่น +Volts ที่อ้างอิงถึง 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 Files

Teensy32AnalogLogger.ino บันทึกตัวอย่างเป็นไบนารีในไฟล์ logxx.bin เช่น log00.bin ไปยัง log99.bin Teensy32AnalogLogger.ino ยังบันทึกไฟล์ log.met ของข้อมูลเมตาเกี่ยวกับการรัน

คุณสามารถใช้ SDtoCSV.jar (ซอร์สโค้ด SDtoCSV_src.zip) เพื่อแปลงไฟล์.bin เป็น.csv เพื่อดำเนินการต่อไปได้ คัดลอกไฟล์จากการ์ด SD ไปยังฮาร์ดดิสก์ของคอมพิวเตอร์โดยมีพื้นที่ว่างอย่างน้อย 70Gig และคัดลอก SDtoCSV.jar ไปยังไดเร็กทอรีเดียวกัน เปิดหน้าต่างคำสั่งในไดเร็กทอรีนั้นแล้วเรียกใช้

java -jar SDtoCSV.jar บันทึก

หากคอมพิวเตอร์ของคุณไม่มีการติดตั้ง Java ให้ติดตั้งจาก www.java.com

SDtoCSV จะประมวลผลไฟล์ log.met และจากนั้นไฟล์ logxx.bin แต่ละไฟล์ที่มีอยู่ในไดเร็กทอรีและส่งออกไฟล์.csv สำหรับ.bin แต่ละไฟล์ ไฟล์.csv มีหมายเลขลำดับตัวอย่างตามด้วยการอ่านสองครั้ง

เอาต์พุตคอนโซลตัวอย่างสำหรับการอ่าน 2 adc ที่สุ่มตัวอย่าง 30303 ครั้ง/วินาทีจะแสดงที่นี่ output.txt มันแสดงให้เห็นว่ามีการรายงานตัวอย่างที่ไม่ได้รับ (การเพิ่มจำนวนบัฟเฟอร์เป็นสองเท่าในร่างสุดท้ายแก้ไขตัวอย่างที่ไม่ได้รับเหล่านี้)

SD_Logging เป็นการแปลง CSV ตรวจสอบ SDtoCSV.log เพื่อดูความคืบหน้าและข้อความแสดงข้อผิดพลาด บันทึกการประมวลผล00 ประมวลผลแล้ว 256000 บล็อก กำลังประมวลผล log01 ประมวลผลแล้ว 256000 บล็อก.. บันทึกการประมวลผล25 ประมวลผลแล้ว 256000 บล็อก บันทึกการประมวลผล26 ประมวลผลแล้ว 256000 บล็อก บันทึกการประมวลผล27 ประมวลผลแล้ว 256000 บล็อก ตัวอย่างที่ไม่ได้รับ: 2715 บันทึกการประมวลผล28 ประมวลผลแล้ว 256000 บล็อก.. บันทึกการประมวลผล 29 ประมวลผลแล้ว 256000 บล็อก.. บันทึกการประมวลผล47 ประมวลผลแล้ว 256000 บล็อก บันทึกการประมวลผล48 ประมวลผลแล้ว 35935 บล็อก --- ประมวลผลเสร็จแล้ว

ไฟล์บันทึกที่สมบูรณ์กว่า SDtoCSV.log ถูกผนวกเข้ากับการรันแต่ละครั้งของ SDtoCSV ซึ่งจะรวมเอาท์พุตข้อมูลเมตาและข้อความแสดงข้อผิดพลาดใดๆ โดยที่ count:254 คือจำนวนข้อมูลที่เก็บไว้ในบล็อกนั้น เช่น 127 ตัวอย่าง x 2 การอ่าน adc ต่อบล็อก missSamples คือจำนวนคู่ของการอ่านที่ไม่ได้รับ เช่น บรรทัดในเอาต์พุต.csv

=== ไฟล์บันทึกสำหรับการแปลง SD_Logging เป็น CSV วันเสาร์ที่ 13 ก.ค. 13:19:51 AEST 2019 หากต้องการดูข้อความแสดงความคืบหน้าบนคอนโซล ให้ใช้ java -jar SDtoCSV.jar Base File Name 'log' Metadata Version: 0 (Little Endian) sampleInterval uS: 33 adcBits:10 adcAvgs:4 pinCount:2 พิน: 16, 17 ตัวอย่างPerBlock:127 noBufferBlocks:28 ระยะเวลา mS:51649820 ร้องขอเวลาทำงาน mS:106216704 maxBuffersUsed:32 คำเตือน: เกินจำนวนบัฟเฟอร์ที่พร้อมใช้งาน (28) ตัวอย่างบางส่วนอาจหายไป maxLatency uS:221476 คำเตือน: เกินเวลาที่กำหนดโดยบัฟเฟอร์บล็อก (117348uS) ตัวอย่างบางส่วนจะหายไป maxFileOpenTime uS:20998 missTimers:0 missSamplesTotal:2715 totalBlocksWritten:12323935 totalSamplesWritten:1565139665 Processing log00.bin Processed 256000 blocks Processing log01.bin Processed 256000 blocks.. กำลังประมวลผล log26.bin ประมวลผลแล้ว 256000 บล็อก กำลังประมวลผล log27.bin !!! บล็อก:57696 จำนวน:254 พลาดตัวอย่าง:2339 !!! บล็อก:57697 จำนวน:254 พลาดตัวอย่าง:376 ประมวลผลแล้ว 256000 บล็อก --- ตัวอย่างที่ไม่ได้รับทั้งหมด: 2715

กำลังประมวลผล log28.bin ประมวลผลแล้ว 256000 บล็อก

… กำลังประมวลผล log47.bin ประมวลผลแล้ว 256000 บล็อก กำลังประมวลผล log48.bin ประมวลผลแล้ว 35935 บล็อก --- ประมวลผลเสร็จแล้ว

ตัวอย่างของไฟล์เอาต์พุต log00.csv คือ

SampleCounter (ต่อ 33uS), พิน 16, พิน 170, 248, 205 1, 273, 195 2, 228, 337 3, 360, 302 4, 355, 369 5, 220, 281..

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

ขั้นตอนที่ 6: ความคิดเห็นเกี่ยวกับโค้ดและส่วนขยาย

Teensy32AnalogLogger เป็นเวอร์ชันที่ได้รับการแก้ไขอย่างหนักของตัวอย่าง AnalogBinLogger ของ Bill Greiman ในไลบรารี SdFat Arduino ของเขา ที่นี่ห้องสมุดได้รับการเขียนใหม่เพื่อให้ทำงานบน Teensy 3.2

Teensy32AnalogLogger ใช้ timer0 เพื่อตั้งค่าช่วงเวลาตัวอย่าง ตัวจัดการขัดจังหวะสำหรับ timer0 เริ่มการแปลง ADC สองครั้ง ตัวจัดการการขัดจังหวะสำหรับโมดูล ADC ที่สองจะถูกเรียกอย่างต่อเนื่องจนกว่าทั้งสองจะเสร็จสิ้น โดยปกติโมดูล ADC แรกที่เริ่มต้น ADC_0 จะเสร็จสิ้นก่อนโมดูลที่สองของ ADC ดังนั้นตัวจัดการการขัดจังหวะจะถูกเรียกเพียงครั้งเดียว ตัวจัดการการขัดจังหวะ ADC_1 จะบันทึกตัวอย่างลงในบัฟเฟอร์ข้อมูล

ในลูปหลัก () storeSampleBuffer() จะบันทึกบัฟเฟอร์ทั้งหมดลงในการ์ด SD และรีไซเคิลบัฟเฟอร์ไปยังคิวบัฟเฟอร์ที่ว่างเปล่า RAM จำนวนมากที่มีอยู่ใน Teensy 3.2 หมายความว่าสามารถจัดสรรบัฟเฟอร์จำนวนมากได้ ดังนั้น storeSampleBuffer() จึงไม่จำเป็นต้องเรียกบ่อย ซึ่งจะทำให้เวลาสำหรับ main loop() ทำงานอื่น เช่น คำสั่งกระบวนการและส่งออก

ส่วนขยาย

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

  1. เพิ่มการควบคุมแบบเรียลไทม์และการตรวจสอบรูปแบบคลื่นสุ่มตัวอย่างผ่าน pfodApp โดยใช้ฟังก์ชันการวางแผนของ pfodApp เพื่อแสดงภาพรวมของรูปแบบคลื่น
  2. ขยายหมายเลขไฟล์หลังจาก 99 เพื่อการสุ่มตัวอย่างที่ยาวนานขึ้น
  3. ตัวอย่างมากกว่า 2 อินพุต เนื่องจาก Teensy 3.2 มีโมดูล ADC คู่ คุณจึงสามารถแก้ไขโค้ดเพื่อเพิ่มอินพุตพิเศษเป็นคู่เพื่อเพิ่มอัตราการสุ่มตัวอย่างสูงสุด
  4. เพิ่มการตรวจสอบแบตเตอรี่เพื่อติดตามการชาร์จแบตเตอรี่ Teensy 3.2 ใช้ประมาณ 1100mAhrs ใน 24 ชั่วโมงรวมถึงโมดูลบลูทู ธ และ SD แต่ไม่รวมโมดูลเซ็นเซอร์
  5. เพิ่มวงจรจ่ายแบตเตอรี่แบบคู่เพื่อให้สามารถเปลี่ยนแบตเตอรี่ได้โดยไม่ขัดจังหวะการบันทึก

แนะนำ: