Оглавление:

Запись высокоскоростной ЭКГ или других данных непрерывно в течение месяца: 6 шагов
Запись высокоскоростной ЭКГ или других данных непрерывно в течение месяца: 6 шагов

Видео: Запись высокоскоростной ЭКГ или других данных непрерывно в течение месяца: 6 шагов

Видео: Запись высокоскоростной ЭКГ или других данных непрерывно в течение месяца: 6 шагов
Видео: ВЗГЛЯД В БУДУЩЕЕ | #аудиокнига | Жак Фреско и Кеннет Киз 2024, Июль
Anonim
Запись высокоскоростной ЭКГ или других данных непрерывно в течение месяца
Запись высокоскоростной ЭКГ или других данных непрерывно в течение месяца

Этот проект был разработан для поддержки университетской медицинской исследовательской группы, которой требовалось носимое устройство, которое могло бы регистрировать 2 сигнала ЭКГ с частотой 1000 выборок в секунду каждый (всего 2K выборок в секунду) непрерывно в течение 30 дней для выявления аритмий. Представленный здесь проект включает удаленное управление и мониторинг ведения журнала. Дистанционное управление осуществляется через меню, представленные на последовательном терминале, на компьютере или мобильном телефоне. Этот проект не распространяется на измерения ЭКГ, упаковку или батарею, необходимую для окончательного ношения.

Эта высокоскоростная / долговечная версия использует Teensy 3.2, модуль коммутации Adafruit Micro-SD, качественную SD-карту 16G SDHC класса 10 для регистрации данных и модуль связи Bluetooth для управления и мониторинга. Также доступна менее развитая и более медленная версия этого проекта UNO / Mega2560. Хотя в этом проекте используется модуль связи Bluetooth для управления и мониторинга регистрации, вы также можете использовать модули Wi-Fi или BLE.

Эта версия, основанная на Teensy 3.2, поддерживает гораздо более высокие частоты дискретизации, чем версия UNO / Mega2560. Используя этот код, Teensy 3.2 может выполнять выборку и регистрацию двух выборок АЦП на частоте> 30 кГц с аппаратным усреднением по 4 выборкам, что позволяет легко удовлетворить указанное выше требование 1000 выборок в секунду. Код поддерживает сохранение 100 файлов.bin по 128 КБ каждый. На 30 кГц это покрывает 29 часов 30 минут. При скорости 1000 выборок в секунду он покрывает 37 дней. Код может быть легко расширен для обработки более 100 файлов, что увеличивает продолжительность выполнения. В конце запуска у вас будет> 10 ГБ данных,.bin, файлы и.met файл метаданных, описывающих запуск и результаты. Поставляемый SDtoCSV.jar (исходный код SDtoCSV_src.zip) можно использовать для преобразования файлов.bin в файлы.csv на вашем компьютере для дальнейшей обработки. Полученные данные> 60Гиг. Версия UNO / Mega2560 имеет преобразование.bin в.csv, включенное в скетч Arduino, но, учитывая объем данных, регистрируемых версией Teensy, это неэффективный способ выполнить преобразование.

Запасы

Teensy 3.2 от PJRC

Отрывная плата для карт памяти Adafruit MicroSD + или аналогичная.

Карта памяти MicroSD 16G SDHC класса 10 хорошего качества, например SanDisk.

Питание 5 В USB

Светодиод с последовательно включенным резистором 470R.

2 резистора 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 → Include Library → Add. ZIP library menu, чтобы установить библиотеки из 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, чтобы выводить его через USB-соединение Teensy.

#define COM_SERIAL Serial

Затем загрузите скетч в Teensy 3.2.

Откройте монитор последовательного порта Arduino IDE со скоростью 115200 бод (с установленными NL и CR). Через несколько секунд Teensy 3.2 отобразит меню команд.

Ver: 0.01 введите одну из следующих команд:? - текущий статус и метаданные; - инициализировать файлы; - список файлов>

? cmd отображает подробную информацию о текущих настройках. (См. Верхнюю часть Teensy32AnalogLogger.ino, чтобы изменить эти настройки). Команды должны завершаться NL или CR или обоими.

0: 00: 00.000 из 720: 00: 00.000

Выводы выборки: 16 17 Порядок байтов: биты АЦП с обратным порядком байтов: 10 усредненных выборок АЦП за: 4 Частота выборки: 1000,00 Интервал выборки: 1000 мкс Выборок на блок: 127 Время заполнения блока: 127000 мкс Время заполнения файла: 9:01: 52,000 Время для заполнения ВСЕХ файлов: 894: 04: 48,000 Максимальная задержка SD (включая закрытие / открытие файла): 0 мкс Максимальная задержка при закрытии / открытии файла: 0 мкс Количество буферных блоков: 28 Время заполнения ВСЕХ блочных буферов: 3556000 мкс Максимальное количество буферов сохранено в вызове storeSampleBuffers (): 0 Всего пропущенных таймеров: 0 Всего пропущенных сэмплов на данный момент: 0 Всего записанных блоков: 0 Всего записанных сэмплов: 0, охват: 0: 00: 00.000 Текущий файл:

В этом случае текущее время выполнения регистрации составляет 0 из запрошенных 720 часов (30 дней), выборки D16 / A2 и D17 / A3 (см. Ниже ограничения на выбор входов АЦП) 1000 раз в секунду. Максимальное время работы может составлять до 894 часов (37,25 дня). Основной цикл () может быть занят до 3,5 секунд (время для заполнения ВСЕХ блочных буферов), прежде чем все доступные буферы будут заполнены и сэмплы начнут теряться. Сохраненные буферы и т. Д. Обновляются по мере выполнения.

Вставьте пустую SD-карту, используйте команду «i» для инициализации 99 файлов, используемых для хранения данных. Их предварительная инициализация сокращает время задержки при переключении от одного файла к другому и обеспечивает более быструю выборку.

Инициализация 99 файлов

Создание нового файла: log00.bin Истекшее время: 368мс Создание нового файла: log01.bin Истекшее время: 520мс… Создание нового файла: log98.bin Истекшее время: 15660 мс Создание нового файла: log99.bin Истекшее время: 15812 мс

Затем вы можете использовать команду r, чтобы запустить запуск журнала. Запуск будет в течение запрошенного времени или до тех пор, пока команда s cmd не остановится. Вы также можете использовать? cmd во время регистрации, чтобы получить обновленные тайминги и счетчики. Вот небольшой пробег, остановленный на раннем этапе с помощью s cmd.

ЗАПИСЬ ДАННЫХ…..

Ver: 0.01 введите одну из следующих команд:? - текущий статус и метаданные - остановить регистрацию данных

ЗАПИСЬ ДАННЫХ… Проверить? команда

Истекшее время работы: 0: 00: 10.000 из 720: 00: 00.000 Истекшее время работы: 0: 00: 20.000 из 720: 00: 00.000…

Остановка ведения журнала и удаление неиспользуемых файлов.

… Удаление неиспользуемого файла: log98.bin Удаление неиспользуемого файла: log99.bin

0: 01: 04.976 из 720: 00: 00.000

Выводы выборки: 16 17 Порядок байтов: биты АЦП с обратным порядком байтов: 10 усредненных выборок АЦП за: 4 Частота выборки: 1000,00 Интервал выборки: 1000 мкс Выборок на блок: 127 Время заполнения блока: 127000 мкс Время заполнения файла: 9:01: 52,000 Время для заполнения ВСЕХ файлов: 894: 04: 48,000 Максимальная задержка SD (включая закрытие / открытие файла): 204 мкс Максимальная задержка закрытия / открытия файла: 0 мкс Количество буферных блоков: 28 Время заполнения ВСЕХ блочных буферов: 3556000 мкс Максимальное количество буферов сохранено в вызове storeSampleBuffers (): 1 Всего пропущенных таймеров: 0 Всего пропущенных образцов на данный момент: 0 Всего записанных блоков: 511 Всего записанных образцов: 64832, охват: 0: 01: 04.832 Текущий файл: log00.bin

ls:

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

РЕГИСТРАЦИЯ ДАННЫХ ЗАВЕРШЕНА!

Ver: 0.01 введите одну из следующих команд:? - текущий статус и метаданные ** r - запись данных АЦП ** недоступна. Данные уже существуют ** i - инициализировать файлы ** недоступно. Данные уже существуют l - список файлов

ДАННЫЕ УЖЕ БЫЛИ ЗАПИСАНЫ, уточнить у?

Светодиодный дисплей

Светодиод, подключенный к D3 (с D2, обеспечивающим соединение GND), будет гореть постоянно, если какой-либо образец пропущен, и будет мигать, если есть ошибка. Скетч пытается продолжить работу после ошибок, но может сделать это безуспешно.

Шаг 3: Регистрация реальных данных

При длительной регистрации реальных данных удобнее подключить коммуникационный модуль к контактам D0 / D1 и управлять и контролировать регистрацию удаленно. Здесь использовался модуль Bluetooth Mate Silver с настройками по умолчанию, 115200 бод, без аппаратного квитирования (RTC, CTS), пин-код 1234.

Примечание. При подаче питания на модуль Mate Silver он переходит в режим настройки, быстро мигая красным светом, на 60 секунд. В течение этого времени вы можете отправить $$$ через последовательное соединение на модуль, чтобы настроить его, но вы не можете подключить модуль. Когда красный светодиод будет медленно мигать, модуль Bluetooth будет принимать соединения.

Измените определение COM_SERIAL в Teensy32AnalogLogger.ino на аппаратное последовательное (D0 / D1) соединение, Serial1

#define COM_SERIAL Serial1

После сопряжения с компьютером на компьютере был создан новый COM-порт, и CoolTerm можно использовать для подключения, управления и мониторинга регистрации. Также могут использоваться другие последовательно подключенные коммуникационные модули, такие как WiFi или BLE, подробности см. В разделе Arduino UNO / Mega Starter, управляемый Android / pfodApp.

Вы также можете контролировать и отслеживать ведение журнала со своего мобильного телефона Android с помощью приложения терминала Bluetooth, такого как приложение Bluetooth Terminal, или с помощью приложения терминала Wi-Fi и TCP, такого как TCP Telnet Terminal Pro, или Uart to BLE mdoule и терминального приложения BLE, такого как nRF UART V2

Шаг 4: Ограничения на выбор входов АЦП

Ограничения на выбор входов АЦП
Ограничения на выбор входов АЦП

Teensy 3.2 имеет два отдельных аппаратных модуля АЦП, ADC_0 и ADC_1, в микропроцессоре, поэтому он может выполнять выборку с двух входов одновременно. Он также имеет встроенное аппаратное усреднение, которое берет несколько выборок АЦП и усредняет их перед получением результата.

Существуют ограничения на то, какие входы могут быть подключены к ADC_0, ADC_1. Изображение Teensy3_1_AnalogCard-p.webp

Подводя итог: -Для односторонних чтений, т.е. + вольт, привязанный к GND, ADC_0 может считывать от A0 до A9, A10, A11, A12, A14 ADC_1 может читать от A2, A3, A10, A13, от A15 до A20. не могу прочитать, вернет 0 (всегда)

В этом проекте используются A2, A3, к каждому из которых можно получить доступ через ADC_0 или ADC_1.

Шаг 5: преобразование файлов.bin в файлы.csv

Teensy32AnalogLogger.ino сохраняет образцы как двоичные в файлах logxx.bin, то есть log00.bin в log99.bin. Teensy32AnalogLogger.ino также сохраняет файл log.met с метаданными о пробеге.

Вы можете использовать SDtoCSV.jar (исходный код SDtoCSV_src.zip) для преобразования файлов.bin в.csv для дальнейшей обработки. Скопируйте файлы с SD-карты на жесткий диск вашего компьютера со свободным пространством не менее 70 ГБ и скопируйте SDtoCSV.jar в тот же каталог. Откройте командное окно в этом каталоге и запустите

java -jar журнал SDtoCSV.jar

Если на вашем компьютере не установлена Java, установите ее с www.java.com.

SDtoCSV обработает файл log.met, а затем каждый из доступных файлов logxx.bin в каталоге и выведет файл.csv для каждого.bin. В файле.csv указан порядковый номер образца, за которым следуют два значения.

Здесь показан пример вывода на консоль для показаний 2 АЦП с выборкой 30303 раз / сек, output.txt. Он показывает, как сообщается о пропущенных пробах. (Удвоение количества буферов в окончательном эскизе исправило эти пропущенные образцы)

Преобразование SD_Logging в CSV. Проверьте SDtoCSV.log на наличие сообщений о ходе и ошибках. Обработка log00 Обработано 256000 блоков Обработка log01 Обработано 256000 блоков… Журнал обработки25 Обработано 256000 блоков Журнал обработки26 Обработано 256000 блоков Журнал обработки27 Обработано 256000 блоков Пропущенных выборок: 2715 Журнал обработки28 Обработано 256000 блоков… Журнал обработки29 Обработано 256000 блоков… Журнал обработки47 Обработано 256000 блоков Журнал обработки48 Обработано 35935 блоков --- Завершенная обработка

Более полный файл журнала, SDtoCSV.log, добавляется при каждом запуске SDtoCSV. Он включает вывод метаданных и любые сообщения об ошибках. Здесь количество: 254 - это количество данных, хранящихся в этом блоке, то есть 127 выборок x 2 показания АЦП на блок. MisssedSamples - это количество пропущенных пар чтения, то есть строк в выводе.csv.

=== Файл журнала для преобразования SD_Logging в CSV Сб, 13 июля 13:19:51 AEST 2019 Для просмотра сообщений о ходе выполнения на консоли используйте java -jar SDtoCSV.jar Базовое имя файла 'log' Версия метаданных: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinCount: 2 Pins: 16, 17 samplesPerBlock: 127 noBufferBlocks: 28 длительность mS: 51649820 запрошенное время выполнения mS: 106216704 maxBuffersUsed: 32 Предупреждение: превышает количество доступных буферов (28). Некоторые образцы могут отсутствовать. maxLatency uS: 221476 Предупреждение. Превышено время, указанное в буферных блоках (117348uS). Некоторые образцы будут отсутствовать. maxFileOpenTime US: 20998 пропущенных таймеров: 0 пропущенныхSamplesTotal: 2715 totalBlocksWritten: 12323935 totalSamplesWritten: 1565139665 Обработка log00.bin Обработано 256000 блоков Обработка log01.bin Обработано 256000 блоков… Обработка 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 (на 33 мкс), вывод 16, вывод 170, 248, 205 1, 273, 195 2, 228, 337 3, 360, 302 4, 355, 369 5, 220, 281…

Счетчик выборок увеличивается от файла к файлу, поэтому его можно использовать в качестве отметки времени. Если есть пропущенные отсчеты, то счетчик отсчетов увеличивается на пропущенный счет перед выводом следующей строки, чтобы счетчик / отметка времени оставались точными для записанных отсчетов.

Шаг 6. Комментарии к коду и расширениям

Teensy32AnalogLogger - это сильно модифицированная версия примера Билла Греймана AnalogBinLogger в его библиотеке SdFat Arduino. Здесь библиотека была переписана для работы на Teensy 3.2.

Teensy32AnalogLogger использует timer0 для установки интервала выборки. Обработчик прерывания для timer0 запускает два преобразования АЦП. Обработчик прерывания для второго модуля ADC вызывается постоянно, пока они оба не закончат работу, обычно первый запущенный модуль ADC_0 завершает работу раньше второго, поэтому обработчик прерывания вызывается только один раз. Обработчик прерывания ADC_1 сохраняет выборки в буфер данных.

В основном цикле () storeSampleBuffer () сохраняет все полные буферы на SD-карту и повторно обрабатывает буферы в пустой очереди буферов. Большой объем оперативной памяти, доступный в Teensy 3.2, означает, что можно выделить большое количество буферов, и поэтому storeSampleBuffer () не нужно часто вызывать. Это дает основному циклу () время для выполнения другой работы, например обработки команд и отправки вывода.

Расширения

Хотя этот проект функционирует как высокоскоростной регистратор данных, для полноценного ношения он все еще нуждается в упаковке, а также в поставке аккумуляторной системы и датчиков ЭКГ. Кроме того, есть некоторые расширения, которые следует учитывать.

  1. Добавьте контроль и мониторинг дискретизированной формы волны в реальном времени через pfodApp, используя функцию построения графика pfodApp, чтобы отображать моментальные снимки формы волны
  2. Увеличьте количество файлов до 99 для более длительных прогонов выборки
  3. Выборка более 2 входов. Поскольку Teensy 3.2 имеет двойные модули АЦП, вы можете изменить код, добавив дополнительные входы парами, чтобы максимизировать частоту дискретизации.
  4. Добавьте мониторинг батареи для отслеживания заряда батареи. Teensy 3.2 потребляет около 1100 мАч в течение 24 часов, включая модуль Bluetooth и SD, но исключая модуль датчика.
  5. Добавьте цепь питания от двух аккумуляторов, чтобы можно было менять аккумуляторы без прерывания регистрации.

Рекомендуемые: