Sisällysluettelo:

Kirjaa nopea EKG tai muita tietoja jatkuvasti yli kuukauden ajan: 6 vaihetta
Kirjaa nopea EKG tai muita tietoja jatkuvasti yli kuukauden ajan: 6 vaihetta

Video: Kirjaa nopea EKG tai muita tietoja jatkuvasti yli kuukauden ajan: 6 vaihetta

Video: Kirjaa nopea EKG tai muita tietoja jatkuvasti yli kuukauden ajan: 6 vaihetta
Video: Lonely (short version) 2024, Heinäkuu
Anonim
Kirjaa nopea EKG tai muita tietoja jatkuvasti yli kuukauden ajan
Kirjaa nopea EKG tai muita tietoja jatkuvasti yli kuukauden ajan

Tämä projekti kehitettiin tukemaan yliopiston lääketieteellistä tutkimusryhmää, joka tarvitsi pukeutuvaa, joka pystyi kirjaamaan 2 x EKG -signaalia nopeudella 1000 näytettä sekunnissa (yhteensä 2 000 näytettä sekunnissa) jatkuvasti 30 päivän ajan rytmihäiriöiden havaitsemiseksi. Tässä esitetty projekti sisältää kauko -ohjauksen ja puunkorjuun seurannan. Kaukosäädin tapahtuu sarjaliitännässä olevien valikkojen kautta, joko tietokoneella tai matkapuhelimella. Tämä projekti ei kata EKG -mittausta tai pakkausta tai akkua, jota tarvitaan lopulliseen pukeutumiseen.

Tämä nopea/pitkäkestoinen versio käyttää tietojen kirjaamiseen Teensy 3.2, Adafruit Micro-SD -katkaisumoduulia, laadukasta 16G SDHC -luokan 10 SD-korttia ja Bluetooth-viestintämoduulia ohjausta ja valvontaa varten. Tästä projektista on saatavana myös vähemmän kehitetty ja hitaampi UNO/Mega2560 -versio. Vaikka tämä projekti käyttää Bluetooth -viestintämoduulia kirjaamisen hallintaan ja seurantaan, voit käyttää myös WiFi- tai BLE -moduuleja.

Tämä Teensy 3.2 -versioon perustuva versio pystyy näytteitä ottamaan paljon enemmän kuin UNO/Mega2560 -versio. Tämän koodin avulla Teensy 3.2 voi ottaa näytteitä ja kirjata kaksi ADC -näytettä> 30 Khz: n laitteistolla keskimäärin yli 4 näytettä ja täyttää näin helposti yllä olevan 1000 näytteen/sek. Koodi tukee 100.bin -tiedoston tallentamista, 128 kB. 30 Khz, joka kattaa 29 tuntia 30 minuuttia. Nopeudella 1000 näytettä sekunnissa se kattaa 37 päivää. Koodia voidaan helposti laajentaa käsittelemään yli 100 tiedostoa, mikä pidentää ajon kestoa. Ajon lopussa sinulla on> 10 Gig dataa,.bin, tiedostoja ja.met -tiedosto metatiedoista, jotka kuvaavat juoksua ja tuloksia. Mukana toimitettua SDtoCSV.jar -lähdekoodia (lähdekoodi SDtoCSV_src.zip) voidaan käyttää.bin -tiedostojen muuntamiseen tietokoneen.csv -tiedostoiksi jatkokäsittelyä varten. Tuloksena oleva data on> 60 Gig. UNO/Mega2560 -versiossa Arduino -luonnokseen sisältyy.bin -muunnos.csv -muunnokseksi, mutta Teensy -version kirjaaman datamäärän vuoksi tämä ei ole tehokas tapa tehdä muunnos.

Tarvikkeet

Teensy 3.2 Tekijä PJRC

Adafruit MicroSD -korttikortti+ tai vastaava.

16G SDHC -luokan 10 laadukas MicroSD -kortti, esim. SanDisk.

5V USB -syöttö

Led, jossa on 470R -vastus sarjaan.

2 x 100R vastukset (suojaa vaurioilta, jotka johtuvat Tx/Rx -kytkentävirheistä)

Bluetooth Mate Silver TAI yksi Arduino UNO/Mega Starterissa kuvatuista moduuleista, jota ohjaa Android/pfodApp

Vaihe 1: Rakentaminen

Rakentaminen
Rakentaminen

Lataa ja asenna Arduino IDE V1.8.9+ osoitteesta https://arduino.cc/en/Main/Software. Tällä verkkosivulla on linkkejä eri käyttöjärjestelmiin ja linkki GettingStartediin (https://arduino.cc/en/Guide/HomePage).

Lataa ja asenna Teensyduino (Arduino IDE: n Teensy -tuki). HUOMAA huolellisesti ensimmäisen käytön ohjeet.

Valitse Teensy 3.2 tauluksi ja tarkista, että BLINK -esimerkkiohjelma latautuu ja toimii.

Lataa ja asenna seuraavat kirjastot:- millisDelay ja SdFat (paikallinen tilannevedos näissä testeissä käytetystä SdFat-kirjastosta on täällä.) Ja pfodParser.zip (luokille pfodBufferedStream ja pfodNonBlockingInput)

Lataa kirjaston zip -tiedostot ja asenna sitten kirjastot zip -tiedostoista käyttämällä Arduino IDE → Luonnos → Sisällytä kirjasto → Lisää. ZIP -kirjasto -valikko.

Pura Teensy32AnalogLogger.zip -tiedosto Arduino -luonnoshakemistoosi ja ohjelmoi Teensy 3.2 -levy Teensy32AnalogLogger.ino -ohjelmalla (versio 0.01)

Yhdistä Teensy 3.2, Bluetooth -moduuli ja SD -korttimoduuli yllä olevan kuvan mukaisesti (pdf -versio)

Vaihe 2: Ohjelman suorittaminen - testaus

Alusta SD -kortti ensin käyttämällä

SD -kortin on oltava tyhjä kirjaamisen aloittamiseksi.

Ensimmäistä testausta varten sinun ei tarvitse kytkeä kommunikaatiomoduulia, liitä vain Teensy 3.2 + SD -moduuli (jossa on tyhjä kortti) Arduino IDE -laitteeseen USB -sarjakaapelin kautta. Kuten toimitettu, Teensy32AnalogLogger.ino -luonnos käyttää USB -liitäntää ohjaukseen ja valvontaan. Katso jäljempänä oikeiden tietojen kirjaaminen -vaihe viestintälaitteen käyttämiseksi ohjaukseen ja valvontaan.

Muokkaa Teensy32AnalogLogger.ino -luonnoksen yläosaa asettaaksesi COM_SERIAL -asetukseksi sarja, jotta Teensy -USB -liitäntä lähetetään.

#define COM_SERIAL -sarja

Lataa sitten luonnos Teensy 3.2: een

Avaa Arduino IDE -sarjamonitori 115200 baudilla (sekä NL- että CR -asetuksella). Muutaman sekunnin kuluttua Teensy 3.2 näyttää komentovalikon

Ver: 0.01 kirjoita jokin seuraavista komennoista:? - nykyinen tila ja metadatai - tiedostojen alustaminenl - luettelo tiedostot>

? cmd näyttää nykyisten asetusten tiedot. (Katso Teensy32AnalogLogger.ino -sivun alkuun, jos haluat muuttaa näitä asetuksia.) Cmds on lopetettava NL- tai CR -näppäimellä tai molemmilla.

0: 00: 00.000 ja 720: 00: 00.000

Näytetapit: 16 17 Tavujärjestys: Little-Endian ADC-bitit: 10 ADC-näytteen keskiarvoa yli: 4 Näytteenottotaajuus: 1000.00 Näyteväli: 1000uS Näytteitä lohkossa: 127 Lohkon täyttöaika: 127000uS Aika tiedoston täyttämiseen: 9:01: 52.000 AIKA kaikkien tiedostojen täyttämiseen: 894: 04: 48.000 SD: n enimmäisviive (sisältää tiedoston sulkemisen/avaamisen): 0uS Suurin tiedoston sulkeminen/avaamisen viive: 0uS Puskurilohkojen määrä: 28 Aika täyttää kaikki lohkopuskurit: 3556000uS Puskurien enimmäismäärä tallennettu puheluun myymäläänSampleBuffers (): 0 Vastaamattomat ajastimet yhteensä: 0 Vastaamattomia näytteitä yhteensä: 0 Kirjoitettuja lohkoja yhteensä: 0 Kirjoitettuja näytteitä yhteensä: 0 kattaen: 0: 00: 00.000 Nykyinen tiedosto:

Tässä tapauksessa nykyinen kirjausaika on 0 pyydettyä 720 tuntia (30 päivää), näytteenotto D16/A2 ja D17/A3 (katso alla olevat ADC -tulojen valinnan rajoitukset alla) 1000 kertaa sekunnissa. Suurin käyttöaika voi olla jopa 894 tuntia (37,25 päivää). Pääsilmukka () voi olla käytössä jopa 3,5 sekuntia (aika täyttää KAIKKI lohkopuskurit), ennen kuin kaikki käytettävissä olevat puskurit täytetään ja näytteet häviävät. Puskurit jne. Päivitetään ajon edetessä.

Aseta tyhjä SD -kortti paikalleen ja käytä 'i' cmd -näppäintä alustamaan 99 tiedostoa, joita käytetään tietojen tallentamiseen. Niiden alustaminen täällä lyhentää viivettä, kun siirrytään tiedostosta toiseen, ja mahdollistaa nopeamman näytteenoton.

Alustetaan 99 tiedostoa

Uuden tiedoston luominen: log00.bin Kulunut aika: 368 mS Uuden tiedoston luominen: log01.bin Kulunut aika: 520 mS… Uuden tiedoston luominen: log98.bin Kulunut aika: 15660mS Uuden tiedoston luominen: log99.bin Kulunut aika: 15812mS

Tämän jälkeen voit aloittaa kirjausjakson r cmd: n avulla. Suoritus kestää halutun ajan tai kunnes s cmd käytetään sen pysäyttämiseen. Voitko käyttää myös? cmd kirjautumisen aikana, jotta saat päivitetyt ajoitukset ja laskut. Tässä on lyhyt juoksu, joka pysäytettiin aikaisin s cmd: n avulla.

LOKITIETOTIEDOT ….

Ver: 0.01 kirjoita jokin seuraavista komennoista:? - tämänhetkinen tila ja metatiedot s - lopettaa tiedonkeruun

LOGGING DATA… Tarkista? komento

Kulunut käyttöaika: 0: 00: 10.000 / 720: 00: 00.000 Kulunut käyttöaika: 0: 00: 20.000 / 720: 00: 00.000…

Kirjaamisen lopettaminen ja käyttämättömien tiedostojen poistaminen.

… Käyttämättömän tiedoston poistaminen: log98.bin Käyttämättömän tiedoston poistaminen: log99.bin

0: 01: 04.976 ja 720: 00: 00.000

Näytetapit: 16 17 Tavujärjestys: Little-Endian ADC-bitit: 10 ADC-näytteen keskiarvoa yli: 4 Näytteenottotaajuus: 1000.00 Näyteväli: 1000uS Näytteitä lohkossa: 127 Lohkon täyttöaika: 127000uS Aika tiedoston täyttämiseen: 9:01: 52.000 AIKA kaikkien tiedostojen täyttämiseen: 894: 04: 48.000 SD -enimmäisviive (sisältää tiedoston sulkemisen/avaamisen): 204uS Suurin tiedoston sulkemis-/avausviive: 0uS Puskurilohkojen määrä: 28 Aika täyttää kaikki lohkopuskurit: 3556000uS Puskurien enimmäismäärä tallennettu puheluun myymäläänSampleBuffers (): 1 Vastaamattomat ajastimet yhteensä: 0 Vastaamattomia näytteitä yhteensä: 0 Kirjoitettuja lohkoja yhteensä: 511 Kirjoitettuja näytteitä yhteensä: 64832 kattaa: 0: 01: 04.832 Nykyinen tiedosto: log00.bin

ls:

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

DATA LOGGING VALMIS!

Ver: 0.01 kirjoita jokin seuraavista komennoista:? - nykyinen tila ja metatiedot ** r - tallenna ADC -tiedot ** ei saatavilla. Tietoja on jo olemassa ** i - tiedostojen alustaminen ** ei saatavilla. Tiedot ovat jo olemassa l -luettelotiedostot

TIETOJA ON JO LOKITTU, tarkista?

LED-näyttö

D3: een kytketty LED (jossa D2 tarjoaa GND -yhteyden) palaa tasaisesti, jos jokin näyte jää väliin, ja vilkkuu, jos on virhe. Luonnos yrittää jatkaa virheiden jälkeen, mutta ei välttämättä onnistu.

Vaihe 3: Oikeiden tietojen kirjaaminen

Kun kirjaat todellista dataa pitkiä aikoja, on helpompi liittää viestintämoduuli D0/D1 -nastoihin ja hallita ja valvoa kirjausta etänä. Tässä käytettiin Bluetooth Mate Silver -moduulia oletusasetuksineen, 115200 baudia, ei laitteiston kättelyä (RTC, CTS), PIN -koodi 1234.

Huomautus: Kun Mate Silver -moduuliin kytketään virta, se siirtyy asetustilaan ja vilkkuu nopeasti punaisena 60 sekunnin ajan. Tänä aikana voit lähettää $$$ sarjaliitännän kautta moduuliin sen määrittämiseksi, mutta et voi yhdistää moduulia. Kun punainen merkkivalo vilkkuu hitaasti, Bluetooth -moduuli hyväksyy yhteydet.

Muuta COM_SERIAL -määritelmä Teensy32AnalogLogger.ino -laitteessa sarjaliitäntään (D0/D1), Serial1

#define COM_SERIAL -sarja1

Pariliitoksen muodostamisen jälkeen tietokoneeseen luotiin uusi COM -portti ja CoolTermiä voidaan käyttää kirjautumisen yhdistämiseen, hallintaan ja seurantaan. Muita sarjaan kytkettyjä viestintämoduuleja, kuten WiFi tai BLE, voidaan myös käyttää, katso lisätietoja Android/pfodAppin ohjaamasta Arduino UNO/Mega Starter -ohjelmasta.

Voit myös hallita ja valvoa kirjautumista Android -mobiililaitteestasi käyttämällä Bluetooth -päätelaitesovellusta, kuten Bluetooth -terminaalisovellusta, tai käyttämällä WiFi- ja TCP -päätelaitesovellusta, kuten TCP Telnet Terminal Pro, tai Uart – BLE -mdoule ja BLE -terminaalisovellus, kuten nRF UART V2

Vaihe 4: ADC -tulojen valinnan rajoitukset

ADC -tulojen valinnan rajoitukset
ADC -tulojen valinnan rajoitukset

Teensy 3.2: n mikroprosessorissa on kaksi erillistä ADC-laitteistomoduulia, ADC_0 ja ADC_1, joten se voi ottaa näytteitä kahdesta tulosta samanaikaisesti. Siinä on myös sisäänrakennettu laitteistokeskiarvo, joka ottaa useita ADC -näytteitä ja keskiarvoi ne ennen tuloksen kääntämistä.

Tuloja voidaan yhdistää ADC_0, ADC_1 -rajoituksiin. Teensy3_1_AnalogCard.png-kuva (osoitteesta https://forum.pjrc.com/threads/25532-ADC-library-update-now-with-support-for-Teensy-3-1), joka sisältyy Teensy32AnalogLogger.zip-tiedostoon, tiedot siitä, mitkä nastat voidaan liittää mihin ADC: hen.

Yhteenvetona:-Yksittäisissä lukemissa, esim. +Volttia, joihin viitataan GND ADC_0: lla, voidaan lukea A0-A9, A10, A11, A12, A14 ADC_1 voi lukea A2, A3, A10, A13, A15-A20 Jos valitset nastan, jonka ADC ei voi lukea se palauttaa 0 (aina)

Tässä projektissa käytetään A2: ta, A3: aa, joihin kullakin on pääsy ADC_0: lla tai ADC_1: llä.

Vaihe 5:.bin -tiedostojen muuntaminen.csv -tiedostoiksi

Teensy32AnalogLogger.ino tallentaa näytteet binäärinä logxx.bin -tiedostoihin eli log00.bin - log99.bin. Teensy32AnalogLogger.ino tallentaa myös log.met -tiedoston ajon metatiedoista.

Voit muuntaa.bin -tiedostot.csv -tiedostoiksi jatkokäsittelyä varten SDtoCSV.jar (lähdekoodi SDtoCSV_src.zip) avulla. Kopioi tiedostot SD -kortilta tietokoneen kiintolevylle, jossa on vähintään 70 Gt vapaata tilaa, ja kopioi SDtoCSV.jar samaan hakemistoon. Avaa komentoikkuna kyseisessä hakemistossa ja suorita

java -jar SDtoCSV.jar -loki

Jos tietokoneessasi ei ole Java -asennusta, asenna se osoitteesta www.java.com

SDtoCSV käsittelee log.met -tiedoston ja sitten kaikki hakemistossa olevat logxx.bin -tiedostot ja antaa.csv -tiedoston jokaiselle.bin -tiedostolle.. Csv -tiedostossa on näytteen järjestysnumero ja sen jälkeen kaksi lukemaa.

Esimerkkikonsolin lähtö 2 adc -lukemalle näytteistettynä 30303 kertaa sekunnissa näkyy tässä, output.txt. Se kuvaa kuinka menetetyt näytteet raportoidaan. (Puskurien määrän kaksinkertaistaminen viimeisessä luonnoksessa korjasi nämä puuttuvat näytteet)

SD_Logging to CSV conversion. Tarkista SDtoCSV.log edistymisestä ja virheilmoituksista… Käsittelyloki25 Käsitelty 256000 lohkoa Käsittelyloki26 Käsitelty 256000 lohkoa Käsiteloki27 Käsitelty 256000 lohkoa Missed Näytteet: 2715 Käsiteloki28 Käsitelty 256000 lohkoa… Käsittelyloki29 Käsitelty 256000 lohkoa… Käsittelyloki47 Käsitelty 256000 lohkoa Käsittelyloki48 Käsitelty 35935 lohkoa --- Valmis käsittely

Täydellisempi lokitiedosto, SDtoCSV.log, lisätään jokaiseen SDtoCSV -ajon yhteydessä. Se sisältää metatiedon ja kaikki virheilmoitukset. Tässä määrä: 254 on kyseiseen lohkoon tallennettujen tietojen määrä eli 127 näytettä x 2 adc -lukemaa lohkoa kohti. MissSamples on lukemattomien lukuparien lukumäärä eli rivit.csv -tulostuksessa.

=== Lokitiedosto SD_Logging -CSV -muunnosta varten la 13. heinäkuuta 13:19:51 AEST 2019 Jos haluat nähdä edistymisviestit konsolissa, käytä java -jar SDtoCSV.jar Base -tiedoston nimeä 'log' Metatiedot Versio: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinCount: 2 nastaa: 16, 17 näytettä PerBlock: 127 noBufferBlocks: 28 kesto mS: 51649820 pyydetty suoritusaika mS: 106216704 maxBuffersUsed: 32 Varoitus: ylittää käytettävissä olevien puskureiden määrän (28). Jotkut näytteet saattavat puuttua. maxLatency uS: 221476 Varoitus: ylittää puskurilohkojen aika (117348uS). Jotkut näytteet puuttuvat. maxFileOpenTime uS: 20998 puuttui Ajastimet: 0 puuttui Näytteet Yhteensä: yhteensä 2715 Lohkoa Kirjoitettu: yhteensä 12323935 Näytteet Kirjoitettu: 1565139665 Käsittelee log00.bin Käsitelty 256000 lohkoa Käsittelee log01.bin Käsitelty 256000 lohkoa… Käsitellään log26.bin Käsitelty 256000 lohkoa Käsittelee log27.bin !!! Lohko: 57696 määrä: 254 puuttui Näytteet: 2339 !!! Lohko: 57697 lukumäärä: 254 puuttui Näytteet: 376 Käsitelty 256000 lohkoa --- Näytteet yhteensä: 2715

Käsitellään log28.bin Käsitelty 256000 lohkoa

… Käsittelee log47.bin Käsitelty 256000 lohkoa Käsittelee log48.bin Käsitelty 35935 lohkoa --- Valmis käsittely

Esimerkki log00.csv -tulostiedostosta on

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

Näytelaskuri kasvaa tiedostosta tiedostoon, joten sitä voidaan käyttää aikaleimana. Jos näytteitä puuttuu, näytelaskuria lisätään menetetyllä laskulla ennen seuraavan rivin tulostamista, jotta laskuri/aikaleima pysyy tarkana tallennetuille näytteille.

Vaihe 6: Koodin ja laajennusten kommentit

Teensy32AnalogLogger on voimakkaasti muokattu versio Bill Greimanin AnalogBinLogger -esimerkistä hänen SdFat Arduino -kirjastossaan. Täällä kirjasto on kirjoitettu uudelleen toimimaan Teensy 3.2: ssa.

Teensy32AnalogLogger määrittää näytteenottovälin timer0: lla. Ajastimen0 keskeytyksenkäsittelijä käynnistää kaksi ADC -muunnosta. Toisen ADC -moduulin keskeytyskäsittelijää kutsutaan jatkuvasti, kunnes molemmat ovat valmiit. Yleensä ensimmäinen käynnistetty ADC -moduuli ADC_0 päättyy ennen toista, joten keskeytyksen käsittelijä kutsutaan vain kerran. ADC_1 -keskeytyksenkäsittelijä tallentaa näytteet tietopuskuriin.

Pääsilmukassa () storeSampleBuffer () tallentaa kaikki täydelliset puskurit SD -kortille ja kierrättää puskurit tyhjään puskurijonoon. Suuri määrä RAM -muistia, joka on saatavana Teensy 3.2 -laitteessa, tarkoittaa, että voidaan varata suuri määrä puskureita, joten storeSampleBuffer () ei tarvitse soittaa usein. Tämä jättää aikaa pääsilmukalle () tehdä muita töitä, kuten prosessikomentoja ja lähettää tuloksen.

Laajennukset

Vaikka tämä projekti toimii nopeana tiedonkeruulaitteena, se on pakattava täydellisesti käytettäväksi, ja se on pakattava ja toimitettava akkujärjestelmä ja EKG -anturit. Sen lisäksi, että on olemassa joitain laajennuksia, jotka on otettava huomioon.

  1. Lisää näytteistetyn aaltomuodon reaaliaikainen ohjaus ja seuranta pfodAppin kautta käyttämällä pfodAppin piirtotoimintoa, jolloin voit näyttää aaltomuodon tilannekuvia
  2. Laajenna tiedostonumerot yli 99, jotta näytteenotto kestää pidempään
  3. Näyte yli 2 tuloa. Koska Teensy 3.2: ssa on kaksi ADC -moduulia, voit muokata koodia lisäämällä pareittain parempia tuloja näytteenottotaajuuden maksimoimiseksi.
  4. Lisää akun valvonta seurataksesi akun varausta. Teensy 3.2 käyttää noin 1100 mAh 24 tunnin aikana, mukaan lukien bluetooth- ja SD -moduuli, mutta ilman anturimoduulia
  5. Lisää kaksoisakun syöttöpiiri, jotta akku voidaan vaihtaa ilman kirjaamisen keskeyttämistä.

Suositeltava: