휴대용 모니터 STONE 직렬 터치 스크린 및 ESP32

사용 STONE 직렬 터치 스크린 휴대용 모니터, 하드웨어 부서는 NXP의 32비트 마이크로프로세서 칩을 전체 기계 모니터링, ECG 분석, 제어 센터로 사용하기로 결정했으며 ECG 생체 전기 획득 증폭, 오른쪽 다리 드라이브, 알고리즘을 수행하기 위해 MIT ECG 데이터베이스 가져오기 또한 고속 전송 속도 통신을 통해 SpO2 센서 전기 신호, 혈압, 호흡 전기 신호 증폭 및 필터링 처리를 모니터링하고, STONE 일련의 터치 화면 파형 및 매개변수의 변화를 실시간으로 표시하고 기준값과 비교하여 판단하고 인체 매개변수의 변화를 모니터링 및 경보합니다. 범위 편차가 있는 경우 자동으로 음성 안내를 발행합니다.

의 새로운 버전 STONE 직렬 터치 스크린은 곡선 묘사 및 디스플레이를 완벽하게 지원하며 통신 프로토콜은 간단하고 기억하기 쉽고 마이크로 컨트롤러 엔지니어는 설명서를 읽은 후 사용할 수 있으며 명령 세트에 드라이버의 많은 예가 있으며 이름과 매개 변수를 수정하기 위해 직접 복사할 수 있습니다. 사용된다. 직렬 연결은 간단합니다. 직접 직렬 연결이든 USB 대 직렬 연결이든 공식 어댑터 보드를 사용할 수 있어 매우 편리하고 사용하기 쉽습니다. 모니터는 동시에 여러 그룹의 중요한 매개변수를 표시합니다. 특히 동적으로 그려지고 동시에 표시되는 3개의 곡선은 매우 매끄럽게 표시되며 더 많은 곡선 그래픽 그룹을 동시에 그릴 수 있어야 합니다. 필요에 따라 시도할 수 있습니다. . 물론 커맨드 셋 커브 기능은 동시에 여러 데이터를 푸시한 예가 있지만, 현재 하드웨어의 실제 사용은 응답하지 않는 점, 최대한 빨리 공식적으로 최적화 되었으면 하는 바람입니다. 펌웨어를 업데이트하여 해결할 수도 있습니다. 이 새 버전의 그리기 곡선 기능을 위해 먼저 어떻게 조정하지 않을 수 있는지를 시도했고 마침내 직렬 화면에 새 펌웨어가 있다는 것을 알게 되었고 새 펌웨어를 닦고 "산의 진짜 얼굴"을 확인했습니다. 펌웨어를 브러싱한 시리얼 화면에서 부드러운 ECG 곡선이 나오는 것을 보니 기분이 흐뭇하군요....

이 프로젝트의 설계 그림은 그림 (1)에 나와 있습니다. 인터페이스는 다음을 기반으로 합니다. STWI101WT-01 1024*600 해상도의 직렬 화면에서 왼쪽은 파형 곡선의 2/3를 나타내고 오른쪽 1/3은 값을 나타냅니다.

이 기사에서는 곡선 차트 보기의 생성 및 묘사에 중점을 둘 것입니다. 그것은 완전히 프로젝트 데모의 생산 프로세스에 따라 분류되지 않고 지저분하게 느껴질 수 있지만 실제 개발의 실제 프로세스입니다.

먼저 ECG의 곡선 묘사를 수정하기로 결정했습니다.

 

그림 (1) 프로젝트 설계 예상 인터페이스
그림 (1) 프로젝트 설계 예상 인터페이스

이 데모는 75ms 심장 박동에 해당하는 800bpm 심박수를 시뮬레이션합니다. 즉, 40개의 동일한 부분으로 분할된 전체 차트 보기 제어 X축, 화면당 20초 파형, 화면 새로 고침을 기반으로 100ms마다 4포인트, 25포인트마다 4주기 속도 0Hz, 매우 매끄럽게 보입니다. 이 차트 보기 컨트롤의 선 계열 요소는 Smooth = false(ECG 파형이 예리함)로 설정되고 아래쪽 엔벨로프가 표시되지 않으며 포인트 마커가 표시되지 않습니다. 지역. 여기서 그림 (140)를 참조하십시오. Y축의 경우 min = 130, max = 2이고 프로그램에서 주어진 최대값은 7이며 범위는 비교적 가득 차 있습니다. 차트 보기1 및 해당 요소 X axis1, Yaxis2, bar series1 및 line series1에 대해 설정된 기타 매개변수는 그림 (0,0,0,0) – 그림 (XNUMX)을 참조하십시오. 기본 색상(검정)을 나타내는 차트 보기 컨트롤의 b색으로 투명 rgba(XNUMX)를 선택하고 보기와 같은 다른 컨트롤은 동일한 특성을 갖습니다.

그림 (2) 차트 보기1의 속성 설정
그림 (2) 차트 보기1의 속성 설정
그림 (3) 차트 보기1의 X축1 속성 설정
그림 (3) 차트 보기1의 X축1 속성 설정
그림 (4) 차트 보기1의 Y축1 속성 설정
그림 (4) 차트 보기1의 Y축1 속성 설정
그림 (5) 차트 보기1의 막대 시리즈1 속성 설정
그림 (5) 차트 보기1의 막대 시리즈1 속성 설정
그림 (6) Chart view1의 line series111 속성 설정
그림 (6) Chart view1의 line series111 속성 설정
그림 (7) 차트 보기1의 line series12 속성 설정
그림 (7) 차트 보기1의 line series12 속성 설정

위의 설정에 따라 ECG 파형(75bpm)을 시뮬레이션하기 위한 프로그래밍 코드는 다음과 같습니다.

먼저 다음과 같이 두 개의 변수를 정의합니다.

  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;
    }
  }

그런 다음 스캔 동기화에 중점을 두고 CO2 곡선을 처리하려고 합니다.

 

이 프로젝트의 3가지 곡선, 차트 보기2는 SpO2 혈액 산소 센서용이고 차트 보기3은 CO2 호흡용입니다.

차트 보기2, 차트 보기3 X축은 최소 = 0, 최대 = 100으로 설정되고 ECG 차트 보기1은 동일하게 설정되어 동기화를 유지하는 곡선 스위프, 차트 보기2 Y축2 최대 = 100이므로 프로그램 준비 Y축 값이 주어집니다. 최대 95까지 알고리즘은 다음 프로그램 코드에 표시됩니다.

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");
} }

그림 (8)은 상단의 ECG 파형과 하단의 CO2 파형을 보여줍니다(기호 원형 반경 = 4)
그림 (8)은 상단의 ECG 파형과 하단의 CO2 파형을 보여줍니다(기호 원형 반경 = 4)
그림 (9)은 상단의 ECG 파형과 하단의 CO2 파형을 보여줍니다(기호 원형 반경 = 30)
그림 (9)은 상단의 ECG 파형과 하단의 CO2 파형을 보여줍니다(기호 원형 반경 = 30)

그림 (2)의 다음 CO8 파형은 라인 series4에 대해 속성 기호 round radius = 3일 때 위 프로그램의 효과입니다. 곡선 전환이 더 둥글기를 기대하면서 기호 라운드 반경 = 30을 수정하려고 시도하지만 테스트 결과는 그림(8)과 다르지 않습니다(그림(9) 참조). 포인트가 더 조밀할 때 반올림 효과 분명하지 않습니다. 이것은 포인트 좌표를 변경해야만 달성할 수 있습니다.

축을 구분하는 좌표가 있는 그림 (10)
축을 구분하는 좌표가 있는 그림 (10)

그림 (3)을 이용하여 그림 (10)에서 X축의 속성을 살펴보자. 그림(3)에서 분할선에 대해 show = true이면 긴 세로 막대(구분 막대)가 표시됩니다. 선에 대해 show = true인 경우 X축의 수평선이 표시됩니다(예: 상단 차트 보기의 하단에 있는 수평선). 틱에 대해 show = true인 경우 X축의 수평선 아래에 눈금의 가는 선이 표시됩니다. 레이블에 대해 show = true인 경우 X축의 수평선 아래 숫자(데이터에 채워진 값)가 표시됩니다. = true인 경우 X축의 수평선 아래에 숫자(데이터에 채워진 값)가 표시됩니다. 그게 다야.

이제 SpO2 곡선까지 내려갔고 AD 변환을 사용하기로 결정했습니다.

다음을 사용한 곡선 시뮬레이션 ESP32 ADC는 12비트, 풀 스케일 4096입니다. 차트 보기2 Y축 최대 = 255, ADC 리드인 값을 20으로 나눈 값은 곡선 표시를 충족할 수 있습니다. 전체 규모 SPO2 디스플레이는 100%이므로 ADC 판독 값을 20으로 나눈 다음 2.55로 나눈 값을 label2에 표시할 수 있습니다. 프로그램은 정수 연산이기 때문에 알고리즘이 수정됩니다. 실제 테스트를 참조하십시오. 좋아 프로그램 코드. Arduino의 analogRead(32) 함수를 사용하여 ESP32의 GPIO4(또한 ADC-CH32)의 AD 변환 값을 직접 읽습니다. 테스트는 전위차계로 수행할 수 있지만 ADC-CH4 핀을 GND, +3.3V, +5V로 연결하거나 오버행을 연결하여 간섭 파형을 확인하고 비디오 효과를 참조하십시오(접지된 경우 낮게 표시, +3.3V, +5V는 동일한 높은 전체 진폭, 오버행은 스퓨리어스 곡선), 오른쪽 레이블 2는 ADC 전압 변화를 적시에 표시하도록 제어합니다. 코드 및 알고리즘 코드는 다음과 같습니다.

//--------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");      
  }

그림 (11) 부분적으로 완성된 실제 완성된 3개의 곡선군
그림 (11) 부분적으로 완성된 실제 완성된 3개의 곡선군

실제 그림의 부분 샷은 그림 (11)을 참조하고 컴퓨터의 디자인 인터페이스는 그림 (12)를 참조하십시오. 그림(3)과 같이 차트 보기2의 X축2 분할선의 show = false인 경우 그림(2)의 중앙에 있는 노란색 SPO12 영역의 구분선이 표시를 끕니다(실제 그림); 비디오 디스플레이의 부드러운 파형은 실시간 오실로스코프로 완벽하게 수행될 수 있습니다.

그림 (12) 컴퓨터로 완성한 3세트의 곡선
그림 (12) 컴퓨터로 완성한 3세트의 곡선

기준점

  • 의 구조 STONE 디자이너 플랫폼 차트 보기 컨트롤은 그림(13)에 나와 있습니다. 각 속성 및 매개변수에 대한 설명을 포함하여 공식 사용자 매뉴얼 8.1에 자세한 설명이 있습니다. 명령어 세트 4.24는 데이터 푸시 방법을 제공합니다(그림 14 참조). 여기에 프로그램에서 사용된 명령어의 예가 있습니다.
그림 (13) Curve Control의 Chart View 구조
그림 (13) Curve Control의 Chart View 구조
그림 (14) 곡선 컨트롤의 차트 보기 사용 지침
그림 (14) 곡선 컨트롤의 차트 보기 사용 지침

2. 아날로그 AD 변환을 위한 Arduino의 analogRead() 읽기 기능. 아두이노 버전 1.8.13 메뉴 “Help”—“Reference” —- “learning —— “Analog I/O”에서 analogRead() 함수에 대한 설명은 다음과 같이 볼 수 있습니다.

analogRead ()

설명:

Arduino 보드에는 6채널(Mini 및 Nano의 경우 8개, Mega의 경우 16개), 10비트 아날로그-디지털 변환기가 포함되어 있습니다. 이것은 0에서 5볼트 사이의 입력 전압을 0에서 1023 사이의 정수 값으로 매핑한다는 것을 의미합니다. 이것은 5볼트/1024단위 또는 단위당 .0049볼트(4.9mV) 판독값 사이의 분해능을 산출합니다. 아날로그 참조 ().

아날로그 입력을 읽는 데 약 100마이크로초(0.0001초)가 걸리므로 최대 읽기 속도는 초당 약 10,000회입니다.

통사론

아날로그 읽기(핀)

매개 변수

핀: 읽을 아날로그 입력 핀의 수(대부분의 보드에서는 0~5, Mini 및 Nano에서는 0~7, Mega에서는 0~15)

반품

정수(0~1023)

주의 사항

아날로그 입력 핀이 아무 것에 연결되어 있지 않으면 analogRead()에 의해 반환된 값은 여러 요인(예: 다른 아날로그 입력의 값, 손이 보드에 얼마나 가까이 있는지 등)에 따라 변동합니다.

단, 여기에서 ESP4의 ADC-CH32는 12비트이고 반환값은 0~4096임을 유의하시기 바랍니다. 자세한 내용은 원문 및 ESP32 매뉴얼의 관련 링크를 참조하시기 바랍니다.

stone_tft_lcd_module_touch_screen_display_hmi_display (23)

stone_tft_lcd_module_touch_screen_display_hmi_display (23)

위쪽으로 스크롤