Obsah:

Zaznamenávejte vysokorychlostní EKG nebo jiná data nepřetržitě déle než měsíc: 6 kroků
Zaznamenávejte vysokorychlostní EKG nebo jiná data nepřetržitě déle než měsíc: 6 kroků

Video: Zaznamenávejte vysokorychlostní EKG nebo jiná data nepřetržitě déle než měsíc: 6 kroků

Video: Zaznamenávejte vysokorychlostní EKG nebo jiná data nepřetržitě déle než měsíc: 6 kroků
Video: НЛО: НАСТОЯЩАЯ ПРАВДА! / ПОЛНЫЙ ДОКУМЕНТАЛЬНЫЙ ФИЛЬМ 2024, Prosinec
Anonim
Zaznamenávejte vysokorychlostní EKG nebo jiná data nepřetržitě déle než měsíc
Zaznamenávejte vysokorychlostní EKG nebo jiná data nepřetržitě déle než měsíc

Tento projekt byl vyvinut na podporu týmu univerzitního lékařského výzkumu, který potřeboval nositelné zařízení, které by dokázalo zaznamenávat 2 x signály EKG rychlostí 1 000 vzorků za sekundu (celkem 2K vzorků/s) nepřetržitě po dobu 30 dnů, aby bylo možné detekovat arytmie. Zde prezentovaný projekt zahrnuje dálkové ovládání a monitorování těžby. Dálkové ovládání je prostřednictvím nabídek na sériovém terminálu, buď na počítači nebo mobilním telefonu. Tento projekt nepokrývá měření EKG nebo balení nebo baterii potřebnou pro konečné nošení.

Tato vysokorychlostní/dlouhotrvající verze využívá pro záznam dat Teensy 3.2, Adafruit Micro-SD breakout modul, kvalitní SD kartu 16G SDHC třídy 10 a komunikační modul Bluetooth pro ovládání a monitorování. K dispozici je také méně vyvinutá a pomalejší verze tohoto projektu UNO/Mega2560. Zatímco tento projekt používá komunikační modul Bluetooth pro řízení a monitorování protokolování, můžete také použít moduly WiFi nebo BLE.

Tato verze, založená na Teensy 3.2, je schopná mnohem vyšších vzorkovacích frekvencí než verze UNO/Mega2560. Pomocí tohoto kódu může Teensy 3.2 vzorkovat a protokolovat dva vzorky ADC na> 30 kHz s hardwarovým průměrováním přes 4 vzorky, a tak snadno splňuje výše uvedený požadavek 1 000 vzorků/s. Kód podporuje uložení 100.bin souborů po 128 kB. Při 30 kHz, což pokrývá 29 hodin 30 minut. Při 1000 vzorcích/s pokrývá 37 dní. Kód lze snadno rozšířit tak, aby zpracovával více než 100 souborů, čímž se prodlouží doba běhu. Na konci běhu budete mít> 10 Gig dat,.bin, soubory a.met soubor metadat popisujících běh a výsledky. Dodaný soubor SDtoCSV.jar (zdrojový kód SDtoCSV_src.zip) lze použít k převodu souborů.bin na soubory.csv ve vašem počítači pro další zpracování. Výsledná data jsou> 60 Gig. Verze UNO/Mega2560 má v náčrtu Arduino zahrnut převod.bin na.csv, ale vzhledem k objemu dat zaznamenaných verzí Teensy to není účinný způsob převodu.

Zásoby

Teensy 3.2 od PJRC

Odlamovací deska karty Adafruit MicroSD+ nebo podobná.

Karta MicroSD 16G SDHC třídy 10 dobré kvality, např. SanDisk.

Napájení 5V USB

LED s odpory 470R v sérii.

2 x 100R odpory (poskytuje ochranu před poškozením způsobeným chybami zapojení Tx/Rx)

Bluetooth Mate Silver NEBO jeden z modulů popsaných na Arduino UNO/Mega Starter, ovládaný Android/pfodApp

Krok 1: Stavba

Konstrukce
Konstrukce

Stáhněte a nainstalujte Arduino IDE V1.8.9+ z https://arduino.cc/en/Main/Software. Tato webová stránka obsahuje odkazy na různé operační systémy a odkaz na GettingStarted (https://arduino.cc/en/Guide/HomePage).

Stáhněte a nainstalujte Teensyduino (podpora Teensy pro Arduino IDE). UPOZORNĚNÍ Pečlivě si přečtěte pokyny k prvnímu použití.

Jako desku vyberte Teensy 3.2 a zkontrolujte, zda se načte a spustí ukázkový program BLINK.

Stáhněte a nainstalujte následující knihovny:- millisDelay a SdFat (Místní snímek knihovny SdFat použité pro tyto testy je zde.) A pfodParser.zip (pro třídu pfodBufferedStream a pfodNonBlockingInput)

Stáhněte si soubory zip knihovny a poté pomocí Arduino IDE → Sketch → Include Library → Add. ZIP library menu nainstalujte knihovny ze souborů zip.

Rozbalte soubor Teensy32AnalogLogger.zip do adresáře skic Arduino a naprogramujte desku Teensy 3.2 pomocí Teensy32AnalogLogger.ino (verze 0.01)

Připojte kabel Teensy 3.2, modul Bluetooth a modul karty SD, jak je uvedeno výše (verze pdf)

Krok 2: Spuštění programu - testování

Nejprve naformátujte kartu SD pomocí

Aby mohla být SD karta spuštěna, musí být prázdná.

Pro počáteční testování nemusíte připojovat komunikační modul, stačí připojit modul Teensy 3.2 + SD (s nainstalovanou prázdnou kartou) k Arduino IDE pomocí sériového kabelu USB. Jak je uvedeno, skica Teensy32AnalogLogger.ino používá pro ovládání a monitorování připojení USB. Informace o použití komunikačního zařízení k ovládání a monitorování viz krok Záznam skutečných dat níže.

Upravte horní část náčrtu Teensy32AnalogLogger.ino a nastavte COM_SERIAL na Serial, aby vycházel do připojení Teensy USB.

#define COM_SERIAL Sériové

Poté nahrajte skicu do Teensy 3.2

Otevřete sériový monitor Arduino IDE na 115200 baudů (se sadou NL i CR). Po několika sekundách Teensy 3.2 zobrazí nabídku příkazů

Ver: 0,01 zadejte jeden z následujících příkazů:? - aktuální stav a metadatai - inicializace souborů - seznam souborů>

? cmd zobrazuje podrobnosti o aktuálním nastavení. (Chcete -li tato nastavení změnit, podívejte se na horní část stránky Teensy32AnalogLogger.ino.) Cmds musí být ukončeno NL nebo CR nebo obojí.

0: 00: 00.000 z 720: 00: 00.000

Ukázkové kolíky: 16 17 Byte pořadí: Little-Endian ADC bity: 10 průměrů ADC vzorků nad: 4 Sample Rate: 1000,00 Vzorkovací interval: 1000 uS Vzorků na blok: 127 Čas na vyplnění bloku: 127000uS Čas na vyplnění souboru: 9:01: 52 000 Čas na vyplnění VŠECH souborů: 894: 04: 48 000 Max latence SD (zahrnuje zavření/otevření souboru): 0uS Max. Latence zavření/otevření souboru: 0uS Počet bloků vyrovnávací paměti: 28 Čas na vyplnění VŠECH blokových vyrovnávacích pamětí: 3556000uS Maximální počet vyrovnávacích pamětí uloženo ve volání storeSampleBuffers (): 0 Zmeškané časovače celkem: 0 Celkem dosud zmeškaných vzorků: 0 Celkem zapsaných bloků: 0 Celkem napsaných vzorků: 0 pokrývajících: 0: 00: 00 000 Aktuální soubor:

V tomto případě je aktuální doba protokolování 0 z požadovaných 720 hodin (30 dní), vzorkování D16/A2 a D17/A3 (viz níže omezení pro výběr vstupů ADC níže) 1000krát za sekundu. Maximální doba běhu může být až 894 hodin (37,25 dnů). Hlavní smyčku () lze obsadit až 3,5 s (čas na vyplnění VŠECH blokových vyrovnávacích pamětí), než se zaplní všechny dostupné vyrovnávací paměti a vzorky se začnou ztrácet. Uložené vyrovnávací paměti atd. Se během běhu aktualizují.

Vložte prázdnou kartu SD a pomocí „i“cmd inicializujte 99 souborů použitých k ukládání dat. Předběžná inicializace zde snižuje časové zpoždění při přechodu z jednoho souboru na druhý a umožňuje rychlejší vzorkování.

Inicializace 99 souborů

Vytvoření nového souboru: log00.bin Uplynulý čas: 368 mS Vytvoření nového souboru: log01.bin Uplynulý čas: 520 mS… Vytvoření nového souboru: log98.bin Uplynulý čas: 15660 mS Vytvoření nového souboru: log99.bin Uplynulý čas: 15812 mS

Potom můžete použít r cmd ke spuštění běhu protokolování. Běh bude probíhat po požadovanou dobu nebo dokud jej k zastavení nepoužívá s cmd. Můžete také použít? cmd při přihlašování, abyste získali aktualizované časování a počty. Zde je krátký běh zastaven brzy pomocí s cmd.

ZÁZNAMOVÁ ÚDAJE … …

Ver: 0,01 zadejte jeden z následujících příkazů:? - aktuální stav a metadata s - zastavení protokolování dat

ZÁZNAMOVÁ ÚDAJE … Zkontrolovat pomocí? příkaz

Uplynulá doba běhu: 0: 00: 10 000 z 720: 00: 00 000 Uplynulá doba běhu: 0: 00: 20 000 z 720: 00: 00 000…

Zastavení protokolování a odebrání nepoužívaných souborů.

… Odebírání nepoužitého souboru: log98.bin Odebírání nepoužitého souboru: log99.bin

0: 01: 04.976 z 720: 00: 00.000

Ukázkové kolíky: 16 17 Byte pořadí: Little-Endian ADC bity: 10 průměrů ADC vzorků nad: 4 Sample Rate: 1000,00 Vzorkovací interval: 1000 uS Vzorků na blok: 127 Čas na vyplnění bloku: 127000uS Čas na vyplnění souboru: 9:01: 52 000 Čas na vyplnění VŠECH souborů: 894: 04: 48 000 Max latence SD (zahrnuje zavření/otevření souboru): 204uS Max latence zavření/otevření souboru: 0uS Počet bloků vyrovnávací paměti: 28 Čas na vyplnění VŠECH blokových vyrovnávacích pamětí: 3556000uS Maximální počet vyrovnávacích pamětí uloženo ve volání storeSampleBuffers (): 1 Zmeškané časovače celkem: 0 Celkem dosud zmeškaných vzorků: 0 Celkem napsaných bloků: 511 Celkem napsaných vzorků: 64832 pokrývajících: 0: 01: 04,832 Aktuální soubor: log00.bin

ls:

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

ZÁZNAM DAT DOKONČEN!

Ver: 0,01 zadejte jeden z následujících příkazů:? - aktuální stav a metadata ** r - záznam dat ADC ** není k dispozici. Data již existují ** i - inicializace souborů ** není k dispozici. Data již existují l - seznam souborů

ÚDAJE BYLY JIŽ ULOŽENY, zkontrolujte pomocí?

LED displej

LED dioda připojená k D3 (s D2 zajišťující připojení GND) se rozsvítí trvale, pokud chybí jakýkoli vzorek, a bliká, pokud dojde k chybě. Skica se pokouší pokračovat po chybách, ale nemusí tak učinit úspěšně.

Krok 3: Protokolování skutečných dat

Při dlouhodobém protokolování skutečných dat je pohodlnější připojit komunikační modul k pinům D0/D1 a vzdáleně ovládat a monitorovat protokolování. Zde byl použit modul Bluetooth Mate Silver s výchozím nastavením, 115200 baudů, žádné hardwarové handshaking (RTC, CTS), PIN kód 1234.

Poznámka: Když je modul Mate Silver připojen k napájení, přejde na 60 sekund do konfiguračního režimu, rychle bliká červeně. Během této doby můžete odeslat $$$ přes sériové připojení k modulu a nakonfigurovat jej, ale nemůžete modul připojit. Jakmile červená LED začne pomalu blikat, modul Bluetooth bude přijímat připojení.

Změňte definici COM_SERIAL v souboru Teensy32AnalogLogger.ino na hardwarové sériové připojení (D0/D1), Serial1

#define COM_SERIAL Serial1

Po spárování s počítačem byl na počítači vytvořen nový COM port a CoolTerm lze použít k připojení a ovládání a monitorování protokolování. Lze použít i další sériově zapojené komunikační moduly, jako je WiFi nebo BLE, podrobnosti viz Arduino UNO/Mega Starter, ovládaný Android/pfodApp.

Protokolování můžete také ovládat a monitorovat ze svého mobilního zařízení Android pomocí aplikace Bluetooth Terminal, jako je například aplikace Bluetooth Terminal, nebo pomocí aplikace WiFi a TCP Terminal, jako je TCP Telnet Terminal Pro, nebo Uart to BLE mdoule a aplikace BLE Terminal, jako je nRF UART V2

Krok 4: Omezení volby vstupů ADC

Omezení volby vstupů ADC
Omezení volby vstupů ADC

Teensy 3.2 má ve svém mikroprocesoru dva samostatné hardwarové moduly ADC, ADC_0 a ADC_1, takže může vzorkovat dva vstupy současně. Má také vestavěný průměrování hardwaru, který odebírá více vzorků ADC a průměruje je před otočením výsledku.

Existují omezení, ke kterým vstupům lze připojit ADC_0, ADC_1. Obrázek Teensy3_1_AnalogCard-p.webp

Shrnuto: -Pro jednostranné čtení, tj. +Volty odkazující na GND, ADC_0 může číst A0 až A9, A10, A11, A12, A14 ADC_1 může číst A2, A3, A10, A13, A15 až A20 Pokud vyberete pin, který ADC nelze přečíst, vrátí 0 (vždy)

Tento projekt používá A2, A3, ke kterým lze přistupovat pomocí ADC_0 nebo ADC_1.

Krok 5: Převod souborů.bin na soubory.csv

Teensy32AnalogLogger.ino ukládá vzorky jako binární do souborů logxx.bin, tj. Log00.bin do log99.bin. Teensy32AnalogLogger.ino také uloží soubor log.met metadat o běhu.

Pomocí SDtoCSV.jar (zdrojový kód SDtoCSV_src.zip) můžete převést soubory.bin na.csv pro další zpracování. Zkopírujte soubory z karty SD na pevný disk počítače s alespoň 70 GB volného místa a zkopírujte soubor SDtoCSV.jar do stejného adresáře. Otevřete příkazové okno v tomto adresáři a spusťte

protokol java -jar SDtoCSV.jar

Pokud váš počítač nemá nainstalovanou Javu, nainstalujte ji z www.java.com

SDtoCSV zpracuje soubor log.met a poté každý z dostupných souborů logxx.bin v adresáři a vydá soubor.csv pro každý.bin. Soubor.csv má ukázkové pořadové číslo, za kterým následují dvě čtení.

Zde je ukázkový výstup konzoly pro čtení 2 adc vzorkovaný 30303 krát/s, output.txt. Ukazuje, jak jsou nahlášeny zmeškané vzorky. (Zdvojnásobení počtu vyrovnávacích pamětí v konečném náčrtu opravilo tyto zmeškané vzorky)

SD_Přihlášení do CSV. Zkontrolujte průběh a chybové zprávy v SDtoCSV.log. Zpracování log00 Zpracováno 256 000 bloků Zpracování log01 Zpracováno 256 000 bloků… Zpracování log25 Zpracováno 256 000 bloků Zpracování log26 Zpracováno 256 000 bloků Zpracování log27 Zpracováno 256 000 bloků Zmeškané vzorky: 2715 Zpracování log28 Zpracováno 256 000 bloků… Processing log29 Zpracováno 256 000 bloků… Zpracování log47 Zpracováno 256 000 bloků Zpracování log48 Zpracováno 35935 bloků --- Dokončeno zpracování

Ke každému běhu SDtoCSV je připojen úplnější soubor protokolu SDtoCSV.log. Obsahuje výstup metadat a jakékoli chybové zprávy. Zde počet: 254 je počet dat uložených v tomto bloku, tj. 127 vzorků x 2 odečty adc na blok. MissSamples je počet párů zmeškaných čtení, tj. Řádků ve výstupu.csv.

=== Soubor protokolu pro převod SD_Logging do CSV So 13. července 13:19:51 AEST 2019 K zobrazení zpráv o průběhu na konzole použijte java -jar SDtoCSV.jar Základní název souboru 'log' Verze metadat: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinCount: 2 Pins: 16, 17 samplePerBlock: 127 noBufferBlocks: 28 duration mS: 51649820 požadovaný runTime mS: 106216704 maxBuffersUsed: 32 Varování: Překračuje počet dostupných bufferů (28). Některé vzorky mohou chybět. maxLatency uS: 221476 Varování: Překračuje čas poskytovaný bloky vyrovnávací paměti (117348uS). Některé vzorky budou chybět. maxFileOpenTime uS: 20998 zmeškaných Časovače: 0 minulSamplesCelkem: celkem 2715BlocksWritten: 12323935 totalSamplesWritten: 1565139665 Zpracování log00.bin Zpracováno 256000 bloků Zpracování log01.bin Zpracováno 256000 bloků… Zpracování log26.bin Zpracováno 256 000 bloků Zpracování log27.bin !!! Blok: 57696 počet: 254 zmeškaných Ukázky: 2339 !!! Blok: 57697 počet: 254 zmeškaných Ukázky: 376 zpracovaných 256 000 bloků --- Celkem zmeškaných vzorků: 2715

Zpracování log28.bin Zpracováno 256 000 bloků

… Zpracování log47.bin Zpracováno 256 000 bloků Zpracování log48.bin Zpracováno 35935 bloků --- Dokončeno zpracování

Ukázka výstupního souboru log00.csv je

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

Počitadlo vzorků se zvyšuje ze souboru na soubor, takže jej lze použít jako časové razítko. Pokud chybí vzorky, počitadlo vzorků se zvýší o zmeškaný počet před výstupem na další řádek, takže počitadlo/časové razítko zůstane u zaznamenaných vzorků přesné.

Krok 6: Komentáře ke kódu a rozšíření

Teensy32AnalogLogger je silně upravenou verzí příkladu Billa Greimana AnalogBinLogger v jeho knihovně SdFat Arduino. Zde byla přepsána knihovna pro spuštění na Teensy 3.2.

Teensy32AnalogLogger používá timer0 k nastavení intervalu vzorkování. Obsluha přerušení časovače 0 spustí dvě převody ADC. Obsluha přerušení pro druhý modul ADC se volá nepřetržitě, dokud nejsou oba hotovi, obvykle první spuštěný modul ADC ADC_0 skončí před druhým zapnutím, takže obsluha přerušení je volána pouze jednou. Obslužná rutina přerušení ADC_1 uloží vzorky do vyrovnávací paměti dat.

V hlavní smyčce () storeSampleBuffer () uloží všechny plné vyrovnávací paměti na kartu SD a recykluje vyrovnávací paměti do fronty prázdných vyrovnávacích pamětí. Velké množství paměti RAM dostupné na Teensy 3.2 znamená, že lze přidělit velký počet vyrovnávacích pamětí, takže storeSampleBuffer () nemusí být často volán. Hlavní smyčce () tak zbývá čas na další práci, jako jsou procesní příkazy a odesílání výstupu.

Rozšíření

Přestože je tento projekt funkční jako vysokorychlostní záznamník dat, pro úplné nošení je stále potřeba zabalit a dodat bateriový systém a snímače EKG. Kromě toho je třeba zvážit některá rozšíření.

  1. Přidejte ovládání a monitorování vzorkované vlnové formy v reálném čase prostřednictvím pfodApp pomocí vykreslovací funkce pfodApp a zobrazte snímky vlnové formy
  2. Prodlužte čísla souborů nad 99 pro delší běhy vzorkování
  3. Ukázka více než 2 vstupů. Vzhledem k tomu, že Teensy 3.2 má dva moduly ADC, můžete kód upravit tak, aby přidával další vstupy ve dvojicích, aby se maximalizovala vzorkovací frekvence.
  4. Přidejte sledování baterie a sledujte nabití baterie. Teensy 3.2 využívá přibližně 1100 mAh po dobu 24 hodin, včetně modulu bluetooth a SD, ale bez modulu senzoru
  5. Přidejte obvod napájení duální baterie, který umožní výměnu baterie bez přerušení protokolování.

Doporučuje: