Inhoudsopgave:

Hogesnelheids-ECG of andere gegevens, continu gedurende meer dan een maand loggen: 6 stappen
Hogesnelheids-ECG of andere gegevens, continu gedurende meer dan een maand loggen: 6 stappen

Video: Hogesnelheids-ECG of andere gegevens, continu gedurende meer dan een maand loggen: 6 stappen

Video: Hogesnelheids-ECG of andere gegevens, continu gedurende meer dan een maand loggen: 6 stappen
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, November
Anonim
Log hogesnelheids-ECG of andere gegevens continu gedurende meer dan een maand
Log hogesnelheids-ECG of andere gegevens continu gedurende meer dan een maand

Dit project is ontwikkeld om een universitair medisch onderzoeksteam te ondersteunen, dat een wearable nodig had die gedurende 30 dagen continu 2 x ECG-signalen met 1000 samples/sec (2K samples/sec totaal) kon loggen om aritmieën te detecteren. Het hier gepresenteerde project omvat het op afstand besturen en monitoren van de houtkap. Afstandsbediening is via menu's gepresenteerd op een seriële terminal, hetzij op een computer of mobiele telefoon. Dit project dekt niet de ECG-meting of verpakking of batterij die nodig is voor de uiteindelijke wearable.

Deze versie met hoge snelheid/lange duur maakt gebruik van Teensy 3.2, Adafruit Micro-SD breakout-module, een hoogwaardige 16G SDHC klasse 10 SD-kaart om de gegevens te loggen en een Bluetooth-communicatiemodule voor controle en bewaking. Een minder ontwikkelde en langzamere UNO/Mega2560-versie van dit project is ook beschikbaar. Hoewel dit project een Bluetooth-communicatiemodule gebruikt voor de controle en bewaking van de logging, kunt u ook WiFi- of BLE-modules gebruiken.

Deze versie, gebaseerd op de Teensy 3.2, is in staat tot veel hogere bemonsteringsfrequenties dan de UNO/Mega2560-versie. Met behulp van deze code kan de Teensy 3.2 twee ADC-samples bemonsteren en loggen bij >30Khz met een hardwaregemiddelde van meer dan 4 samples en voldoet dus gemakkelijk aan de bovenstaande vereiste van 1000 samples/sec. De code ondersteunt het opslaan van 100.bin-bestanden van elk 128K. Bij 30 Khz is dat 29 uur en 30 minuten. Bij 1000 monsters/sec beslaat het 37 dagen. De code kan eenvoudig worden uitgebreid om meer dan 100 bestanden te verwerken, waardoor de duur van de run wordt verlengd. Aan het einde van de run heb je >10Gig aan data,.bin, bestanden en een.met-bestand met metadata die de run en de resultaten beschrijven. De meegeleverde SDtoCSV.jar (broncode SDtoCSV_src.zip) kan worden gebruikt om de.bin-bestanden naar.csv-bestanden op uw computer te converteren voor verdere verwerking. De resulterende gegevens zijn >60Gig. De UNO/Mega2560-versie heeft.bin naar.csv-conversie opgenomen in de Arduino-schets, maar gezien de hoeveelheid gegevens die door de Teensy-versie is vastgelegd, is dat geen efficiënte manier om de conversie uit te voeren.

Benodigdheden

Teensy 3.2 door PJRC

Adafruit MicroSD-kaart breakout board+ of vergelijkbaar.

16G SDHC klasse 10 MicroSD-kaart van goede kwaliteit b.v. SanDisk.

5V USB-voeding

Een led met een 470R-weerstand in serie.

2 x 100R-weerstanden (biedt bescherming tegen schade als gevolg van Tx/Rx-bedradingsfouten)

Bluetooth Mate Silver OF een van de modules beschreven op Arduino UNO/Mega Starter, bestuurd door Android/pfodApp

Stap 1: constructie

Bouw
Bouw

Download en installeer Arduino IDE V1.8.9+ van https://arduino.cc/en/Main/Software. Die webpagina bevat links naar verschillende besturingssystemen en een link naar GettingStarted (https://arduino.cc/en/Guide/HomePage).

Download en installeer de Teensyduino (Teensy-ondersteuning voor de Arduino IDE). LET OP zorgvuldig de instructies voor het eerste gebruik.

Selecteer Teensy 3.2 als het bord en controleer of het BLINK-voorbeeldprogramma wordt geladen en uitgevoerd.

Download en installeer de volgende bibliotheken: - millisDelay en SdFat (Hier vindt u een lokale momentopname van de SdFat-bibliotheek die voor deze tests wordt gebruikt.) en de pfodParser.zip (voor de klasse pfodBufferedStream en pfodNonBlockingInput)

Download de zip-bestanden van de bibliotheek en gebruik vervolgens de Arduino IDE → Sketch → Include Library → Add. ZIP-bibliotheekmenu om de bibliotheken uit de zip-bestanden te installeren.

Pak het Teensy32AnalogLogger.zip-bestand uit in uw Arduino-schetsdirectory en programmeer het Teensy 3.2-bord met Teensy32AnalogLogger.ino (versie 0.01)

Sluit de Teensy 3.2, Bluetooth-module en de SD-kaartmodule aan zoals hierboven weergegeven (pdf-versie)

Stap 2: Het programma uitvoeren -- Testen

Formatteer eerst uw SD-kaart met behulp van de

De SD-kaart moet leeg zijn om te kunnen loggen.

Voor de eerste test hoeft u de communicatiemodule niet aan te sluiten, sluit u gewoon de Teensy 3.2 + SD-module (met een lege kaart geïnstalleerd) aan op de Arduino IDE via de USB-seriële kabel. Zoals voorzien, gebruikt de Teensy32AnalogLogger.ino-schets de USB-aansluiting voor controle en bewaking. Zie de stap Echte gegevens loggen hieronder voor het gebruik van een communicatieapparaat voor besturing en bewaking.

Bewerk de bovenkant van de Teensy32AnalogLogger.ino-schets om de COM_SERIAL in te stellen op Serieel, om uit te voeren naar de Teensy USB-verbinding.

#define COM_SERIAL Serie

Upload vervolgens de schets naar de Teensy 3.2

Open de Arduino IDE Serial Monitor op 115200 baud (met zowel NL als CR ingesteld). Na een paar seconden zal de Teensy 3.2 een menu met opdrachten weergeven

Ver:0.01 voer een van de volgende opdrachten in:? - huidige status en metadatai - bestanden initialiseren - lijst bestanden>

De ? cmd geeft details van de huidige instellingen weer. (Zie de bovenkant van Teensy32AnalogLogger.ino om deze instellingen te wijzigen) Cmd's moeten worden afgesloten met een NL of CR of beide.

0:00:00.000 van 720:00:00.000

Sample pins: 16 17 Byte volgorde: Little-Endian ADC bits: 10 ADC sample gemiddelden over: 4 Sample Rate: 1000,00 Sample interval: 1000uS Samples per block: 127 Tijd om blok te vullen: 127000uS Tijd om een bestand te vullen: 9:01: 52.000 Tijd om ALLE bestanden te vullen: 894:04:48.000 Max. SD-latentie (inclusief bestand sluiten/openen): 0uS Max. latentie bij sluiten/openen bestand: 0uS Aantal bufferblokken: 28 Tijd om ALLE blokbuffers te vullen: 3556000uS Max. aantal buffers opgeslagen in aanroep naar storeSampleBuffers(): 0 Gemiste timers totaal: 0 Totaal gemiste voorbeelden tot nu toe: 0 Totaal aantal geschreven blokken: 0 Totaal aantal geschreven voorbeelden: 0 dekking: 0:00:00.000 Huidig bestand:

In dit geval is de huidige logging-runtime 0 van een gevraagde 720 uur (30 dagen), bemonstering D16/A2 en D17/A3 (zie hieronder voor beperkingen op de keuze van ADC-ingangen hieronder) 1000 keer per seconde. De maximale looptijd kan oplopen tot 894 uur (37,25 dagen). De hoofdlus() kan tot 3,5 sec bezet zijn (tijd om ALLE blokbuffers te vullen) voordat alle beschikbare buffers zijn gevuld en samples verloren gaan. Opgeslagen buffers enz. worden bijgewerkt naarmate de run vordert.

Plaats een lege SD-kaart, gebruik de 'i'-cmd om de 99 bestanden te initialiseren die worden gebruikt om de gegevens op te slaan. Door ze hier vooraf te initialiseren, wordt de tijdsvertraging bij het overschakelen van het ene bestand naar het andere verkort en kan sneller worden gesampled.

99 bestanden initialiseren

Nieuw bestand aanmaken: log00.bin Verstreken tijd: 368mS Nieuw bestand aanmaken: log01.bin Verstreken tijd: 520mS… Nieuw bestand aanmaken: log98.bin Verstreken tijd: 15660mS Nieuw bestand aanmaken: log99.bin Verstreken tijd: 15812mS

U kunt dan de r cmd gebruiken om een logging run te starten. De run wordt uitgevoerd gedurende de gevraagde tijd of totdat de s cmd wordt gebruikt om deze te stoppen. U kunt ook de ? cmd tijdens het loggen om bijgewerkte timings en tellingen te krijgen. Hier is een korte run vroeg gestopt met behulp van de s cmd.

LOGGEGEVENS …..

Ver:0.01 voer een van de volgende opdrachten in: ? - huidige status en metadata - stop datalogging

LOGGEGEVENS… Controleer met ? opdracht

Verstreken looptijd: 0:00:10.000 van 720:00:00.000 Verstreken looptijd: 0:00:20.000 van 720:00:00.000…

Stoppen met loggen en ongebruikte bestanden verwijderen.

… Ongebruikt bestand verwijderen: log98.bin Ongebruikt bestand verwijderen: log99.bin

0:01:04.976 van 720:00:00.000

Sample pins: 16 17 Byte volgorde: Little-Endian ADC bits: 10 ADC sample gemiddelden over: 4 Sample Rate: 1000,00 Sample interval: 1000uS Samples per block: 127 Tijd om blok te vullen: 127000uS Tijd om een bestand te vullen: 9:01: 52.000 Tijd om ALLE bestanden te vullen: 894:04:48.000 Max. SD-latentie (inclusief bestand sluiten/openen): 204uS Max. latentie bij sluiten/openen bestand: 0uS Aantal bufferblokken: 28 Tijd om ALLE blokbuffers te vullen: 3556000uS Max. aantal buffers opgeslagen in aanroep naar storeSampleBuffers(): 1 Gemiste timers totaal: 0 Totaal gemiste voorbeelden tot nu toe: 0 Totaal aantal geschreven blokken: 511 Totaal aantal geschreven voorbeelden: 64832 dekking: 0:01:04.832 Huidig bestand: log00.bin

ls:

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

GEGEVENSLOGGEN VOLTOOID!

Ver:0.01 voer een van de volgende opdrachten in: ? - huidige status en metadata ** r - record ADC-gegevens ** niet beschikbaar. Gegevens bestaan al ** i - bestanden initialiseren ** niet beschikbaar. Gegevens bestaan al l - lijst bestanden

GEGEVENS ZIJN REEDS GEREGISTREERD, controleer met ?

Led scherm

De LED die is aangesloten op D3 (waarbij D2 de GND-verbinding levert) gaat ononderbroken branden als een monster wordt gemist en knippert als er een fout is. De schets probeert verder te gaan na fouten, maar doet dit mogelijk niet met succes.

Stap 3: Echte gegevens loggen

Bij het loggen van echte gegevens over een lange tijdsduur, is het handiger om een communicatiemodule aan te sluiten op de D0/D1-pinnen en het loggen op afstand te controleren en te bewaken. Hier werd een Bluetooth Mate Silver-module gebruikt met de standaardinstellingen, 115200 baud, geen hardware-handshake (RTC, CTS), pincode 1234.

Opmerking: wanneer de Mate Silver-module van stroom wordt voorzien, gaat deze gedurende 60 seconden in een configuratiemodus, waarbij de rode led snel knippert. Gedurende deze tijd kunt u $$$ via de seriële verbinding naar de module sturen om deze te configureren, maar u kunt de module niet aansluiten. Zodra de rode led langzaam knippert, accepteert de Bluetooth-module verbindingen.

Wijzig de COM_SERIAL-definitie in Teensy32AnalogLogger.ino in de hardware seriële (D0/D1) verbinding, Serial1

#define COM_SERIAL Serie1

Na het koppelen met de computer is er een nieuwe COM-poort op de computer gemaakt en kan CoolTerm worden gebruikt om de logging aan te sluiten en te controleren en te bewaken. Andere serieel aangesloten communicatiemodules kunnen ook worden gebruikt, zoals WiFi of BLE, zie Arduino UNO/Mega Starter, bestuurd door Android/pfodApp voor details.

U kunt de logboekregistratie ook beheren en controleren vanaf uw Android-mobiel met behulp van een Bluetooth-terminal-app zoals de Bluetooth Terminal-app, of met behulp van de WiFi- en TCP-terminal-app zoals TCP Telnet Terminal Pro, of een Uart naar BLE-mdule en een BLE-terminal-app zoals nRF UART V2

Stap 4: Beperkingen op de keuze van ADC-ingangen

Beperkingen op de keuze van ADC-ingangen
Beperkingen op de keuze van ADC-ingangen

De Teensy 3.2 heeft twee afzonderlijke ADC-hardwaremodules, ADC_0 en ADC_1, in zijn microprocessor, zodat hij twee ingangen tegelijk kan samplen. Het heeft ook een ingebouwde hardwarematige middeling die meerdere ADC-samples neemt en deze gemiddelden voordat het resultaat wordt omgezet.

Er zijn beperkingen op welke ingangen kunnen worden aangesloten op ADC_0, ADC_1. De afbeelding Teensy3_1_AnalogCard-p.webp

Samengevat:-Voor Single Ended Leest dwz +Volt verwijst naar GND ADC_0 kan lezen A0 tot A9, A10, A11, A12, A14 ADC_1 kan lezen A2, A3, A10, A13, A15 tot A20 Als u een pin selecteert die de ADC kan niet lezen het zal 0 retourneren (altijd)

Dit project gebruikt A2, A3 die elk toegankelijk zijn via ADC_0 of ADC_1.

Stap 5: De.bin-bestanden converteren naar.csv-bestanden

De Teensy32AnalogLogger.ino slaat de monsters op als binair in logxx.bin-bestanden, d.w.z. log00.bin naar log99.bin. Teensy32AnalogLogger.ino slaat ook een log.met-bestand op met metagegevens over de run.

U kunt SDtoCSV.jar (broncode SDtoCSV_src.zip) gebruiken om de.bin-bestanden naar.csv te converteren voor verdere verwerking. Kopieer de bestanden van de SD-kaart naar de harde schijf van uw computer met ten minste 70Gig vrije ruimte en kopieer de SDtoCSV.jar naar dezelfde map. Open een opdrachtvenster in die map en voer. uit

java -jar SDtoCSV.jar log

Als uw computer geen Java-installatie heeft, installeer deze dan vanaf www.java.com

SDtoCSV verwerkt het log.met-bestand en vervolgens elk van de beschikbare logxx.bin-bestanden in de map en voert een.csv-bestand uit voor elke.bin. Het.csv-bestand heeft het voorbeeldvolgnummer gevolgd door de twee metingen.

Een voorbeeld van een console-uitvoer voor een uitlezing van 2 adc bemonsterd 30303 keer/sec wordt hier getoond, output.txt. Het illustreert hoe gemiste monsters worden gerapporteerd. (Een verdubbeling van het aantal buffers in de uiteindelijke schets loste deze gemiste samples op)

SD_Logging naar CSV-conversie. Controleer SDtoCSV.log op voortgang en foutmeldingen. Verwerking log00 Verwerkte 256000 blokken Verwerking log01 Verwerkte 256000 blokken… Verwerking logboek25 Verwerkt 256000 blokken Verwerking logboek26 Verwerkt 256000 blokken Verwerking logboek27 Verwerkt 256000 blokken Gemiste voorbeelden: 2715 Verwerking logboek28 Verwerkte 256000 blokken… Logboek verwerken29 Verwerkte 256000 blokken… Verwerkingslogboek47 Verwerkt 256000 blokken Verwerkingslogboek48 Verwerkt 35935 blokken --- Voltooid Verwerking

Bij elke uitvoering van SDtoCSV wordt een vollediger logbestand, SDtoCSV.log, toegevoegd. Het omvat de uitvoer van metagegevens en eventuele foutmeldingen. Hier is de telling: 254 de telling van de gegevens die in dat blok zijn opgeslagen, d.w.z. 127 monsters x 2 adc-metingen per blok. De gemiste monsters is het aantal gemiste leesparen, d.w.z. regels in de.csv-uitvoer.

=== Logbestand voor conversie van SD_Logging naar CSV za 13 juli 13:19:51 AEST 2019 Gebruik java -jar SDtoCSV.jar Basisbestandsnaam 'log' Metagegevensversie: 0 (Little Endian) sampleInterval us om voortgangsberichten op de console te zien: 33 adcBits:10 adcAvgs:4 pinCount:2 Pins: 16, 17 samplesPerBlock:127 noBufferBlocks:28 duur mS:51649820 gevraagde runTime mS:106216704 maxBuffersUsed:32 Waarschuwing: overschrijdt het aantal beschikbare buffers (28). Sommige monsters kunnen ontbreken. maxLatency uS:221476 Waarschuwing: overschrijdt de tijd die wordt geleverd door bufferblokken (117348uS). Sommige monsters zullen ontbreken. maxFileOpenTime uS:20998 gemistTimers:0 gemistSamplesTotaal:2715 totaalBlocksWritten:12323935 totalSamplesWritten:1565139665 Verwerking log00.bin Verwerkt 256000 blokken Verwerking log01.bin Verwerkt 256000 blokken… Verwerking log26.bin Verwerkte 256000 blokken Verwerking log27.bin !!! Blok: 57696 telling: 254 gemiste monsters: 2339 !!! Blok: 57697 telling: 254 gemiste monsters: 376 verwerkte 256000 blokken --- Totaal aantal gemiste monsters: 2715

Verwerking log28.bin Verwerkte 256000 blokken

… Verwerking log47.bin Verwerkt 256000 blokken Verwerking log48.bin Verwerkt 35935 blokken --- Voltooid Verwerking

Een voorbeeld van het log00.csv-uitvoerbestand is:

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

De voorbeeldteller loopt van bestand naar bestand op, zodat deze als tijdstempel kan worden gebruikt. Als er ontbrekende monsters zijn, wordt de monsterteller verhoogd met de gemiste telling voordat de volgende regel wordt uitgevoerd, zodat de teller/tijdstempel nauwkeurig blijft voor de geregistreerde monsters.

Stap 6: Opmerkingen over de code en extensies

De Teensy32AnalogLogger is een sterk gewijzigde versie van Bill Greiman's AnalogBinLogger-voorbeeld in zijn SdFat Arduino-bibliotheek. Hier is de bibliotheek herschreven om op de Teensy 3.2 te draaien.

Teensy32AnalogLogger gebruikt timer0 om het monsterinterval in te stellen. De interrupt-handler voor timer0 start de twee ADC-conversies. Een interrupt-handler voor de tweede ADC-module wordt continu aangeroepen totdat ze allebei klaar zijn, meestal is de eerste ADC-module die is gestart, ADC_0 klaar voordat de tweede is ingeschakeld, dus de interrupt-handler wordt maar één keer aangeroepen. De interrupt-handler van ADC_1 slaat de samples op in een gegevensbuffer.

In de hoofdlus() slaat de storeSampleBuffer() alle volledige buffers op de SD-kaart op en recyclet de buffers naar de lege bufferwachtrij. De grote hoeveelheid RAM die beschikbaar is op de Teensy 3.2 betekent dat een groot aantal buffers kan worden toegewezen en dat storeSampleBuffer() dus niet vaak hoeft te worden aangeroepen. Dit laat tijd over voor de hoofdlus() om ander werk te doen, zoals procesopdrachten en uitvoer verzenden.

Extensies

Hoewel dit project functioneel is als een snelle datalogger, moet het voor een complete wearable nog worden verpakt en een batterijsysteem en ECG-sensoren worden geleverd. Daarnaast zijn er enkele uitbreidingen die overwogen moeten worden.

  1. Voeg realtime controle en monitoring van de gesamplede golfvorm toe via pfodApp met behulp van de plotfunctie van pfodApp om snapshots van de golfvorm te tonen
  2. Verleng de bestandsnummers voorbij 99 voor langere bemonsteringsruns
  3. Sample meer dan 2 ingangen. Aangezien de Teensy 3.2 dubbele ADC-modules heeft, kunt u de code wijzigen om extra invoer in paren toe te voegen om de samplefrequentie te maximaliseren.
  4. Voeg batterijbewaking toe om de batterijlading te volgen. De Teensy 3.2 gebruikt ongeveer 1100mAh gedurende 24 uur, inclusief de bluetooth- en SD-module, maar exclusief de sensormodule
  5. Voeg een dubbel batterijvoedingscircuit toe om batterijwisselingen mogelijk te maken zonder het loggen te onderbreken.

Aanbevolen: