Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Exibição de ECG em Tempo Real no OLED com Arduino UNO

Componentes e Materiais

Arduino UNO1
Dispositivo uECG1
Módulo nRF24 (genérico)1
Display OLED 0.96" 128x64 (SSD1306)1

Sobre o Projeto

Projetos anteriores usavam código confuso e dados básicos do uECG. Agora, biblioteca Arduino simplifica e torna confiável: uECG_library (requer biblioteca RF24 do Library Manager e Adafruit SSD1306 para OLED).

1. Esquemático

nRF24 no barramento SPI do Arduino (D13, D12, D11) + pinos CS/CE arbitrários (D10, D9). Crítico: nRF24 em 3.3V, não 5V! Capacitor 1uF ou 10uF entre 3.3V-GND estabiliza tensão. OLED via I2C: SDA→A4, SCL→A5, alimentado em 5V. Meu módulo já tem resistores pull-up I2C; se não tiver, adicione 4.7k de SDA/SCL para 3.3V.

2. Código

Biblioteca uECG exige:

Código completo (exemplo da biblioteca, 95% para desenho otimizado no display):

#include 
#include 
#include 

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int rf_cen = 9; int rf_cs = 10;

void setup() {
  Serial.begin(115200);
  while(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 falhou")); }
  display.display(); delay(100);
  uECG.begin(rf_cs, rf_cen); delay(100);
  display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.cp437(true); display.display(); delay(100);
  Serial.println("after display");
}

uint32_t prev_data_count = 0, prev_displ = 0;
uint8_t ecg_screen[128]; int ecg_screen_len = 128;
float ecg_avg = 0, ecg_max = 1, ecg_min = -1; int ecg_size = 40;
int displ_phase = 0;

void loop() {
  uECG.run();
  uint32_t data_count = uECG.getDataCount();
  int new_data = data_count - prev_data_count;
  prev_data_count = data_count;
  if(new_data > 0) {
    uint32_t ms = millis();
    int16_t ecg_data[8];
    uECG.getECG(ecg_data, new_data);
    for(int x=0; x ecg_max) ecg_max = ecg_data[x];
      if(ecg_data[x] < ecg_min) ecg_min = ecg_data[x];
      int ecg_y = 63 - ecg_size*(ecg_data[x] - ecg_min) / (ecg_max - ecg_min + 1);
      ecg_screen[ecg_screen_len-1-new_data+x] = ecg_y;
    }
    // Atualiza display a cada 30ms em 4 fases (texto, metade onda, outra metade, display)
    if(ms - prev_displ > 30) {
      prev_displ = ms;
      if(displ_phase == 0) { /* mostra BPM, RR, passos, bateria */ }
      if(displ_phase == 1) { /* desenha primeira metade da onda ECG */ }
      if(displ_phase == 2) { /* desenha segunda metade */ }
      if(displ_phase == 3) display.display();
      displ_phase++; if(displ_phase > 3) displ_phase = 0;
    }
  }
}

3. Processamento de Dados

Estatísticas calculadas no dispositivo: BPM, GSR, último intervalo RR, parâmetro HRV, 16 bins HRV, passos, acelerômetro (baixa taxa, só pose). Leituras brutas de ECG também disponíveis (perda ocasional de pacotes, mas utilizável).

Código

Biblioteca uECG para Arduino: GitHub (inclui exemplos OLED e serial simples).

Esquemático

Diagrama de conexões nRF24 + OLED + Arduino UNO.

Processo de manufatura

  1. MAX86150 da Maxim: Módulo Integrado PPG & ECG para Monitoramento de Saúde Móvel
  2. Construa API Robusta de Temperatura e Sensores no Raspberry Pi com Módulo GY‑91
  3. Primeiros Passos com TJBot: Construa, Configure e Controle por Voz seu Próprio Robô de IA
  4. Fundamentos de Módulos Verilog: Estrutura e Sintaxe
  5. Dominando Parâmetros em Verilog: Crie Módulos Reutilizáveis e Escaláveis
  6. Sistema de Módulos Java 9: Enhancements, Link-Time e Imagens de Runtime Personalizadas
  7. Construa o Clássico Jogo Pong no Arduino UNO com Display OLED – Tutorial Passo a Passo
  8. Autômatos Celulares em Tempo Real no Arduino com Display OLED 128x64
  9. Projeto DIY Arduino LCD: Monte com Resistores, Botão e Display 16x2
  10. Tutorial Arduino Iniciante 01: Comece seu Primeiro Projeto