İçindekiler:

Bir Aydan Fazla Kesintisiz Yüksek Hızlı EKG veya Diğer Verileri Kaydetme: 6 Adım
Bir Aydan Fazla Kesintisiz Yüksek Hızlı EKG veya Diğer Verileri Kaydetme: 6 Adım

Video: Bir Aydan Fazla Kesintisiz Yüksek Hızlı EKG veya Diğer Verileri Kaydetme: 6 Adım

Video: Bir Aydan Fazla Kesintisiz Yüksek Hızlı EKG veya Diğer Verileri Kaydetme: 6 Adım
Video: 1.5 MİLYON TL' LİK İŞLEM #kripto #bitcoin #shorts 2024, Eylül
Anonim
Bir Aydan Fazla Sürekli Yüksek Hızlı EKG veya Diğer Verileri Günlüğe Kaydetme
Bir Aydan Fazla Sürekli Yüksek Hızlı EKG veya Diğer Verileri Günlüğe Kaydetme

Bu proje, aritmileri tespit etmek için 30 gün boyunca sürekli olarak her biri 1000 örnek/sn'de (toplam 2K örnek/sn) 2 x EKG sinyali kaydedebilen bir giyilebilir cihaza ihtiyaç duyan bir üniversite tıbbi araştırma ekibini desteklemek için geliştirildi. Burada sunulan proje, günlük kaydının uzaktan kontrolünü ve izlenmesini içerir. Uzaktan kumanda, bir bilgisayar veya cep telefonunda seri terminalde sunulan menüler aracılığıyla gerçekleştirilir. Bu proje, nihai giyilebilir cihaz için gerekli olan EKG ölçümünü veya paketlemeyi veya pili kapsamamaktadır.

Bu yüksek hızlı/uzun süreli sürüm, Teensy 3.2, Adafruit Micro-SD koparma modülü, verileri kaydetmek için kaliteli bir 16G SDHC sınıf 10 SD kart ve kontrol ve izleme için bir Bluetooth iletişim modülü kullanır. Bu projenin daha az gelişmiş ve daha yavaş bir UNO/Mega2560 versiyonu da mevcuttur. Bu proje, günlük kaydının kontrolü ve izlenmesi için bir Bluetooth iletişim modülü kullanırken, WiFi veya BLE modüllerini de kullanabilirsiniz.

Teensy 3.2'ye dayanan bu sürüm, UNO/Mega2560 sürümünden çok daha yüksek örnekleme oranlarına sahiptir. Bu kodu kullanarak Teensy 3.2, donanım ortalaması 4'ün üzerinde örnekle >30Khz'de iki ADC örneğini örnekleyebilir ve günlüğe kaydedebilir ve böylece yukarıdaki 1000 örnek/sn gereksinimini kolayca karşılar. Kod, her biri 128K'lık 100.bin dosyasının kaydedilmesini destekler. 30Khz'de 29 saat 30 dakikayı kapsar. 1000 örnek/saniyede 37 günü kapsar. Kod, 100'den fazla dosyayı işlemek için kolayca genişletilebilir, böylece çalışma süresini uzatır. Çalıştırmanın sonunda >10Gig veri,.bin, dosyalar ve çalıştırmayı ve sonuçları açıklayan bir.met meta veri dosyasına sahip olacaksınız. Sağlanan SDtoCSV.jar (kaynak kodu SDtoCSV_src.zip), daha sonraki işlemler için.bin dosyalarını bilgisayarınızdaki.csv dosyalarına dönüştürmek için kullanılabilir. Elde edilen veriler >60Gig'dir. UNO/Mega2560 sürümü, Arduino çiziminde bulunan.bin'den.csv'ye dönüştürmeye sahiptir, ancak Teensy sürümü tarafından kaydedilen veri hacmi göz önüne alındığında, bu dönüştürmeyi yapmanın etkili bir yolu değildir.

Gereçler

PJRC tarafından Ufacık 3.2

Adafruit MicroSD kart koparma kartı+ veya benzeri.

İyi kalitede 16G SDHC sınıf 10 MicroSD kart, ör. SanDisk.

5V USB kaynağı

Seri olarak 470R dirençli bir led.

2 x 100R direnç (Tx/Rx kablolama hatalarından kaynaklanan hasarlara karşı koruma sağlar)

Bluetooth Mate Silver VEYA Android/pfodApp tarafından kontrol edilen Arduino UNO/Mega Starter'da açıklanan modüllerden biri

Adım 1: İnşaat

Yapı
Yapı

Arduino IDE V1.8.9+'ı https://arduino.cc/en/Main/Software adresinden indirin ve kurun. Bu web sayfasında çeşitli işletim sistemleri için bağlantılar ve Başlarken'e bir bağlantı vardır (https://arduino.cc/en/Guide/HomePage).

Teensyduino'yu (Arduino IDE için Teensy Desteği) indirin ve kurun. İlk Kullanım talimatlarını dikkatlice NOT edin.

Pano olarak Teensy 3.2'yi seçin ve BLINK örnek programının yüklenip çalıştığını kontrol edin.

Aşağıdaki kitaplıkları indirin ve kurun:- millisDelay ve SdFat (Bu testler için kullanılan SdFat kitaplığının yerel bir anlık görüntüsü buradadır.) ve pfodParser.zip (pfodBufferedStream ve pfodNonBlockingInput sınıfı için)

Kütüphane zip dosyalarını indirin ve ardından kütüphaneleri zip dosyalarından yüklemek için Arduino IDE → Sketch → Include Library → Add. ZIP library menüsünü kullanın.

Teensy32AnalogLogger.zip dosyasını Arduino eskiz dizininize açın ve Teensy 3.2 kartını Teensy32AnalogLogger.ino (Sürüm 0.01) ile programlayın

Teensy 3.2, Bluetooth modülü ve SD kart modülünü yukarıda gösterildiği gibi bağlayın (pdf versiyonu)

Adım 2: Programı Çalıştırma -- Test Etme

Önce https://www.sdcard.org/downloads/formatter/ kullanarak SD kartınızı biçimlendirin

Günlüğe kaydetmeye başlamak için SD kartın boş olması gerekir.

İlk test için İletişim modülünü bağlamanız gerekmez, sadece Teensy 3.2 + SD modülünü (boş bir kart takılıyken) USB seri kablosu aracılığıyla Arduino IDE'ye bağlayın. Sağlandığı gibi, Teensy32AnalogLogger.ino çizimi, kontrol ve izleme için USB bağlantısını kullanır. Kontrol ve izleme için bir iletişim cihazı kullanmak için aşağıdaki Gerçek Verileri Günlüğe Kaydetme adımına bakın.

COM_SERIAL öğesini Serial olarak ayarlamak ve Teensy USB bağlantısına çıkış yapmak için Teensy32AnalogLogger.ino taslağının üst kısmını düzenleyin.

#define COM_SERIAL Seri

Ardından çizimi Teensy 3.2'ye yükleyin

Arduino IDE Seri Monitörünü 115200 baud'da açın (hem NL hem de CR seti ile). Birkaç saniye sonra Teensy 3.2 bir komut menüsü görüntüler.

Ver:0.01 aşağıdaki komutlardan birini girin:? - mevcut durum ve meta veriler - dosyaları başlat - dosyaları listele>

NS ? cmd, geçerli ayarların ayrıntılarını görüntüler. (Bu ayarları değiştirmek için Teensy32AnalogLogger.ino'nun en üstüne bakın) Cmd'ler bir NL veya CR veya her ikisi ile sonlandırılmalıdır.

0:00:00.000 720:00:00.000

Örnek pinleri: 16 17 Bayt sırası: Little-Endian ADC bitleri: 10 ADC örnek ortalamasının üzerinde: 4 Örnekleme Hızı: 1000.00 Örnekleme aralığı: 1000uS Blok başına örnek sayısı: 127 Blok doldurma süresi: 127000uS Dosya doldurma süresi: 9:01: 52.000 TÜM dosyaları doldurma süresi: 894:04:48.000 Maks SD gecikmesi (dosya kapatma/açma dahil): 0uS Maks dosya kapatma/açma gecikmesi: 0uS Tampon blok sayısı: 28 TÜM blok tamponlarını doldurma süresi: 3556000uS Maks tampon sayısı storeSampleBuffers() çağrısına kaydedildi: 0 Kaçırılan Zamanlayıcı toplamı: 0 Şimdiye kadarki Toplam Kaçırılan Örnekler: 0 Yazılan Toplam Bloklar: 0 Yazılan Toplam Örnekler: 0 kapsayan: 0:00:00.000 Geçerli Dosya:

Bu durumda mevcut günlük kaydı çalışma süresi, istenen 720 saatin (30 gün), D16/A2 ve D17/A3 örneklemesinin (aşağıdaki ADC Girişlerinin Seçimi ile ilgili Kısıtlamalar için aşağıya bakın) saniyede 1000 kez 0'ıdır. Maksimum çalışma süresi 894 saate (37.25 gün) kadar olabilir. Ana döngü(), mevcut tüm arabellekler doldurulmadan ve örnekler kaybolmaya başlamadan önce 3.5 saniyeye kadar (TÜM blok arabelleklerini doldurma süresi) meşgul olabilir. Kaydedilen arabellekler vb. çalıştırma ilerledikçe güncellenir.

Boş bir SD kart takın, verileri depolamak için kullanılan 99 dosyayı başlatmak için 'i' cmd'sini kullanın. Bunları burada önceden başlatmak, bir dosyadan diğerine geçerken zaman gecikmesini azaltır ve daha hızlı örnekleme sağlar.

99 dosya başlatılıyor

Yeni dosya oluşturma: log00.bin Geçen süre: 368mS Yeni dosya oluşturma: log01.bin Geçen süre: 520mS… Yeni dosya oluşturma: log98.bin Geçen süre: 15660mS Yeni dosya oluşturma: log99.bin Geçen süre: 15812mS

Daha sonra bir günlük çalıştırma işlemini başlatmak için r cmd'yi kullanabilirsiniz. Çalıştırma, istenen süre boyunca veya onu durdurmak için cmd kullanılana kadar olacaktır. Ayrıca kullanabilirsiniz? cmd güncellenmiş zamanlamaları ve sayıları almak için oturum açarken. İşte s cmd kullanılarak erken durdurulan kısa bir çalışma.

GÜNLÜK VERİLERİ…..

Ver:0.01 aşağıdaki komutlardan birini girin: ? - mevcut durum ve meta veriler - veri kaydını durdur

GÜNLÜK VERİLERİ… Kontrol ? emretmek

Geçen Çalışma Süresi: 0:00:10.000 / 720:00:00.000 Geçen Çalışma Süresi: 0:00:20.000 720:00:00.000…

Günlüğü Durdurma ve kullanılmayan dosyaları kaldırma.

… Kullanılmayan dosyayı kaldırma: log98.bin Kullanılmayan dosyayı kaldırma: log99.bin

0:01:04.976 / 720:00:00.000

Örnek pinleri: 16 17 Bayt sırası: Little-Endian ADC bitleri: 10 ADC örnek ortalamasının üzerinde: 4 Örnekleme Hızı: 1000.00 Örnekleme aralığı: 1000uS Blok başına örnek sayısı: 127 Blok doldurma süresi: 127000uS Dosya doldurma süresi: 9:01: 52.000 TÜM dosyaları doldurma süresi: 894:04:48.000 Maks SD gecikmesi (dosya kapatma/açma dahil): 204uS Maks dosya kapatma/açma gecikmesi: 0uS Tampon blok sayısı: 28 TÜM blok tamponlarını doldurma süresi: 3556000uS Maks tampon sayısı storeSampleBuffers() çağrısına kaydedildi: 1 Kaçırılan Zamanlayıcı toplamı: 0 Şu ana kadarki Toplam Kaçırılan Örnek Sayısı: 0 Yazılan Toplam Blok Sayısı: 511 Yazılan Toplam Örnek Sayısı: 64832 Kapsama Alanı: 0:01:04.832 Geçerli Dosya: log00.bin

ls:

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

VERİ KAYDI TAMAMLANDI!

Ver:0.01 aşağıdaki komutlardan birini girin: ? - mevcut durum ve meta veriler ** r - ADC verilerini kaydedin ** mevcut değil. Veri zaten var ** i - dosyaları başlat ** mevcut değil. Veri zaten var l - dosyaları listele

VERİLER ZATEN GÜNLÜK OLDU, kontrol edin ?

LED ekran

D3'e bağlanan LED (GND bağlantısını sağlayan D2 ile) herhangi bir örnek kaçırılırsa sabit yanar ve bir hata varsa yanıp söner. Çizim, hatalardan sonra devam etmeye çalışır, ancak bunu başarılı bir şekilde yapamayabilir.

3. Adım: Gerçek Verileri Günlüğe Kaydetme

Gerçek verileri uzun süreler boyunca kaydederken, bir iletişim modülünü D0/D1 pinlerine bağlamak ve günlük kaydını uzaktan kontrol etmek ve izlemek daha uygundur. Burada, varsayılan ayarları olan 115200 baud, donanım anlaşması yok (RTC, CTS), pin kodu 1234 olan bir Bluetooth Mate Silver modülü kullanıldı.

Not: Mate Silver modülüne güç verildiğinde, 60 saniye boyunca hızlı kırmızı led yanıp sönen bir yapılandırma moduna geçer. Bu süre zarfında, modülü yapılandırmak için seri bağlantı üzerinden $$$ gönderebilirsiniz, ancak modülü bağlayamazsınız. Kırmızı led yavaş yanıp sönmeye başladığında bluetooth modülü bağlantıları kabul edecektir.

Teensy32AnalogLogger.ino'daki COM_SERIAL tanımını donanım seri (D0/D1) bağlantısına, Serial1 olarak değiştirin

#define COM_SERIAL Seri1

Bilgisayarla eşleştirildikten sonra, bilgisayarda yeni bir COM bağlantı noktası oluşturuldu ve CoolTerm, günlüğü bağlamak ve kontrol etmek ve izlemek için kullanılabilir. WiFi veya BLE gibi diğer seri olarak bağlı iletişim modülleri de kullanılabilir, ayrıntılar için Android/pfodApp tarafından kontrol edilen Arduino UNO/Mega Starter'a bakın.

Ayrıca, Bluetooth Terminal uygulaması gibi bir bluetooth terminal uygulamasını kullanarak veya TCP Telnet Terminal Pro gibi WiFi ve TCP terminal uygulamasını veya bir Uart to BLE mdoule ve aşağıdaki gibi bir BLE terminal uygulamasını kullanarak Android cep telefonunuzdan günlüğe kaydetmeyi kontrol edebilir ve izleyebilirsiniz. nRF UART V2

Adım 4: ADC Girişlerinin Seçimi ile İlgili Kısıtlamalar

ADC Girişlerinin Seçimine İlişkin Kısıtlamalar
ADC Girişlerinin Seçimine İlişkin Kısıtlamalar

Teensy 3.2, mikro işlemcisinde ADC_0 ve ADC_1 olmak üzere iki ayrı ADC donanım modülüne sahiptir, böylece aynı anda iki girişi örnekleyebilir. Ayrıca, birden fazla ADC örneği alan ve sonucu döndürmeden önce bunların ortalamasını alan yerleşik bir donanım ortalamasına sahiptir.

ADC_0, ADC_1'e hangi girişlerin bağlanabileceğine dair kısıtlamalar vardır. Teensy32AnalogLogger.zip dosyasında bulunan Teensy3_1_AnalogCard-p.webp

Özetle:-Tek Uçlu Okumalar için, yani GND'ye referans verilen +Voltlar ADC_0, A0'dan A9'a, A10, A11, A12, A14'ten okuyabilir ADC_1, A2, A3, A10, A13, A15'den A20'ye kadar okuyabilir. okuyamıyor 0 döndürür (her zaman)

Bu proje, her birine ADC_0 veya ADC_1 tarafından erişilebilen A2, A3 kullanır.

Adım 5:.bin Dosyalarını.csv Dosyalarına Dönüştürme

Teensy32AnalogLogger.ino, örnekleri logxx.bin dosyalarına, yani log00.bin'den log99.bin'e ikili dosya olarak kaydeder. Teensy32AnalogLogger.ino ayrıca çalıştırmayla ilgili meta verilerin log.met dosyasını da kaydeder.

Daha sonraki işlemler için.bin dosyalarını.csv'ye dönüştürmek için SDtoCSV.jar'ı (kaynak kodu SDtoCSV_src.zip) kullanabilirsiniz. Dosyaları SD karttan en az 70Gig boş alana sahip bilgisayarınızın sabit diskine kopyalayın ve SDtoCSV.jar dosyasını aynı dizine kopyalayın. Bu dizinde bir komut penceresi açın ve çalıştırın

java -jar SDtoCSV.jar günlüğü

Bilgisayarınızda Java kurulumu yoksa www.java.com adresinden yükleyin.

SDtoCSV, log.met dosyasını ve ardından dizindeki mevcut logxx.bin dosyalarının her birini işleyecek ve her.bin için bir.csv dosyası çıkaracaktır..csv dosyasında örnek sıra numarası ve ardından iki okuma bulunur.

30303 kez/sn örneklenmiş 2 adc okuma için örnek bir konsol çıktısı burada gösterilmektedir, output.txt. Kaçırılan örneklerin nasıl rapor edildiğini gösterir. (Son taslaktaki arabellek sayısının iki katına çıkarılması, bu kaçırılan örnekleri düzeltti)

SD_Logging to CSV dönüşümü. İlerleme ve hata mesajları için SDtoCSV.log'u kontrol edin. log00 İşleniyor 256000 blok işleniyor log01 İşleniyor 256000 blok… Günlük işleniyor25 İşlenmiş 256000 blok Günlük işleniyor26 İşlenmiş 256000 blok Günlük işleniyor27 İşlenmiş 256000 blok Kaçırılan Örnekler: 2715 Günlük işleniyor28 İşlenmiş 256000 blok… Log29 işleniyor İşlenmiş 256000 blok… Günlük işleniyor47 İşlenmiş 256000 blok Günlük işleniyor48 İşlenmiş 35935 blok --- İşlem Tamamlandı

Daha dolu bir günlük dosyası, SDtoCSV.log, her SDtoCSV çalışması tarafından eklenir. Meta veri çıktısını ve tüm hata mesajlarını içerir. Burada sayı:254, o blokta depolanan verilerin sayısıdır, yani blok başına 127 örnek x 2 adc okuma. MissSamples, kaçırılan okuma çiftlerinin sayısıdır, yani.csv çıktısındaki satırlardır.

=== SD_Logging to CSV dönüşümü için Günlük Dosyası 13 Tem 13:19:51 AEST 2019 Konsoldaki ilerleme mesajlarını görmek için Java -jar SDtoCSV.jar kullanın Temel Dosya Adı 'log' Meta Veri Sürümü: 0 (Little Endian) sampleInterval uS: 33 adcBits:10 adcAvgs:4 pinCount:2 Pins: 16, 17 samplePerBlock:127 noBufferBlocks:28 süre mS:51649820 istenen runTime mS:106216704 maxBuffersUsed:32 Uyarı: Mevcut arabellek sayısını aşıyor (28). Bazı örnekler eksik olabilir. maxLatency uS:221476 Uyarı: Arabellek blokları (117348uS) tarafından sağlanan süreyi aşıyor. Bazı örnekler eksik olacaktır. maxFileOpenTime uS:20998 cevapsızZamanlayıcılar:0 cevapsızSamplesToplam:2715 toplamBlocksYazılı:12323935 totalSamplesYazılı:1565139665 log00.bin işleniyor İşleniyor 256000 blok log01.bin İşleniyor 256000 blok… log26.bin işleniyor İşlenmiş 256000 blok log27.bin işleniyor !!! Blok:57696 sayı:254 cevapsızÖrnekler:2339 !!! Blok:57697 sayı:254 cevapsızÖrnekler:376 İşlenmiş 256000 blok --- Toplam Kaçırılan Örnekler: 2715

log28.bin işleniyor İşlenmiş 256000 blok

… log47.bin işleniyor İşlenmiş 256000 blok log48.bin işleniyor İşlenmiş 35935 blok --- İşleme Tamamlandı

log00.csv çıktı dosyasının bir örneği

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

Örnek sayacı dosyadan dosyaya artar, böylece zaman damgası olarak kullanılabilir. Eksik numuneler varsa, bir sonraki satırın çıktısı alınmadan önce numune sayacı kaçırılan sayı kadar artırılır, böylece sayaç/zaman damgası kaydedilen numuneler için doğru kalır.

Adım 6: Kod ve Uzantılarla İlgili Yorumlar

Teensy32AnalogLogger, Bill Greiman'ın SdFat Arduino kitaplığındaki AnalogBinLogger örneğinin büyük ölçüde değiştirilmiş bir versiyonudur. Burada kütüphane, Teensy 3.2'de çalışacak şekilde yeniden yazılmıştır.

Teensy32AnalogLogger, örnek aralığını ayarlamak için timer0 kullanır. timer0 için kesme işleyicisi iki ADC dönüşümünü başlatır. Her ikisi de bitene kadar ikinci ADC modülü için bir kesme işleyicisi sürekli olarak çağrılır, genellikle ilk ADC modülü başlatılan ADC_0 ikinciden önce biter, bu nedenle kesme işleyicisi yalnızca bir kez çağrılır. ADC_1 kesme işleyicisi, örnekleri bir veri arabelleğine kaydeder.

Ana döngüde(), storeSampleBuffer() tüm arabellekleri SD karta kaydeder ve arabellekleri boş arabellek kuyruğuna geri dönüştürür. Teensy 3.2'de bulunan büyük miktarda RAM, çok sayıda arabellek tahsis edilebileceği anlamına gelir ve bu nedenle storeSampleBuffer() öğesinin sık sık çağrılması gerekmez. Bu, ana döngünün () işlem komutları ve çıktı gönderme gibi diğer işleri yapması için zaman bırakır.

Uzantılar

Bu proje yüksek hızlı bir veri kaydedici olarak işlevsel olsa da, eksiksiz bir giyilebilirlik için yine de paketlenmesi ve bir pil sistemi ve EKG sensörlerinin sağlanması gerekiyor. Bunun yanı sıra, dikkate alınması gereken bazı uzantılar vardır.

  1. Dalga formunun anlık görüntülerini göstermek için pfodApp'ın çizim işlevini kullanarak pfodApp aracılığıyla örneklenmiş dalga formunun gerçek zamanlı kontrolünü ve izlenmesini ekleyin
  2. Daha uzun örnekleme çalışmaları için dosya numaralarını 99'dan fazla uzatın
  3. 2'den fazla girişi örnekleyin. Teensy 3.2'de çift ADC modülleri bulunduğundan, örnekleme hızını en üst düzeye çıkarmak için çiftler halinde ekstra girişler eklemek için kodu değiştirebilirsiniz.
  4. Pil şarjını izlemek için pil izleme ekleyin. Teensy 3.2, bluetooth ve SD modülü dahil, ancak sensör modülü hariç, 24 saatte yaklaşık 1100mAhr kullanır
  5. Günlüğe kaydetmeyi kesmeden pil değişikliklerine izin vermek için çift pil besleme devresi ekleyin.

Önerilen: