Indholdsfortegnelse:

Log højhastigheds -EKG eller andre data, kontinuerligt i over en måned: 6 trin
Log højhastigheds -EKG eller andre data, kontinuerligt i over en måned: 6 trin

Video: Log højhastigheds -EKG eller andre data, kontinuerligt i over en måned: 6 trin

Video: Log højhastigheds -EKG eller andre data, kontinuerligt i over en måned: 6 trin
Video: Красивая история о настоящей любви! Мелодрама НЕЛЮБОВЬ (Домашний). 2024, Juli
Anonim
Log højhastigheds -EKG eller andre data, kontinuerligt i over en måned
Log højhastigheds -EKG eller andre data, kontinuerligt i over en måned

Dette projekt blev udviklet til at støtte et universitetsmedicinsk forskerhold, der havde brug for en bærbar, der kunne logge 2 x EKG -signaler ved 1000 prøver/sek hver (2K prøver/sek i alt) kontinuerligt i 30 dage for at detektere arytmier. Projektet, der præsenteres her, omfatter fjernbetjening og overvågning af logningen. Fjernbetjeningen er via menuer præsenteret på en seriel terminal, enten på en computer eller mobiltelefon. Dette projekt dækker ikke den EKG -måling eller emballage eller batteri, der kræves til den endelige bærbare.

Denne version med høj hastighed/lang varighed bruger Teensy 3.2, Adafruit Micro-SD breakout-modul, et kvalitets 16G SDHC klasse 10 SD-kort til at logge dataene og et Bluetooth-kommunikationsmodul til kontrol og overvågning. En mindre udviklet og langsommere UNO/Mega2560 -version af dette projekt er også tilgængelig. Mens dette projekt bruger et Bluetooth -kommunikationsmodul til kontrol og overvågning af logningen, kan du også bruge WiFi- eller BLE -moduler.

Denne version, der er baseret på Teensy 3.2, er i stand til meget højere samplingshastigheder end UNO/Mega2560 -versionen. Ved hjælp af denne kode kan Teensy 3.2 prøve og logge to ADC -prøver på> 30Khz med hardware i gennemsnit over 4 prøver og tilfredsstiller så let de 1000 prøver/sek. Krav ovenfor. Koden understøtter at gemme 100. Bin -filer på 128K hver. Ved 30Khz, der dækker 29 timer 30 minutter. Ved 1000 prøver/sek dækker det 37 dage. Koden kan let udvides til at håndtere mere end 100 filer, så forlængelsen af kørslen forlænges. I slutningen af løbet har du> 10Gig data,.bin, filer og en.met -fil med metadata, der beskriver kørslen og resultaterne. Den medfølgende SDtoCSV.jar (kildekode SDtoCSV_src.zip) kan bruges til at konvertere.bin -filerne til.csv -filer på din computer til videre behandling. De resulterende data er> 60Gig. UNO/Mega2560 -versionen har.bin til.csv -konvertering inkluderet i Arduino -skitsen, men i betragtning af mængden af data, der er logget af Teensy -versionen, er det ikke en effektiv måde at foretage konverteringen på.

Forbrugsvarer

Teensy 3.2 af PJRC

Adafruit MicroSD card breakout board+ eller lignende.

16G SDHC klasse 10 MicroSD -kort af god kvalitet f.eks. SanDisk.

5V USB -forsyning

En LED med en 470R resistor i serie.

2 x 100R modstande (giver beskyttelse mod skader på grund af Tx/Rx ledningsfejl)

Bluetooth Mate Silver ELLER et af modulerne beskrevet på Arduino UNO/Mega Starter, styret af Android/pfodApp

Trin 1: Konstruktion

Konstruktion
Konstruktion

Download og installer Arduino IDE V1.8.9+ fra https://arduino.cc/en/Main/Software. Denne webside har links til forskellige operativsystemer og et link til GettingStarted (https://arduino.cc/en/Guide/HomePage).

Download og installer Teensyduino (Teensy Support til Arduino IDE). BEMÆRK omhyggeligt instruktionerne for første brug.

Vælg Teensy 3.2 som tavlen, og kontroller, at BLINK -eksempelprogrammet indlæses og kører.

Download og installer følgende biblioteker:- millisDelay og SdFat (Et lokalt øjebliksbillede af SdFat-biblioteket, der bruges til disse tests, er her.) Og pfodParser.zip (for klassen pfodBufferedStream og pfodNonBlockingInput)

Download bibliotekets zip -filer, og brug derefter Arduino IDE → Skitse → Inkluder bibliotek → Tilføj. ZIP -biblioteksmenu til at installere bibliotekerne fra zip -filerne.

Pak Teensy32AnalogLogger.zip -filen ud til din Arduino sketches -bibliotek, og programmer Teensy 3.2 -kortet med Teensy32AnalogLogger.ino (Version 0.01)

Tilslut Teensy 3.2, Bluetooth -modulet og SD -kortmodulet som vist ovenfor (pdf -version)

Trin 2: Kørsel af programmet - Testning

Formater først dit SD -kort ved hjælp af

SD -kortet skal være tomt for at kunne logge.

Til første test behøver du ikke at tilslutte kommunikationsmodulet, bare tilslut Teensy 3.2 + SD -modulet (med et tomt kort installeret) til Arduino IDE via USB -seriekablet. Som forudsat anvender Teensy32AnalogLogger.ino -skitsen USB -forbindelsen til kontrol og overvågning. Se trin Logning af reelle data nedenfor for brug af en kommunikationsenhed til kontrol og overvågning.

Rediger toppen af Teensy32AnalogLogger.ino -skitsen for at indstille COM_SERIAL til Serial, til output til Teensy USB -forbindelsen.

#define COM_SERIAL Serial

Upload derefter skitsen til Teensy 3.2

Åbn Arduino IDE Serial Monitor ved 115200 baud (med både NL & CR sæt). Efter et par sekunder viser Teensy 3.2 en menu med kommandoer

Ver: 0.01 indtast en af følgende kommandoer:? - nuværende status og metadatai - initialiser filerl - listefiler>

Det ? cmd viser detaljer om de aktuelle indstillinger. (Se toppen af Teensy32AnalogLogger.ino for at ændre disse indstillinger) Cmds skal afsluttes med et NL eller CR eller begge dele.

0: 00: 00.000 af 720: 00: 00.000

Prøvepinde: 16 17 Byte-rækkefølge: Little-Endian ADC-bits: 10 ADC-prøvegennemsnit er over: 4 Prøvehastighed: 1000,00 Prøveinterval: 1000uS Prøver pr. Blok: 127 Tid til at udfylde blok: 127000uS Tid til at udfylde en fil: 9:01: 52.000 Tid til at udfylde ALLE filer: 894: 04: 48.000 Maks. SD -latenstid (inkluderer fillukning/åbning): 0uS Maks. Fillukning/åben latenstid: 0uS Antal bufferblokke: 28 Tid til at fylde ALLE blokbuffere: 3556000uS Maks. Antal buffere gemt i opkald til storeSampleBuffers (): 0 Ubesvarede timere i alt: 0 Samlede manglede prøver indtil videre: 0 Skrevne blokke i alt: 0 Samlede skriftlige prøver: 0 dækning: 0: 00: 00.000 Aktuelle fil:

I dette tilfælde er den nuværende logningstid 0 af en anmodet 720 timer (30 dage), prøveudtagning D16/A2 og D17/A3 (se nedenfor for begrænsninger af valget af ADC -input nedenfor) 1000 gange i sekundet. Den maksimale driftstid kan være op til 894 timer (37,25 dage). Hovedløkken () kan optages i op til 3,5 sekunder (tid til at fylde ALLE blokbuffere), før alle tilgængelige buffere fyldes, og prøver begynder at gå tabt. Buffere gemt osv. Opdateres efterhånden som kørslen skrider frem.

Indsæt et tomt SD -kort, brug 'i' cmd'en til at initialisere de 99 filer, der bruges til at gemme dataene. Forinitialisering af dem her reducerer tidsforsinkelsen ved skift fra en fil til den næste og muliggør hurtigere sampling.

Initialiserer 99 filer

Oprettelse af ny fil: log00.bin Forløbet tid: 368mS Oprettelse af ny fil: log01.bin Forløbet tid: 520mS… Oprettelse af ny fil: log98.bin Forløbet tid: 15660mS Oprettelse af ny fil: log99.bin Forløbet tid: 15812mS

Du kan derefter bruge r cmd til at starte en logningskørsel. Kørslen vil i den ønskede tid eller indtil s cmd bruges til at stoppe den. Du kan også bruge? cmd, mens du logger for at få opdaterede tidspunkter og tællinger. Her er et kort løb stoppet tidligt med s cmd.

LOGGING DATA ….

Ver: 0.01 indtast en af følgende kommandoer:? - nuværende status og metadata s - stop datalogning

LOGGING DATA … Check med? kommando

Forløbet løbetid: 0: 00: 10.000 af 720: 00: 00.000 Forløbet løbetid: 0: 00: 20.000 af 720: 00: 00.000…

Stop med at logge og fjerne ubrugte filer.

… Fjernelse af ubrugt fil: log98.bin Fjernelse af ubrugt fil: log99.bin

0: 01: 04.976 af 720: 00: 00.000

Prøvepinde: 16 17 Byte-rækkefølge: Little-Endian ADC-bits: 10 ADC-prøvegennemsnit er over: 4 Prøvehastighed: 1000,00 Prøveinterval: 1000uS Prøver pr. Blok: 127 Tid til at udfylde blok: 127000uS Tid til at udfylde en fil: 9:01: 52.000 Tid til at udfylde ALLE filer: 894: 04: 48.000 Maks. SD -latenstid (inkluderer fillukning/åbning): 204uS Maks. Fillukning/åbningstid: 0uS Antal bufferblokke: 28 Tid til at fylde ALLE blokbuffere: 3556000uS Maks. Antal buffere gemt i opkald til storeSampleBuffers (): 1 Ubesvarede timere i alt: 0 Samlede manglede prøver hidtil: 0 Samlet antal blokke skrevet: 511 Samlet antal prøver: 64832 dækning: 0: 01: 04.832 Nuværende fil: log00.bin

ls:

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

DATALOGGNING FULDFØRT!

Ver: 0.01 indtast en af følgende kommandoer:? - nuværende status og metadata ** r - optag ADC -data ** ikke tilgængelige. Data findes allerede ** i - initialiser filer ** ikke tilgængelige. Data eksisterer allerede l - listefiler

DATA ER ALLE LOGGET, tjek med?

LED display

Lysdioden, der er tilsluttet D3 (med D2, der giver GND -forbindelsen), tændes konstant, hvis der mangler en prøve, og blinker, hvis der er en fejl. Skitsen forsøger at fortsætte efter fejl, men det kan ikke lykkes.

Trin 3: Logning af reelle data

Når man logger rigtige data over lange varigheder, er det mere bekvemt at tilslutte et kommunikationsmodul til D0/D1 -benene og styre og overvåge logningen eksternt. Her blev et Bluetooth Mate Silver -modul brugt med sine standardindstillinger, 115200 baud, ingen hardware håndtryk (RTC, CTS), pinkode 1234.

Bemærk: Når der tilføres strøm til Mate Silver -modulet, går det over i en konfigurationstilstand, der blinker hurtigt rødt LED i 60 sekunder. I løbet af denne tid kan du sende $$$ via den serielle forbindelse til modulet for at konfigurere det, men du kan ikke forbinde modulet. Når den røde lysdiode blinker langsomt, accepterer bluetooth -modulet forbindelser.

Skift COM_SERIAL -definitionen i Teensy32AnalogLogger.ino til hardware seriel (D0/D1) forbindelse, Serial1

#define COM_SERIAL Serial1

Efter parring med computeren blev der oprettet en ny COM -port på computeren, og CoolTerm kan bruges til at oprette forbindelse og kontrollere og overvåge logning. Andre serielt forbundne kommunikationsmoduler kan også bruges, såsom WiFi eller BLE, se Arduino UNO/Mega Starter, styret af Android/pfodApp for detaljer.

Du kan også styre og overvåge logningen fra din Android -mobil ved hjælp af en bluetooth terminal -app som f.eks. Bluetooth Terminal -app, eller ved hjælp af WiFi- og TCP -terminalapp, f.eks. TCP Telnet Terminal Pro, eller en Uart to BLE -mdoule og en BLE -terminalapp som f.eks. nRF UART V2

Trin 4: Begrænsninger i valget af ADC -input

Begrænsninger for valget af ADC -input
Begrænsninger for valget af ADC -input

Teensy 3.2 har to separate ADC-hardwaremoduler, ADC_0 og ADC_1, i sin mikroprocessor, så den kan prøve to indgange på samme tid. Det har også en indbygget hardware -gennemsnit, der tager flere ADC -prøver og gennemsnit dem, før resultatet vendes.

Der er begrænsninger for, hvilke input der kan tilsluttes ADC_0, ADC_1. Teensy3_1_AnalogCard.png-billedet (fra https://forum.pjrc.com/threads/25532-ADC-library-update-now-with-support-for-Tenens-3-1), inkluderet i Teensy32AnalogLogger.zip-filen, detaljer, hvilke ben der kan tilsluttes hvilken ADC.

Sammenfattende: -For Single Ended Reads ie +Volt refereret til GND ADC_0 kan læse A0 til A9, A10, A11, A12, A14 ADC_1 kan læse A2, A3, A10, A13, A15 til A20 Hvis du vælger en pin, som ADC kan ikke læse det returnerer 0 (altid)

Dette projekt bruger A2, A3, som hver kan tilgås via ADC_0 eller ADC_1.

Trin 5: Konvertering af.bin -filer til.csv -filer

Teensy32AnalogLogger.ino gemmer prøverne som binære i logxx.bin -filer, dvs. log00.bin til log99.bin. Teensy32AnalogLogger.ino gemmer også en log.met -fil med metadata om kørslen.

Du kan bruge SDtoCSV.jar (kildekode SDtoCSV_src.zip) til at konvertere.bin -filerne til.csv til videre behandling. Kopier filerne fra SD -kortet til din computers harddisk med mindst 70Gig ledig plads, og kopier SDtoCSV.jar til det samme bibliotek. Åbn et kommandovindue i det bibliotek og kør

java -jar SDtoCSV.jar log

Hvis din computer ikke har Java -installation, skal du installere den fra www.java.com

SDtoCSV behandler log.met -filen og derefter hver af de tilgængelige logxx.bin -filer i biblioteket og sender en.csv -fil for hver.bin.. Csv -filen har eksempelsekvensnummer efterfulgt af de to aflæsninger.

En prøvekonsoloutput til en 2 adc -læsning, der er udtaget 30303 gange/sek, er vist her, output.txt. Det illustrerer, hvordan ubesvarede prøver rapporteres. (Ved at fordoble antallet af buffere i den endelige skitse fikserede vi disse ubesvarede prøver)

SD_Logning til CSV -konvertering. Kontroller SDtoCSV.log for fremskridt og fejlmeddelelser. Behandlingslog00 Behandlet 256000 blokke Behandler log01 Behandlet 256000 blokke… Forarbejdningslog25 Behandlet 256000 blokke Behandlingslog26 Behandlet 256000 blokke Behandlingslog27 Behandlet 256000 blokke Ubesvarede prøver: 2715 Behandlingslog28 Behandlet 256000 blokke… Behandlingslog29 Behandlet 256000 blokke… Behandlingslog47 Behandlet 256000 blokke Behandlingslog48 Behandlet 35935 blokke --- Færdig behandling

En fyldigere logfil, SDtoCSV.log, tilføjes ved hver kørsel af SDtoCSV. Det inkluderer metadataoutput og eventuelle fejlmeddelelser. Her er tællingen: 254 tællingen af de data, der er gemt i den blok, dvs. 127 prøver x 2 adc -aflæsninger pr. Blok. Den savnede prøve er antallet af ubesvarede læsepar, dvs. linjer i.csv -output.

=== Logfil til SD_Logning til CSV -konvertering lørdag 13. juli 13:19:51 AEST 2019 For at se statusbeskeder på konsollen skal du bruge java -jar SDtoCSV.jar Basisfilnavn 'log' Metadata Version: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pin Antal: 2 Pins: 16, 17 prøverPerBlock: 127 noBufferBlocks: 28 varighed mS: 51649820 anmodet runTime mS: 106216704 maxBuffersUsed: 32 Advarsel: Overstiger antallet af tilgængelige buffere (28). Nogle prøver mangler muligvis. maxLatency uS: 221476 Advarsel: Overskrider den tid, som bufferblokke giver (117348uS). Nogle prøver mangler. maxFileOpenTime uS: 20998 savnetTimere: 0 savnetSamplesTotal: 2715 totalBlocks Skrevet: 12323935 totalSamplesWritten: 1565139665 Behandler log00.bin Behandlede 256000 blokke Behandler log01.bin Behandlede 256000 blokke… Behandler log26.bin Behandlede 256000 blokke Behandler log27.bin !!! Blok: 57696 tæller: 254 savnede prøver: 2339 !!! Blok: 57697 tæller: 254 savnede prøver: 376 behandlede 256000 blokke --- i alt ubesvarede prøver: 2715

Behandler log28.bin Behandlet 256000 blokke

… Behandler log47.bin Behandlede 256000 blokke Behandler log48.bin Behandlede 35935 blokke --- Færdig behandling

Et eksempel på log00.csv -outputfil er

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

Prøvetælleren stiger fra fil til fil, så den kan bruges som et tidsstempel. Hvis der mangler prøver, øges prøvetælleren med det ubesvarede antal, før den næste linje udsendes, så tælleren/tidsstemplet forbliver nøjagtigt for de registrerede prøver.

Trin 6: Kommentarer til koden og udvidelser

Teensy32AnalogLogger er en stærkt modificeret version af Bill Greimans AnalogBinLogger -eksempel i hans SdFat Arduino -bibliotek. Her er biblioteket blevet omskrevet til at køre på Teensy 3.2.

Teensy32AnalogLogger bruger timer0 til at indstille prøveintervallet. Afbrydelsesbehandleren for timer0 starter de to ADC -konverteringer. En afbrudshåndterer til det andet ADC -modul kaldes løbende, indtil de begge er færdige. Normalt afsluttes det første ADC -modul, der startes, ADC_0 før det andet, så afbryderhandleren kaldes kun én gang. ADC_1 -afbryderhandleren gemmer prøverne i en databuffer.

I hovedsløjfen () gemmer storeSampleBuffer () alle fulde buffere på SD -kortet og genbruger bufferne til den tomme bufferkø. Den store mængde RAM, der er tilgængelig på Teensy 3.2, betyder, at et stort antal buffere kan tildeles, og derfor behøver storeSampleBuffer () ikke at blive ringet op ofte. Dette efterlader tid til hovedsløjfen () til at udføre andet arbejde, f.eks. Proceskommandoer og sende output.

Udvidelser

Selvom dette projekt fungerer som en højhastighedsdatalogger, skal det for en komplet bærbar stadig pakkes og et batterisystem og EKG -sensorer leveres. Samt at der er nogle udvidelser, der skal overvejes.

  1. Tilføj realtidskontrol og overvågning af den samplede bølgeform via pfodApp ved hjælp af pfodApps plottefunktion til at vise øjebliksbilleder af bølgeformen
  2. Forlæng filnumre forbi 99 for længere prøveudtagningskørsler
  3. Prøve mere end 2 input. Da Teensy 3.2 har to ADC -moduler, kan du ændre koden for at tilføje ekstra input to og to for at maksimere samplingshastigheden.
  4. Tilføj batteriovervågning for at spore batteriets opladning. Teensy 3.2 bruger cirka 1100 mAhrs over 24 timer, inklusive bluetooth og SD modulet, men eksklusive sensormodulet
  5. Tilføj et dobbelt batteriforsyningskredsløb for at muliggøre batteriskift uden at afbryde logningen.

Anbefalede: