Innholdsfortegnelse:

Logg høyhastighets -EKG eller andre data, kontinuerlig i over en måned: 6 trinn
Logg høyhastighets -EKG eller andre data, kontinuerlig i over en måned: 6 trinn

Video: Logg høyhastighets -EKG eller andre data, kontinuerlig i over en måned: 6 trinn

Video: Logg høyhastighets -EKG eller andre data, kontinuerlig i over en måned: 6 trinn
Video: Meet The Experts | Mustang Mach-E | Ford EU 2024, Juli
Anonim
Logg høyhastighets -EKG eller andre data, kontinuerlig i over en måned
Logg høyhastighets -EKG eller andre data, kontinuerlig i over en måned

Dette prosjektet ble utviklet for å støtte et universitetsmedisinsk forskningsteam, som trengte en bærbar enhet som kunne logge 2 x EKG -signaler ved 1000 prøver/sek hver (2K prøver/sek totalt) kontinuerlig i 30 dager for å oppdage arytmier. Prosjektet som presenteres her inkluderer fjernkontroll og overvåking av hogsten. Fjernkontrollen er via menyer som vises på en seriell terminal, enten på en datamaskin eller mobiltelefon. Dette prosjektet dekker ikke EKG -måling eller emballasje eller batteri som kreves for den endelige bærbare enheten.

Denne versjonen med høy hastighet/lang varighet bruker Teensy 3.2, Adafruit Micro-SD breakout-modul, et kvalitets 16G SDHC klasse 10 SD-kort for å logge dataene og en Bluetooth-kommunikasjonsmodul for kontroll og overvåking. En mindre utviklet og tregere UNO/Mega2560 -versjon av dette prosjektet er også tilgjengelig. Mens dette prosjektet bruker en Bluetooth -kommunikasjonsmodul for kontroll og overvåking av logging, kan du også bruke WiFi- eller BLE -moduler.

Denne versjonen, basert på Teensy 3.2, er i stand til mye høyere samplingshastigheter enn UNO/Mega2560 -versjonen. Ved å bruke denne koden kan Teensy 3.2 prøve og logge to ADC -prøver på> 30Khz med maskinvare i gjennomsnitt over 4 prøver og tilfredsstiller så enkelt 1000 prøver/sek -kravet ovenfor. Koden støtter lagring av 100. Bin -filer på 128K hver. På 30Khz som dekker 29 timer 30 minutter. Med 1000 prøver/sek dekker den 37 dager. Koden kan enkelt utvides til å håndtere mer enn 100 filer, så forlengelsen av løpeturen. På slutten av løpet vil du ha> 10Gig data,.bin, filer og en.met -fil med metadata som beskriver kjøringen og resultatene. Den medfølgende SDtoCSV.jar (kildekoden SDtoCSV_src.zip) kan brukes til å konvertere.bin -filene til.csv -filene på datamaskinen for videre behandling. De resulterende dataene er> 60Gig. UNO/Mega2560 -versjonen har.bin til.csv -konvertering inkludert i Arduino -skissen, men gitt datamengden som er logget av Teensy -versjonen, er det ikke en effektiv måte å gjøre konverteringen på.

Rekvisita

Teensy 3.2 av PJRC

Adafruit MicroSD card breakout board+ eller lignende.

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

5V USB -forsyning

En LED med en 470R motstandsdyktig i serie.

2 x 100R motstander (gir beskyttelse mot skader på grunn av Tx/Rx ledningsfeil)

Bluetooth Mate Silver ELLER en av modulene beskrevet på Arduino UNO/Mega Starter, kontrollert av Android/pfodApp

Trinn 1: Konstruksjon

Konstruksjon
Konstruksjon

Last ned og installer Arduino IDE V1.8.9+ fra https://arduino.cc/en/Main/Software. Denne websiden har koblinger for forskjellige operativsystemer og en lenke til GettingStarted (https://arduino.cc/en/Guide/HomePage).

Last ned og installer Teensyduino (Teensy Support for Arduino IDE). MERK nøye med første bruksanvisning.

Velg Teensy 3.2 som tavle og kontroller at BLINK -eksempelprogrammet lastes og kjøres.

Last ned og installer følgende biblioteker:- millisDelay og SdFat (Et lokalt øyeblikksbilde av SdFat-biblioteket som ble brukt til disse testene er her.) Og pfodParser.zip (for klassen pfodBufferedStream og pfodNonBlockingInput)

Last ned bibliotekets zip -filer, og bruk deretter Arduino IDE → Skisse → Inkluder bibliotek → Legg til. ZIP -bibliotekmeny for å installere bibliotekene fra zip -filene.

Pakk ut Teensy32AnalogLogger.zip -filen til Arduino sketches -katalogen og programmer Teensy 3.2 -brettet med Teensy32AnalogLogger.ino (versjon 0.01)

Koble til Teensy 3.2, Bluetooth -modulen og SD -kortmodulen som vist ovenfor (pdf -versjon)

Trinn 2: Kjøre programmet - Testing

Formater først SD -kortet ditt ved å bruke

SD -kortet må være tomt for å kunne logge.

For første testing trenger du ikke koble til kommunikasjonsmodulen, bare koble Teensy 3.2 + SD -modulen (med et tomt kort installert) til Arduino IDE via USB -seriekabelen. Som forutsatt bruker Teensy32AnalogLogger.ino -skissen USB -tilkoblingen for kontroll og overvåking. Se trinnet Logging Real Data nedenfor for bruk av en kommunikasjonsenhet for kontroll og overvåking.

Rediger toppen av Teensy32AnalogLogger.ino -skissen for å sette COM_SERIAL til Serial, for å sende ut til Teensy USB -tilkoblingen.

#define COM_SERIAL Serial

Last deretter opp skissen til Teensy 3.2

Åpne Arduino IDE Serial Monitor på 115200 baud (med både NL & CR sett). Etter noen sekunder viser Teensy 3.2 en meny med kommandoer

Ver: 0.01 skriv inn en av følgende kommandoer:? - nåværende status og metadatai - initialiser filerl - listefiler>

Den? cmd viser detaljer om gjeldende innstillinger. (Se toppen av Teensy32AnalogLogger.ino for å endre disse innstillingene) Cmds må avsluttes med NL eller CR eller begge deler.

0: 00: 00.000 av 720: 00: 00.000

Prøvepinner: 16 17 Byte rekkefølge: Little-Endian ADC bits: 10 ADC sample gjennomsnitt over: 4 Prøvehastighet: 1000,00 Prøveintervall: 1000uS Prøver per blokk: 127 Tid til å fylle blokk: 127000uS Tid til å fylle en fil: 9:01: 52.000 Tid for å fylle ALLE filer: 894: 04: 48.000 Maks. SD -latens (inkluderer filstenging/åpning): 0uS Maks. Filstengnings-/åpen ventetid: 0uS Antall bufferblokker: 28 Tid til å fylle ALLE blokkbuffere: 3556000uS Maks antall buffere lagret i samtalen til storeSampleBuffers (): 0 Tapte tidtakere totalt: 0 Totalt tapte prøver så langt: 0 Totalt antall blokker skrevet: 0 Totalt antall prøver skrevet: 0 dekning: 0: 00: 00.000 Gjeldende fil:

I dette tilfellet er nåværende loggingstid 0 av de forespurte 720 timene (30 dager), prøvetaking D16/A2 og D17/A3 (se nedenfor for restriksjoner på valg av ADC -innganger nedenfor) 1000 ganger i sekundet. Maksimal kjøretid kan være opptil 894 timer (37,25 dager). Hovedløkken () kan brukes inntil 3,5 sekunder (tid for å fylle ALLE blokkbuffere) før alle tilgjengelige buffere fylles og prøver begynner å gå tapt. Buffere lagret osv. Oppdateres etter hvert som løpet går.

Sett inn et tomt SD -kort, bruk 'i' cmd for å initialisere de 99 filene som ble brukt til å lagre dataene. Ved å initialisere dem her reduserer tidsforsinkelsen når du bytter fra en fil til en annen, og gir raskere prøvetaking.

Initialiserer 99 filer

Opprette ny fil: log00.bin Forløpt tid: 368mS Opprette ny fil: log01.bin Forløpt tid: 520mS… Opprette ny fil: log98.bin Forløpt tid: 15660mS Opprette ny fil: log99.bin Forløpt tid: 15812mS

Du kan deretter bruke r cmd for å starte en loggføring. Kjøringen vil i ønsket tid eller til s cmd brukes til å stoppe den. Du kan også bruke? cmd mens du logger for å få oppdaterte tidspunkter og tellinger. Her er et kort løp stoppet tidlig med s cmd.

LOGGING DATA ….

Ver: 0.01 skriv inn en av følgende kommandoer:? - nåværende status og metadata s - stopp datalogging

LOGGERINGSDATA … Sjekk med? kommando

Forløpt kjøretid: 0: 00: 10.000 av 720: 00: 00.000 Forløpt kjøretid: 0: 00: 20.000 av 720: 00: 00.000…

Slutt å logge og fjerne ubrukte filer.

… Fjerne ubrukt fil: log98.bin Fjerne ubrukt fil: log99.bin

0: 01: 04.976 av 720: 00: 00.000

Prøvepinner: 16 17 Byte rekkefølge: Little-Endian ADC bits: 10 ADC sample gjennomsnitt over: 4 Prøvehastighet: 1000,00 Prøveintervall: 1000uS Prøver per blokk: 127 Tid til å fylle blokk: 127000uS Tid til å fylle en fil: 9:01: 52.000 Tid for å fylle ALLE filer: 894: 04: 48.000 Maks. SD -latenstid (inkluderer filstenging/åpning): 204uS Maks. Filstengnings-/åpen ventetid: 0uS Antall bufferblokker: 28 Tid for å fylle ALLE blokkbuffere: 3556000uS Maks. Antall buffere lagret i samtalen til storeSampleBuffers (): 1 Tapte tidtakere totalt: 0 Totalt tapte prøver så langt: 0 Totalt antall blokker skrevet: 511 Totalt antall prøver skrevet: 64832 som dekker: 0: 01: 04.832 Gjeldende fil: log00.bin

ls:

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

DATALOGGING FULLFØRT!

Ver: 0.01 skriv inn en av følgende kommandoer:? - nåværende status og metadata ** r - registrer ADC -data ** ikke tilgjengelig. Data eksisterer allerede ** i - initialiser filer ** ikke tilgjengelig. Data eksisterer allerede l - listefiler

DATA ER ALLEREDE logget, sjekk med?

LED display

Lysdioden som er koblet til D3 (med D2 som gir GND -tilkoblingen) lyser konstant hvis en prøve mangler, og blinker hvis det er en feil. Skissen prøver å fortsette etter feil, men kan ikke lykkes.

Trinn 3: Loggføring av ekte data

Når du logger ekte data over lange varigheter, er det mer praktisk å koble en kommunikasjonsmodul til D0/D1 -pinnene og kontrollere og overvåke loggingen eksternt. Her ble en Bluetooth Mate Silver -modul brukt med standardinnstillingene, 115200 baud, ingen maskinvarehåndtrykk (RTC, CTS), PIN -kode 1234.

Merk: Når strøm tilføres til Mate Silver -modulen, går den over i en konfigurasjonsmodus, hurtig rød LED blinker i 60 sekunder. I løpet av denne tiden kan du sende $$$ via den serielle tilkoblingen til modulen for å konfigurere den, men du kan ikke koble modulen. Når den røde lysdioden blinker sakte, godtar Bluetooth -modulen tilkoblinger.

Endre COM_SERIAL -definisjonen i Teensy32AnalogLogger.ino til maskinvarens serielle (D0/D1) tilkobling, Serial1

#define COM_SERIAL Serial1

Etter sammenkobling med datamaskinen ble en ny COM -port opprettet på datamaskinen, og CoolTerm kan brukes til å koble til og kontrollere og overvåke logging. Andre serielt tilkoblede kommunikasjonsmoduler kan også brukes, for eksempel WiFi eller BLE, se Arduino UNO/Mega Starter, kontrollert av Android/pfodApp for detaljer.

Du kan også kontrollere og overvåke loggingen fra Android -mobilen din ved hjelp av en Bluetooth -terminalapp, for eksempel Bluetooth Terminal -app, eller ved hjelp av WiFi- og TCP -terminalapp, for eksempel TCP Telnet Terminal Pro, eller en Uart to BLE -mdoule og en BLE -terminalapp som f.eks. nRF UART V2

Trinn 4: Restriksjoner på valg av ADC -innganger

Begrensninger for valg av ADC -innganger
Begrensninger for valg av ADC -innganger

Teensy 3.2 har to separate ADC-maskinvaremoduler, ADC_0 og ADC_1, i mikroprosessoren, slik at den kan prøve to innganger samtidig. Den har også en innebygd maskinvare -gjennomsnitt som tar flere ADC -prøver og gjennomsnitt dem før du snur resultatet.

Det er begrensninger for hvilke innganger som kan kobles til ADC_0, ADC_1. Teensy3_1_AnalogCard.png-bildet (fra https://forum.pjrc.com/threads/25532-ADC-library-update-now-with-support-for-Tenens-3-1), inkludert i Teensy32AnalogLogger.zip-filen, detaljer om hvilke pinner som kan kobles til hvilken ADC.

Oppsummert: -For Single Ended Reads ie +Volts referert til GND ADC_0 kan lese A0 til A9, A10, A11, A12, A14 ADC_1 kan lese A2, A3, A10, A13, A15 til A20 Hvis du velger en pin som ADC kan ikke lese den vil returnere 0 (alltid)

Dette prosjektet bruker A2, A3 som hver kan nås via ADC_0 eller ADC_1.

Trinn 5: Konvertering av.bin -filer til.csv -filer

Teensy32AnalogLogger.ino lagrer prøvene som binære i logxx.bin -filer, dvs. log00.bin til log99.bin. Teensy32AnalogLogger.ino lagrer også en log.met -fil med metadata om kjøringen.

Du kan bruke SDtoCSV.jar (kildekoden SDtoCSV_src.zip) til å konvertere.bin -filene til.csv for videre behandling. Kopier filene fra SD -kortet til datamaskinens harddisk med minst 70Gig ledig plass, og kopier SDtoCSV.jar til den samme katalogen. Åpne et kommandovindu i den katalogen og kjør

java -jar SDtoCSV.jar logg

Hvis datamaskinen ikke har Java -installasjon, installer du den fra www.java.com

SDtoCSV behandler log.met -filen og deretter hver av de tilgjengelige logxx.bin -filene i katalogen og sender ut en.csv -fil for hver.bin. CSV -filen har eksempelsekvensnummer etterfulgt av de to avlesningene.

En eksempelkonsollutgang for en 2 adc -lesing samplet 30303 ganger/sek er vist her, output.txt. Det illustrerer hvordan tapte prøver blir rapportert. (Dobling av antallet buffere i den siste skissen løste disse tapte prøvene)

SD_Logg til CSV -konvertering. Kontroller SDtoCSV.log for fremdrift og feilmeldinger. Behandlingslogg00 Behandlet 256000 blokker Behandler log01 Behandlet 256000 blokker… Behandlingslogg25 Behandlet 256000 blokker Behandlingslogg26 Behandlet 256000 blokker Behandlingslogg27 Behandlet 256000 blokker Ubesvarte prøver: 2715 Behandlingslogg28 Behandlet 256000 blokker… Behandler log29 Behandlet 256000 blokker… Behandler log47 Behandlet 256000 blokker Behandler log48 Behandlet 35935 blokker --- Ferdig behandling

En fyldigere loggfil, SDtoCSV.log, legges til ved hver kjøring av SDtoCSV. Den inkluderer metadatadata og eventuelle feilmeldinger. Her er tellingen: 254 tellingen av dataene som er lagret i blokken, dvs. 127 prøver x 2 adc -avlesninger per blokk. The MissSamples er antall par lesetap savnet, dvs. linjer i CSV -utdata.

=== Loggfil for SD_Logg til CSV -konvertering lørdag 13. juli 13:19:51 AEST 2019 For å se fremdriftsmeldinger på konsollen, bruk java -jar SDtoCSV.jar Basisfilnavn 'logg' Metadata Versjon: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinAntall: 2 Pins: 16, 17 prøverPerBlock: 127 noBufferBlocks: 28 varighet mS: 51649820 forespurt runTime mS: 106216704 maxBuffersUsed: 32 Advarsel: Overskrider antall buffere tilgjengelig (28). Noen prøver kan mangle. maxLatency uS: 221476 Advarsel: Overskrider tiden levert av bufferblokker (117348uS). Noen prøver vil mangle. maxFileOpenTime uS: 20998 savnetTimer: 0 savnetSamplesTotal: 2715 totaltBlokker Skrevet: 12323935 totaltSamplesWritten: 1565139665 Behandler log00.bin Behandlet 256000 blokker Behandler log01.bin Behandlet 256000 blokker… Behandler log26.bin Behandlet 256000 blokker Behandler log27.bin !!! Blokk: 57696 telle: 254 savnede Prøver: 2339 !!! Blokk: 57697 antall: 254 tapte prøver: 376 Behandlede 256000 blokker --- Totalt tapte prøver: 2715

Behandler log28.bin Behandlet 256000 blokker

… Behandler log47.bin Behandlet 256000 blokker Behandler log48.bin Behandlet 35935 blokker --- Ferdig behandling

Et eksempel på log00.csv -utdatafilen er

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

Eksempeltelleren øker fra fil til fil, slik at den kan brukes som et tidsstempel. Hvis det mangler prøver, økes prøvetelleren med den tapte tellingen før den neste linjen sendes ut, slik at telleren/tidsstempelet forblir nøyaktig for de registrerte prøvene.

Trinn 6: Kommentarer til koden og utvidelsene

Teensy32AnalogLogger er en sterkt modifisert versjon av Bill Greimans AnalogBinLogger -eksempel i hans SdFat Arduino -bibliotek. Her har biblioteket blitt omskrevet for å kjøre på Teensy 3.2.

Teensy32AnalogLogger bruker timer0 til å angi prøveintervallet. Avbryterbehandleren for timer0 starter de to ADC -konverteringene. En avbruddshåndterer for den andre ADC -modulen blir kontinuerlig oppringt til de begge er ferdige, vanligvis vil den første ADC -modulen som startes ADC_0 avsluttes før den andre, så avbryterbehandleren blir bare ringt en gang. ADC_1 avbryterbehandleren lagrer prøvene i en databuffer.

I hovedløkken () lagrer storeSampleBuffer () alle buffere på SD -kortet og resirkulerer bufferne til den tomme bufferkøen. Den store mengden RAM som er tilgjengelig på Teensy 3.2 betyr at et stort antall buffere kan tildeles, og derfor trenger storeSampleBuffer () ikke å bli ringt ofte. Dette gir tid til hovedløkken () for å utføre annet arbeid, for eksempel prosesskommandoer og sende utdata.

Utvidelser

Selv om dette prosjektet fungerer som en høyhastighets datalogger, må det fortsatt pakkes for et komplett bærbart utstyr, og et batterisystem og EKG -sensorer følger med. I tillegg til at det er noen utvidelser som bør vurderes.

  1. Legg til sanntidskontroll og overvåking av det samplede bølgeformen via pfodApp ved hjelp av pfodApps plottingsfunksjon for å vise øyeblikksbilder av bølgeformen
  2. Forleng filnumrene etter 99 for lengre prøvekjøringer
  3. Prøv mer enn 2 innganger. Siden Teensy 3.2 har to ADC -moduler, kan du endre koden for å legge til ekstra innganger i par for å maksimere samplingsfrekvensen.
  4. Legg til batteriovervåking for å spore batteriladning. Teensy 3.2 bruker omtrent 1100mAhrs over 24 timer, inkludert bluetooth og SD -modulen, men unntatt sensormodulen
  5. Legg til en dobbelt batteriforsyningskrets for å tillate batteriskift uten å avbryte loggingen.

Anbefalt: