INHOUDSOPGAWE:

Teken hoëspoed -EKG of ander data aan, deurlopend vir meer as 'n maand: 6 stappe
Teken hoëspoed -EKG of ander data aan, deurlopend vir meer as 'n maand: 6 stappe

Video: Teken hoëspoed -EKG of ander data aan, deurlopend vir meer as 'n maand: 6 stappe

Video: Teken hoëspoed -EKG of ander data aan, deurlopend vir meer as 'n maand: 6 stappe
Video: Иэн МакГилкрист и Джон Верваке: Бог, бытие, смысл 2024, Julie
Anonim
Teken hoëspoed -EKG of ander data aan, deurlopend vir meer as 'n maand
Teken hoëspoed -EKG of ander data aan, deurlopend vir meer as 'n maand

Hierdie projek is ontwikkel om 'n universiteitsgeneeskundige navorsingspan te ondersteun wat 'n draagbare apparaat nodig gehad het wat 2 x EKG -seine by 1000 monsters/sek elk (2K monsters/sek totaal) vir 30 dae aaneen kan teken om aritmieë op te spoor. Die projek wat hier aangebied word, sluit afstandbeheer en monitering van die houtkap in. Afstandsbediening is via spyskaarte wat op 'n seriële terminale aangebied word, hetsy op 'n rekenaar of selfoon. Hierdie projek dek nie die EKG -meting of verpakking of battery wat benodig word vir die finale dra nie.

Hierdie weergawe met hoë spoed/lang duur gebruik Teensy 3.2, Adafruit Micro-SD-uitbreekmodule, 'n kwaliteit 16G SDHC klas 10 SD-kaart om die data aan te meld en 'n Bluetooth-kommunikasiemodule vir beheer en monitering. 'N Minder ontwikkelde en stadiger UNO/Mega2560 -weergawe van hierdie projek is ook beskikbaar. Terwyl hierdie projek 'n Bluetooth -kommunikasiemodule gebruik vir die beheer en monitering van die aanmelding, kan u ook WiFi- of BLE -modules gebruik.

Hierdie weergawe, gebaseer op die Teensy 3.2, het baie hoër monsternemingsyfers as die UNO/Mega2560 -weergawe. Deur hierdie kode te gebruik, kan die Teensy 3.2 twee ADC -monsters by> 30Khz bemonster en aanteken met hardeware van gemiddeld meer as 4 monsters en voldoen dit so maklik aan die bogenoemde 1000 monsters/sek. Die kode ondersteun die stoor van 100. Bin -lêers van 128K elk. By 30Khz dek dit 29 uur 30 minute. Teen 1000 monsters/sek. Dek dit 37 dae. Die kode kan maklik uitgebrei word om meer as 100 lêers te hanteer, wat die duur van die hardloop verleng. Aan die einde van die hardloop het u> 10Gig data,.bin, lêers en 'n.met -lêer metadata wat die uitvoering en resultate beskryf. Die meegeleverde SDtoCSV.jar (bronkode SDtoCSV_src.zip) kan gebruik word om die.bin -lêers na.csv -lêers op u rekenaar om te sit vir verdere verwerking. Die gevolglike data is> 60Gig. Die UNO/Mega2560 -weergawe het.bin na.csv -omskakeling ingesluit in die Arduino -skets, maar gegewe die hoeveelheid data wat deur die Teensy -weergawe aangeteken is, is dit nie 'n doeltreffende manier om die omskakeling te doen nie.

Voorrade

Teensy 3.2 deur PJRC

Adafruit MicroSD kaart uitbreekbord+ of soortgelyke.

16G SDHC klas 10 MicroSD kaart van goeie kwaliteit bv. SanDisk.

5V USB -toevoer

'N LED met 'n 470R -weerstand in serie.

2 x 100R -weerstande (bied beskerming teen skade as gevolg van Tx/Rx -bedradingfoute)

Bluetooth Mate Silver OF een van die modules beskryf op Arduino UNO/Mega Starter, beheer deur Android/pfodApp

Stap 1: Konstruksie

Konstruksie
Konstruksie

Laai en installeer Arduino IDE V1.8.9+ van https://arduino.cc/en/Main/Software. Die webbladsy het skakels vir verskillende bedryfstelsels en 'n skakel na GettingStarted (https://arduino.cc/en/Guide/HomePage).

Laai en installeer die Teensyduino (Teensy -ondersteuning vir die Arduino IDE). Let noukeurig op die instruksies vir eerste gebruik.

Kies Teensy 3.2 as die bord en kyk of die BLINK -voorbeeldprogram laai en werk.

Laai en installeer die volgende biblioteke:- millisDelay en SdFat ('n Plaaslike momentopname van die SdFat-biblioteek wat vir hierdie toetse gebruik word, is hier.) En die pfodParser.zip (vir die pfodBufferedStream- en pfodNonBlockingInput-klas)

Laai die zip -lêers van die biblioteek af en gebruik dan die Arduino IDE → Skets → Sluit biblioteek in → Voeg. ZIP -biblioteekmenu by om die biblioteke uit die zip -lêers te installeer.

Pak die Teensy32AnalogLogger.zip -lêer uit na u Arduino -sketsgids en programmeer die Teensy 3.2 -bord met Teensy32AnalogLogger.ino (Weergawe 0.01)

Verbind die Teensy 3.2, Bluetooth module en die SD kaart module soos hierbo getoon (pdf weergawe)

Stap 2: Die uitvoering van die program - toets

Formateer u SD -kaart eers met die

Die SD -kaart moet leeg wees om te kan aanmeld.

Vir die eerste toets hoef u nie die kommunikasiemodule aan te sluit nie, maar verbind die Teensy 3.2 + SD -module (met 'n leë kaart geïnstalleer) via die seriële USB -kabel met die Arduino IDE. Soos voorsien, gebruik die Teensy32AnalogLogger.ino -skets die USB -verbinding vir beheer en monitering. Sien die stap vir die aanmelding van regte data hieronder vir die gebruik van 'n kommunikasietoestel vir beheer en monitering.

Bewerk die bokant van die Teensy32AnalogLogger.ino -skets om die COM_SERIAL op Serial in te stel, na die uitvoer na die Teensy USB -verbinding.

#define COM_SERIAL Serial

Laai dan die skets op na die Teensy 3.2

Maak die Arduino IDE Serial Monitor oop op 115200 baud (met beide NL- en CR -stel). Na 'n paar sekondes sal die Teensy 3.2 'n spyskaart met opdragte vertoon

Ver: 0.01 voer een van die volgende opdragte in:? - huidige status en metadatai - initialiseer lêersl - lys lêers>

Die ? cmd vertoon besonderhede van die huidige instellings. (Sien die bokant van die Teensy32AnalogLogger.ino om hierdie instellings te verander) Cmds moet beëindig word met 'n NL of CR of albei.

0: 00: 00.000 van 720: 00: 00.000

Voorbeeldpenne: 16 17 Bytevolgorde: Little-Endian ADC-stukkies: 10 ADC-steekproefgemiddeldes: 4 Monstertempo: 1000,00 Voorbeeldinterval: 1000uS Monsters per blok: 127 Tyd om blok in te vul: 127000uS Tyd om 'n lêer te vul: 9:01: 52.000 Tyd om ALLE lêers in te vul: 894: 04: 48.000 Maksimum SD -latensie (sluit lêer toe/oop): 0uS Maksimum lêer sluit/oop latency: 0uS Aantal bufferblokke: 28 Tyd om ALLE blokbuffers te vul: 3556000uS Maksimum aantal buffers gestoor in oproep na winkelSampleBuffers (): 0 Totale gemiste tydtellers: 0 Totaal ontbrekende monsters tot dusver: 0 Totale blokke geskryf: 0 Totale monsters geskryf: 0 dekking: 0: 00: 00.000 Huidige lêer:

In hierdie geval is die huidige tydsduur vir aanmelding 0 van die aangevraagde 720 uur (30 dae), monster D16/A2 en D17/A3 (sien hieronder vir beperkings op die keuse van ADC -insette hieronder) 1000 keer per sekonde. Die maksimum tydsduur kan tot 894 uur (37.25 dae) wees. Die hooflus () kan tot 3,5 sekondes beset word (tyd om ALLE blokbuffers te vul) voordat al die beskikbare buffers gevul word en monsters begin verlore gaan. Buffers wat gestoor word, ens word opgedateer namate die aanloop vorder.

Plaas 'n leë SD -kaart, gebruik die 'i' cmd om die 99 lêers wat gebruik is om die data te stoor, te initialiseer. Deur hulle hier vooraf te initialiseer, verminder die vertraging van die tyd wanneer daar van die een lêer na die volgende oorgeskakel word, en word vinniger bemonstering moontlik gemaak.

Initialiseer 99 lêers

Nuwe lêer skep: log00.bin Verstreke tyd: 368mS Nuwe lêer skep: log01.bin Verstreke tyd: 520mS… Nuwe lêer skep: log98.bin Verstreke tyd: 15660mS Nuwe lêer skep: log99.bin Verstreke tyd: 15812mS

U kan dan die r cmd gebruik om 'n aanmelding te begin. Die lopie sal vir die verlangde tyd of totdat die s cmd gebruik word om dit te stop. U kan ook die? cmd terwyl u aanmeld om opgedateerde tye en tellings te kry. Hier is 'n kort termyn wat vroeg gestop is met behulp van die s cmd.

AANMELDINGSDATA ….

Ver: 0.01 voer een van die volgende opdragte in:? - huidige status en metadata s - stop data -aanmelding

AANMELDINGSGEGEWENS … Gaan na? bevel

Verstreke werktyd: 0: 00: 10.000 van 720: 00: 00.000 Verstreke werktyd: 0: 00: 20.000 van 720: 00: 00.000…

Hou op met aanmeld en verwyder ongebruikte lêers.

… Ongebruikte lêer verwyder: log98.bin Verwyder ongebruikte lêer: log99.bin

0: 01: 04.976 van 720: 00: 00.000

Voorbeeldpenne: 16 17 Bytevolgorde: Little-Endian ADC-bisse: 10 ADC-steekproefgemiddeldes: 4 Monstertempo: 1000,00 Voorbeeldinterval: 1000uS Monsters per blok: 127 Tyd om blok in te vul: 127000uS Tyd om 'n lêer te vul: 9:01: 52.000 Tyd om ALLE lêers in te vul: 894: 04: 48.000 Maksimum SD -vertraging (sluit lêer sluit/oop): 204uS Maksimum lêer sluit/oop latency: 0uS Aantal bufferblokke: 28 Tyd om ALLE blokbuffers te vul: 3556000uS Maksimum aantal buffers gestoor in oproep na winkelSampleBuffers (): 1 Gemiste tydtellers totaal: 0 Totaal ontbrekende monsters tot dusver: 0 Totale blokke geskryf: 511 Totale monsters geskryf: 64832 omslag: 0: 01: 04.832 Huidige lêer: log00.bin

ls:

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

DATALOGGING VOLTOOI!

Ver: 0.01 voer een van die volgende opdragte in:? - huidige status en metadata ** r - teken ADC -data op ** nie beskikbaar nie. Data bestaan reeds ** i - inisialiseer lêers ** nie beskikbaar nie. Data bestaan reeds l - lys lêers

GEGEVENS IS REEDS GELOGGEER?

LED Display

Die LED wat aan D3 gekoppel is (met D2 wat die GND -verbinding bied), sal stewig aanskakel as 'n voorbeeld gemis word en sal flikker as daar 'n fout is. Die skets probeer om voort te gaan na foute, maar dit kan nie suksesvol wees nie.

Stap 3: Registreer regte data

As u regte data oor 'n lang tyd aanmeld, is dit geriefliker om 'n kommunikasiemodule aan die D0/D1 -penne te koppel en die aanmelding op afstand te beheer en te monitor. Hier is 'n Bluetooth Mate Silver -module gebruik met sy standaardinstellings, 115200 baud, geen hardeware -handdruk (RTC, CTS), pincode 1234.

Opmerking: as die Mate Silver -module krag aangeskakel word, gaan dit in 'n konfigurasiemodus, vinnig rooi LED knipper vir 60 sekondes. Gedurende hierdie tyd kan u $$$ via die seriële verbinding na die module stuur om dit te konfigureer, maar u kan nie die module koppel nie. As die rooi led stadig knip, aanvaar die Bluetooth -module verbindings.

Verander die COM_SERIAL definieer in die Teensy32AnalogLogger.ino na die hardeware seriële (D0/D1) verbinding, Serial1

#define COM_SERIAL Serial1

Nadat dit met die rekenaar gekoppel is, is 'n nuwe COM -poort op die rekenaar geskep en kan CoolTerm gebruik word om die aanmelding aan te sluit en te beheer en te monitor. Ander serieel gekoppelde kommunikasiemodules kan ook gebruik word, soos WiFi of BLE, sien Arduino UNO/Mega Starter, beheer deur Android/pfodApp vir meer inligting.

U kan ook die aanmelding vanaf u Android -selfoon beheer en monitor met behulp van 'n Bluetooth -terminale -app, soos Bluetooth Terminal -app, of WiFi- en TCP -terminale -app, soos TCP Telnet Terminal Pro, of 'n Uart to BLE -mdoule en 'n BLE -terminale -app, soos nRF UART V2

Stap 4: Beperkings op die keuse van ADC -insette

Beperkings op die keuse van ADC -insette
Beperkings op die keuse van ADC -insette

Die Teensy 3.2 het twee afsonderlike ADC-hardeware-modules, ADC_0 en ADC_1, in sy mikroverwerker, sodat dit twee insette gelyktydig kan monster. Dit het ook 'n ingeboude hardeware -gemiddelde wat verskeie ADC -monsters neem en dit gemiddeld neem voordat die resultaat gedraai word.

Daar is beperkings waarop insette aan ADC_0, ADC_1 gekoppel kan word. Die Teensy3_1_AnalogCard.png-prent (van https://forum.pjrc.com/threads/25532-ADC-library-update-now-with-support-for-Tenens-3-1), ingesluit in die Teensy32AnalogLogger.zip-lêer, besonderhede oor watter penne aan watter ADC gekoppel kan word.

In opsomming: -Voor enkellopende lesings dws +volt na GND verwys ADC_0 kan A0 tot A9 lees, A10, A11, A12, A14 ADC_1 kan lees A2, A3, A10, A13, A15 tot A20 As u 'n pen kies wat die ADC kan nie lees nie, dit sal 0 (altyd) terugkeer

Hierdie projek maak gebruik van A2, A3, wat elk via ADC_0 of ADC_1 verkry kan word.

Stap 5: Omskakeling van die.bin -lêers na.csv -lêers

Die Teensy32AnalogLogger.ino stoor die monsters as binêre in logxx.bin -lêers, dit wil sê log00.bin na log99.bin. Teensy32AnalogLogger.ino stoor ook 'n log.met -lêer met metadata oor die hardloop.

U kan SDtoCSV.jar (bronkode SDtoCSV_src.zip) gebruik om die.bin -lêers na.csv om te skakel vir verdere verwerking. Kopieer die lêers van die SD -kaart na u rekenaar se hardeskyf met ten minste 70Gig spasie en kopieer die SDtoCSV.jar na dieselfde gids. Open 'n opdragvenster in die gids en voer dit uit

java -jar SDtoCSV.jar log

As u rekenaar nie Java geïnstalleer het nie, installeer dit dan vanaf www.java.com

SDtoCSV verwerk die log.met -lêer en dan elk van die beskikbare logxx.bin -lêers in die gids en lewer 'n.csv -lêer vir elke.bin. Die.csv -lêer het die voorbeeldreeksnommer, gevolg deur die twee lesings.

'N Voorbeeld van die konsole -uitset vir 'n 2 adc -lesing wat 30303 keer/sek. Geneem is, word hier getoon, output.txt. Dit illustreer hoe gemiste monsters aangemeld word. (Deur die aantal buffers in die finale skets te verdubbel, is hierdie gemiste monsters reggestel)

SD_Logging by CSV -omskakeling. Gaan SDtoCSV.log na vordering en foutboodskappe na. Verwerking log00 Verwerk 256000 blokke Verwerk log01 Verwerk 256000 blokke… Verwerk log25 Verwerk 256000 blokke Verwerk log26 Verwerk 256000 blokke Verwerk log27 Verwerk 256000 blokke Gemiste monsters: 2715 Verwerk log28 Verwerk 256000 blokke… Verwerk log29 Verwerk 256000 blokke… Verwerk log47 Verwerk 256000 blokke Verwerk log48 Verwerk 35935 blokke --- Voltooide verwerking

'N Vollediger loglêer, SDtoCSV.log, word by elke reeks SDtoCSV gevoeg. Dit bevat die metadata -uitset en enige foutboodskappe. Hier is die telling: 254 die telling van die data wat in die blok gestoor is, dit wil sê 127 monsters x 2 adc -lesings per blok. Die gemiste steekproewe is die aantal pare leesgemis, dit wil sê lyne in die.csv -uitset.

=== Loglêer vir SD_Logging by CSV -omskakeling Sat Jul 13 13:19:51 AEST 2019 Om vorderingsboodskappe op die konsole te sien, gebruik java -jar SDtoCSV.jar Basis lêernaam 'log' Metadata Weergawe: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinAantal: 2 penne: 16, 17 monstersPerBlock: 127 noBufferBlocks: 28 duur mS: 51649820 aangevraagde tydsduur mS: 106216704 maxBuffersGebruik: 32 Waarskuwing: oorskry die aantal buffers wat beskikbaar is (28). Sommige voorbeelde ontbreek moontlik. maxLatency uS: 221476 Waarskuwing: oorskry tyd wat deur bufferblokke verskaf word (117348uS). Sommige voorbeelde sal ontbreek. maxFileOpenTime uS: 20998 gemiste tydsberekening: 0 gemisSamplesTotaal: 2715 totaalBlokke Geskryf: 12323935 totaalSamplesGeskryf: 1565139665 Verwerking log00.bin Verwerk 256000 blokke Verwerk log01.bin Verwerk 256000 blokke… Verwerk log26.bin Verwerk 256000 blokke Verwerk log27.bin !!! Blok: 57696 telling: 254 gemis Monsters: 2339 !!! Blok: 57697 telling: 254 gemis Monsters: 376 Verwerkte 256000 blokke --- Totaal ontbrekende monsters: 2715

Verwerk log28.bin 256000 blokke verwerk

… Verwerk log47.bin Verwerk 256000 blokke Verwerk log48.bin Verwerk 35935 blokke --- Voltooide verwerking

'N Voorbeeld van log00.csv -uitvoerlêer is

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

Die monsterteller neem van lêer na lêer toe, sodat dit as 'n tydstempel gebruik kan word. As daar monsters ontbreek, word die monsterteller verhoog deur die gemiste telling voordat die volgende reël uitgegee word, sodat die teller/tydstempel akkuraat bly vir die aangetekende monsters.

Stap 6: Opmerkings oor die kode en uitbreidings

Die Teensy32AnalogLogger is 'n sterk aangepaste weergawe van Bill Greiman se AnalogBinLogger -voorbeeld in sy SdFat Arduino -biblioteek. Hier is die biblioteek herskryf om op die Teensy 3.2 te werk.

Teensy32AnalogLogger gebruik timer0 om die monsterinterval in te stel. Die onderbrekingshanteerder vir timer0 begin die twee ADC -omskakelings. 'N Onderbrekingshanteerder vir die tweede ADC -module word voortdurend gebel totdat albei klaar is; gewoonlik begin die eerste ADC -module wat begin is ADC_0 voor die tweede aan, sodat die onderbrekingshanteerder slegs een keer gebel word. Die ADC_1 -onderbrekingshanteerder stoor die monsters in 'n databuffer.

In die hooflus () stoor die storeSampleBuffer () alle buffers op die SD -kaart en herwin die buffers na die leë buffertou. Die groot hoeveelheid RAM wat op die Teensy 3.2 beskikbaar is, beteken dat 'n groot aantal buffers toegeken kan word, en daarom hoef storeSampleBuffer () nie gereeld gebel te word nie. Dit laat tyd vir die hooflus () om ander werk te verrig, soos prosesopdragte en uitvoer.

Uitbreidings

Alhoewel hierdie projek funksioneel is as 'n hoëspoeddatalogger, moet dit nog vir 'n volledige draagbaar verpak word, en moet 'n batterystelsel en EKG -sensors voorsien word. Daarbenewens is daar 'n paar uitbreidings wat oorweeg moet word.

  1. Voeg intydse beheer en monitering van die gegolfde golfvorm via pfodApp met behulp van die plotfunksie van pfodApp om kiekies van die golfvorm te wys
  2. Brei die lêernommers uit na 99 vir langer monsternemings
  3. Voorbeeld van meer as 2 insette. Aangesien die Teensy 3.2 dubbele ADC -modules het, kan u die kode verander om ekstra insette in pare by te voeg om die steekproefsnelheid te maksimeer.
  4. Voeg batterymonitering by om die laai van die battery na te gaan. Die Teensy 3.2 gebruik ongeveer 1100mAhrs oor 24hrs, insluitend die bluetooth- en SD -module, maar die sensormodule uitgesluit
  5. Voeg 'n dubbele toevoerstroombaan by om batterye te verander sonder om die houtkap te onderbreek.

Aanbeveel: