Cuprins:

Înregistrați ECG de mare viteză sau alte date, continuu timp de peste o lună: 6 pași
Înregistrați ECG de mare viteză sau alte date, continuu timp de peste o lună: 6 pași

Video: Înregistrați ECG de mare viteză sau alte date, continuu timp de peste o lună: 6 pași

Video: Înregistrați ECG de mare viteză sau alte date, continuu timp de peste o lună: 6 pași
Video: Top 10 limbi 2021. Java 16/17. Procesoare 3 nm. Triumful Netflix [MJC news # 5] NEWS IT FEBRUARY. 2024, Iulie
Anonim
Înregistrați ECG de mare viteză sau alte date, continuu timp de peste o lună
Înregistrați ECG de mare viteză sau alte date, continuu timp de peste o lună

Acest proiect a fost dezvoltat pentru a sprijini o echipă de cercetare medicală universitară, care avea nevoie de un dispozitiv portabil care să poată înregistra 2 semnale ECG la 1000 de probe / sec fiecare (2K probe / sec total) continuu timp de 30 de zile, pentru a detecta aritmii. Proiectul prezentat aici include controlul de la distanță și monitorizarea înregistrării. Telecomanda se face prin meniuri prezentate pe un terminal serial, fie pe computer, fie pe telefonul mobil. Acest proiect nu acoperă măsurarea ECG sau ambalarea sau bateria necesară pentru purtarea finală.

Această versiune de mare viteză / durată lungă folosește Teensy 3.2, modul Adafruit Micro-SD breakout, un card SD de calitate 16G SDHC clasa 10 pentru înregistrarea datelor și un modul de comunicații Bluetooth pentru control și monitorizare. Este disponibilă și o versiune UNO / Mega2560 mai puțin dezvoltată și mai lentă a acestui proiect. În timp ce acest proiect utilizează un modul de comunicații Bluetooth pentru controlul și monitorizarea înregistrării, puteți utiliza și module WiFi sau BLE.

Această versiune, bazată pe Teensy 3.2, este capabilă de rate de eșantionare mult mai mari decât versiunea UNO / Mega2560. Folosind acest cod, Teensy 3.2 poate preleva și înregistra două eșantioane ADC la> 30Khz, cu o medie hardware peste 4 eșantioane și îndeplinește cu ușurință cele 1000 de eșantioane / sec cerință de mai sus. Codul acceptă salvarea a 100 de fișiere.bin de 128K fiecare. La 30Khz care acoperă 29 de ore 30min. La 1000 de probe / sec, acoperă 37 de zile. Codul poate fi extins cu ușurință pentru a gestiona mai mult de 100 de fișiere, extinzând astfel durata de rulare. La sfârșitul alergării veți avea> 10Gig de date,.bin, fișiere și un fișier.met de meta date care descrie rularea și rezultatele. SDtoCSV.jar furnizat (cod sursă SDtoCSV_src.zip) poate fi utilizat pentru a converti fișierele.bin în fișiere.csv de pe computer pentru procesare ulterioară. Datele rezultate sunt> 60Gig. Versiunea UNO / Mega2560 are conversia.bin în.csv inclusă în schița Arduino, dar având în vedere volumul de date înregistrate de versiunea Teensy, acesta nu este un mod eficient de a face conversia.

Provizii

Teensy 3.2 de PJRC

Adafruit MicroSD card breakout board + sau similar.

16G SDHC clasa 10 Card MicroSD de bună calitate de ex. SanDisk.

Alimentare USB 5V

Un led cu un rezistor 470R în serie.

2 rezistențe 100R (oferă protecție împotriva deteriorării cauzate de erori de cablare Tx / Rx)

Bluetooth Mate Silver SAU unul dintre modulele descrise pe Arduino UNO / Mega Starter, controlat de Android / pfodApp

Pasul 1: Construcție

Constructie
Constructie

Descărcați și instalați Arduino IDE V1.8.9 + de pe https://arduino.cc/en/Main/Software. Această pagină web are legături pentru diferite sisteme de operare și un link către GettingStarted (https://arduino.cc/en/Guide/HomePage).

Descărcați și instalați Teensyduino (Suport Teensy pentru IDE Arduino). Rețineți cu atenție instrucțiunile pentru prima utilizare.

Selectați Teensy 3.2 ca placă și verificați dacă programul de exemplu BLINK se încarcă și rulează.

Descărcați și instalați următoarele biblioteci: - millisDelay și SdFat (este aici un instantaneu al bibliotecii SdFat utilizate pentru aceste teste.) Și pfodParser.zip (pentru clasa pfodBufferedStream și pfodNonBlockingInput)

Descărcați fișierele zip ale bibliotecii și apoi utilizați Arduino IDE → Schiță → Includeți bibliotecă → Adăugați meniul bibliotecii. ZIP pentru a instala bibliotecile din fișierele zip.

Dezarhivați fișierul Teensy32AnalogLogger.zip în directorul de schițe Arduino și programați placa Teensy 3.2 cu Teensy32AnalogLogger.ino (Versiunea 0.01)

Conectați modulul Teensy 3.2, Bluetooth și modulul cardului SD așa cum se arată mai sus (versiunea pdf)

Pasul 2: Rularea programului - Testare

Mai întâi formatați cardul SD utilizând

Cardul SD trebuie să fie gol pentru a începe înregistrarea.

Pentru testarea inițială nu este nevoie să conectați modulul de comunicații, conectați doar modulul Teensy 3.2 + SD (cu un card gol instalat) la ID-ul Arduino prin cablul serial USB. După cum este prevăzut, schița Teensy32AnalogLogger.ino utilizează conexiunea USB pentru control și monitorizare. Consultați pasul Înregistrare date reale de mai jos pentru utilizarea unui dispozitiv de comunicație pentru control și monitorizare.

Editați partea de sus a schiței Teensy32AnalogLogger.ino pentru a seta COM_SERIAL la Serial, pentru a ieși la conexiunea USB Teensy.

#define Seria COM_SERIAL

Apoi încărcați schița în Teensy 3.2

Deschideți Arduino IDE Serial Monitor la 115200 baud (cu ambele seturi NL și CR). După câteva secunde, Teensy 3.2 va afișa un meniu de comenzi

Ver: 0.01 introduceți una dintre următoarele comenzi:? - starea curentă și metadatele - inițializarea fișierelor l - listarea fișierelor>

? cmd afișează detalii despre setările curente. (Consultați partea de sus a Teensy32AnalogLogger.ino pentru a modifica aceste setări) Cmd-urile trebuie să fie terminate cu un NL sau CR sau ambele.

0: 00: 00.000 din 720: 00: 00.000

Pinii eșantionului: 16 Ordinea de 17 octeți: biți ADC Little-Endian: 10 medii ale eșantionului ADC peste: 4 Rată de eșantionare: 1000,00 Interval de eșantionare: 1000uS Eșantioane pe bloc: 127 Timp de completare a blocului: 127000uS Timp de completare a unui fișier: 9:01: 52.000 Timp pentru completarea TOATE fișierele: 894: 04: 48.000 Latență maximă SD (include închiderea / deschiderea fișierului): 0uS Latență maximă închidere / deschidere fișier: 0uS Număr de blocuri tampon: 28 Timp pentru completarea TOATE tampoane bloc: 3556000uS Număr maxim de tampoane salvat în apel la magazinSampleBuffers (): 0 Total temporizatori lipsă: 0 Total eșantioane pierdute până acum: 0 Total blocuri scrise: 0 Total eșantioane scrise: 0 acoperire: 0: 00: 00.000 Fișier curent:

În acest caz, timpul de rulare curent este de 0 la 720 ore solicitate (30 de zile), eșantionarea D16 / A2 și D17 / A3 (a se vedea mai jos restricțiile privind alegerea intrărilor ADC de mai jos) de 1000 de ori pe secundă. Durata maximă de rulare poate fi de până la 894 ore (37,25 zile). Bucla principală () poate fi ocupată până la 3,5 sec. (Timpul de umplere a tuturor tampoanelor bloc) înainte ca toate bufferele disponibile să fie umplute și să se piardă eșantioanele. Tampoanele salvate etc. sunt actualizate pe măsură ce rulează.

Introduceți un card SD gol, utilizați cmd-ul „i” pentru a inițializa cele 99 de fișiere utilizate pentru stocarea datelor. Pre-inițializarea acestora aici reduce întârzierea la trecerea de la un fișier la altul și permite eșantionarea mai rapidă.

Inițializarea a 99 de fișiere

Crearea fișierului nou: log00.bin Timp scurs: 368mS Crearea fișierului nou: log01.bin Timp scurs: 520mS… Crearea fișierului nou: log98.bin Timp scurs: 15660mS Crearea fișierului nou: log99.bin Timp scurs: 15812mS

Puteți utiliza apoi r cmd pentru a începe o rundă de înregistrare. Rularea va fi pentru timpul solicitat sau până când s cmd este folosit pentru a o opri. Puteți utiliza, de asemenea, cmd în timp ce vă conectați pentru a obține sincronizări și numere actualizate. Iată o scurtă alergare oprită devreme folosind s cmd.

DATE ÎNREGISTRARE …..

Ver: 0.01 introduceți una dintre următoarele comenzi:? - starea curentă și metadatele s - opriți înregistrarea datelor

DATE DE ÎNREGISTRARE … Verificați cu? comanda

Timp de rulare scurs: 0: 00: 10.000 din 720: 00: 00.000 Timp de rulare scurs: 0: 00: 20.000 din 720: 00: 00.000…

Oprirea înregistrării și eliminarea fișierelor neutilizate.

… Eliminarea fișierului neutilizat: log98.bin Eliminarea fișierului neutilizat: log99.bin

0: 01: 04.976 din 720: 00: 00.000

Pinii eșantionului: 16 Ordinea de 17 octeți: biți ADC Little-Endian: 10 medii ale eșantionului ADC peste: 4 Rată de eșantionare: 1000,00 Interval de eșantionare: 1000uS Eșantioane pe bloc: 127 Timp de completare a blocului: 127000uS Timp de completare a unui fișier: 9:01: 52.000 Timp pentru completarea TOATE fișierele: 894: 04: 48.000 Latență maximă SD (include închiderea / deschiderea fișierului): 204uS Latență maximă închidere / deschidere fișier: 0uS Număr de blocuri tampon: 28 Timp pentru completarea TOATE tampoane bloc: 3556000uS Număr maxim de tampoane salvat în apel la magazinSampleBuffers (): 1 Total temporizatori lipsă: 0 Total eșantioane pierdute până acum: 0 Total blocuri scrise: 511 Total eșantioane scrise: 64832 acoperire: 0: 01: 04.832 Fișier curent: log00.bin

ls:

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

ÎNREGISTRARE DE DATE ÎNCHEIATĂ!

Ver: 0.01 introduceți una dintre următoarele comenzi:? - starea curentă și metadatele ** r - înregistrarea datelor ADC ** nu sunt disponibile. Datele există deja ** i - inițializați fișierele ** nu sunt disponibile. Datele există deja cu fișiere cu listă l

DATELOR AU FOST DEJA ÎNREGISTRATE, verificați cu?

Afișaj LED

LED-ul conectat la D3 (cu D2 furnizând conexiunea GND) se va aprinde solid dacă eșantionul este ratat și va clipi dacă există o eroare. Schița încearcă să continue după erori, dar este posibil să nu o facă cu succes.

Pasul 3: Înregistrarea datelor reale

Când înregistrați date reale pe durate lungi, este mai convenabil să conectați un modul de comunicații la pinii D0 / D1 și să controlați și să monitorizați înregistrarea de la distanță. Aici a fost utilizat un modul Bluetooth Mate Silver cu setările implicite, 115200 baud, fără handshake hardware (RTC, CTS), cod PIN 1234.

Notă: Când puterea este aplicată modulului Mate Silver, acesta intră într-un mod de configurare, led roșu rapid intermitent, timp de 60 sec. În acest timp puteți trimite $$$ prin conexiunea serială la modul pentru a-l configura, dar nu puteți conecta modulul. Odată ce ledul roșu clipește lent, modulul bluetooth acceptă conexiunile.

Schimbați definirea COM_SERIAL din Teensy32AnalogLogger.ino la conexiunea hardware hardware (D0 / D1), Serial1

#define COM_SERIAL Serial1

După asocierea cu computerul, a fost creat un nou port COM pe computer și CoolTerm poate fi utilizat pentru conectarea, controlul și monitorizarea înregistrării. Pot fi utilizate și alte module de comunicații conectate în serie, cum ar fi WiFi sau BLE, consultați Arduino UNO / Mega Starter, controlat de Android / pfodApp pentru detalii.

De asemenea, puteți controla și monitoriza înregistrarea de pe mobilul dvs. Android utilizând o aplicație de terminal Bluetooth, cum ar fi aplicația Bluetooth Terminal, sau utilizând aplicația de terminal WiFi și TCP, cum ar fi TCP Telnet Terminal Pro, sau un mdoule Uart to BLE și o aplicație de terminal BLE, cum ar fi nRF UART V2

Pasul 4: restricții privind alegerea intrărilor ADC

Restricții privind alegerea intrărilor ADC
Restricții privind alegerea intrărilor ADC

Teensy 3.2 are două module hardware ADC separate, ADC_0 și ADC_1, în microprocesor, astfel încât să poată testa două intrări în același timp. De asemenea, are o medie hardware încorporată, care ia mai multe eșantioane ADC și le face medii înainte de a transforma rezultatul.

Există restricții privind intrările care pot fi conectate la ADC_0, ADC_1. Imaginea Teensy3_1_AnalogCard-p.webp

În rezumat: -Pentru citiri cu un singur capăt, adică + Volți la care se face referire la GND ADC_0 poate citi de la A0 la A9, A10, A11, A12, A14 ADC_1 poate citi A2, A3, A10, A13, A15 până la A20 Dacă selectați un pin care ADC nu pot citi, va reveni 0 (întotdeauna)

Acest proiect folosește A2, A3, care pot fi accesate fiecare de ADC_0 sau ADC_1.

Pasul 5: Conversia fișierelor.bin în fișiere.csv

Teensy32AnalogLogger.ino salvează mostrele ca binare în fișierele logxx.bin, adică log00.bin în log99.bin. Teensy32AnalogLogger.ino salvează, de asemenea, un fișier log.met cu meta date despre rulare.

Puteți utiliza SDtoCSV.jar (cod sursă SDtoCSV_src.zip) pentru a converti fișierele.bin în.csv pentru procesare ulterioară. Copiați fișierele de pe cardul SD pe hard diskul computerului cu cel puțin 70Gig de spațiu liber și copiați SDtoCSV.jar în același director. Deschideți o fereastră de comandă în acel director și rulați

java -jar jurnal SDtoCSV.jar

Dacă computerul dvs. nu are instalare Java, atunci instalați-l de pe www.java.com

SDtoCSV va procesa fișierul log.met și apoi fiecare dintre fișierele disponibile logxx.bin din director și va afișa un fișier.csv pentru fiecare.bin. Fișierul.csv are numărul de secvență eșantion urmat de cele două citiri.

O mostră de ieșire a consolei pentru o citire de 2 adc eșantionată de 30303 ori / sec este prezentată aici, output.txt. Acesta ilustrează modul în care sunt raportate probele ratate. (Dublarea numărului de tampoane din schița finală a rezolvat aceste eșantioane ratate)

SD_Logging la conversia CSV. Verificați SDtoCSV.log pentru mesaje de progres și erori. Procesare jurnal00 Procesat 256000 blocuri Procesare jurnal01 Procesat 256000 blocuri… Procesare jurnal25 Procesat 256000 blocuri Procesare jurnal26 Procesat 256000 blocuri Procesare jurnal27 Procesat 256000 blocuri Eșantioane ratate: 2715 Procesare jurnal28 Procesat 256000 blocuri… Procesare jurnal29 Procesate 256000 blocuri… Procesare jurnal47 Procesat 256000 blocuri Procesare jurnal48 Procesat 35935 blocuri --- Procesare finalizată

Fiecare jurnal SDtoCSV este atașat unui fișier jurnal mai complet, SDtoCSV.log. Include ieșirea meta date și orice mesaje de eroare. Aici numărul: 254 este numărul de date stocate în acel bloc, adică 127 de eșantioane x 2 citiri adc pe bloc. Sample-uri pierdute este numărul de perechi de citire pierdute, adică linii în ieșirea.csv.

=== Fișier jurnal pentru conversie SD_Logging la CSV Sâ 13 iulie 13:19:51 AEST 2019 Pentru a vedea mesajele de progres pe Consolă utilizați java -jar SDtoCSV.jar Nume fișier de bază „jurnal” Metadate Versiune: 0 (Little Endian) eșantion Interval uS: 33 adcBits: 10 adcAvgs: 4 pinCount: 2 Pins: 16, 17 samplesPerBlock: 127 noBufferBlocks: 28 durata mS: 51649820 cerere runTime mS: 106216704 maxBuffersUsed: 32 Avertisment: Depășește numărul de buffere disponibile (28). Unele probe pot lipsi. maxLatency uS: 221476 Avertisment: depășește timpul oferit de blocurile tampon (117348uS). Unele probe vor lipsi. maxFileOpenTime uS: 20998 Timpuri ratate: 0 PierduteSamplesTotal: 2715 totalBlocksWritten: 12323935 totalSamplesWritten: 1565139665 Procesare log00.bin Procesare 256000 blocuri Procesare log01.bin Procesare 256000 blocuri… Procesare log26.bin Procesat 256000 blocuri Procesare log27.bin !!! Bloc: 57696 număr: 254 ratate Mostre: 2339 !!! Bloc: 57697 număr: 254 ratate Mostre: 376 Procesate 256000 blocuri --- Total eșantioane ratate: 2715

Procesare jurnal28.bin Procesat 256000 blocuri

… Procesare log47.bin Procesat 256000 blocuri Procesare log48.bin Procesat 35935 blocuri --- Procesare finalizată

Un eșantion de fișier de ieșire log00.csv este

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

Contorul eșantionului crește de la fișier la fișier, astfel încât să poată fi folosit ca ștampilă de timp. Dacă lipsesc eșantioane, contorul eșantionului este incrementat cu numărul pierdut înainte de a scoate următoarea linie, astfel încât contorul / ștampila de timp să rămână exactă pentru eșantioanele înregistrate.

Pasul 6: Comentarii la cod și extensii

Teensy32AnalogLogger este o versiune puternic modificată a exemplului AnalogBinLogger al lui Bill Greiman din biblioteca sa SdFat Arduino. Aici biblioteca a fost rescrisă pentru a rula pe Teensy 3.2.

Teensy32AnalogLogger folosește timer0 pentru a seta intervalul eșantionului. Handlerul de întrerupere pentru timer0 pornește cele două conversii ADC. Un handler de întrerupere pentru al doilea modul ADC este apelat continuu până când ambele sunt terminate, de obicei primul modul ADC pornit ADC_0 se va termina înainte de al doilea pornit, astfel încât handlerul de întrerupere este apelat o singură dată. Manipulatorul de întreruperi ADC_1 salvează mostrele într-un buffer de date.

În bucla principală (), storeSampleBuffer () salvează toate bufferele complete pe cardul SD și reciclează bufferele în coada de buffer goală. Cantitatea mare de memorie RAM disponibilă pe Teensy 3.2 înseamnă că poate fi alocat un număr mare de buffere, astfel încât storeSampleBuffer () nu trebuie să fie apelat des. Acest lucru lasă timp ca bucla principală () să facă alte lucrări, cum ar fi comenzile de proces și să trimită ieșirea.

Extensii

În timp ce acest proiect este funcțional ca un înregistrator de date de mare viteză, pentru un dispozitiv complet de purtat trebuie totuși să fie ambalat și să fie furnizat un sistem de baterii și senzori ECG. De asemenea, există câteva extensii care ar trebui luate în considerare.

  1. Adăugați control în timp real și monitorizarea formei de undă eșantionată prin pfodApp utilizând funcția de reprezentare a pfodApp pentru a afișa instantanee ale formei de undă
  2. Extindeți numerele de fișiere trecute de 99 pentru prelevări mai lungi de eșantionare
  3. Eșantionează mai mult de 2 intrări. Deoarece Teensy 3.2 are module ADC duale, puteți modifica codul pentru a adăuga intrări suplimentare în perechi pentru a maximiza rata de eșantionare.
  4. Adăugați monitorizarea bateriei pentru a urmări încărcarea bateriei. Teensy 3.2 folosește aproximativ 1100 mAhrs peste 24 de ore, inclusiv modulul bluetooth și SD, dar cu excepția modulului senzor
  5. Adăugați un circuit de alimentare cu baterie dublă pentru a permite schimbarea bateriei fără întreruperea înregistrării.

Recomandat: