Turinys:

Reguliariai registruokite didelės spartos EKG ar kitus duomenis daugiau nei mėnesį: 6 žingsniai
Reguliariai registruokite didelės spartos EKG ar kitus duomenis daugiau nei mėnesį: 6 žingsniai

Video: Reguliariai registruokite didelės spartos EKG ar kitus duomenis daugiau nei mėnesį: 6 žingsniai

Video: Reguliariai registruokite didelės spartos EKG ar kitus duomenis daugiau nei mėnesį: 6 žingsniai
Video: The Light Gate Welcomes Dr. Irena McCammon Scott PhD., July 10th, 2023 2024, Lapkritis
Anonim
Reguliariai registruokite didelės spartos EKG ar kitus duomenis daugiau nei mėnesį
Reguliariai registruokite didelės spartos EKG ar kitus duomenis daugiau nei mėnesį

Šis projektas buvo sukurtas remti universiteto medicinos tyrimų grupę, kuriai reikėjo nešiojamojo kompiuterio, galinčio 30 dienų nepertraukiamai registruoti 2 x EKG signalus po 1000 mėginių per sekundę (iš viso 2 000 mėginių per sekundę), kad būtų galima nustatyti aritmijas. Čia pateiktas projektas apima nuotolinį valdymą ir medienos ruošos stebėjimą. Nuotolinis valdymas atliekamas per meniu, pateiktą nuosekliame terminale, kompiuteryje ar mobiliajame telefone. Šis projektas neapima EKG matavimo, pakuotės ar baterijos, reikalingos galutiniam nešiojimui.

Šioje didelės spartos/ilgalaikės versijos duomenims registruoti naudojamas „Teensy 3.2“, „Adafruit Micro-SD“pertraukos modulis, kokybiška 16G SDHC 10 klasės SD kortelė ir „Bluetooth“ryšio modulis valdymui ir stebėjimui. Taip pat galima įsigyti mažiau išvystytą ir lėtesnę šio projekto UNO/Mega2560 versiją. Nors šis projektas naudoja „Bluetooth“ryšio modulį registravimo valdymui ir stebėjimui, taip pat galite naudoti „WiFi“arba BLE modulius.

Ši versija, pagrįsta „Teensy 3.2“, gali atrinkti daug daugiau mėginių nei UNO/Mega2560. Naudodamas šį kodą, „Teensy 3.2“gali atrinkti ir užregistruoti du ADC mėginius esant> 30Khz aparatinei įrangai, vidutiniškai per 4 mėginius ir taip lengvai patenkina aukščiau nurodytą 1000 mėginių per sekundę reikalavimą. Šis kodas palaiko 100.bin failų, kurių kiekvienas yra 128 tūkst. 30 kHz dažniu, kuris apima 29 valandas 30 minučių. Esant 1000 mėginių per sekundę, jis apima 37 dienas. Kodą galima lengvai išplėsti, kad būtų galima tvarkyti daugiau nei 100 failų, taip pailginant vykdymo trukmę. Vykdymo pabaigoje turėsite> 10Gig duomenų,.bin, failus ir.met failą iš metaduomenų, apibūdinančių vykdymą ir rezultatus. Pateiktas SDtoCSV.jar (šaltinio kodas SDtoCSV_src.zip) gali būti naudojamas.bin failams konvertuoti į.csv failus kompiuteryje tolimesniam apdorojimui. Gauti duomenys yra> 60Gig. „UNO/Mega2560“versijoje „Arduino“eskize yra.bin į.csv konvertavimas, tačiau atsižvelgiant į „Teensy“versijos užregistruotų duomenų kiekį, tai nėra efektyvus būdas konvertuoti.

Prekės

„Teensy 3.2“pateikė PJRC

„Adafruit MicroSD“kortelių pertraukimo plokštė+ arba panaši.

16G SDHC 10 klasės „MicroSD“kortelė geros kokybės, pvz. „SanDisk“.

5 V USB maitinimas

Šviesos diodas su 470R rezistoriumi serijiniu būdu.

2 x 100R rezistoriai (apsaugo nuo pažeidimų dėl Tx/Rx laidų klaidų)

„Bluetooth Mate Silver“ARBA vienas iš „Arduino UNO/Mega Starter“aprašytų modulių, valdomas „Android“/„pfodApp“

1 žingsnis: Statyba

Statyba
Statyba

Atsisiųskite ir įdiekite „Arduino IDE V1.8.9+“iš https://arduino.cc/en/Main/Software. Tame tinklalapyje yra nuorodų į įvairias operacines sistemas ir nuoroda į „GettingStarted“(https://arduino.cc/en/Guide/HomePage).

Atsisiųskite ir įdiekite „Teensyduino“(„Arduino IDE“„Teensy“palaikymas). Atidžiai PASTABA Pirmojo naudojimo instrukcijas.

Kaip lentą pasirinkite „Teensy 3.2“ir patikrinkite, ar BLINK pavyzdinė programa įkeliama ir paleidžiama.

Atsisiųskite ir įdiekite šias bibliotekas:- millisDelay ir SdFat (čia yra vietinė „SdFat“bibliotekos, naudojamos šiems bandymams, momentinė nuotrauka.) Ir „pfodParser.zip“(„pfodBufferedStream“ir „pfodNonBlockingInput“klasei)

Atsisiųskite bibliotekos ZIP failus ir naudokite „Arduino IDE“→ Eskizas → Įtraukti biblioteką → Pridėti. ZIP bibliotekos meniu, kad įdiegtumėte bibliotekas iš ZIP failų.

Išpakuokite „Teensy32AnalogLogger.zip“failą į „Arduino“eskizų katalogą ir užprogramuokite „Teensy 3.2“plokštę naudodami „Teensy32AnalogLogger.ino“(versija 0.01)

Prijunkite „Teensy 3.2“, „Bluetooth“modulį ir SD kortelės modulį, kaip parodyta aukščiau (pdf versija)

2 veiksmas: programos paleidimas - testavimas

Pirmiausia suformatuokite SD kortelę naudodami

Norint pradėti registruoti, SD kortelė turi būti tuščia.

Pradiniam bandymui jums nereikia prijungti ryšio modulio, tiesiog prijunkite „Teensy 3.2 + SD“modulį (su įdiegta tuščia kortele) prie „Arduino IDE“per USB nuoseklųjį kabelį. Kaip numatyta, „Teensy32AnalogLogger.ino“eskizas valdymui ir stebėjimui naudoja USB jungtį. Žiūrėkite žemiau esantį realių duomenų registravimo veiksmą, kaip valdyti ir stebėti ryšio įrenginį.

Redaguokite „Teensy32AnalogLogger.ino“eskizo viršų, kad nustatytumėte COM_SERIAL į Serial, kad išvestis būtų prie „Teensy“USB jungties.

#define COM_SERIAL Serial

Tada įkelkite eskizą į „Teensy 3.2“

Atidarykite „Arduino IDE“serijos monitorių esant 115200 baudų dažniui (su NL ir CR rinkiniais). Po kelių sekundžių „Teensy 3.2“parodys komandų meniu

Ver: 0.01 įveskite vieną iš šių komandų:? - dabartinė būsena ir metadatai - inicijuoti failusl - sąrašas failų>

The? cmd rodo išsamią informaciją apie dabartinius nustatymus. (Jei norite pakeisti šiuos nustatymus, žr. „Teensy32AnalogLogger.ino“viršuje) CD turi būti baigtas naudojant NL arba CR arba abu.

0: 00: 00 000 iš 720: 00: 00 000

Pavyzdžių kaiščiai: 16 17 Baitų tvarka: Little-Endian ADC bitai: 10 ADC mėginių vidurkiai: 4 Sample Rate: 1000.00 Mėginių intervalas: 1000uS Pavyzdžiai iš bloko: 127 Laikas užpildyti bloką: 127000uS Laikas užpildyti failą: 9:01: 52.000 VISŲ failų užpildymo laikas: 894: 04: 48.000 Maksimalus SD vėlavimas (įskaitant failo uždarymą/atidarymą): 0uS Maksimalus failo uždarymo/atidarymo vėlavimas: 0uS Buferinių blokų skaičius: 28 VISŲ blokų buferių užpildymo laikas: 3556000uS Maksimalus buferių skaičius išsaugota skambinant į parduotuvęSampleBuffers (): 0 Praleistų laikmačių iš viso: 0 Iš viso iki šiol praleistų pavyzdžių: 0 Iš viso parašytų blokų: 0 Iš viso parašytų pavyzdžių: 0 apima: 0: 00: 00.000 Dabartinis failas:

Šiuo atveju dabartinis registravimo vykdymo laikas yra 0 iš 720 val. (30 dienų), atranka D16/A2 ir D17/A3 (žr. Toliau pateiktus ADC įvesties pasirinkimo apribojimus) 1000 kartų per sekundę. Maksimalus veikimo laikas gali būti iki 894 valandų (37,25 dienos). Pagrindinė kilpa () gali būti užimta iki 3,5 sek. (Laikas užpildyti visus blokinius buferius), kol visi turimi buferiai bus užpildyti ir mėginiai bus prarasti. Išsaugoti buferiai ir tt atnaujinami vykdant procesą.

Įdėkite tuščią SD kortelę, naudokite „i“cmd, kad inicijuotumėte 99 failus, naudojamus duomenims saugoti. Išankstinis jų inicijavimas čia sumažina laiko delsą, kai perjungiama iš vieno failo į kitą, ir leidžia greičiau imti mėginius.

Inicijuojamas 99 failai

Naujo failo kūrimas: log00.bin Praėjęs laikas: 368 mS Sukuriamas naujas failas: log01.bin Praėjęs laikas: 520 mS… Naujo failo kūrimas: log98.bin Praėjęs laikas: 15660 mS Naujo failo kūrimas: log99.bin Praėjęs laikas: 15812 mS

Tada galite naudoti r cmd, kad pradėtumėte registravimo procesą. Vykdymas bus vykdomas pageidaujamą laiką arba kol bus sustabdytas s cmd. Taip pat galite naudoti? cmd prisijungdami, kad gautumėte atnaujintą laiką ir skaičių. Štai trumpas bėgimas, sustojęs anksti naudojant s cmd.

ĮSIGIJIMO DUOMENYS ….

Ver: 0.01 įveskite vieną iš šių komandų:? - dabartinė būsena ir metaduomenys - sustabdyti duomenų registravimą

LOGGING DATA … Patikrinkite? komandą

Praėjęs veikimo laikas: 0: 00: 10.000 iš 720: 00: 00.000 Praėjęs veikimo laikas: 0: 00: 20.000 iš 720: 00: 00.000…

Registravimo sustabdymas ir nepanaudotų failų pašalinimas.

… Nepanaudoto failo pašalinimas: log98.bin Nepanaudoto failo pašalinimas: log99.bin

0: 01: 04.976 iš 720: 00: 00.000

Pavyzdžių kaiščiai: 16 17 Baitų tvarka: Little-Endian ADC bitai: 10 ADC mėginių vidurkiai: 4 Sample Rate: 1000.00 Mėginių intervalas: 1000uS Pavyzdžiai iš bloko: 127 Laikas užpildyti bloką: 127000uS Laikas užpildyti failą: 9:01: 52.000 VISŲ failų užpildymo laikas: 894: 04: 48.000 Maksimalus SD vėlavimas (įskaitant failo uždarymą/atidarymą): 204uS Maksimalus failo uždarymo/atidarymo vėlavimas: 0uS Buferinių blokų skaičius: 28 VISŲ blokų buferių užpildymo laikas: 3556000uS Maksimalus buferių skaičius išsaugotas skambinant į parduotuvęSampleBuffers (): 1 Praleisti laikmačiai iš viso: 0 Iš viso iki šiol praleistų pavyzdžių: 0 Iš viso parašytų blokų: 511 Iš viso parašytų pavyzdžių: 64832 apimantis: 0: 01: 04.832 Dabartinis failas: log00.bin

ls:

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

DUOMENŲ ĮRANGINIMAS ATLIKTAS!

Ver: 0.01 įveskite vieną iš šių komandų:? - dabartinė būsena ir metaduomenys ** r - ADC duomenų įrašymas ** nėra. Duomenys jau yra ** i - inicijuoti failus ** nėra. Duomenys jau yra l - sąrašo failai

DUOMENYS jau buvo užregistruoti, patikrinkite?

Skystųjų kristalų ekranas

Šviesos diodas, prijungtas prie D3 (su D2 užtikrina GND ryšį), įsijungs nuolat, jei praleisite kokį nors pavyzdį, ir mirksės, jei bus klaida. Eskizas bando tęsti po klaidų, bet gali nepavykti.

3 žingsnis: realių duomenų registravimas

Ilgą laiką registruojant tikrus duomenis, patogiau prijungti ryšio modulį prie D0/D1 kaiščių ir nuotoliniu būdu valdyti bei stebėti registravimą. Čia buvo naudojamas „Bluetooth Mate Silver“modulis su numatytais nustatymais, 115200 baudų, be rankos paspaudimo (RTC, CTS), PIN kodas 1234.

Pastaba: Kai „Mate Silver“modulis įjungiamas maitinimas, jis pereina į konfigūracijos režimą, greitai mirksi raudona lemputė 60 sekundžių. Per tą laiką galite siųsti $$$ per serijinį ryšį į modulį, kad jį sukonfigūruotumėte, bet negalite prijungti modulio. Kai raudonas šviesos diodas lėtai mirksi, „Bluetooth“modulis priims ryšius.

Pakeiskite COM_SERIAL apibrėžimą „Teensy32AnalogLogger.ino“į aparatinės įrangos nuoseklųjį (D0/D1) ryšį, „Serial1“

#define COM_SERIAL Serial1

Susiejus su kompiuteriu, kompiuteryje buvo sukurtas naujas COM prievadas ir „CoolTerm“gali būti naudojamas prisijungti, valdyti ir stebėti registravimą. Taip pat gali būti naudojami kiti nuosekliai prijungti ryšio moduliai, pvz., „WiFi“arba BLE, išsamesnės informacijos ieškokite „Arduino UNO“/„Mega Starter“, valdomas „Android“/„pfodApp“.

Taip pat galite valdyti ir stebėti registravimą iš „Android“mobiliojo telefono naudodami „Bluetooth“terminalo programą, pvz., „Bluetooth“terminalo programą, arba naudodami „WiFi“ir TCP terminalo programą, pvz., „TCP Telnet Terminal Pro“, arba „Uart to BLE mdoule“ir „BLE“terminalo programą, pvz. nRF UART V2

4 žingsnis: ADC įvesties pasirinkimo apribojimai

ADC įvesties pasirinkimo apribojimai
ADC įvesties pasirinkimo apribojimai

„Teensy 3.2“mikroprocesoriuje yra du atskiri ADC aparatinės įrangos moduliai-ADC_0 ir ADC_1, todėl jis gali vienu metu imti du įėjimus. Jis taip pat turi įmontuotą aparatūros vidurkį, kuris paima kelis ADC mėginius ir apskaičiuoja juos vidutiniškai prieš paversdamas rezultatą.

Yra apribojimų, kuriuos įvestis galima prijungti prie ADC_0, ADC_1. „Teensy3_1_AnalogCard.png“vaizdas (iš https://forum.pjrc.com/threads/25532-ADC-library-update-now-with-support-for-Teensy-3-1), įtrauktas į failą „Teensy32AnalogLogger.zip“, išsami informacija, kuriuos kaiščius galima prijungti prie kurio ADC.

Apibendrinant: -Vienkartiniams skaitymams, ty +voltai, nurodyti GND ADC_0, gali skaityti A0-A9, A10, A11, A12, A14 ADC_1 gali skaityti A2, A3, A10, A13, A15-A20 Jei pasirinksite kaištį, negaliu perskaityti, grįš 0 (visada)

Šiame projekte naudojami A2, A3, kuriuos kiekvienas gali pasiekti ADC_0 arba ADC_1.

5 veiksmas:.bin failų konvertavimas į.csv failus

„Teensy32AnalogLogger.ino“išsaugo pavyzdžius kaip dvejetainius į failus logxx.bin, t. Y. Log00.bin į log99.bin. „Teensy32AnalogLogger.ino“taip pat išsaugo log.met failą, kuriame yra metaduomenų apie vykdymą.

Norėdami konvertuoti.bin failus į.csv tolesniam apdorojimui, galite naudoti SDtoCSV.jar (šaltinio kodas SDtoCSV_src.zip). Nukopijuokite failus iš SD kortelės į kompiuterio standųjį diską, kuriame yra mažiausiai 70 GB laisvos vietos, ir nukopijuokite SDtoCSV.jar į tą patį katalogą. Atidarykite komandų langą tame kataloge ir paleiskite

java -jar SDtoCSV.jar log

Jei jūsų kompiuteryje nėra įdiegta „Java“, įdiekite ją iš www.java.com

„SDtoCSV“apdoros failą „log.met“, o tada kiekvieną iš galimų failų kataloge „logxx.bin“ir išves.csv failą kiekvienam.bin.. Csv faile yra mėginio eilės numeris, po kurio eina du rodmenys.

Čia rodomas konsolės išvestis, skirta 2 adc rodmenims, imtiems 30303 kartus per sekundę, output.txt. Tai iliustruoja, kaip pranešama apie praleistus mėginius. (Padvigubinus buferių skaičių galutiniame eskize, šie praleisti mėginiai buvo išspręsti)

SD_ Prisijungimas prie CSV konversijos. Patikrinkite SDtoCSV.log, ar nėra pažangos ir klaidų pranešimų. Apdorojimo žurnalas00 Apdoroti 256000 blokų Apdorojimo žurnalas01 Apdoroti 256000 blokų… Apdorojimo žurnalas25 Apdoroti 256000 blokai Apdorojimo žurnalas26 Apdorotas 256000 blokų Apdorojimo žurnalas27 Apdorotas 256000 blokų Praleisti pavyzdžiai: 2715 Apdorojimo žurnalas28 Apdoroti 256000 blokai… Apdorojimo žurnalas29 Apdoroti 256000 blokų… Apdorojimo žurnalas47 Apdorotas 256000 blokų Apdorojimo žurnalas48 Apdorotas 35935 blokai --- Baigtas apdorojimas

Prie kiekvieno SDtoCSV paleidimo pridedamas išsamesnis žurnalo failas SDtoCSV.log. Tai apima meta duomenų išvestį ir visus klaidų pranešimus. Čia skaičius: 254 yra tame bloke saugomų duomenų skaičius, ty 127 mėginiai x 2 adc rodmenys viename bloke. „MissSamples“yra praleistų skaitymo porų skaičius, ty eilutės.csv išvestyje.

=== Žurnalo failas SD_Logging į CSV konvertavimui Sat Lie 13 13:19:51 AEST 2019 Norėdami pamatyti pažangos pranešimus „Console“, naudokite java -jar SDtoCSV.jar Bazinio failo pavadinimo „žurnalo“metaduomenų versija: 0 (Little Endian) sampleInterval uS: 33 „adcBits“: 10 adcAvgs: 4 pin Kai kurių pavyzdžių gali trūkti. maxLatency uS: 221476 Įspėjimas: viršija buferinių blokų pateiktą laiką (117348uS). Kai kurių pavyzdžių trūks. maxFileOpenTime uS: 20998 praleistas Laikmatis: 0 praleistų pavyzdžių Iš viso: iš viso 2715 Blokų Parašyta: iš viso 12323935Mėginių Parašyta: 1565139665 Apdorojama log00.bin Apdorota 256000 blokų Apdorojimo žurnalas01.bin Apdoroti 256000 blokų… Apdorojamas log26.bin Apdorotas 256000 blokų Apdorojamas log27.bin !!! Blokas: 57696 skaičius: 254 praleistas Pavyzdžiai: 2339 !!! Blokas: 57697 skaičius: 254 praleisti Pavyzdžiai: 376 Apdoroti 256000 blokų --- Iš viso praleistų pavyzdžių: 2715

Apdorojamas log28.bin Apdoroti 256000 blokų

… Apdorojamas žurnalas47.bin Apdoroti 256000 blokų Apdorojimo žurnalas48.bin Apdoroti 35935 blokai

Log00.csv išvesties failo pavyzdys yra

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

Pavyzdžių skaitiklis didėja nuo failo iki failo, todėl jį galima naudoti kaip laiko žymę. Jei trūksta mėginių, mėginių skaitiklis padidinamas praleistu skaičiumi prieš išleidžiant kitą eilutę, kad skaitiklio/laiko žyma išliktų tiksli įrašytiems mėginiams.

6 žingsnis: Komentarai apie kodeksą ir plėtinius

„Teensy32AnalogLogger“yra smarkiai pakeista Billo Greimano „AnalogBinLogger“pavyzdžio versija jo „SdFat Arduino“bibliotekoje. Čia biblioteka buvo perrašyta, kad veiktų „Teensy 3.2“.

„Teensy32AnalogLogger“naudoja timer0, kad nustatytų mėginių intervalą. Laikmačio0 pertraukimo tvarkytojas pradeda dvi ADC konversijas. Antrojo ADC modulio pertraukimo tvarkytojas yra nuolat šaukiamas, kol jie abu bus baigti, paprastai pirmasis paleistas ADC modulis baigiasi prieš antrąjį, todėl pertraukimo tvarkytojas iškviečiamas tik vieną kartą. ADC_1 pertraukimo tvarkytojas išsaugo pavyzdžius į duomenų buferį.

Pagrindinėje kilpoje () „storeSampleBuffer“() išsaugo visus buferius SD kortelėje ir perdirba buferius į tuščią buferio eilę. „Teensy 3.2“turimas didelis RAM kiekis reiškia, kad galima priskirti daug buferių, todėl nereikia dažnai skambinti į „storeSampleBuffer“(). Tai palieka laiko pagrindinei kilpa () atlikti kitus darbus, pvz., Apdoroti komandas ir siųsti išvestį.

Plėtiniai

Nors šis projektas veikia kaip didelės spartos duomenų kaupiklis, visiškam nešiojimui jis vis tiek turi būti supakuotas ir tiekiama baterijų sistema bei EKG jutikliai. Be to, reikia atsižvelgti į kai kuriuos plėtinius.

  1. Pridėkite atrinktos bangos formos valdymą ir stebėjimą realiuoju laiku per „pfodApp“, naudodami „pfodApp“brėžinio funkciją, kad būtų rodomos bangos formos momentinės nuotraukos
  2. Pratęskite failų numerius virš 99, kad imtumėte ilgesnius pavyzdžius
  3. Imtis daugiau nei 2 įvestis. Kadangi „Teensy 3.2“turi du ADC modulius, galite modifikuoti kodą, kad poromis pridėtumėte papildomų įėjimų, kad padidintumėte atrankos dažnį.
  4. Pridėkite akumuliatoriaus stebėjimą, kad galėtumėte stebėti akumuliatoriaus įkrovą. „Teensy 3.2“naudoja apie 1100 mAh per 24 valandas, įskaitant „Bluetooth“ir SD modulį, tačiau neįskaitant jutiklio modulio
  5. Pridėkite dvigubą akumuliatoriaus tiekimo grandinę, kad būtų galima keisti akumuliatorių, nepertraukiant registravimo.

Rekomenduojamas: