Inhoudsopgave:
- Benodigdheden
- Stap 1: constructie
- Stap 2: Het programma uitvoeren -- Testen
- Stap 3: Echte gegevens loggen
- Stap 4: Beperkingen op de keuze van ADC-ingangen
- Stap 5: De.bin-bestanden converteren naar.csv-bestanden
- Stap 6: Opmerkingen over de code en extensies
Video: Hogesnelheids-ECG of andere gegevens, continu gedurende meer dan een maand loggen: 6 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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
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
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.
- 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
- Verleng de bestandsnummers voorbij 99 voor langere bemonsteringsruns
- 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.
- 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
- Voeg een dubbel batterijvoedingscircuit toe om batterijwisselingen mogelijk te maken zonder het loggen te onderbreken.
Aanbevolen:
Maak mooie plots van live Arduino-gegevens (en sla de gegevens op in Excel): 3 stappen
Maak mooie plots van live Arduino-gegevens (en sla de gegevens op in Excel): we spelen allemaal graag met onze plotterfunctie in de Arduino IDE. Hoewel het nuttig kan zijn voor basistoepassingen, worden de gegevens gewist naarmate meer punten worden toegevoegd en het is niet bijzonder aangenaam voor de ogen. De Arduino IDE-plotter werkt niet
Een Arduino programmeren Een andere Arduino gebruiken om een scrollende tekst weer te geven zonder een bibliotheek - Ajarnpa
Een Arduino programmeren Een andere Arduino gebruiken om een scrollende tekst weer te geven zonder een bibliotheek: Sony Spresense of Arduino Uno zijn niet zo duur en vereisen niet veel stroom. Als uw project echter beperkingen heeft op het gebied van stroom, ruimte of zelfs budget, kunt u overwegen om Arduino Pro Mini te gebruiken. In tegenstelling tot Arduino Pro Micro, is Arduino Pro Mi
Gegevens loggen en online een grafiek plotten met NodeMCU, MySQL, PHP en Chartjs.org: 4 stappen
Log gegevens en plot een grafiek online met NodeMCU, MySQL, PHP en Chartjs.org: deze Instructable beschrijft hoe we het Node MCU-bord kunnen gebruiken om gegevens van meerdere sensoren te verzamelen, deze gegevens naar een gehost PHP-bestand te sturen dat de gegevens vervolgens toevoegt aan een MySQL-database. De gegevens kunnen vervolgens online als een grafiek worden bekeken, met behulp van chart.js.A ba
Vanaf het begin een Raspberry Pi instellen om gegevens van Arduino te loggen - Ajarnpa
Vanaf het begin een Raspberry Pi instellen om gegevens van Arduino te loggen: deze tutorial is voor degenen die geen ervaring hebben met het installeren van nieuwe hardware of software, laat staan Python of Linux. Stel dat je Raspberry Pi (RPi) met SD hebt besteld kaart (minimaal 8GB, ik gebruikte 16GB, type I) en voeding (5V, minimaal 2
Een LAPTOP-CPU (en andere coole dingen!) Upgraden om een LANGZAME/DEAD-laptop in een SNELLE laptop te veranderen: 4 stappen
Een LAPTOP-CPU upgraden (en andere coole dingen!) om een LANGZAME/DEAD-laptop in een SNELLE laptop te veranderen! erg verouderd … Het LCD-scherm was kapot en de belangrijkste harde schijf was vastgelopen, dus de laptop was in wezen dood … Zie foto's en