Tartalomjegyzék:

Nagy sebességű EKG vagy egyéb adatok naplózása, folyamatosan több mint egy hónapig: 6 lépés
Nagy sebességű EKG vagy egyéb adatok naplózása, folyamatosan több mint egy hónapig: 6 lépés

Videó: Nagy sebességű EKG vagy egyéb adatok naplózása, folyamatosan több mint egy hónapig: 6 lépés

Videó: Nagy sebességű EKG vagy egyéb adatok naplózása, folyamatosan több mint egy hónapig: 6 lépés
Videó: Online csalások: van-e védekezés? Sonjic László és Petőfi Attila, Inforádió, Aréna 2024, Július
Anonim
Naplózzon nagysebességű EKG -t vagy egyéb adatokat, folyamatosan egy hónapig
Naplózzon nagysebességű EKG -t vagy egyéb adatokat, folyamatosan egy hónapig

Ezt a projektet egy egyetemi orvosi kutatócsoport támogatására fejlesztették ki, akiknek szükségük volt egy hordható ruházatra, amely 30 x napon keresztül folyamatosan 2x2 EKG -jelet regisztrálhat egyenként 1000 minta/másodperc sebességgel (2K minta/másodperc) folyamatosan, hogy felismerje az aritmiákat. Az itt bemutatott projekt tartalmazza a naplózás távvezérlését és felügyeletét. A távvezérlés a soros terminálon található menükön keresztül történik, akár számítógépen, akár mobiltelefonon. Ez a projekt nem terjed ki az EKG -mérésre, a csomagolásra vagy az elemre, amely a végső viselhetőséghez szükséges.

Ez a nagy sebességű/hosszú időtartamú verzió a Teensy 3.2, Adafruit Micro-SD breakout modult, a minőségi 16G SDHC 10. osztályú SD kártyát használja az adatok naplózásához, valamint a Bluetooth kommunikációs modult az ellenőrzéshez és a felügyelethez. A projekt kevésbé fejlett és lassabb UNO/Mega2560 verziója is rendelkezésre áll. Míg ez a projekt Bluetooth kommunikációs modult használ a naplózás vezérléséhez és felügyeletéhez, használhat WiFi vagy BLE modulokat is.

Ez a Teensy 3.2 alapú verzió sokkal magasabb mintavételi arányra képes, mint az UNO/Mega2560 verzió. Ezzel a kóddal a Teensy 3.2 két ADC mintát mintázhat és naplózhat> 30Khz -en, hardver átlagban 4 mintán keresztül, és így könnyen kielégíti a fenti 1000 minta/másodperc követelményt. A kód támogatja a 100 bites 128K -os fájlok mentését. 30 kHz -en, ami 29 óra 30 percet takar. 1000 minta másodpercenként 37 napot takar. A kód könnyen kiterjeszthető több mint 100 fájl kezelésére, így meghosszabbítva a futás időtartamát. A futtatás végén> 10Gig adat,.bin, fájlok és.met fájl található a metadatból, amelyek leírják a futást és az eredményeket. A mellékelt SDtoCSV.jar (forráskód SDtoCSV_src.zip) használható a.bin fájlok.csv fájlokká alakítására a számítógépen további feldolgozás céljából. A kapott adatok> 60Gig. Az UNO/Mega2560 verzió.bin -ből.csv -konvertálást tartalmaz az Arduino -vázlatban, de tekintettel a Teensy -verzió által naplózott adatmennyiségre, ez nem hatékony módja az átalakításnak.

Kellékek

Teensy 3.2 - PJRC

Adafruit MicroSD kártya törőlap+ vagy hasonló.

16G SDHC 10. osztályú, jó minőségű MicroSD kártya pl. SanDisk.

5V USB tápegység

Egy soros 470R rezisztens led.

2 x 100R ellenállás (védelmet nyújt a Tx/Rx kábelezési hibák miatti károsodások ellen)

Bluetooth Mate Silver VAGY az Arduino UNO/Mega Starter alkalmazásban leírt modulok egyike, Android/pfodApp vezérléssel

1. lépés: Építés

Építkezés
Építkezés

Töltse le és telepítse az Arduino IDE V1.8.9+ -ot a https://arduino.cc/en/Main/Software webhelyről. Ezen a webhelyen különböző operációs rendszerekre mutató hivatkozások és a GettingStarted (https://arduino.cc/en/Guide/HomePage) hivatkozás található.

Töltse le és telepítse a Teensyduino -t (az Arduino IDE Teensy támogatása). MEGJEGYZÉS Óvatosan az első használat utasításait.

Válassza ki a Teensy 3.2 táblát, és ellenőrizze, hogy a BLINK példaprogram betöltődik -e és fut -e.

Töltse le és telepítse a következő könyvtárakat:- millisDelay és SdFat (A tesztekhez használt SdFat könyvtár helyi pillanatképe itt található.) És a pfodParser.zip (a pfodBufferedStream és pfodNonBlockingInput osztályokhoz)

Töltse le a könyvtár zip fájljait, majd az Arduino IDE → Vázlat → Könyvtár bevonása →. ZIP könyvtár hozzáadása menü segítségével telepítse a könyvtárakat a zip fájlokból.

Csomagolja ki a Teensy32AnalogLogger.zip fájlt az Arduino sketches könyvtárába, és programozza be a Teensy 3.2 táblát a Teensy32AnalogLogger.ino segítségével (Változat 0.01)

Csatlakoztassa a Teensy 3.2, a Bluetooth modult és az SD kártya modult a fentiek szerint (pdf verzió)

2. lépés: A program futtatása - tesztelés

Először formázza SD -kártyáját a https://www.sdcard.org/downloads/formatter/ használatával

A naplózás megkezdéséhez az SD -kártyának üresnek kell lennie.

Az első teszteléshez nem kell csatlakoztatnia a kommunikációs modult, csak csatlakoztassa a Teensy 3.2 + SD modult (üres kártyával) az Arduino IDE -hez az USB soros kábelen keresztül. A Teensy32AnalogLogger.ino vázlat az USB -csatlakozást használja a vezérléshez és a felügyelethez. Lásd alább a Valódi adatok naplózása lépést, hogy kommunikációs eszközt használjon vezérléshez és felügyelethez.

Szerkessze a Teensy32AnalogLogger.ino vázlat tetejét, hogy a COM_SERIAL soros értékre állítsa a Teensy USB -kapcsolat kimenetét.

#define COM_SERIAL sorozat

Ezután töltse fel a vázlatot a Teensy 3.2 -re

Nyissa meg az Arduino IDE soros monitort 115200 baudon (NL és CR beállítással is). Néhány másodperc múlva a Teensy 3.2 parancsmenüt jelenít meg

Ver: 0.01 írja be az alábbi parancsok egyikét:? - aktuális állapot és metadatai - fájlok inicializálásal - fájlok listája>

Az ? Az cmd megjeleníti az aktuális beállítások részleteit. (A beállítások módosításához lásd a Teensy32AnalogLogger.ino tetejét.) A Cmd -ket le kell zárni NL vagy CR vagy mindkettővel.

0: 00: 00.000 720: 00: 00.000

Mintacsapok: 16 17 Bájt sorrend: Little-Endian ADC bitek: 10 ADC mintaátlag: 4 Mintavételi sebesség: 1000.00 Mintavételi idő: 1000uS Minták blokkonként: 127 A blokk kitöltésének ideje: 127000uS A fájl kitöltésének ideje: 9:01: 52.000 Az ÖSSZES fájl kitöltésének ideje: 894: 04: 48.000 Max SD késés (a fájl bezárását/megnyitását is tartalmazza): 0uS Max fájl bezárási/megnyitási késleltetése: 0uS Puffertömbök száma: 28 Az összes blokkpuffer feltöltésének ideje: 3556000uS A pufferek maximális száma mentve a call to storeSampleBuffers (): 0 kimaradt időzítésben összesen: 0 Összesen kimaradt minták száma: 0 Összes írott blokk: 0 Összes leírt minta: 0 lefedve: 0: 00: 00.000 Jelenlegi fájl:

Ebben az esetben a jelenlegi naplózási futási idő 0 a kért 720 órából (30 nap), mintavétel D16/A2 és D17/A3 (lásd alább az ADC bemenetek megválasztásának korlátozásait) 1000 másodpercenként. A maximális futási idő 894 óra (37,25 nap) lehet. A fő hurok () akár 3,5 másodpercig is elfoglalható (az ÖSSZES blokkpuffer feltöltésének ideje), mielőtt az összes rendelkezésre álló puffer megtelik, és a minták elvesznek. A mentett pufferek stb. A futás előrehaladtával frissülnek.

Helyezzen be egy üres SD -kártyát, használja az 'i' cmd billentyűt az adatok tárolására használt 99 fájl inicializálásához. Ezek előzetes inicializálása csökkenti az egyik fájlról a másikra történő átváltás késleltetését, és gyorsabb mintavételt tesz lehetővé.

99 fájl inicializálása

Új fájl létrehozása: log00.bin Eltelt idő: 368mS Új fájl létrehozása: log01.bin Eltelt idő: 520mS… Új fájl létrehozása: log98.bin Eltelt idő: 15660mS Új fájl létrehozása: log99.bin Eltelt idő: 15812mS

Ezután az r cmd segítségével elindíthatja a naplózási futtatást. A futás a kért ideig tart, vagy amíg az s cmd le nem állítja azt. Használhatja a? cmd naplózás közben, hogy frissített időzítéseket és számokat kapjon. Itt van egy rövid futás, amelyet az s cmd használatával korán leállítottak.

Naplózási adatok…..

Ver: 0.01 írja be az alábbi parancsok egyikét:? - aktuális állapot és metaadatok s - az adatnaplózás leállítása

LOGGING DATA… Ellenőrizze? parancs

Eltelt futási idő: 0: 00: 10.000 / 720: 00: 00.000 Eltelt futási idő: 0: 00: 20.000 / 720: 00: 00.000…

A naplózás leállítása és a nem használt fájlok eltávolítása.

… A nem használt fájl eltávolítása: log98.bin A nem használt fájl eltávolítása: log99.bin

0: 01: 04.976 / 720: 00: 00.000

Mintacsapok: 16 17 Bájt sorrend: Little-Endian ADC bitek: 10 ADC mintaátlag: 4 Mintavételi sebesség: 1000.00 Mintavételi idő: 1000uS Minták blokkonként: 127 A blokk kitöltésének ideje: 127000uS A fájl kitöltésének ideje: 9:01: 52.000 Az ÖSSZES fájl kitöltésének ideje: 894: 04: 48.000 Max SD késés (a fájl bezárását/megnyitását is tartalmazza): 204uS A fájl maximális bezárási/megnyitási késleltetése: 0uS A puffertömbök száma: 28 Az összes blokkpuffer feltöltésének ideje: 3556000uS A pufferek maximális száma mentve a call to storeSampleBuffers (): 1 kimaradt időzítések összesen: 0 Összesen kimaradt minták száma: 0 Összes írott blokk: 511 Összes leírt minta: 64832 kiterjed: 0: 01: 04.832 Jelenlegi fájl: log00.bin

ls:

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

AZ ADATKÖZLÉS TELJES!

Ver: 0.01 írja be az alábbi parancsok egyikét:? - aktuális állapot és metaadatok ** r - ADC -adatok rögzítése ** nem áll rendelkezésre. Az adatok már léteznek ** i - fájlok inicializálása ** nem áll rendelkezésre. Az adatok már léteznek l -list fájlok

AZ ADATOK MÁR LETÖLTETTEK, ellenőrizze?

LED kijelző

A D3 -hoz csatlakoztatott LED (a D2 biztosítja a GND kapcsolatot) folyamatosan világít, ha bármelyik minta kimarad, és villog, ha hiba történik. A vázlat megpróbálja folytatni a hibákat, de lehet, hogy nem sikerül.

3. lépés: Valós adatok naplózása

Valós adatok hosszú időn belüli naplózásakor kényelmesebb kommunikációs modult csatlakoztatni a D0/D1 érintkezőkhöz, és távolról vezérelni és figyelni a naplózást. Itt egy Bluetooth Mate Silver modult használtak az alapértelmezett beállításokkal, 115200 baud, hardveres kézfogás nélkül (RTC, CTS), 1234 pin kód.

Megjegyzés: Amikor a Mate Silver modul áramellátást kap, konfigurációs módba lép, gyorsan villog a piros LED, 60 másodpercig. Ez idő alatt $$$ küldhet a soros kapcsolaton keresztül a modulhoz annak konfigurálásához, de nem tudja csatlakoztatni a modult. Amint a piros LED lassan villog, a Bluetooth modul elfogadja a kapcsolatokat.

Változtassa meg a Teensy32AnalogLogger.ino COM_SERIAL definícióját hardveres soros (D0/D1) kapcsolatra, Serial1

#define COM_SERIAL Serial1

A számítógéppel való párosítás után új COM port jött létre a számítógépen, és a CoolTerm segítségével csatlakozhat, vezérelheti és figyelheti a naplózást. Más sorosan csatlakoztatott kommunikációs modulok is használhatók, például WiFi vagy BLE, részletekért lásd az Arduino UNO/Mega Starter alkalmazást, amelyet az Android/pfodApp vezérel.

A naplózást Android -mobiljáról is vezérelheti és nyomon követheti egy Bluetooth terminál alkalmazással, például a Bluetooth Terminal alkalmazással, vagy a WiFi és TCP terminál alkalmazással, például a TCP Telnet Terminal Pro, vagy egy Uart to BLE mdoule és egy BLE terminál alkalmazással, mint pl. nRF UART V2

4. lépés: Az ADC bemenetek megválasztásának korlátozásai

Az ADC bemenetek megválasztásának korlátozásai
Az ADC bemenetek megválasztásának korlátozásai

A Teensy 3.2 két külön ADC hardvermodullal rendelkezik, az ADC_0 és az ADC_1, mikroprocesszorában, így egyszerre két bemenetet is mintázhat. Beépített hardveres átlagolással is rendelkezik, amely több ADC mintát vesz, és átlagolja azokat, mielőtt megfordítja az eredményt.

Vannak korlátozások arra vonatkozóan, hogy mely bemenetek csatlakoztathatók az ADC_0, ADC_1 eszközökhöz. A Teensy3_1_AnalogCard-p.webp

Összefoglalva: -Az egyvégű leolvasásoknál, azaz a GND-re hivatkozott +voltról ADC_0 képes olvasni az A0-tól A9-ig, A10, A11, A12, A14 Az ADC_1 képes olvasni az A2, A3, A10, A13, A15-től A20-ig Ha kiválaszt egy tűt, amelyet az ADC nem olvasható vissza 0 (mindig)

Ez a projekt A2 -t, A3 -at használ, amelyek mindegyike elérhető az ADC_0 vagy az ADC_1 segítségével.

5. lépés: A.bin fájlok konvertálása.csv fájlokká

A Teensy32AnalogLogger.ino a mintákat bináris formában menti a logxx.bin fájlokba, azaz a log00.bin és a log99.bin közé. A Teensy32AnalogLogger.ino a futással kapcsolatos metaadatok log.met fájlját is elmenti.

Az SDtoCSV.jar (forráskód SDtoCSV_src.zip) segítségével konvertálhatja a.bin fájlokat.csv fájlokká további feldolgozás céljából. Másolja a fájlokat az SD -kártyáról a számítógép merevlemezére legalább 70 GB szabad tárhellyel, és másolja az SDtoCSV.jar fájlt ugyanabba a könyvtárba. Nyisson meg egy parancsablakot a könyvtárban, és futtassa

java -jar SDtoCSV.jar log

Ha a számítógépen nincs Java telepítés, telepítse azt a www.java.com webhelyről

Az SDtoCSV feldolgozza a log.met fájlt, majd a könyvtár minden elérhető logxx.bin fájlját, és minden.bin fájlhoz egy.csv fájlt ad ki. A.csv fájlban a minta sorszáma és a két leolvasás szerepel.

A minta konzol kimenete 2 adc leolvasáshoz 30303 -szor/sec mintavétel itt látható, output.txt. Azt szemlélteti, hogyan jelentik a kimaradt mintákat. (A pufferek számának megduplázása az utolsó vázlatban javította ezeket a kimaradt mintákat)

SD_Logging to CSV conversion. Ellenőrizze az SDtoCSV.log -ban a haladást és a hibaüzeneteket. Napló feldolgozása Feldolgozott 256000 blokk Napló feldolgozása01 Feldolgozott 256000 blokk… Napló feldolgozása25 Feldolgozott 256000 blokk Feldolgozás naplója26 Feldolgozott 256000 blokk Feldolgozása.. Napló feldolgozása29 Feldolgozott 256000 blokk… Napló feldolgozása47 Feldolgozott 256000 blokk Feldolgozás naplója48 Feldolgozott 35935 blokk --- Befejezett feldolgozás

Az SDtoCSV minden egyes futtatása egy teljesebb naplófájlt, az SDtoCSV.log -ot fűzi hozzá. Tartalmazza a metaadatok kimenetét és az esetleges hibaüzeneteket. Itt a szám: 254 az adott blokkban tárolt adatok száma, azaz 127 minta x 2 adc leolvasás blokkonként. A missSamples a kihagyott olvasási párok, azaz a.csv kimenetben lévő sorok száma.

=== Naplófájl az SD_Logging CSV -konvertáláshoz Sat Jul 13 13:19:51 AEST 2019 A konzolon a haladási üzenetek megtekintéséhez használja a java -jar SDtoCSV.jar alapfájlnév 'log' Metaadatok verziója: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinSzám: 2 pin: 16, 17 mintaPerBlock: 127 noBufferBlocks: 28 időtartam mS: 51649820 kért futási idő mS: 106216704 maxBuffersUsed: 32 Figyelmeztetés: Meghaladja a rendelkezésre álló pufferek számát (28). Néhány minta hiányozhat. maxLatency uS: 221476 Figyelmeztetés: Túllépi a puffertömbök által biztosított időt (117348uS). Néhány minta hiányozni fog. maxFileOpenTime uS: 20998 kimaradt Időzítők: 0 kimaradt minták Összesen: összesen 2715 blokk Írva: összesen 12323935 minták Írva: 1565139665 log00.bin feldolgozása Feldolgozott 256000 blokk Napló feldolgozása 251.000 blokk… A log26.bin feldolgozása 256000 blokk feldolgozása A log27.bin feldolgozása !!! Blokk: 57696 szám: 254 kimaradt Minták: 2339 !!! Blokk: 57697 szám: 254 kimaradt Minta: 376 Feldolgozott 256000 blokk --- Összes kihagyott minta: 2715

Log28.bin feldolgozása 256000 blokkot dolgozott fel

… Log47.bin feldolgozása 256000 blokk feldolgozása Log48.bin feldolgozása 35935 blokk feldolgozása --- Befejezett feldolgozás

A log00.csv kimeneti fájl egy minta

SampleCounter (33uS -onként), 16. láb, 170., 248., 205. 1, 273, 195 2, 228, 337 3, 360, 302 4, 355, 369 5, 220, 281…

A minta számláló fájlról fájlra növekszik, így időbélyegként használható. Ha hiányzó minták vannak, akkor a mintaszámlálót növeli a kimaradt szám, mielőtt a következő sort kiadná, így a számláló/időbélyegző pontos marad a rögzített mintáknál.

6. lépés: Megjegyzések a kódexhez és a bővítményekhez

A Teensy32AnalogLogger Bill Greiman AnalogBinLogger példájának erősen módosított változata az SdFat Arduino könyvtárában. Itt a könyvtárat átírták a Teensy 3.2 -re.

A Teensy32AnalogLogger a timer0 -t használja a mintaintervallum beállításához. A timer0 megszakításkezelője elindítja a két ADC konverziót. A második ADC modul megszakításkezelőjét folyamatosan hívják, amíg mindkettő befejeződik, általában az első ADC_0 indított ADC_0 befejeződik a második előtt, így a megszakításkezelőt csak egyszer hívják meg. Az ADC_1 megszakításkezelő a mintákat adatpufferbe menti.

A fő hurokban () a storeSampleBuffer () menti a teljes puffert az SD -kártyára, és újrahasznosítja a puffereket az üres puffersorba. A Teensy 3.2 -en rendelkezésre álló nagy mennyiségű RAM azt jelenti, hogy nagyszámú puffert lehet lefoglalni, így a storeSampleBuffer () -ot nem kell gyakran hívni. Ez időt hagy arra, hogy a fő hurok () más munkát végezzen, például folyamatparancsokat és kimenetet küldjön.

Bővítmények

Bár ez a projekt nagysebességű adatgyűjtőként funkcionál, a teljes viselhetőség érdekében még mindig csomagolni kell, és akkumulátor rendszert és EKG -érzékelőket kell szállítani. Valamint néhány kiterjesztést is figyelembe kell venni.

  1. A mintavételezett hullámforma valós idejű vezérlése és felügyelete a pfodApp segítségével, a pfodApp ábrázolási funkciójával, a pillanatképek megjelenítéséhez
  2. Hosszabbítsa meg a fájlszámokat 99 -nél tovább, hogy hosszabb mintavételi futásokat végezzen
  3. Minta több mint 2 bemenet. Mivel a Teensy 3.2 kettős ADC modullal rendelkezik, módosíthatja a kódot, és párosával további bemeneteket adhat hozzá a mintavételi arány maximalizálása érdekében.
  4. Adja hozzá az akkumulátorfigyelést az akkumulátor töltésének nyomon követéséhez. A Teensy 3.2 körülbelül 1100 mAh -t használ 24 óra alatt, beleértve a bluetooth -ot és az SD -modult is, de az érzékelőmodul nélkül
  5. Adjon hozzá kettős elemellátó áramkört, hogy lehetővé tegye az akkumulátor cseréjét anélkül, hogy megszakítaná a naplózást.

Ajánlott: