Skip to content

charlesmmorais/ecg-ad8232-m5stack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🫀 ECG Monitor com AD8232 + M5Stack Basic

Plataforma Sensor Framework Licença Linguagem

Monitor de eletrocardiograma (ECG) em tempo real, exibindo a forma de onda cardíaca no display colorido do M5Stack Basic com cálculo automático de BPM.

Para quem é este projeto?
Para estudantes de eletrônica, engenharia biomédica, makers e entusiastas que querem aprender sobre aquisição de sinais biológicos com microcontroladores.


📋 Índice


⚡ Como Funciona

Eletrodos → AD8232 → Sinal Analógico → ESP32 ADC → Processamento → Display M5Stack
   (pele)   (filtro/amplificador)      (GPIO 36)    (detecção BPM)  (forma de onda)

O AD8232 é um chip especializado para leitura de biopotenciais. Ele:

  1. Amplifica o sinal elétrico fraco do coração (~1 mV) para algo legível (~1 V)
  2. Filtra ruídos de 60 Hz (rede elétrica) e artefatos de movimento
  3. Detecta se os eletrodos estão corretamente posicionados (pinos LO+ e LO-)

O ESP32 no M5Stack lê esse sinal pelo ADC de 12 bits (~250 amostras/segundo) e:

  • Desenha a forma de onda em tempo real no display de 320×240 px
  • Detecta os picos R da onda QRS para calcular o intervalo RR
  • Calcula o BPM com média móvel de 4 batimentos

Para a teoria completa, veja docs/como-funciona.md.


🛒 Hardware Necessário

Componente Quantidade Notas
M5Stack Basic Development Kit v2.7 1 ESP32, display 320×240 IPS
Módulo Sensor AD8232 ECG 1 Inclui cabo e eletrodos
Eletrodos descartáveis (snap) 3 Para ECG de Derivação I
Cabos jumper macho-macho 5 Para conexão ao M5Stack
Cabo USB-C 1 Para programar e alimentar

⚠️ Aviso Médico: Este projeto é exclusivamente educacional. Não use para diagnóstico ou monitoramento clínico. O sinal pode ser afetado por movimento, má fixação dos eletrodos e interferências elétricas.


🔌 Diagrama de Ligação

Tabela de Conexões

Pino AD8232 Pino M5Stack Basic Função
OUTPUT GPIO 36 Sinal ECG analógico
LO+ GPIO 35 Detecção de eletrodo solto (+)
LO- GPIO 25 Detecção de eletrodo solto (−)
3.3V 3.3V Alimentação
GND GND Terra

Diagrama ASCII

┌─────────────────────────────────────────────┐
│                  AD8232                     │
│                                             │
│   [GND]───────────────────────►  GND        │
│   [3.3V]──────────────────────►  3.3V       │
│   [OUTPUT]────────────────────►  GPIO 36    │
│   [LO+]───────────────────────►  GPIO 35    │
│   [LO-]───────────────────────►  GPIO 25    │
│                                             │
│   [RA] ──────► Eletrodo DIREITO (braço dir) │
│   [LA] ──────► Eletrodo ESQUERDO (braço esq)│
│   [RL] ──────► Eletrodo REFERÊNCIA (perna)  │
└─────────────────────────────────────────────┘
                       │
                       ▼
        ┌──────────────────────────┐
        │     M5Stack Basic v2.7   │
        │  ┌────────────────────┐  │
        │  │  Display 320×240   │  │
        │  │  ╔══════════════╗  │  │
        │  │  ║ ECG Monitor  ║  │  │
        │  │  ║  ♥ 72 BPM   ║  │  │
        │  │  ║ ~∿∿∿∿∿∿∿∿∿~ ║  │  │
        │  │  ╚══════════════╝  │  │
        │  └────────────────────┘  │
        │   [A]      [B]      [C]  │
        └──────────────────────────┘

Posicionamento dos Eletrodos (Derivação I)

         RA (vermelho)          LA (amarelo)
              ●                      ●
           Braço                  Braço
           Direito               Esquerdo


                    RL (verde/preto)
                           ●
                         Perna
                        Esquerda
                    (ou abdômen)

Dica: Limpe a pele com álcool antes de fixar os eletrodos. Fique imóvel durante a leitura para evitar artefatos de movimento.


🛠 Instalação do Ambiente

1. Instale o Arduino IDE

Baixe a versão 2.x em arduino.cc/en/software.

2. Adicione o suporte ao ESP32 (M5Stack)

No Arduino IDE, vá em File → Preferences e adicione esta URL em Additional boards manager URLs:

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

Depois vá em Tools → Board → Boards Manager, pesquise M5Stack e instale.

3. Selecione a placa correta

Tools → Board → M5Stack → M5Stack-Core-ESP32

4. Selecione a porta serial

Conecte o M5Stack via USB-C e vá em Tools → Port e selecione a porta COM correspondente (Windows: COM3, COM4...; Linux/Mac: /dev/ttyUSB0 ou /dev/cu.usbserial-...).


📦 Instalação das Bibliotecas

No Arduino IDE, vá em Tools → Manage Libraries e instale:

Biblioteca Versão mínima Autor
M5Stack 0.4.0 M5Stack

Todas as outras dependências (TFT_eSPI, Wire, etc.) são instaladas automaticamente junto com a biblioteca M5Stack.


🚀 Carregando o Código

  1. Abra a pasta ecg_ad8232_m5stack/ no Arduino IDE (ou clique duas vezes em ecg_ad8232_m5stack.ino)
  2. Verifique as configurações:
    • Board: M5Stack-Core-ESP32
    • Upload Speed: 921600
    • Port: sua porta COM
  3. Clique em Upload (→) e aguarde a mensagem Done uploading
  4. O M5Stack reiniciará automaticamente

🖥 Usando o Monitor

Tela Principal

┌──────────────────────────────────────────────┐
│ ECG Monitor  AD8232    Eletrodos OK       ♥  │  ← Header
│ BPM: 72 BPM                                  │
├──────────────────────────────────────────────┤
│                                              │
│  · · · · · · · · · · · · · · · · · · · · ·  │
│                    ▲                         │
│  ___/\___/\___/\__/ \___/\___/\___/\___/\_  │  ← Forma de onda ECG
│                      ▼                       │
│  · · · · · · · · · · · · · · · · · · · · ·  │
│                                              │
├──────────────────────────────────────────────┤
│ [A]Calibrar    [B]Reset    [C]Info           │  ← Botões
└──────────────────────────────────────────────┘

Botões

Botão Função
[A] Calibrar Lê 500 amostras (~2s) e ajusta automaticamente o limiar de detecção de pico para o seu sinal. Use se o BPM não estiver sendo detectado.
[B] Reset Reinicia o gráfico, BPM e todos os contadores.
[C] Info Exibe tela com parâmetros do sistema, status atual e versão.

Serial Plotter

Abra Tools → Serial Plotter no Arduino IDE com 115200 baud para visualizar o sinal ECG bruto no computador. Útil para depuração.


🧠 Entendendo o Código

O código está organizado em funções bem separadas:

setup()
├── M5.begin()           — inicializa display, botões
├── pinMode(LO_PLUS/MINUS) — configura detecção de lead-off
├── analogReadResolution(12) — ADC de 12 bits (0-4095)
└── drawUI()             — desenha interface

loop()
├── Amostragem (~250 Hz)
│   ├── digitalRead(LO_PLUS/MINUS) — eletrodos conectados?
│   ├── analogRead(ECG_PIN)        — lê sinal do AD8232
│   ├── Serial.println(raw)        — envia para Serial Plotter
│   ├── detectPeak()               — detecta batimento cardíaco
│   └── drawGraph()                — desenha no display
└── Botões
    ├── BtnA → calibrateThreshold()
    ├── BtnB → reset
    └── BtnC → showInfoScreen()

Detecção de Pico (Algoritmo)

Sinal ADC:   ____/\____/\____
                ^  ^
                │  └─ descida após pico acima do limiar → BATIMENTO!
                └─── subida detectada (ascending = true)

Intervalo RR = tempo entre dois batimentos consecutivos
BPM = 60.000 ms / RR_médio (média de 4 batimentos)

Variáveis Principais

#define ECG_PIN     36   // GPIO do sinal analógico
#define LO_PLUS     35   // GPIO lead-off +
#define LO_MINUS    25   // GPIO lead-off -
#define SAMPLE_INTERVAL_MS  4   // 1000/4 = 250 Hz
#define DEFAULT_THRESHOLD 2500  // limiar de pico (0-4095)
#define RR_HISTORY  4    // média de quantos batimentos

🔧 Solução de Problemas

Veja o guia completo em docs/troubleshooting.md.

Problemas mais comuns:

Sintoma Causa provável Solução
Tela preta Cabo USB, placa errada Verifique conexão e board selecionado
"ELETRODO SOLTO" LO+ ou LO- mal conectado Verifique ligações nos GPIOs 35 e 25
Forma de onda plana Eletrodo sem contato Reposicione e pressione eletrodos
BPM incorreto Limiar desajustado Pressione [A] para calibrar
Muito ruído Interferência 60 Hz Afaste-se de fontes de energia, carregadores

🚀 Próximos Passos

Ideias para evoluir o projeto:

  • Salvar dados no SD card — o M5Stack Basic tem slot microSD
  • Enviar dados via Wi-Fi — ESP32 tem Wi-Fi integrado; envie para um servidor MQTT ou dashboard web
  • Detecção de arritmia — análise de variabilidade do RR interval (HRV)
  • Filtro digital por software — implementar filtro passa-banda 0.5–40 Hz por código
  • Alarme sonoro — usar o buzzer do M5Stack para alertas de BPM fora do normal
  • Análise FFT — transformada de Fourier do sinal ECG para análise de frequências

📚 Referências


📄 Licença

Distribuído sob a licença MIT. Veja LICENSE para detalhes.


Feito com ❤️ para a comunidade maker brasileira.
Se este projeto te ajudou, deixe uma ⭐ no repositório!

About

Real-time ECG monitor using AD8232 and M5Stack Basic (ESP32) - live waveform + BPM on display

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages