Talaan ng mga Nilalaman:

Mag-log ng Mataas na Bilis na ECG o Iba Pang Data, Patuloy na Higit sa isang Buwan: 6 na Hakbang
Mag-log ng Mataas na Bilis na ECG o Iba Pang Data, Patuloy na Higit sa isang Buwan: 6 na Hakbang

Video: Mag-log ng Mataas na Bilis na ECG o Iba Pang Data, Patuloy na Higit sa isang Buwan: 6 na Hakbang

Video: Mag-log ng Mataas na Bilis na ECG o Iba Pang Data, Patuloy na Higit sa isang Buwan: 6 na Hakbang
Video: Mga kaso na hindi na kailangan dumaan sa Barangay 2024, Hulyo
Anonim
Mag-log ng Mataas na Bilis na ECG o Iba Pang Data, Patuloy na Higit sa Isang Buwan
Mag-log ng Mataas na Bilis na ECG o Iba Pang Data, Patuloy na Higit sa Isang Buwan

Ang proyektong ito ay binuo upang suportahan ang isang pangkat ng medikal na pananaliksik sa unibersidad, na nangangailangan ng isang naisusuot na maaaring mag-log ng 2 x ECG signal sa 1000 na mga sample / sec bawat isa (mga halimbawang 2K / sec bawat) na patuloy na 30 araw, upang makita ang mga arrhythmia. Ang proyektong ipinakita dito ay nagsasama ng remote control at pagsubaybay sa pag-log. Ang Remote control ay sa pamamagitan ng mga menu na ipinakita sa isang serial terminal, alinman sa isang computer o mobile phone. Ang proyekto na ito ay hindi sumasaklaw sa pagsukat ng ECG o pagbabalot o baterya na kinakailangan para sa huling naisusuot.

Ang bersyon ng mataas na bilis / mahabang tagal na ito ay gumagamit ng Teensy 3.2, Adafruit Micro-SD breakout module, isang kalidad na 16G SDHC class 10 SD card upang mag-log ng data at isang module ng komunikasyon ng Bluetooth para sa kontrol at pagsubaybay. Ang isang hindi gaanong binuo at mas mabagal na bersyon ng UNO / Mega2560 ng proyektong ito ay magagamit din. Habang gumagamit ang proyektong ito ng isang module ng mga komunikasyon sa Bluetooth para sa kontrol at pagsubaybay sa pag-log, maaari mo ring gamitin ang mga module ng WiFi o BLE.

Ang bersyon na ito, batay sa Teensy 3.2, ay may kakayahang higit na mas mataas na mga rate ng pag-sample kaysa sa bersyon ng UNO / Mega2560. Gamit ang code na ito, ang Teensy 3.2 ay maaaring mag-sample at mag-log ng dalawang sample ng ADC sa> 30Khz na may average na hardware sa paglipas ng 4 na mga sample at madaling masiyahan ang 1000 sample / sec na kinakailangan sa itaas. Sinusuportahan ng code ang pag-save ng 100.bin file na 128K bawat isa. Sa 30Khz na sumasakop sa 29hrs 30min. Sa 1000 sample / sec sumasaklaw ito ng 37 araw. Madaling mapalawak ang code upang mahawakan ang higit sa 100 mga file, kaya't pinalawak ang tagal ng pagtakbo. Sa pagtatapos ng pagtakbo magkakaroon ka ng> 10Gig ng data,.bin, mga file at isang.met file ng meta data na naglalarawan sa pagtakbo at mga resulta. Ang naibigay na SDtoCSV.jar (source code SDtoCSV_src.zip) ay maaaring magamit upang mai-convert ang.bin file sa.csv file sa iyong computer para sa karagdagang pagproseso. Ang nagresultang data ay> 60Gig. Ang bersyon ng UNO / Mega2560 ay mayroong.bin sa.csv na conversion na kasama sa sketch ng Arduino, ngunit ibinigay ang dami ng data na naka-log ng bersyon ng Teensy, iyon ay hindi isang mahusay na paraan upang gawin ang conversion.

Mga gamit

Teensy 3.2 ng PJRC

Adafruit MicroSD card breakout board + o katulad.

16G SDHC class 10 MicroSD card ng mahusay na kalidad hal hal. SanDisk.

5V USB supply

Isang humantong na may 470R resister sa serye.

2 x 100R resistors (nagbibigay ng proteksyon mula sa pinsala dahil sa mga error sa mga kable ng Tx / Rx)

Bluetooth Mate Silver O isa sa mga modyul na inilarawan sa Arduino UNO / Mega Starter, kinokontrol ng Android / pfodApp

Hakbang 1: Konstruksiyon

Konstruksyon
Konstruksyon

I-download at i-install ang Arduino IDE V1.8.9 + mula sa https://arduino.cc/en/Main/Software. Ang web page na iyon ay may mga link para sa iba't ibang mga operating system at isang link sa GettingStarted (https://arduino.cc/en/Guide/HomePage).

I-download at i-install ang Teensyduino (Suporta ng Teensy para sa Arduino IDE). TANDAAN nang mabuti ang mga tagubilin sa Unang Paggamit.

Piliin ang Teensy 3.2 bilang board at suriin kung ang halimbawa ng programang BLINK ay naglo-load at tumatakbo.

I-download at mai-install ang mga sumusunod na aklatan: - millisDelay at SdFat (Ang isang lokal na snapshot ng SdFat library na ginamit para sa mga pagsubok na ito ay narito.) At ang pfodParser.zip (para sa pfodBufferedStream at pfodNonBlockingInput na klase)

I-download ang mga file ng zip ng library at pagkatapos ay gamitin ang Arduino IDE → Sketch → Isama ang Library → Magdagdag ng. ZIP library menu upang mai-install ang mga library mula sa mga zip file.

I-unzip ang Teensy32AnalogLogger.zip file sa iyong direktoryo ng Sketch ng Arduino at i-program ang Teensy 3.2 board kasama ang Teensy32AnalogLogger.ino (Bersyon 0.01)

Wire up ang Teensy 3.2, module ng Bluetooth at ang module ng SD card tulad ng ipinakita sa itaas (bersyon ng pdf)

Hakbang 2: Pagpapatakbo ng Programa - Pagsubok

I-format muna ang iyong SD card gamit ang

Dapat na walang laman ang SD card upang masimulan ang pag-log.

Para sa paunang pagsubok hindi mo kailangang ikonekta ang module ng Komunikasyon, ikonekta lamang ang module ng Teensy 3.2 + SD (na may naka-install na walang laman na card) sa Arduino IDE sa pamamagitan ng USB serial cable. Tulad ng ibinigay na Teensy32AnalogLogger.ino sketch ay gumagamit ng koneksyon sa USB para sa kontrol at pagsubaybay. Tingnan ang hakbang sa Tunay na Data ng Pag-log sa ibaba para sa paggamit ng isang aparato sa komunikasyon para sa kontrol at pagsubaybay.

I-edit ang tuktok ng Teensy32AnalogLogger.ino sketch upang maitakda ang COM_SERIAL sa Serial, upang mai-output sa koneksyon ng Teensy USB.

# tukuyin ang COM_SERIAL Serial

Pagkatapos i-upload ang sketch sa Teensy 3.2

Buksan ang Arduino IDE Serial Monitor sa 115200 baud (kasama ang parehong NL & CR set). Matapos ang ilang seg ang Teensy 3.2 ay magpapakita ng isang menu ng mga utos

Ver: 0.01 ipasok ang isa sa mga sumusunod na utos:? - kasalukuyang katayuan at metadatai - isimulan ang filesl - listahan ng mga file>

Ang? Nagpapakita ang cmd ng mga detalye ng kasalukuyang mga setting. (Tingnan ang tuktok ng Teensy32AnalogLogger.ino upang baguhin ang mga setting na ito) Ang Cmds ay dapat na winakasan ng isang NL o CR o pareho.

0: 00: 00.000 ng 720: 00: 00.000

Mga sample na pin: 16 17 Byte order: Little-Endian ADC bits: 10 ADC sample average na higit sa: 4 Sample Rate: 1000.00 Sample interval: 1000uS Sample per block: 127 Oras upang punan ang bloke: 127000uS Oras upang punan ang isang file: 9:01: 52.000 Oras upang punan ang LAHAT ng mga file: 894: 04: 48.000 Latency ng SD SD (kasama ang pagsara / bukas ng file): 0uS Max file close / open latency: 0uS Bilang ng mga buffer block: 28 Oras upang punan ang LAHAT ng mga buffer ng block: 3556000uS Max na bilang ng mga buffer nai-save sa tawag sa storeSampleBuffers (): 0 Total Mga Nawalang Timer: 0 Kabuuang Mga Nawalang Sampol sa ngayon: 0 Kabuuang nakasulat na Mga Block: 0 Kabuuang Mga Sampol na nakasulat: 0 sumasaklaw: 0: 00: 00.000 Kasalukuyang File:

Sa kasong ito ang kasalukuyang runtime logging ay 0 ng isang hiniling na 720hrs (30day), ang pag-sample ng D16 / A2 at D17 / A3 (tingnan sa ibaba para sa Mga Paghihigpit sa Pagpipili ng Mga ADC Input sa ibaba) 1000 beses sa isang segundo. Ang maximum na runtime ay maaaring hanggang sa 894hrs (37.25day). Ang pangunahing loop () ay maaaring sakupin para sa hanggang sa 3.5sec (Oras upang punan ang LAHAT ng mga buffer ng block) bago ang lahat ng mga magagamit na buffer ay napunan at magsimulang mawala ang mga sample. Ang mga naka-save na buffer atbp ay nai-update habang tumatakbo ang run.

Magpasok ng isang walang laman na SD card, gamitin ang 'i' cmd upang maipasimula ang 99 mga file na ginamit upang iimbak ang data. Ang paunang pagpapasimula sa kanila dito ay binabawasan ang pagkaantala ng oras kapag lumilipat mula sa isang file patungo sa susunod at pinapayagan ang mas mabilis na pag-sample.

Pinasimulan ang 99 na mga file

Lumilikha ng bagong file: log00.bin Lumipas na oras: 368mS Lumilikha ng bagong file: log01.bin Lumipas na oras: 520mS… Lumilikha ng bagong file: log98.bin Lumipas na oras: 15660mS Lumilikha ng bagong file: log99.bin Lumipas na oras: 15812mS

Maaari mo nang magamit ang r cmd upang magsimula ng isang logging run. Ang pagtakbo ay para sa hiniling na oras o hanggang sa magamit ang s cmd upang ihinto ito. Maaari mo ring gamitin ang? cmd habang nagla-log upang makakuha ng na-update na mga oras at bilang. Narito ang isang maikling run tumigil nang maaga gamit ang s cmd.

LOGGING DATA…..

Ver: 0.01 ipasok ang isa sa mga sumusunod na utos:? - kasalukuyang katayuan at metadata s - ihinto ang pag-log ng data

LOGGING DATA … Mag-check sa? utos

Lumipas na Oras ng pagtakbo: 0: 00: 10.000 ng 720: 00: 00.000 Lumipas na Oras ng Pagtakbo: 0: 00: 20.000 ng 720: 00: 00.000…

Paghinto sa Pag-log at pag-aalis ng mga hindi nagamit na file.

… Inaalis ang hindi nagamit na file: log98.bin Inaalis ang hindi nagamit na file: log99.bin

0: 01: 04.976 ng 720: 00: 00.000

Mga sample na pin: 16 17 Byte order: Little-Endian ADC bits: 10 ADC sample average na higit sa: 4 Sample Rate: 1000.00 Sample interval: 1000uS Sample per block: 127 Oras upang punan ang bloke: 127000uS Oras upang punan ang isang file: 9:01: 52.000 Oras upang punan ANG LAHAT ng mga file: 894: 04: 48.000 Max SD latency (kasama ang pagsara / bukas ng file): 204uS Max file close / open latency: 0uS Bilang ng mga buffer block: 28 Oras upang punan ang LAHAT ng mga buffer ng block: 3556000uS Max na bilang ng mga buffer nai-save sa tawag sa storeSampleBuffers (): 1 Mga Nawalang Timer sa kabuuan: 0 Kabuuang Mga Nawalang Sampol sa ngayon: 0 Kabuuang nakasulat na Mga Block: 511 Kabuuang Mga Sampol na nakasulat: 64832 sumasaklaw: 0: 01: 04.832 Kasalukuyang File: log00.bin

ls:

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

KUMPLETO ANG DATA LOGGING!

Ver: 0.01 ipasok ang isa sa mga sumusunod na utos:? - kasalukuyang katayuan at metadata ** r - record data ng ADC ** hindi magagamit. Mayroon nang data ** i - ipasimulan ang mga file ** hindi magagamit. Mayroon nang data ng mga l - list file

NAKA-LOGGED NA ANG DATA, mag-check sa?

LED Display

Ang LED na konektado sa D3 (na may D2 na nagbibigay ng koneksyon ng GND) ay magpapasara sa solid kung anumang sample ay napalampas at mag-flash kung mayroong isang error. Sinusubukan ng sketch na magpatuloy pagkatapos ng mga error ngunit maaaring hindi ito matagumpay na magawa.

Hakbang 3: Pag-log ng Tunay na Data

Kapag ang pag-log ng totoong data sa mahabang tagal, mas maginhawa upang ikonekta ang isang module ng komunikasyon sa mga D0 / D1 na pin at kontrolin at subaybayan ang pag-log nang malayuan. Dito ginamit ang isang module ng Bluetooth Mate Silver kasama ang mga default na setting, 115200 baud, walang handshaking ng hardware (RTC, CTS), pin code 1234.

Tandaan: Kapag ang kapangyarihan ay inilapat sa module ng Mate Silver pumupunta ito sa isang mode ng pagsasaayos, mabilis na pulang humantong kumukurap, para sa 60sec. Sa oras na ito maaari kang magpadala ng $$$ sa pamamagitan ng serial na koneksyon sa module upang mai-configure ito ngunit hindi mo maikonekta ang module. Kapag ang pulang pinangunahan ay mabagal pagkurap, tatanggapin ng module ng Bluetooth ang mga koneksyon.

Baguhin ang COM_SERIAL tukuyin sa Teensy32AnalogLogger.ino sa koneksyon ng serial serial (D0 / D1), Serial1

# tukuyin ang COM_SERIAL Serial1

Matapos ang pagpapares sa computer, isang bagong COM port ang nilikha sa computer at maaaring magamit ang CoolTerm upang kumonekta at makontrol at masubaybayan ang pag-log. Ang iba pang mga serial na konektadong mga module ng komunikasyon ay maaari ding magamit, tulad ng WiFi o BLE, tingnan ang Arduino UNO / Mega Starter, na kinokontrol ng Android / pfodApp para sa mga detalye.

Maaari mo ring kontrolin at subaybayan ang pag-log mula sa iyong Android mobile gamit ang isang Bluetooth terminal app tulad ng Bluetooth Terminal app, o paggamit ng WiFi at TCP terminal app tulad ng TCP Telnet Terminal Pro, o isang Uart to BLE mdoule at isang BLE terminal app tulad ng nRF UART V2

Hakbang 4: Mga Paghihigpit sa Pagpipili ng Mga Input ng ADC

Mga paghihigpit sa Pagpipili ng Mga Input ng ADC
Mga paghihigpit sa Pagpipili ng Mga Input ng ADC

Ang Teensy 3.2 ay may dalawang magkakahiwalay na mga module ng hardware ng ADC, ADC_0 at ADC_1, sa micro-processor nito upang maaari itong mag-sample ng dalawang mga input nang sabay. Mayroon din itong built in na pag-average ng hardware na tumatagal ng maraming mga sample ng ADC at na-average ang mga ito bago paikutin ang resulta.

Mayroong mga paghihigpit kung saan ang mga input ay maaaring konektado sa ADC_0, ADC_1. Ang Teensy3_1_AnalogCard-p.webp

Sa buod:-Para sa Single Ended Reads ie + Volts na sumangguni sa GND ADC_0 ay maaaring basahin ang A0 hanggang A9, A10, A11, A12, A14 ADC_1 ay maaaring basahin ang A2, A3, A10, A13, A15 hanggang A20 Kung pipiliin mo ang isang pin na ang ADC hindi mabasa ito ay babalik 0 (palaging)

Gumagamit ang proyektong ito ng A2, A3 na maaaring ma-access ng bawat isa sa pamamagitan ng ADC_0 o ADC_1.

Hakbang 5: Pagko-convert ng.bin Files sa.csv Files

Ang Teensy32AnalogLogger.ino ay nagse-save ng mga sample bilang binary sa logxx.bin file ie log00.bin sa log99.bin. Ang Teensy32AnalogLogger.ino ay nagse-save din ng isang log.met file ng meta data tungkol sa pagtakbo.

Maaari mong gamitin ang SDtoCSV.jar (source code SDtoCSV_src.zip) upang mai-convert ang.bin file sa.csv para sa karagdagang pagproseso. Kopyahin ang mga file mula sa SD card sa iyong computer hard disk na may hindi bababa sa 70Gig ng libreng puwang at kopyahin ang SDtoCSV.jar sa parehong direktoryo. Magbukas ng isang window ng utos sa direktoryong iyon at patakbuhin

java -jar SDtoCSV.jar log

Kung ang iyong computer ay walang Java install pagkatapos i-install ito mula sa www.java.com

Iproseso ng SDtoCSV ang file ng log.met at pagkatapos ang bawat isa sa mga magagamit na logxx.bin na mga file sa direktoryo at maglabas ng isang.csv file para sa bawat.bin. Ang file na.csv ay may halimbawang numero ng pagkakasunud-sunod na sinusundan ng dalawang pagbasa.

Ang isang sample na output ng console para sa isang 2 adc na pagbasa na naka-sample na 30303 beses / sec ay ipinakita dito, output.txt. Inilalarawan nito kung paano naiulat ang mga napalampas na sample. (Ang pagdodoble ng bilang ng mga buffer sa huling sketch ay naayos ito ng mga napalampas na sample na ito)

SD_Logging sa CSV conversion. Suriin ang SDtoCSV.log para sa mga mensahe ng pag-unlad at error. Pagproseso ng log00 Naproseso 256000 na mga bloke.. Pagproseso ng log25 Naprosesong 256000 na mga bloke.. Pagproseso ng log29 Naproseso 256000 na mga bloke… Pagproseso ng log47 Naprosesong 256000 na mga bloke

Ang isang mas buong file ng log, SDtoCSV.log, ay naidugtong ng bawat pagpapatakbo ng SDtoCSV. Kasama rito ang output ng meta data at anumang mga mensahe ng error. Narito ang bilang: 254 ay ang bilang ng data na nakaimbak sa bloke na iyon hal. 127 mga sample x 2 adc readings per block. Ang napalampas na Sampol ay ang bilang ng mga pares ng pagbabasa na napalampas ibig sabihin ng mga linya sa output na.csv.

=== Mag-log File para sa SD_Logging sa conversion ng CSV Sat Hul 13 13:19:51 AEST 2019 Upang makita ang mga mensahe sa pag-usad sa Console gamit ang java -jar SDtoCSV.jar Base File Name 'log' Metadata Version: 0 (Little Endian) sampleInterval uS: 33 adcBits: 10 adcAvgs: 4 pinCount: 2 Pins: 16, 17 samplePerBlock: 127 noBufferBlocks: 28 tagal mS: 51649820 hiniling na runTime mS: 106216704 maxBuffersUsed: 32 Babala: Lumagpas sa bilang ng mga buffer na magagamit (28). Ang ilang mga sample ay maaaring nawawala. maxLatency uS: 221476 Babala: Lumampas sa oras na ibinigay ng mga buffer block (117348uS). Ang ilang mga sample ay nawawala. maxFileOpenTime uS: 20998 missTimers: 0 hindi nakuhaSamplesTotal: 2715 totalBlocksWritten: 12323935 totalSamplesWritten: 1565139665 Processing log00.bin Naproseso 256000 mga bloke Pagproseso ng log01.bin Pinroseso 256000 mga bloke… Pagproseso ng log26.bin Pinroseso 256000 mga bloke Pagproseso ng log27.bin !!! I-block: 57696 bilang: 254 hindi nakuhaMga halimbawa: 2339 !!! I-block: 57697 bilang: 254 napalampas Mga Halimbawa: 376 Naproseso 256000 na mga bloke --- Kabuuang Mga Nawalang Sampol: 2715

Pagproseso ng log28.bin Pinroseso 256000 na mga bloke

… Pagproseso ng log47.bin Pinoproseso ng 256000 mga bloke

Ang isang sample ng log00.csv output file ay

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

Ang sample counter ay tataas mula sa file patungo sa file upang maaari itong magamit bilang isang time stamp. Kung may mga nawawalang sample pagkatapos ang sample counter ay nadagdagan ng hindi nakuha na bilang bago ilabas ang susunod na linya upang ang counter / time stamp ay mananatiling tumpak para sa naitala na mga sample.

Hakbang 6: Mga Komento sa Code at Extension

Ang Teensy32AnalogLogger ay isang mabago na bersyon ng halimbawa ng AnalogBinLogger ni Bill Greiman sa kanyang SdFat Arduino library. Narito ang aklatan ay muling naisulat upang tumakbo sa Teensy 3.2.

Ang Teensy32AnalogLogger ay gumagamit ng timer0 upang itakda ang agwat ng sample. Ang makagambala na handler para sa timer0 ay nagsisimula ng dalawang mga conversion sa ADC. Ang isang nakakagambala na handler para sa ikalawang module ng ADC ay patuloy na tinatawag hanggang sa natapos silang pareho, kadalasan ang unang module ng ADC na nagsimula ang ADC_0 ay tatapusin bago ang pangalawa sa gayon ang makagambala na handler ay tinatawag na isang beses lamang. Ang ADC_1 interrupt handler ay nagse-save ng mga sample sa isang buffer ng data.

Sa pangunahing loop (), nai-save ng storeSampleBuffer () ang anumang buong buffer sa SD card at i-recycle ang mga buffer sa walang laman na pila ng buffer. Ang malaking halaga ng RAM na magagamit sa Teensy 3.2 ay nangangahulugang ang isang malaking bilang ng mga buffer ay maaaring ilaan at sa gayon ang storeSampleBuffer () ay hindi kailangang tawagan nang madalas. Nag-iiwan ito ng oras para sa pangunahing loop () na gumawa ng iba pang trabaho, tulad ng proseso ng mga utos at ipadala ang output.

Mga Extension

Habang ang proyektong ito ay gumagana bilang isang mataas na bilis ng data logger, para sa isang kumpletong naisusuot kailangan pa rin nitong ibalot at ibigay ang isang system ng baterya at mga ECG sensor. Pati na rin may ilang mga extension na dapat isaalang-alang.

  1. Magdagdag ng kontrol sa real time at pagsubaybay sa naka-sample na form ng alon sa pamamagitan ng pfodApp gamit ang pag-andar ng paglalagay ng pfodApp upang maipakita ang mga snapshot ng form ng alon
  2. Palawakin ang mga numero ng file na nakaraang 99 para sa mas matagal na pagpapatakbo ng sampling
  3. Sample higit sa 2 mga input. Dahil ang Teensy 3.2 ay may dalwang mga module ng ADC, maaari mong baguhin ang code upang magdagdag ng labis na mga pag-input nang pares upang ma-maximize ang rate ng sample.
  4. Magdagdag ng pagsubaybay sa baterya upang subaybayan ang singil ng baterya. Gumagamit ang Teensy 3.2 ng tungkol sa 1100mAhrs higit sa 24hrs, kasama ang module ng bluetooth at SD, ngunit hindi kasama ang sensor module
  5. Magdagdag ng isang dalawahang circuit supply ng baterya upang payagan ang mga pagbabago sa baterya nang hindi nakakaabala ang pag-log.

Inirerekumendang: