Taşınabilir Monitör STONE seri Dokunmatik Ekran ve ESP32

kullanma STONE seri dokunmatik ekranlı taşınabilir monitör, donanım departmanı, tüm makine izleme, EKG analizi, kontrol merkezi, EKG biyoelektrik toplama amplifikasyonu, sağ bacak sürücüsü, bir algoritma yapmak için MIT EKG veritabanını içe aktarma olarak NXP'nin 32 bit mikroişlemci çipini kullanmaya karar verdi, ancak ayrıca yüksek hızlı baud hızı iletişimi, sürücü aracılığıyla SpO2 sensörü elektrik sinyalini, kan basıncını, solunum elektrik sinyali amplifikasyonunu ve filtreleme işlemini izler. STONE seri dokunma ekran dalga biçimini ve parametre değişikliklerini gerçek zamanlı olarak görüntülemek ve bir karar vermek için bir referans değerle karşılaştırmak ve insan vücudu parametrelerindeki değişiklikleri izlemek ve alarm vermek için. Menzil sapması varsa, otomatik olarak sesli uyarılar verir.

Yeni sürümü STONE Seri dokunmatik ekran, eğri tasvirini ve görüntülemeyi mükemmel bir şekilde destekler, iletişim protokolü basit ve hatırlanması kolaydır, mikrodenetleyici mühendisleri kılavuzu okuduktan sonra kullanabilir, komut setinde birçok sürücü örneği vardır, adı ve parametreleri değiştirmek için doğrudan kopyalanabilir kullanılabilir. Seri bağlantı basittir, resmi adaptör kartını kullanabilirsiniz, ister doğrudan seri bağlantı ister USB'den seriye bağlantı olsun, çok kullanışlı ve kullanımı kolaydır. Monitör, aynı anda birden fazla hayati parametre grubunu, özellikle de aynı anda çok düzgün bir şekilde dinamik olarak çizilen ve görüntülenen 3 eğriyi görüntüler ve aynı anda daha fazla eğri grafiği grubu çizebilmelidir, gerektiği gibi deneyebilirsiniz . Tabii ki, komut seti eğrisi işlevi, aynı anda gönderilen birden fazla veri örneğine sahiptir, ancak mevcut donanımın gerçek kullanımı yanıt vermiyor, umarım resmi en kısa sürede optimize edilebilir. Firmware güncellenerek de çözülebilir. Eğri çizme fonksiyonunun bu yeni versiyonu için önce nasıl akort edilemeyeceğini denedim ve sonunda seri ekranın yeni bir bellenime sahip olduğunu öğrendim, “dağın gerçek yüzünü” görmek için yeni bellenimi fırçaladım. Firmware fırçalanmış olarak seri ekrandan çıkan pürüzsüz EKG eğrisini görünce, ruh hali mutlu, ha ……

Bu projenin tasarım resmi Şekil (1)'de gösterilmektedir. Arayüz, bir STWI101WT-01 1024*600 çözünürlüğe sahip seri ekran, sol taraf dalga şekli eğrisinin 2/3'ünü ve sağ 1/3 değerini gösterir.

Bu makale, eğri grafiği görünümünün oluşturulmasına ve tasvirine odaklanacaktır. Tamamen proje demosunun üretim sürecine göredir, sınıflandırma yoktur, belki kendinizi dağınık hissedersiniz, ancak gerçek gelişimin gerçek sürecidir.

İlk olarak, EKG'nin eğri tasvirini düzeltmeye karar verdik.

 

Şekil (1) Proje Tasarımı Beklenen Arayüz
Şekil (1) Proje Tasarımı Beklenen Arayüz

Bu demo, 75ms'lik bir kalp atışına eşdeğer olan 800bpm'lik bir kalp atış hızını simüle eder, yani her 40ms'de bir nokta, her 20 noktada bir döngü, tüm grafik görünümü kontrolü X ekseninin 100 eşit parçaya bölünmesine, ekran başına 4s dalga biçimine, ekran yenilemeye dayalıdır. oran 25Hz, çok düzgün görünüyor. Bu grafik görünümü kontrolünün çizgi serisi öğesi düzgün = yanlış (EKG dalga biçimi keskindir), alt zarf görüntülenmez ve nokta işaretçisi görüntülenmez. alan. Burada Y ekseni için Şekil (4)'e bakınız, min = 0, max = 140, programda verilen maksimum değer 130'dur ve aralık nispeten doludur. Grafik görünümü2 ve öğeleri X ekseni7, Y ekseni1, çubuk serisi1 ve çizgi serisi2 için ayarlanan diğer parametreler için Şekil (1) – Şekil (1)'ye bakın. Temel rengi (siyah) ortaya çıkaran chart view kontrolünün bg rengi için şeffaf rgba (0,0,0,0) seçiyoruz ve view gibi diğer kontroller de aynı özelliklere sahip.

Şekil (2) Grafik görünümünün özellik ayarları1
Şekil (2) Grafik görünümünün özellik ayarları1
Şekil (3) Grafik görünümü1'in X ekseni1 özellik ayarı
Şekil (3) Grafik görünümü1'in X ekseni1 özellik ayarı
Şekil (4) Çizelge görünümü1'in Y ekseni1 özellik ayarı
Şekil (4) Çizelge görünümü1'in Y ekseni1 özellik ayarı
Şekil (5) çubuk serisi1 grafik görünümünün1 özellik ayarı
Şekil (5) çubuk serisi1 grafik görünümünün1 özellik ayarı
Şekil (6) Grafik görünümünün satır serisi1 özellik ayarı111
Şekil (6) Grafik görünümünün satır serisi1 özellik ayarı111
Şekil (7) grafik görünümünün çizgi serisi1 özellik ayarı12
Şekil (7) grafik görünümünün çizgi serisi1 özellik ayarı12

Yukarıdaki ayarlara göre EKG dalga biçimini (75bpm) simüle etmek için programlama kodu aşağıdaki gibidir.

İlk olarak, aşağıdaki gibi iki değişken tanımlayın.

  Int num19_1 = 0;
  Int num19_2 = 0;
Then generally in the main loop main.c, the ECG curve is depicted by the following code.
  delay(10);   
  
  num19_1 += 1;
  if(num19_1 >= 4){ // Draw one point every 40ms.
    num19_1 = 0;
    num19_2 += 1;
    if(num19_2 == 3){
      Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\" :10}>ET");
    }else if(num19_2 == 4){
      Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\" :130}>ET");
    }else{
      Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\" :40}>ET");
    }
    if(num19_2 >= 20){  //every 20 data is a cycle
      num19_2 = 0;
    }
  }

Ardından, tarama senkronizasyonuna odaklanarak CO2 eğrisiyle ilgilenmek istersiniz.

 

Bu projenin 3 eğrisi, çizelge görünümü2 SpO2 kan oksijen sensörü içindir ve çizelge görünümü3 CO2 solunumu içindir.

Çizelge görünümü2, çizelge görünümü3 X ekseni min = 0, maks = 100 ve EKG çizelge görünümü1 aynı, eğri taramayı senkronize tutmak için, çizelge görünümü2 Y ekseni2 maks = 100 olarak ayarlanır, böylece programın Y ekseni değerinin hazırlanması verilir maksimum 95'e kadar, algoritma aşağıdaki program kodunda gösterilir.

First, define 3 variables as follows.
Int num19_3 = 0;
Int num19_4 = 0;
Int num19_5 = 0;
The CO2 curve is then generally depicted in the main loop, main.c, by the following code.
num19_3 += 1;
if(num19_3 >= 4){ //one point every 40ms
num19_3 = 0;
num19_4 += 1;
if(num19_4 <= 10){
num19_5 = num19_4*9; //the first 10 points increase linearly
Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\":" );
Serial.print(num19_5);
Serial.println("}>ET");
}else if(num19_4 <= 40){ // the last 30 points decrease linearly
num19_5 = 95 - (num19_4 - 10)*3;
Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\":" );
Serial.print(num19_5);
Serial.println("}>ET");
}else{
num19_4 = 0;
Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\" :5}>ET");
} }

Şekil (8), üstte EKG dalga biçimini ve altta CO2 dalga biçimini gösterir (sembol yuvarlak yarıçap = 4)
Şekil (8), üstte EKG dalga biçimini ve altta CO2 dalga biçimini gösterir (sembol yuvarlak yarıçap = 4)
Şekil (9), üstte EKG dalga biçimini ve altta CO2 dalga biçimini gösterir (sembol yuvarlak yarıçap = 30)
Şekil (9), üstte EKG dalga biçimini ve altta CO2 dalga biçimini gösterir (sembol yuvarlak yarıçap = 30)

Şekil (2)'deki aşağıdaki CO8 dalga biçimi, hat serisi4 için öznitelik sembolü yuvarlak yarıçap = 3 olduğunda yukarıdaki programın etkisidir. Eğri geçişinin daha yuvarlak olmasını umarak yuvarlak yarıçap = 30 sembolünü değiştirmeye çalışıyoruz, ancak test sonucu Şekil (8)'den farklı değil, bkz. Şekil (9) noktalar daha yoğun olduğunda yuvarlama etkisinin bariz değildir. Bu, yalnızca nokta koordinatlarını değiştirerek elde edilebilir.

Eksenleri ayıran koordinatlarla Şekil (10)
Eksenleri ayıran koordinatlarla Şekil (10)

Şekil (3) kullanarak Şekil (10)'teki X ekseninin özelliklerine bir göz atalım. Şekil (3)'te, ayırma çizgisi için show = true olduğunda, uzun dikey çubuk (ayırıcı çubuk) görüntülenecektir; çizgi için show = true olduğunda, X ekseninin yatay çizgisi görüntülenecektir (üst grafik görünümünün altındaki yatay çizgi gibi); kene için show = true olduğunda, X ekseninin yatay çizgisinin altındaki ölçeğin ince çizgisi görüntülenecektir; etiket için show = true olduğunda, X ekseninin yatay çizgisinin altındaki sayı (veri ile doldurulmuş değer) görüntülenecektir. = true, X ekseninin yatay çizgisinin altındaki sayıyı gösterecektir (verilerde doldurulan değer). Bu kadar.

Şimdi iş SpO2 eğrisine indi ve AD dönüşümünü kullanmaya karar verdi.

kullanarak eğri simülasyonu ESP32 ADC, 12 bit, tam ölçekli 4096. grafik görünümü2 Y ekseni maks = 255, ADC okuma değeri 20'ye bölünür, eğri görüntüsünü karşılayabilir. Tam ölçekli SPO2 ekranı %100'dür, bu nedenle 20'ye bölünen ve daha sonra 2.55'e bölünen ADC değeri, label2'de görüntülenebilir, program bir tamsayı işlemi olduğundan, algoritma düzeltildi, lütfen gerçek teste bakın tamam program kodu ESP32'nin GPIO32'nin (ayrıca ADC-CH4) AD dönüştürme değerini doğrudan okumak için Arduino'daki analogRead(32) işlevini kullanın. Test bir potansiyometre ile yapılabilir, ancak aynı zamanda parazit dalga biçimini görmek için ADC-CH4 pinini GND'ye, +3.3V'a, +5V'a veya çıkıntıya basitçe bağlayın, bkz. video efekti (topraklandığında düşük olarak gösterilir, +3.3V, +5V aynı yüksek tam genliktir, çıkıntı sahte bir eğridir), doğru etiket2 kontrolü ADC voltaj değişikliklerini zamanında gösterir. Kod ve algoritma kodu aşağıdaki gibidir.

//--------ADC-------
int adcPin = 32; // GPIO32, also ADC-CH4
int adcValue = 0;
int num19_6 = 0;
 delay(10);   
 adcValue = analogRead(adcPin); // Read in the value of the AD conversion
 adcValue = adcValue/20;
  //-----SPO2 curve plotting ------
  num19_6 += 1;
  if(num19_6 >= 4){ // one point every 40ms
    num19_6 = 0;
        Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series2\",\"mode\":\"push\",\"value\":" );
    Serial.print(adcValue);
    Serial.println("}>ET");      
    adcValue = (adcValue*10)/21;
        Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"label\",\"widget\":\"label2\",\"value\":");
    Serial.print(adcValue);
    Serial.println("}>ET");      
  }

Şekil (11) Gerçekte tamamlanmış 3 eğri grubu kısmen
Şekil (11) Gerçekte tamamlanmış 3 eğri grubu kısmen

Gerçek resmin kısmi görüntüsü için Şekil (11)'e ve bilgisayardaki tasarım arayüzü için Şekil (12)'ye bakın. Şekil (3)'te olduğu gibi, grafik görünümünün2 X ekseni2'nin bölünmüş çizgisinin show = false olduğunda, Şekil (2)'nin ortasındaki sarı SPO12 alanının ayırıcı çubuğu ekranı kapatacaktır (gerçekteki gibi). resim); video görüntüsünün pürüzsüz dalga biçimi tamamen gerçek zamanlı bir osiloskop olarak yapılabilir.

Şekil (12) Bilgisayar tarafından tamamlanan 3 eğri seti
Şekil (12) Bilgisayar tarafından tamamlanan 3 eğri seti

Referans noktaları

  • Yapısının yapısı STONE tasarımcı platformu grafik görünümü kontrolü Şekil (13)'te gösterilmektedir. Resmi Kullanıcı Kılavuzu 8.1'de her bir özelliğin ve parametrenin açıklaması da dahil olmak üzere ayrıntılı bir açıklama bulunmaktadır; komut seti 4.24, veri gönderme yöntemini verir, bkz. Şekil (14) ve burada programda kullanılan komutların örnekleri vardır.
Şekil (13) Eğri kontrolünün grafik görünümünün yapısı
Şekil (13) Eğri kontrolünün grafik görünümünün yapısı
Şekil (14) Eğri kontrolünün grafik görünümünü kullanma talimatları
Şekil (14) Eğri kontrolünün grafik görünümünü kullanma talimatları

2. Analog AD dönüştürme için Arduino'nun analogRead() okuma işlevi. Arduino sürüm 1.8.13 menüsünde “Help”—“Reference” —- “learning —– “Analog I/O”, analogRead() fonksiyonunun açıklamasını aşağıdaki gibi görebilirsiniz.

analogRead ()

Açıklama

Arduino kartı 6 kanallı (Mini ve Nano'da 8 kanal, Mega'da 16 kanal), 10 bit analogdan dijitale dönüştürücü içerir. Bu, 0 ila 5 volt arasındaki giriş voltajlarını 0 ila 1023 arasındaki tamsayı değerleriyle eşleştireceği anlamına gelir. Bu, 5 volt / 1024 birim veya birim başına .0049 volt (4.9 mV) okumalar arasında bir çözünürlük verir. analogReferans ().

Bir analog girişi okumak yaklaşık 100 mikrosaniye (0.0001 s) sürer, bu nedenle maksimum okuma hızı saniyede yaklaşık 10,000 defadır.

Sözdizimi

analogOkuma(pin)

parametreler

pin: okunacak analog giriş pinlerinin sayısı (çoğu kartta 0 ila 5, Mini ve Nano'da 0 ila 7, Mega'da 0 ila 15)

Geri dönüşler

int (0 - 1023)

not

Analog giriş pini herhangi bir şeye bağlı değilse, analogRead() tarafından döndürülen değer bir dizi faktöre bağlı olarak dalgalanacaktır (örn. diğer analog girişlerin değerleri, elinizin tahtaya ne kadar yakın olduğu vb.).

Ancak burada ESP4'nin ADC-CH32'ünün 12 bit olduğunu ve dönüş değerinin 0 ila 4096 arasında olacağını lütfen unutmayın. Daha fazla ayrıntı için lütfen orijinal makaledeki ve ESP32 kılavuzundaki ilgili bağlantıya bakın.

stone_tft_lcd_module_touch_screen_display_hmi_display (23)

stone_tft_lcd_module_touch_screen_display_hmi_display (23)

En gidin