Monitor Cardíaco ECG Sem Fio: Wearable com Arduino Nano e nRF24L01
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Dispositivo uECG (mede BPM, envia via nRF24) | 1 |
| Arduino Nano R3 | 1 |
| Módulo nRF24L01 (genérico) | 1 |
| Anel NeoPixel WS2812 5050 RGB (16 LEDs) | 1 |
| Bateria LiPo 200+ mAh | 1 |
Ferramentas Necessárias
- Ferro de solda (precisão para soldar direto nos pads do nRF24)
Sobre o Projeto
Esta é a segunda iteração do meu monitor cardíaco. A primeira mostrava batimentos no peito, conectada ao uECG por fio — não era prático: fio atrapalhava o sensor ao correr, e você não via bem os LEDs.
Esta versão resolve tudo: é usada no pulso (visível enquanto corre), sem fio (sem distorção de leitura), e funciona durante exercício intenso.
1. Componentes
O uECG faz o trabalho pesado: mede ECG e calcula BPM onboard. No modo "direct link", envia dados (ECG alta resolução + BPM) via protocolo compatível com nRF24 genérico. O Arduino Nano tem tamanho ideal para caber sob o anel de LEDs.
2. Esquemático
Conexão do nRF24 requer 7 fios (SPI + CE + CSN + alimentação). Para tamanho compacto, remova headers e solde direto nos pads.
Lista de conexões:
- nRF24 GND → Arduino GND
- nRF24 VCC → Arduino 3.3V
- nRF24 CE → D9
- nRF24 CSN → D8
- nRF24 SCK → D13 (SPI hardware)
- nRF24 MOSI → D11 (SPI hardware)
- nRF24 MISO → D12 (SPI hardware)
- Anel LED VCC → 5V
- Anel LED GND → GND
- Anel LED DI → D5
- Bateria + → 5V (via conector JST para recarga)
- Bateria - → GND
Importante: MOSI/MISO/SCK devem ir nos pinos D11/D12/D13 (SPI hardware). Outros pinos podem ser alterados no código.
3. Programa
A complexidade está na configuração do canal RF. uECG e nRF24 usam ordem de bits diferente no endereço do pipe. Função swapbits() inverte a ordem dos bits de cada byte.
Lógica: lê pacotes → byte 5 = BPM → filtra (5 leituras consecutivas iguais, pois CRC desabilitado) → converte BPM em cor + nº de LEDs acesos.
Código Completo (bpm_watch.ino)
#include
#ifdef __AVR__
#include
#endif
#include
#include
#include
#include
int rf_cen = 9;
int rf_cs = 8;
RF24 rf(rf_cen, rf_cs);
uint8_t pipe_rx[8] = {0x0E, 0xE6, 0x0D, 0xA7, 0, 0, 0, 0};
#define PIN 5
#define NUMPIXELS 16
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
uint8_t swapbits(uint8_t a) {
uint8_t v = 0;
if(a & 0x80) v |= 0x01;
if(a & 0x40) v |= 0x02;
if(a & 0x20) v |= 0x04;
if(a & 0x10) v |= 0x08;
if(a & 0x08) v |= 0x10;
if(a & 0x04) v |= 0x20;
if(a & 0x02) v |= 0x40;
if(a & 0x01) v |= 0x80;
return v;
}
void setup() {
pixels.begin();
for(int i=0;i 0) rf_bpm = bb;
}
long ms = millis();
if(ms - last_pix_upd > 10) {
last_pix_upd = ms;
int bpm = rf_bpm;
int max_bright = 160;
float dd = 25;
float t1 = 90, t2 = t1+dd, t3 = t2+dd, t4 = t3+dd;
int r, g, b;
if(bpm < t1) { r=0; g=0; b=max_bright; }
else if(bpm < t2) { r=0; g=max_bright*(bpm-t1)/dd; b=max_bright-g; }
else if(bpm < t3) { r=max_bright*(bpm-t2)/dd; g=max_bright-r; b=r/4; }
else if(bpm < t4) { r=max_bright; g=0; b=max_bright/2 - max_bright*(bpm-t3)/(2*dd); }
else { r=max_bright; g=0; b=0; }
int on_pixels = (bpm-80)/8; // Mostra só acima de 80 BPM (corrida)
for(int i=0;i
4. Montagem da Pulseira
Usei cola térmica: Nano encaixa no anel externo, nRF24 no interno, bateria no meio. Costurei em uma pulseira de aterramento (sobra de estação de solda).
5. Testes
Corri com o dispositivo. Configurado para 192 BPM = todos LEDs acesos. Surpresa: excedi 192 BPM em minutos, sem perceber. O sensor mostrou desaceleração gradual ao parar — confiável. Descobri que meu limite cardíaco é alto devido a treino contínuo desde adolescência (tive problemas cardíacos que "sumiram"). Pergunta: meu BPM é alto por condição passada ou estou exagerando? Vou ajustar o limite no monitor ou treinar menos intensamente.
P.S. O uECG também funciona bem como sensor EMG — veja meu projeto "Robotic Hand Control".
Esquemático
Arquivo Fritzing: nrf24_led_ring_o2Gij5oigT.fzz
Processo de manufatura
- Renesas e Altran Lançam Primeiro Relógio de Pulso UWB de Baixa Taxa de Pulso para Distanciamento Social
- Construa uma Estação Meteorológica e de Qualidade do Ar com Raspberry Pi, InfluxDB e Grafana
- Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
- Monitore a Temperatura da Sua Casa com Dashboard no Raspberry Pi
- Sistema Remoto de Monitoramento de Frequência Cardíaca com Alertas AWS IoT
- Crie um Sistema Ambilight Impressionante para Monitor com Arduino
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
- Sensores de Frequência Cardíaca Integrados em Roupas Inteligentes: Monitoramento Vestível Confiável
- Usinagem CNC: Fabricação de Precisão de Materiais e Componentes