Съдържание:

Регистрирайте високоскоростен ЕКГ или други данни непрекъснато за повече от месец: 6 стъпки
Регистрирайте високоскоростен ЕКГ или други данни непрекъснато за повече от месец: 6 стъпки

Видео: Регистрирайте високоскоростен ЕКГ или други данни непрекъснато за повече от месец: 6 стъпки

Видео: Регистрирайте високоскоростен ЕКГ или други данни непрекъснато за повече от месец: 6 стъпки
Видео: Как гении меняют мир? Георгий Соловьев о бизнесе из боли, мышлении и о том как совершать невозможное 2024, Юли
Anonim
Регистрирайте високоскоростен ЕКГ или други данни непрекъснато за повече от месец
Регистрирайте високоскоростен ЕКГ или други данни непрекъснато за повече от месец

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

Тази версия с висока скорост/продължителна употреба използва Teensy 3.2, Adafruit Micro-SD модул за прекъсване, качествена 16G SDHC клас 10 SD карта за регистриране на данните и Bluetooth комуникационен модул за контрол и наблюдение. Предлага се и по -малко развита и по -бавна версия на този проект UNO/Mega2560. Докато този проект използва Bluetooth комуникационен модул за контрол и наблюдение на регистрирането, можете също да използвате WiFi или BLE модули.

Тази версия, базирана на Teensy 3.2, е способна на много по -високи честоти на дискретизация от версията UNO/Mega2560. Използвайки този код, Teensy 3.2 може да вземе проби и да регистрира две ADC проби при> 30Khz с хардуерно осредняване на над 4 проби и така лесно отговаря на изискванията за 1000 проби/сек по -горе. Кодът поддържа запазване на 100.bin файлове по 128K всеки. При 30Khz това покрива 29hrs 30min. При 1000 проби/сек обхваща 37 дни. Кодът може лесно да бъде разширен, за да обработва повече от 100 файла, което удължава продължителността на изпълнението. В края на цикъла ще имате> 10Gig данни,.bin, файлове и.met файл с мета данни, описващи изпълнението и резултатите. Предоставеният SDtoCSV.jar (изходен код SDtoCSV_src.zip) може да се използва за преобразуване на.bin файловете в.csv файлове на вашия компютър за по -нататъшна обработка. Получените данни са> 60Gig. Версията UNO/Mega2560 има преобразуване на.bin в.csv, включено в скицата на Arduino, но предвид обема на данните, регистрирани от версията Teensy, това не е ефективен начин за преобразуване.

Консумативи

Teensy 3.2 от PJRC

Адаптираща платка MicroSD карта+ или подобна.

16G SDHC клас 10 MicroSD карта с добро качество, напр. SanDisk.

5V USB захранване

Светодиод с резистор 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 за Arduino IDE). ЗАБЕЛЕЖЕТЕ внимателно инструкциите за първа употреба.

Изберете Teensy 3.2 като дъска и проверете дали примерната програма BLINK се зарежда и работи.

Изтеглете и инсталирайте следните библиотеки:- millisDelay и SdFat (Тук е локална снимка на библиотеката SdFat, използвана за тези тестове.) И pfodParser.zip (за класа pfodBufferedStream и pfodNonBlockingInput)

Изтеглете zip файлове на библиотеката и след това използвайте Arduino IDE → Скица → Включване на библиотека → Добавяне на. 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 на Сериен, за извеждане към USB връзката Teensy.

#define COM_SERIAL Сериен

След това качете скицата в Teensy 3.2

Отворете серийния монитор на Arduino IDE на 115200 бода (с настроени NL и CR). След няколко секунди Teensy 3.2 ще покаже меню с команди

Версия: 0.01 въведете една от следните команди:? - текущо състояние и метаданни - инициализиране на файловеl - списък на файлове>

The? cmd показва подробности за текущите настройки. (Вижте горната част на Teensy32AnalogLogger.ino, за да промените тези настройки) Cmds трябва да бъдат прекратени с NL или CR или и двете.

0: 00: 00,000 от 720: 00: 00,000

Примерни щифтове: 16 17 Байтов ред: Little-Endian ADC битове: 10 ADC средни проби над: 4 Sample Rate: 1000.00 Интервал на извадката: 1000uS Проби на блок: 127 Време за попълване на блок: 127000uS Време за попълване на файл: 9:01: 52.000 Време за попълване на ВСИЧКИ файлове: 894: 04: 48.000 Максимална SD латентност (включва затваряне/отваряне на файла): 0uS Максимално затваряне/отваряне на файл: 0uS Брой буферни блокове: 28 Време за попълване на ВСИЧКИ буфери за блокове: 3556000uS Максимален брой буфери запазени при повикване към storeSampleBuffers (): 0 Общо пропуснати таймери: 0 Общо пропуснати проби досега: 0 Общо написани блокове: 0 Общо написани проби: 0 обхващащи: 0: 00: 00.000 Текущ файл:

В този случай текущото време на записване е 0 от заявените 720 часа (30 дни), вземане на проби D16/A2 и D17/A3 (вижте по -долу за ограничения за избора на ADC входове по -долу) 1000 пъти в секунда. Максималното време на работа може да бъде до 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.

ЗАПИСВАНЕ НА ДАННИ ….

Версия: 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 Байтов ред: Little-Endian ADC битове: 10 ADC средни проби над: 4 Sample Rate: 1000.00 Интервал на извадката: 1000uS Проби на блок: 127 Време за попълване на блок: 127000uS Време за попълване на файл: 9:01: 52.000 Време за попълване на ВСИЧКИ файлове: 894: 04: 48.000 Максимална SD латентност (включва затваряне/отваряне на файла): 204uS Максимална латентност при затваряне/отваряне на файл: 0uS Брой буферни блокове: 28 Време за попълване на ВСИЧКИ буфери на блокове: 3556000uS Максимален брой буфери запазени при повикване до магазина SampleBuffers (): 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

ЗАПИСВАНЕТО НА ДАННИ!

Версия: 0.01 въведете една от следните команди:? - текущо състояние и метаданни ** r - запис на ADC данни ** няма. Данните вече съществуват ** i - инициализиране на файлове ** не е налично. Данните вече съществуват l - списък файлове

ДАННИТЕ ВЕЧЕ СА ЗАПИСАНИ, проверете с?

LED дисплей

Светодиодът, свързан към 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, или използвайки приложение за терминал 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

В обобщение: -За единични приключени четения т.е. не може да се прочете ще върне 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 картата на твърдия диск на вашия компютър с поне 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 блока Обработващ дневник01 Обработени 256000 блока… Обработващ дневник25 Обработени 256000 блока Обработващ дневник26 Обработени 256000 блока Обработващ дневник27 Обработени 256000 блока Пропуснати проби: 2715 Обработващ дневник28 Обработени 256000 блока… Обработващ дневник29 Обработени 256000 блока… Обработващ дневник47 Обработен 256000 блока Обработващ дневник48 Обработен 35935 блока --- Завършена обработка

По -пълен регистрационен файл, SDtoCSV.log, се добавя към всяко изпълнение на SDtoCSV. Той включва извеждането на мета данни и всички съобщения за грешки. Тук броят: 254 е броят на данните, съхранявани в този блок, т.е. 127 проби x 2 показания на adc на блок. MissedSamples е броят на двойките прочетени пропуснати, т.е. редове в.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 samplePerBlock: 127 noBufferBlocks: 28 продължителност mS: 51649820 заявено време за изпълнение Time mS: 106216704 maxBuffersUsed: 32 Предупреждение: Превишава броя на наличните буфери (28). Някои проби може да липсват. maxLatency uS: 221476 Предупреждение: Превишава времето, осигурено от буферни блокове (117348uS). Някои проби ще липсват. maxFileOpenTime uS: 20998 пропуснати Таймери: 0 пропуснати Примери Общо: общо 2715 Блокове Написано: 12323935 общо Проби Написано: 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 (на 33uS), Pin 16, Pin 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 модул се извиква непрекъснато, докато и двата не приключат, обикновено първият стартиран ADC модул ADC_0 ще завърши преди второто включване, така че манипулаторът на прекъсване се извиква само веднъж. Манипулаторът на прекъсване ADC_1 записва пробите в буфер за данни.

В главния цикъл () storeSampleBuffer () записва всички пълни буфери на SD картата и рециклира буферите в празната буферна опашка. Голямото количество RAM, налично на Teensy 3.2, означава, че може да се разпредели голям брой буфери и затова storeSampleBuffer () не трябва да се извиква често. Това оставя време основният цикъл () да извърши друга работа, като команди за процес и изпращане на изход.

Разширения

Въпреки че този проект функционира като високоскоростен регистратор на данни, за пълно носене той все още трябва да бъде пакетиран и доставена батерийна система и ЕКГ сензори. Както и че има някои разширения, които трябва да се имат предвид.

  1. Добавете контрол и наблюдение в реално време на формулираната вълнова форма чрез pfodApp, използвайки функцията за начертаване на pfodApp, за да покажете моментни снимки на формата на вълната
  2. Удължете номерата на файловете след 99 за по -дълги извадки
  3. Пример за повече от 2 входа. Тъй като Teensy 3.2 има двойни ADC модули, можете да промените кода, за да добавите допълнителни входове по двойки, за да увеличите честотата на дискретизация.
  4. Добавете мониторинг на батерията, за да проследите зареждането на батерията. Teensy 3.2 използва около 1100mAhrs за 24 часа, включително bluetooth и SD модул, но без сензорния модул
  5. Добавете двойна верига за захранване на батерията, за да позволите смяна на батерията, без да прекъсвате регистрацията.

Препоръчано: