Innehållsförteckning:

Logga höghastighets -EKG eller annan data, kontinuerligt i över en månad: 6 steg
Logga höghastighets -EKG eller annan data, kontinuerligt i över en månad: 6 steg

Video: Logga höghastighets -EKG eller annan data, kontinuerligt i över en månad: 6 steg

Video: Logga höghastighets -EKG eller annan data, kontinuerligt i över en månad: 6 steg
Video: Paradise or Oblivion 2024, Juli
Anonim
Logga höghastighets -EKG eller annan data, kontinuerligt i över en månad
Logga höghastighets -EKG eller annan data, kontinuerligt i över en månad

Detta projekt utvecklades för att stödja ett universitetsmedicinskt forskargrupp, som behövde en bärbar dator som kunde logga 2 x EKG -signaler vid 1000 prover/sek vardera (2K prover/sek totalt) kontinuerligt i 30 dagar för att upptäcka arytmier. Projektet som presenteras här inkluderar fjärrstyrning och övervakning av avverkningen. Fjärrkontrollen sker via menyer på en seriell terminal, antingen på en dator eller mobiltelefon. Detta projekt omfattar inte EKG -mätning eller förpackning eller batteri som krävs för den slutliga bärbara enheten.

Denna höghastighets-/långvariga version använder Teensy 3.2, Adafruit Micro-SD breakout-modul, ett kvalitets 16G SDHC klass 10 SD-kort för att logga data och en Bluetooth-kommunikationsmodul för kontroll och övervakning. En mindre utvecklad och långsammare UNO/Mega2560 -version av detta projekt är också tillgänglig. Medan detta projekt använder en Bluetooth -kommunikationsmodul för kontroll och övervakning av loggningen kan du också använda WiFi- eller BLE -moduler.

Denna version, baserad på Teensy 3.2, har mycket högre samplingshastigheter än UNO/Mega2560 -versionen. Med hjälp av denna kod kan Teensy 3.2 sampla och logga två ADC -prover vid> 30Khz med hårdvara i genomsnitt över 4 prover och uppfyller så lätt kraven på 1000 prover/sek ovan. Koden stöder att spara 100. Bin -filer på 128K vardera. Vid 30Khz som täcker 29 timmar 30 minuter. Med 1000 prover/sek täcker det 37 dagar. Koden kan enkelt utökas för att hantera mer än 100 filer, så att förlängningstiden för körningen. I slutet av körningen kommer du att ha> 10Gig data,.bin, filer och en.met -fil med metadata som beskriver körningen och resultaten. Den medföljande SDtoCSV.jar (källkoden SDtoCSV_src.zip) kan användas för att konvertera.bin -filerna till.csv -filer på din dator för vidare bearbetning. Den resulterande informationen är> 60Gig. UNO/Mega2560 -versionen har.bin till.csv -konvertering inkluderad i Arduino -skissen, men med tanke på datamängden som loggas av Teensy -versionen är det inte ett effektivt sätt att göra konverteringen.

Tillbehör

Teensy 3.2 från PJRC

Adafruit MicroSD card breakout board+ eller liknande.

16G SDHC klass 10 MicroSD -kort av bra kvalitet t.ex. SanDisk.

5V USB -matning

En LED med en 470R -resistor i serie.

2 x 100R motstånd (ger skydd mot skador på grund av Tx/Rx ledningsfel)

Bluetooth Mate Silver ELLER en av modulerna som beskrivs på Arduino UNO/Mega Starter, styrd av Android/pfodApp

Steg 1: Konstruktion

Konstruktion
Konstruktion

Ladda ner och installera Arduino IDE V1.8.9+ från https://arduino.cc/en/Main/Software. Den webbsidan har länkar för olika operativsystem och en länk till GettingStarted (https://arduino.cc/en/Guide/HomePage).

Ladda ner och installera Teensyduino (Teensy Support för Arduino IDE). OBSERVERA noga instruktionerna för första användningen.

Välj Teensy 3.2 som tavlan och kontrollera att BLINK -exempelprogrammet laddas och körs.

Ladda ner och installera följande bibliotek:- millisDelay och SdFat (En lokal ögonblicksbild av SdFat-biblioteket som används för dessa tester finns här.) Och pfodParser.zip (för klassen pfodBufferedStream och pfodNonBlockingInput)

Ladda ner bibliotekets zip -filer och använd sedan Arduino IDE → Skiss → Inkludera bibliotek → Lägg till. ZIP -biblioteksmeny för att installera biblioteken från zip -filerna.

Packa upp Teensy32AnalogLogger.zip -filen till din Arduino sketches -katalog och programmera Teensy 3.2 -kortet med Teensy32AnalogLogger.ino (version 0.01)

Anslut Teensy 3.2, Bluetooth -modulen och SD -kortmodulen enligt ovan (pdf -version)

Steg 2: Kör programmet - Testning

Formatera först ditt SD -kort med

SD -kortet måste vara tomt för att kunna logga.

För första testet behöver du inte ansluta kommunikationsmodulen, bara anslut Teensy 3.2 + SD -modulen (med ett tomt kort installerat) till Arduino IDE via USB -seriekabeln. Såsom föreskrivs använder Teensy32AnalogLogger.ino -skissen USB -anslutningen för kontroll och övervakning. Se steget Logga in riktiga data nedan för användning av en kommunikationsenhet för kontroll och övervakning.

Redigera toppen av Teensy32AnalogLogger.ino -skissen för att ställa in COM_SERIAL till Serial, för att mata ut till Teensy USB -anslutningen.

#define COM_SERIAL Serial

Ladda sedan upp skissen till Teensy 3.2

Öppna Arduino IDE Serial Monitor på 115200 baud (med både NL & CR -set). Efter några sekunder kommer Teensy 3.2 att visa en meny med kommandon

Ver: 0.01 ange ett av följande kommandon:? - nuvarande status och metadatai - initiera filerl - lista filer>

Den? cmd visar detaljer om de aktuella inställningarna. (Se toppen av Teensy32AnalogLogger.ino för att ändra dessa inställningar) Cmds måste avslutas med ett NL eller CR eller båda.

0: 00: 00.000 av 720: 00: 00.000

Provnålar: 16 17 Byteordning: Little-Endian ADC-bitar: 10 ADC-samplingsmedelvärden över: 4 Samplingsfrekvens: 1000,00 Provintervall: 1000uS Prover per block: 127 Tid för att fylla block: 127000uS Tid för att fylla i en fil: 9:01: 52.000 Tid att fylla ALLA filer: 894: 04: 48.000 Max SD -latens (inkluderar filstängning/öppning): 0uS Max filstängning/öppen latens: 0uS Antal buffertblock: 28 Tid för att fylla ALLA blockbuffertar: 3556000uS Max antal buffertar sparat i samtal till storeSampleBuffers (): 0 Missade timer totalt: 0 Totalt missade prover hittills: 0 Totalt antal block skrivna: 0 Totalt antal skrivna prover: 0 omfattande: 0: 00: 00.000 Nuvarande fil:

I detta fall är aktuell loggningstid 0 av en begärd 720 timmar (30 dagar), provtagning D16/A2 och D17/A3 (se nedan för begränsningar av valet av ADC -ingångar nedan) 1000 gånger i sekunden. Den maximala drifttiden kan vara upp till 894 timmar (37,25 dagar). Huvudslingan () kan upptas i upp till 3,5 sekunder (tid att fylla ALLA blockbuffertar) innan alla tillgängliga buffertar fylls och prover börjar gå förlorade. Buffertar sparade etc uppdateras när körningen fortskrider.

Sätt i ett tomt SD -kort, använd 'i' cmd för att initialisera de 99 filer som används för att lagra data. Genom att förinitialisera dem här minskar tidsfördröjningen vid byte från en fil till nästa och möjliggör snabbare sampling.

Initierar 99 filer

Skapa ny fil: log00.bin Förfluten tid: 368mS Skapa ny fil: log01.bin Förfluten tid: 520mS… Skapa ny fil: log98.bin Förfluten tid: 15660mS Skapa ny fil: log99.bin Förfluten tid: 15812mS

Du kan sedan använda r cmd för att starta en loggningskörning. Körningen kommer under den begärda tiden eller tills s cmd används för att stoppa den. Du kan också använda? cmd medan du loggar för att få uppdaterade tider och antal. Här är en kort körning stoppad tidigt med s cmd.

LOGGNINGSDATA ….

Ver: 0.01 ange ett av följande kommandon:? - nuvarande status och metadata s - stoppa dataloggning

LOGGNINGSDATA … Kolla med? kommando

Förfluten körtid: 0: 00: 10.000 av 720: 00: 00.000 Förfluten körtid: 0: 00: 20.000 av 720: 00: 00.000…

Slutar logga och ta bort oanvända filer.

… Ta bort oanvänd fil: log98.bin Ta bort oanvänd fil: log99.bin

0: 01: 04.976 av 720: 00: 00.000

Provnålar: 16 17 Byteordning: Little-Endian ADC-bitar: 10 ADC-samplingsmedelvärden över: 4 Samplingsfrekvens: 1000,00 Provintervall: 1000uS Prover per block: 127 Tid för fyllning av block: 127000uS Tid för att fylla i en fil: 9:01: 52.000 Tid att fylla ALLA filer: 894: 04: 48.000 Max SD -latens (inkluderar filstängning/öppning): 204uS Max filstängning/öppen latens: 0uS Antal buffertblock: 28 Tid för att fylla ALLA blockbuffertar: 3556000uS Max antal buffertar sparat i samtal till storeSampleBuffers (): 1 Missade timers totalt: 0 Totalt missade prover hittills: 0 Totalt antal block skrivna: 511 Totalt antal prov: 64832 omfattande: 0: 01: 04.832 Aktuell fil: log00.bin

ls:

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

DATALOGGNING KOMPLETT!

Ver: 0.01 ange ett av följande kommandon:? - nuvarande status och metadata ** r - spela in ADC -data ** inte tillgänglig. Data finns redan ** i - initiera filer ** inte tillgängligt. Data finns redan l - listfiler

DATA ÄR ALLTID LOGGAD, kolla med?

LED-display

Lysdioden ansluten till D3 (med D2 som tillhandahåller GND -anslutningen) tänds fast om något prov missas och blinkar om det uppstår ett fel. Skissen försöker fortsätta efter fel men kanske inte lyckas.

Steg 3: Logga verkliga data

När du loggar verkliga data över långa perioder är det mer bekvämt att ansluta en kommunikationsmodul till D0/D1 -stiften och fjärrstyra och övervaka loggningen. Här användes en Bluetooth Mate Silver -modul med sina standardinställningar, 115200 baud, ingen hårdvaruhandskakning (RTC, CTS), pinkod 1234.

Obs: När strömmen tillförs till Mate Silver -modulen går den in i ett konfigurationsläge, snabb röd lysdiod blinkar i 60 sekunder. Under denna tid kan du skicka $$$ via den seriella anslutningen till modulen för att konfigurera den men du kan inte ansluta modulen. När den röda lysdioden blinkar långsamt, accepterar Bluetooth -modulen anslutningar.

Ändra COM_SERIAL -definieringen i Teensy32AnalogLogger.ino till maskinvarans seriella (D0/D1) anslutning, Serial1

#define COM_SERIAL Serial1

Efter parning med datorn skapades en ny COM -port på datorn och CoolTerm kan användas för att ansluta och styra och övervaka loggningen. Andra seriellt anslutna kommunikationsmoduler kan också användas, till exempel WiFi eller BLE, se Arduino UNO/Mega Starter, styrd av Android/pfodApp för mer information.

Du kan också styra och övervaka loggningen från din Android -mobil med en Bluetooth -terminalapp, till exempel Bluetooth Terminal -appen, eller med WiFi- och TCP -terminalapp som TCP Telnet Terminal Pro, eller en Uart to BLE -mdoule och en BLE -terminalapp som t.ex. nRF UART V2

Steg 4: Begränsningar för valet av ADC -ingångar

Begränsningar för valet av ADC -ingångar
Begränsningar för valet av ADC -ingångar

Teensy 3.2 har två separata ADC-hårdvarumoduler, ADC_0 och ADC_1, i sin mikroprocessor så att den kan sampla två ingångar samtidigt. Den har också en inbyggd hårdvara -medelvärde som tar flera ADC -prover och medelvärderar dem innan resultatet vänds.

Det finns begränsningar för vilka ingångar som kan anslutas till ADC_0, ADC_1. Teensy3_1_AnalogCard.png-bilden (från https://forum.pjrc.com/threads/25532-ADC-library-update-now-with-support-for-Tenens-3-1), som ingår i Teensy32AnalogLogger.zip-filen, information om vilka stift som kan anslutas till vilken ADC.

Sammanfattningsvis: -For Single Ended Reads ie +Volts refered to GND ADC_0 can read A0 to A9, A10, A11, A12, A14 ADC_1 can read A2, A3, A10, A13, A15 to A20 If you select a pin that the ADC kan inte läsa det kommer att returnera 0 (alltid)

Detta projekt använder A2, A3 som alla kan nås via ADC_0 eller ADC_1.

Steg 5: Konvertera.bin -filer till.csv -filer

Teensy32AnalogLogger.ino sparar proverna som binära i logxx.bin -filer, dvs log00.bin till log99.bin. Teensy32AnalogLogger.ino sparar också en log.met -fil med metadata om körningen.

Du kan använda SDtoCSV.jar (källkod SDtoCSV_src.zip) för att konvertera.bin -filerna till.csv för vidare bearbetning. Kopiera filerna från SD -kortet till datorns hårddisk med minst 70Gig ledigt utrymme och kopiera SDtoCSV.jar till samma katalog. Öppna ett kommandofönster i den katalogen och kör

java -jar SDtoCSV.jar -logg

Om din dator inte har Java -installation, installera den sedan från www.java.com

SDtoCSV kommer att bearbeta log.met -filen och sedan var och en av de tillgängliga logxx.bin -filerna i katalogen och mata ut en.csv -fil för varje.bin.. Csv -filen har exempelsekvensnumret följt av de två avläsningarna.

En provkonsolutmatning för en 2 adc -läsning samplad 30303 gånger/sek visas här, output.txt. Det illustrerar hur missade prover rapporteras. (Fördubbling av antalet buffertar i den sista skissen fixade detta missade prover)

SD_Loggning till CSV -konvertering. Kontrollera SDtoCSV.log för framsteg och felmeddelanden. Processing log00 Bearbetade 256000 block Bearbetar log01 Bearbetade 256000 block… Bearbetningslogg25 Bearbetade 256000 block Bearbetningslog26 Bearbetade 256000 block Bearbetningslog27 Bearbetade 256000 block Missade prov: 2715 Bearbetningslog28 Bearbetade 256000 block… Behandlingslogg29 Bearbetade 256000 block… Bearbetningslog47 Bearbetade 256000 block Bearbetningslogg48 Bearbetade 35935 block --- Färdig bearbetning

En fylligare loggfil, SDtoCSV.log, bifogas varje körning av SDtoCSV. Den innehåller metadatautmatning och eventuella felmeddelanden. Här är räkningen: 254 antalet data som lagras i det blocket, dvs 127 samplingar x 2 adc -avläsningar per block. The MissSamples är antalet missade par läsning, dvs rader i.csv -utdata.

=== Loggfil för SD_Loggning till CSV -konvertering lör 13 juli 13:19:51 AEST 2019 För att se framstegsmeddelanden på konsolen använder java -jar SDtoCSV.jar Basfilnamn 'log' Metadata Version: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinAntal: 2 Pins: 16, 17 proverPerBlock: 127 noBufferBlocks: 28 varaktighet mS: 51649820 efterfrågad körtidMS: 106216704 maxBuffersUsed: 32 Varning: Överstiger tillgängliga buffertar (28). Vissa prover kan saknas. maxLatency uS: 221476 Varning: Överskrider tid från buffertblock (117348uS). Några prover kommer att saknas. maxFileOpenTime uS: 20998 missadeTimers: 0 missedSamplesTotal: 2715 totalBlocksWritten: 12323935 totalSamplesWritten: 1565139665 Processing log00.bin Bearbetade 256000 block Bearbetar log01.bin Bearbetade 256000 block… Bearbetar log26.bin Bearbetade 256000 block Bearbetar log27.bin !!! Block: 57696 antal: 254 missadeProver: 2339 !!! Block: 57697 antal: 254 missade Prover: 376 Bearbetade 256000 block --- Totalt antal missade prover: 2715

Bearbetar log28.bin Bearbetade 256000 block

… Bearbetar log47.bin Bearbetade 256000 block Bearbetar log48.bin Bearbetade 35935 block --- Färdig bearbetning

Ett exempel på log00.csv -utdatafilen är

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

Provräknaren ökar från fil till fil så att den kan användas som en tidsstämpel. Om det saknas prover ökas provräknaren med det missade antalet innan nästa rad matas ut så att räknaren/tidsstämpeln förblir korrekt för de inspelade proverna.

Steg 6: Kommentarer om koden och tillägg

Teensy32AnalogLogger är en starkt modifierad version av Bill Greimans AnalogBinLogger -exempel i hans SdFat Arduino -bibliotek. Här har biblioteket skrivits om för att köras på Teensy 3.2.

Teensy32AnalogLogger använder timer0 för att ställa in provintervallet. Avbrottshanteraren för timer0 startar de två ADC -omvandlingarna. En avbrottshanterare för den andra ADC -modulen anropas kontinuerligt tills de båda är klara, vanligtvis avslutas den första ADC -modulen som startas ADC_0 före den andra så att avbrottshanteraren bara anropas en gång. ADC_1 -avbrottshanteraren sparar proverna i en databuffert.

I huvudslingan () sparar storeSampleBuffer () alla fulla buffertar på SD -kortet och återvinner buffertarna till den tomma buffertkön. Den stora mängden RAM som finns på Teensy 3.2 innebär att ett stort antal buffertar kan tilldelas och därför behöver storeSampleBuffer () inte ringas ofta. Detta lämnar tid för huvudslingan () att utföra annat arbete, som processkommandon och skicka utmatning.

Tillägg

Även om detta projekt fungerar som en höghastighetsdatalogger, måste det för en komplett bärbarhet fortfarande förpackas och ett batterisystem och EKG -sensorer levereras. Samt att det finns några tillägg som bör övervägas.

  1. Lägg till realtidskontroll och övervakning av den samplade vågformen via pfodApp med hjälp av pfodApps plottningsfunktion för att visa ögonblicksbilder av vågformen
  2. Förläng filnumren efter 99 för längre provtagningskörningar
  3. Prova mer än 2 ingångar. Eftersom Teensy 3.2 har dubbla ADC -moduler kan du ändra koden för att lägga till extra ingångar i par för att maximera samplingshastigheten.
  4. Lägg till batteriövervakning för att spåra batteriladdning. Teensy 3.2 använder cirka 1100mAhr över 24 timmar, inklusive Bluetooth- och SD -modulen, men exklusive sensormodulen
  5. Lägg till en dubbel batteriförsörjningskrets för att möjliggöra batteribyte utan att loggen avbryts.

Rekommenderad: