Mục lục:

Ghi nhật ký điện tâm đồ tốc độ cao hoặc dữ liệu khác, liên tục trong hơn một tháng: 6 bước
Ghi nhật ký điện tâm đồ tốc độ cao hoặc dữ liệu khác, liên tục trong hơn một tháng: 6 bước

Video: Ghi nhật ký điện tâm đồ tốc độ cao hoặc dữ liệu khác, liên tục trong hơn một tháng: 6 bước

Video: Ghi nhật ký điện tâm đồ tốc độ cao hoặc dữ liệu khác, liên tục trong hơn một tháng: 6 bước
Video: ĐIỆN TÂM ĐỒ (Phần 1) 2024, Tháng bảy
Anonim
Ghi nhật ký điện tâm đồ tốc độ cao hoặc dữ liệu khác, liên tục trong hơn một tháng
Ghi nhật ký điện tâm đồ tốc độ cao hoặc dữ liệu khác, liên tục trong hơn một tháng

Dự án này được phát triển để hỗ trợ một nhóm nghiên cứu y khoa của trường đại học, những người này cần một thiết bị đeo có thể ghi lại 2 x tín hiệu ECG ở 1000 mẫu / giây mỗi (tổng cộng 2K mẫu / giây) liên tục trong 30 ngày, để phát hiện rối loạn nhịp tim. Dự án được trình bày ở đây bao gồm điều khiển từ xa và giám sát việc ghi nhật ký. Điều khiển từ xa thông qua các menu được trình bày trên thiết bị đầu cuối nối tiếp, trên máy tính hoặc điện thoại di động. Dự án này không đề cập đến phép đo điện tâm đồ hoặc đóng gói hoặc pin cần thiết cho thiết bị đeo cuối cùng.

Phiên bản tốc độ cao / thời lượng dài này sử dụng mô-đun đột phá Teensy 3.2, Adafruit Micro-SD, thẻ SD 16G SDHC lớp 10 chất lượng để ghi dữ liệu và mô-đun truyền thông Bluetooth để điều khiển và giám sát. Phiên bản UNO / Mega2560 kém phát triển hơn và chậm hơn của dự án này cũng có sẵn. Trong khi dự án này sử dụng mô-đun truyền thông Bluetooth để kiểm soát và giám sát việc ghi nhật ký, bạn cũng có thể sử dụng mô-đun WiFi hoặc BLE.

Phiên bản này, dựa trên Teensy 3.2, có khả năng lấy mẫu cao hơn nhiều so với phiên bản UNO / Mega2560. Sử dụng mã này, Teensy 3.2 có thể lấy mẫu và ghi nhật ký hai mẫu ADC ở> 30Khz với phần cứng lấy trung bình trên 4 mẫu và do đó dễ dàng đáp ứng yêu cầu 1000 mẫu / giây ở trên. Mã hỗ trợ lưu 100 tệp.bin, mỗi tệp 128K. Ở 30Khz bao gồm 29 giờ 30 phút. Ở tốc độ 1000 mẫu / giây, nó có thời hạn 37 ngày. Mã có thể dễ dàng được mở rộng để xử lý hơn 100 tệp, do đó, kéo dài thời gian chạy. Khi kết thúc quá trình chạy, bạn sẽ có> 10Gig dữ liệu,.bin, tệp và tệp.met gồm dữ liệu meta mô tả quá trình chạy và kết quả. SDtoCSV.jar được cung cấp (mã nguồn SDtoCSV_src.zip) có thể được sử dụng để chuyển đổi tệp.bin thành tệp.csv trên máy tính của bạn để xử lý thêm. Dữ liệu kết quả là> 60Gig. Phiên bản UNO / Mega2560 có chuyển đổi.bin sang.csv được bao gồm trong bản phác thảo Arduino, nhưng với khối lượng dữ liệu được ghi lại bởi phiên bản Teensy, đó không phải là cách hiệu quả để thực hiện chuyển đổi.

Quân nhu

Teensy 3.2 bởi PJRC

Bảng phân tích thẻ MicroSD Adafruit + hoặc tương tự.

Thẻ MicroSD 16G SDHC lớp 10 có chất lượng tốt, ví dụ: SanDisk.

Nguồn cung cấp 5V USB

Một dẫn với một điện trở 470R mắc nối tiếp.

Điện trở 2 x 100R (bảo vệ khỏi hư hỏng do lỗi dây Tx / Rx)

Bluetooth Mate Silver HOẶC một trong các mô-đun được mô tả trên Arduino UNO / Mega Starter, được điều khiển bởi Android / pfodApp

Bước 1: Thi công

Sự thi công
Sự thi công

Tải xuống và cài đặt Arduino IDE V1.8.9 + từ https://arduino.cc/en/Main/Software. Trang web đó có liên kết cho các hệ điều hành khác nhau và liên kết đến Bắt đầu (https://arduino.cc/en/Guide/HomePage).

Tải xuống và cài đặt Teensyduino (Hỗ trợ Teensy cho Arduino IDE). LƯU Ý cẩn thận hướng dẫn sử dụng đầu tiên.

Chọn Teensy 3.2 làm bảng và kiểm tra xem chương trình ví dụ BLINK có tải và chạy hay không.

Tải xuống và cài đặt các thư viện sau: - millisDelay và SdFat (Ảnh chụp cục bộ của thư viện SdFat được sử dụng cho các thử nghiệm này ở đây.) Và pfodParser.zip (cho lớp pfodBufferedStream và pfodNonBlockingInput)

Tải xuống các tệp zip thư viện và sau đó sử dụng trình đơn Arduino IDE → Sketch → Bao gồm Thư viện → Thêm thư viện. ZIP để cài đặt các thư viện từ các tệp zip.

Giải nén tệp Teensy32AnalogLogger.zip vào thư mục phác thảo Arduino của bạn và lập trình bảng Teensy 3.2 với Teensy32AnalogLogger.ino (Phiên bản 0.01)

Kết nối mô-đun Teensy 3.2, Bluetooth và mô-đun thẻ SD như hình trên (phiên bản pdf)

Bước 2: Chạy chương trình - Thử nghiệm

Trước tiên, hãy định dạng thẻ SD của bạn bằng

Thẻ SD phải trống để bắt đầu ghi nhật ký.

Đối với thử nghiệm ban đầu, bạn không cần kết nối mô-đun Truyền thông, chỉ cần kết nối mô-đun Teensy 3.2 + SD (đã lắp thẻ trống) với Arduino IDE qua cáp nối tiếp USB. Như đã cung cấp, bản phác thảo Teensy32AnalogLogger.ino sử dụng kết nối USB để điều khiển và giám sát. Xem bước Ghi nhật ký Dữ liệu Thực bên dưới để sử dụng thiết bị truyền thông để điều khiển và giám sát.

Chỉnh sửa phần trên cùng của phác thảo Teensy32AnalogLogger.ino để đặt COM_SERIAL thành Serial, để xuất ra kết nối USB dành cho Teensy.

#define Sê-ri COM_SERIAL

Sau đó tải bản phác thảo lên Teensy 3.2

Mở Arduino IDE Serial Monitor ở 115200 baud (với cả NL & CR được đặt). Sau một vài giây, Teensy 3.2 sẽ hiển thị một menu lệnh

Ver: 0.01 nhập một trong các lệnh sau:? - trạng thái hiện tại và metadatai - khởi tạo filesl - danh sách các tệp>

Các ? cmd hiển thị chi tiết các cài đặt hiện tại. (Xem phần trên cùng của Teensy32AnalogLogger.ino để thay đổi các cài đặt này) Cmds phải được kết thúc bằng NL hoặc CR hoặc cả hai.

0: 00: 00.000 trong tổng số 720: 00: 00.000

Chân mẫu: 16 17 Thứ tự byte: Bit ADC Little-Endian: 10 Mẫu ADC trung bình trên: 4 Tốc độ lấy mẫu: 1000.00 Khoảng mẫu: 1000uS Mẫu mỗi khối: 127 Thời gian lấp đầy khối: 127000uS Thời gian điền vào tệp: 9:01: 52.000 Thời gian lấp đầy TẤT CẢ tệp: 894: 04: 48.000 Độ trễ SD tối đa (bao gồm đóng / mở tệp): 0uS Độ trễ đóng / mở tệp tối đa: 0uS Số khối bộ đệm: 28 Thời gian lấp đầy TẤT CẢ bộ đệm khối: 3556000uS Số bộ đệm tối đa được lưu trong lệnh gọi đến storeSampleBuffers (): 0 Tổng số bộ đếm thời gian bị nhỡ: 0 Tổng số mẫu bị bỏ lỡ cho đến nay: 0 Tổng số khối đã viết: 0 Tổng số mẫu được viết: 0 bao gồm: 0: 00: 00.000 Tệp hiện tại:

Trong trường hợp này, thời gian chạy ghi nhật ký hiện tại là 0 trong số 720 giờ được yêu cầu (30 ngày), lấy mẫu D16 / A2 và D17 / A3 (xem bên dưới về Hạn chế lựa chọn đầu vào ADC bên dưới) 1000 lần một giây. Thời gian chạy tối đa có thể lên đến 894 giờ (37,25 ngày). Vòng lặp chính () có thể được sử dụng trong tối đa 3,5 giây (Thời gian để lấp đầy TẤT CẢ các bộ đệm khối) trước khi tất cả các bộ đệm có sẵn được lấp đầy và các mẫu bắt đầu bị mất. Các bộ đệm đã lưu, v.v. được cập nhật khi quá trình chạy diễn ra.

Cắm thẻ SD trống, sử dụng cmd 'i' để khởi tạo 99 tệp được sử dụng để lưu trữ dữ liệu. Việc khởi tạo trước chúng ở đây giúp giảm thời gian trễ khi chuyển từ tệp này sang tệp tiếp theo và cho phép lấy mẫu nhanh hơn.

Khởi tạo 99 tệp

Tạo tệp mới: log00.bin Thời gian đã trôi qua: 368mS Tạo tệp mới: log01.bin Thời gian đã trôi qua: 520mS… Tạo tệp mới: log98.bin Thời gian đã trôi qua: 15660mS Tạo tệp mới: log99.bin Thời gian đã trôi qua: 15812mS

Sau đó, bạn có thể sử dụng cmd r để bắt đầu chạy ghi nhật ký. Việc chạy sẽ diễn ra trong thời gian được yêu cầu hoặc cho đến khi cmd s được sử dụng để dừng nó. Bạn cũng có thể sử dụng dấu? cmd trong khi đăng nhập để cập nhật thời gian và số lượng. Đây là một cuộc chạy ngắn bị dừng sớm bằng cách sử dụng s cmd.

ĐĂNG NHẬP DỮ LIỆU…..

Ver: 0.01 nhập một trong các lệnh sau:? - trạng thái hiện tại và siêu dữ liệu - dừng ghi dữ liệu

ĐĂNG NHẬP DỮ LIỆU… Kiểm tra với? chỉ huy

Thời gian chạy đã trôi qua: 0: 00: 10.000 của 720: 00: 00.000 Thời gian chạy đã qua: 0: 00: 20.000 của 720: 00: 00.000…

Ngừng ghi nhật ký và xóa các tệp không sử dụng.

… Xóa tệp không sử dụng: log98.bin Xóa tệp không sử dụng: log99.bin

0: 01: 04.976 trong tổng số 720: 00: 00.000

Chân mẫu: 16 17 Thứ tự byte: Bit ADC Little-Endian: 10 Mẫu ADC trung bình trên: 4 Tốc độ lấy mẫu: 1000.00 Khoảng mẫu: 1000uS Mẫu mỗi khối: 127 Thời gian lấp đầy khối: 127000uS Thời gian điền vào tệp: 9:01: 52.000 Thời gian để lấp đầy TẤT CẢ tệp: 894: 04: 48.000 Độ trễ SD tối đa (bao gồm đóng / mở tệp): 204uS Độ trễ đóng / mở tệp tối đa: 0uS Số khối bộ đệm: 28 Thời gian lấp đầy TẤT CẢ bộ đệm khối: 3556000uS Số bộ đệm tối đa được lưu trong cuộc gọi đến storeSampleBuffers (): 1 Tổng số bộ đếm thời gian bị nhỡ: 0 Tổng số mẫu bị bỏ lỡ cho đến nay: 0 Tổng số khối đã viết: 511 Tổng số mẫu đã viết: 64832 bao gồm: 0: 01: 04.832 Tệp hiện tại: log00.bin

ls:

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

ĐĂNG NHẬP DỮ LIỆU ĐÃ HOÀN THÀNH!

Ver: 0.01 nhập một trong các lệnh sau:? - trạng thái hiện tại và siêu dữ liệu ** r - ghi dữ liệu ADC ** không khả dụng. Dữ liệu đã tồn tại ** i - không có tệp khởi tạo **. Dữ liệu đã tồn tại l - tệp danh sách

DỮ LIỆU ĐÃ ĐƯỢC ĐĂNG NHẬP, hãy kiểm tra với?

Màn hình LED

Đèn LED được kết nối với D3 (với D2 cung cấp kết nối GND) sẽ bật sáng liên tục nếu bất kỳ mẫu nào bị bỏ sót và sẽ nhấp nháy nếu có lỗi. Bản phác thảo cố gắng tiếp tục sau khi có lỗi nhưng có thể không thành công.

Bước 3: Ghi dữ liệu thực

Khi ghi dữ liệu thực trong khoảng thời gian dài, sẽ thuận tiện hơn khi kết nối mô-đun truyền thông với các chân D0 / D1 và điều khiển và giám sát việc ghi nhật ký từ xa. Ở đây, một mô-đun Bluetooth Mate Silver đã được sử dụng với cài đặt mặc định của nó, 115200 baud, không bắt tay phần cứng (RTC, CTS), mã pin 1234.

Lưu ý: Khi cấp nguồn cho mô-đun Mate Silver, nó sẽ chuyển sang chế độ cấu hình, đèn LED màu đỏ nhấp nháy nhanh, trong 60 giây. Trong thời gian này, bạn có thể gửi $$$ thông qua kết nối nối tiếp tới mô-đun để cấu hình nó nhưng bạn không thể kết nối mô-đun. Khi đèn LED màu đỏ nhấp nháy chậm, mô-đun bluetooth sẽ chấp nhận kết nối.

Thay đổi định nghĩa COM_SERIAL trong Teensy32AnalogLogger.ino thành kết nối serial phần cứng (D0 / D1), Serial1

#define COM_SERIAL Serial1

Sau khi ghép nối với máy tính, một cổng COM mới đã được tạo trên máy tính và CoolTerm có thể được sử dụng để kết nối cũng như điều khiển và giám sát việc ghi nhật ký. Các mô-đun giao tiếp được kết nối nối tiếp khác cũng có thể được sử dụng, chẳng hạn như WiFi hoặc BLE, xem Arduino UNO / Mega Starter, được điều khiển bởi Android / pfodApp để biết chi tiết.

Bạn cũng có thể kiểm soát và giám sát việc ghi nhật ký từ điện thoại di động Android của mình bằng ứng dụng thiết bị đầu cuối bluetooth chẳng hạn như ứng dụng Thiết bị đầu cuối Bluetooth hoặc sử dụng ứng dụng thiết bị đầu cuối WiFi và TCP như TCP Telnet Terminal Pro hoặc Uart to BLE mdoule và ứng dụng thiết bị đầu cuối BLE chẳng hạn như nRF UART V2

Bước 4: Hạn chế lựa chọn đầu vào ADC

Hạn chế đối với việc lựa chọn đầu vào ADC
Hạn chế đối với việc lựa chọn đầu vào ADC

Teensy 3.2 có hai mô-đun phần cứng ADC riêng biệt, ADC_0 và ADC_1, trong bộ vi xử lý của nó để nó có thể lấy mẫu hai đầu vào cùng một lúc. Nó cũng được tích hợp tính năng lấy trung bình phần cứng, lấy nhiều mẫu ADC và tính trung bình chúng trước khi chuyển kết quả.

Có những hạn chế về đầu vào có thể được kết nối với ADC_0, ADC_1. Hình ảnh Teensy3_1_AnalogCard-p.webp

Tóm lại: -Đối với Đọc kết thúc đơn tức là + Volt được tham chiếu đến GND ADC_0 có thể đọc A0 đến A9, A10, A11, A12, A14 ADC_1 có thể đọc A2, A3, A10, A13, A15 đến A20 Nếu bạn chọn một chân mà ADC không thể đọc nó sẽ trả về 0 (luôn luôn)

Dự án này sử dụng A2, A3, mỗi cái có thể được truy cập bởi ADC_0 hoặc ADC_1.

Bước 5: Chuyển đổi tệp.bin thành tệp.csv

Teensy32AnalogLogger.ino lưu các mẫu dưới dạng nhị phân trong các tệp logxx.bin, tức là log00.bin thành log99.bin. Teensy32AnalogLogger.ino cũng lưu tệp log.met của dữ liệu meta về quá trình chạy.

Bạn có thể sử dụng SDtoCSV.jar (mã nguồn SDtoCSV_src.zip) để chuyển đổi các tệp.bin thành.csv để xử lý thêm. Sao chép các tệp từ thẻ SD vào đĩa cứng máy tính của bạn với ít nhất 70Gig dung lượng trống và sao chép SDtoCSV.jar vào cùng một thư mục. Mở một cửa sổ lệnh trong thư mục đó và chạy

nhật ký java -jar SDtoCSV.jar

Nếu máy tính của bạn không có cài đặt Java, hãy cài đặt nó từ www.java.com

SDtoCSV sẽ xử lý tệp log.met và sau đó từng tệp logxx.bin có sẵn trong thư mục và xuất ra tệp.csv cho mỗi tệp.bin. Tệp.csv có số thứ tự mẫu theo sau là hai lần đọc.

Đầu ra bảng điều khiển mẫu cho 2 lần đọc adc lấy mẫu 30303 lần / giây được hiển thị ở đây, output.txt. Nó minh họa cách các mẫu bị bỏ sót được báo cáo. (Nhân đôi số lượng bộ đệm trong bản phác thảo cuối cùng đã khắc phục điều này những mẫu bị thiếu này)

SD_Logging sang chuyển đổi CSV. Kiểm tra SDtoCSV.log để biết tiến trình và thông báo lỗi. Nhật ký xử lý00 Đã xử lý 256000 khối Nhật ký xử lý01 Đã xử lý 256000 khối… Nhật ký xử lý25 Đã xử lý 256000 khối Nhật ký xử lý26 Đã xử lý 256000 khối Nhật ký xử lý27 Đã xử lý 256000 khối Mẫu bị nhỡ: 2715 Nhật ký xử lý28 Đã xử lý 256000 khối… Nhật ký xử lý29 Đã xử lý 256000 khối… Nhật ký xử lý47 Đã xử lý 256000 khối Nhật ký xử lý48 Đã xử lý 35935 khối --- Xử lý xong

Tệp nhật ký đầy đủ hơn, SDtoCSV.log, được thêm vào mỗi lần chạy SDtoCSV. Nó bao gồm đầu ra dữ liệu meta và bất kỳ thông báo lỗi nào. Đây là số đếm: 254 là số lượng dữ liệu được lưu trữ trong khối đó, tức là 127 mẫu x 2 lần đọc adc trên mỗi khối. Các ví dụ bị bỏ sót là số lượng các cặp đọc bị bỏ lỡ, tức là các dòng trong đầu ra.csv.

=== Tệp nhật ký để chuyển đổi SD_Logging sang CSV Thứ bảy 13:19:51 AEST 2019 Để xem thông báo tiến trình trên Bảng điều khiển, hãy sử dụng java -jar SDtoCSV.jar Tên tệp cơ sở 'log' Phiên bản siêu dữ liệu: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pin Số lượng: 2 Pins: 16, 17 mẫuPerBlock: 127 noBufferBlocks: 28 thời lượng mS: 51649820 yêu cầu chạy Thời gian mS: 106216704 maxBuffersĐã sử dụng: 32 Cảnh báo: Vượt quá số bộ đệm có sẵn (28). Một số mẫu có thể bị thiếu. maxLatency uS: 221476 Cảnh báo: Vượt quá thời gian được cung cấp bởi khối đệm (117348uS). Một số mẫu sẽ bị thiếu. maxFileOpenTime uS: 20998 missTimers: 0 missSamplesTotal: 2715 totalBlocksWritten: 12323935 totalSamplesWritten: 1565139665 Xử lý log00.bin Đã xử lý 256000 khối Đang xử lý log01.bin Đã xử lý 256000 khối… Đang xử lý log26.bin Đã xử lý 256000 khối Đang xử lý log27.bin !!! Block: 57696 count: 254 missSamples: 2339 !!! Khối: 57697 số lượng: 254 khối bị thiếu Ví dụ: 376 khối đã xử lý 256000 khối --- Tổng số mẫu bị bỏ lỡ: 2715

Đang xử lý log28.bin Đã xử lý 256000 khối

… Xử lý log47.bin Đã xử lý 256000 khối Đang xử lý log48.bin Đã xử lý 35935 khối --- Xử lý xong

Một mẫu tệp đầu ra log00.csv là

SampleCounter (trên 33uS), Pin 16, Pin 170, 248, 205 1, 273, 195 2, 228, 337 3, 360, 302 4, 355, 369 5, 220, 281…

Bộ đếm mẫu tăng từ tệp này sang tệp khác để nó có thể được sử dụng như một dấu thời gian. Nếu thiếu mẫu thì bộ đếm mẫu được tăng lên bằng số đếm bị thiếu trước khi xuất dòng tiếp theo để bộ đếm / tem thời gian vẫn chính xác cho các mẫu đã ghi.

Bước 6: Nhận xét về Mã và Tiện ích mở rộng

Teensy32AnalogLogger là một phiên bản được sửa đổi nhiều của ví dụ AnalogBinLogger của Bill Greiman trong thư viện SdFat Arduino của anh ấy. Ở đây, thư viện đã được viết lại để chạy trên Teensy 3.2.

Teensy32AnalogLogger sử dụng timer0 để đặt khoảng thời gian lấy mẫu. Bộ xử lý ngắt cho timer0 bắt đầu hai chuyển đổi ADC. Một trình xử lý ngắt cho mô-đun ADC thứ hai liên tục được gọi cho đến khi cả hai kết thúc, thường thì mô-đun ADC đầu tiên được bắt đầu ADC_0 sẽ kết thúc trước mô-đun thứ hai nên trình xử lý ngắt chỉ được gọi một lần. Trình xử lý ngắt ADC_1 lưu các mẫu vào bộ đệm dữ liệu.

Trong vòng lặp chính (), storeSampleBuffer () lưu mọi bộ đệm đầy đủ vào thẻ SD và tái chế các bộ đệm vào hàng đợi bộ đệm trống. Dung lượng RAM lớn có sẵn trên Teensy 3.2 có nghĩa là một số lượng lớn bộ đệm có thể được phân bổ và do đó, storeSampleBuffer () không cần phải gọi thường xuyên. Điều này để lại thời gian cho vòng lặp chính () để thực hiện công việc khác, như xử lý lệnh và gửi đầu ra.

Tiện ích mở rộng

Mặc dù dự án này hoạt động như một bộ ghi dữ liệu tốc độ cao, nhưng đối với một thiết bị đeo hoàn chỉnh, nó vẫn cần được đóng gói và cung cấp hệ thống pin và cảm biến ECG. Ngoài ra, có một số phần mở rộng cần được xem xét.

  1. Thêm điều khiển và giám sát thời gian thực của dạng sóng được lấy mẫu qua pfodApp bằng cách sử dụng chức năng vẽ biểu đồ của pfodApp để hiển thị ảnh chụp nhanh của dạng sóng
  2. Mở rộng số tệp qua 99 để chạy mẫu lâu hơn
  3. Lấy mẫu nhiều hơn 2 đầu vào. Vì Teensy 3.2 có các mô-đun ADC kép, bạn có thể sửa đổi mã để thêm các đầu vào bổ sung theo cặp để tối đa hóa tốc độ lấy mẫu.
  4. Thêm theo dõi pin để theo dõi việc sạc pin. Teensy 3.2 sử dụng khoảng 1100mAhrs trong hơn 24 giờ, bao gồm cả bluetooth và mô-đun SD, nhưng không bao gồm mô-đun cảm biến
  5. Thêm một mạch cung cấp pin kép để cho phép thay đổi pin mà không làm gián đoạn quá trình ghi nhật ký.

Đề xuất: