Experiência 1: Recolha de Dados Fisiológicos

Experiência 1: Recolha de Dados Fisiológicos com Microcontroladores

Objetivo

Introdução prática à recolha de dados fisiológicos através de microcontroladores Arduino/ESP32 e sensores biomédicos. Os estudantes montam circuitos, programam a aquisição de sinais e implementam sistemas básicos de transmissão de dados, estabelecendo a base da pipeline de dados biomédicos.

Objetivos de Aprendizagem

  • Compreender os princípios físicos de funcionamento de sensores biomédicos
  • Programar microcontroladores para aquisição de sinais em tempo real
  • Implementar protocolos de comunicação (Serial, Wi-Fi, MQTT)
  • Configurar sistemas de bufferização e transmissão de dados
  • Avaliar limitações, precisão e validação de sensores de baixo custo
  • Aplicar boas práticas de sampling rate e resolução

Resultados de Aprendizagem

Ao completar esta experiência, os estudantes serão capazes de:

  • Configurar e programar dispositivos Arduino/ESP32
  • Recolher dados de múltiplos sensores biomédicos simultaneamente
  • Implementar aquisição com sampling rate adequado (100-1000Hz)
  • Transmitir dados via serial e Wi-Fi
  • Implementar buffer circular para dados contínuos
  • Visualizar sinais em tempo real

Tutoriais de Apoio

Antes de começar esta experiência, recomenda-se a consulta dos seguintes tutoriais:

  • Ainda não há tutoriais disponíveis.

Exercício Prático Detalhado

Fase 1: Montagem do Circuito (30 min)

Componentes:

  • Arduino UNO, Arduino Nano ou ESP32 DevKit
  • Sensor PPG (ex. MAX30102) para frequência cardíaca e SpO2
  • Condensadores, breadboard, jumpers

Tarefa: Montar circuito seguindo diagrama fornecido, testar ligações com multímetro

Os componentes fornecidos pelo laboratório utilizam o sistema qwiic para facilitar a ligação dos sensores. Utilize os cabos qwiic para ligar o sensor PPG ao qwiic shield (Figura 1).

Figura 1: qwiic shield

Conecte o Arduino Nano em cima do qwiic shield conforme a Figura 2.

Além do qwiic cable, também será necessário ligar mais dois fios jumpers entre o arduino e o sensor PPG. Para ficar compatível com o código que será fornecido, ligue um fio entre o pino D4 e o pino RST do sensor. Ligue outro fio entre o pino D5 e o pino MFIO do sensor PPG (Figura 2).

Importante

O Arduino Nano possui uma limitação em termos de alimentação do sensor PPG. Para garantir que o computador detecte o setup atual, é necessário adicionar um condensador (220uF ou 440uF) entre os pinos 3v3 e GND do Arduino Nano (Figura 2). Este condensador ajuda a estabilizar a alimentação do sensor PPG, evitando falhas na deteção do dispositivo.

Figura 2: Ligação do PPG ao Arduino Nano

Mais detalhes no site oficial do sensor: MAX30102 Hookup Guide


Fase 2: Programação Básica (45 min)

Objetivos específicos:

  • Configurar o ambiente Arduino IDE
  • Instalar bibliotecas necessárias (SparkFun Bio Sensor Hub)
  • Programar aquisição básica de dados PPG

Instalação do Arduino IDE:

Primeiro é necessário instalar o Arduino IDE 2.x, disponível em: https://www.arduino.cc/en/software (Figura 3).

Ao ligar o Arduino Nano por USB diretamente ao Computador, ele deve ser reconhecido pelo IDE. Caso não seja reconhecido, teremos que configurar a placa e a porta correta no menu “Tools” do Arduino IDE.

Instalação da Biblioteca SparkFun Bio Sensor Hub:

Em seguida, é necessário instalar a biblioteca SparkFun Bio Sensor Hub Library. Para isso, no menu “Sketch” do Arduino IDE, selecione “Include Library” e depois “Manage Libraries…”. Na janela que abrir, procure por “SparkFun Bio Sensor Hub Library” e instale a versão mais recente (Figura 4).

Programação da Aquisição básica de Dados:

A seguir está um exemplo de código para adquirir dados do sensor PPG utilizando a biblioteca SparkFun Bio Sensor Hub. Copie e cole este código no Arduino IDE e faça o upload para o seu Arduino Nano.

Biblioteca e Definições Iniciais:

#include <SparkFun_Bio_Sensor_Hub_Library.h>
#include <Wire.h>

// No other Address options.
#define DEF_ADDR 0x55

// Reset pin, MFIO pin
const int resPin = 4;
const int mfioPin = 5;

// Takes address, reset pin, and MFIO pin.
SparkFun_Bio_Sensor_Hub bioHub(resPin, mfioPin);

bioData body;

Configuração Inicial no setup():

void setup(){

  Serial.begin(115200);

  Wire.begin();
  int result = bioHub.begin();
  if (!result)
    Serial.println("Sensor started!");
  else
    Serial.println("Could not communicate with the sensor!!!");

  Serial.println("Configuring Sensor....");
  int error = bioHub.configBpm(MODE_ONE); // Configuring just the BPM settings.
  if(!error){
    Serial.println("Sensor configured.");
  }
  else {
    Serial.println("Error configuring sensor.");
    Serial.print("Error: ");
    Serial.println(error);
  }
  // Data lags a bit behind the sensor, if you're finger is on the sensor when
  // it's being configured this delay will give some time for the data to catch
  // up.
  delay(4000);

}

Loop Principal no loop():

void loop(){

    // Information from the readBpm function will be saved to our "body"
    // variable.
    body = bioHub.readBpm();
    Serial.print("Heartrate: ");
    Serial.println(body.heartRate);
    Serial.print("Confidence: ");
    Serial.println(body.confidence);
    Serial.print("Oxygen: ");
    Serial.println(body.oxygen);
    Serial.print("Status: ");
    Serial.println(body.status);
    delay(250); // Slowing it down
}

Fase 3: Transmissão de Dados (45 min)

Protocolos a implementar: 1. Serial USB: Para debug e visualização local 2. Wi-Fi HTTP: POST para endpoint REST 3. MQTT: Para sistemas distribuídos

Formato de dados JSON:

{
  "timestamp": 1642680000,
  "device_id": "ESP32_001",
  "sensors": {
    "ppg": [1024, 1026, 1023, ...],
    "temperature": 36.5,
    "gsr": 512
  },
  "sampling_rate": 100
}

Fase 4: Visualização e Validação (30 min)

  • Utilizar Serial Plotter do Arduino IDE
  • Implementar script Python com matplotlib para visualização avançada
  • Validar qualidade do sinal (SNR, artefactos)
  • Comparar com dispositivos comerciais

Recursos Necessários

Hardware (por grupo de 2-3 estudantes)

  • Microcontrolador: ESP32 DevKitC ou Arduino UNO R3
  • Sensores biomédicos:
    • MAX30102 (PPG + SpO2)
    • DS18B20 (temperatura)
    • Grove GSR (condutância da pele)
    • ADXL345 (acelerómetro - opcional)
  • Componentes: Breadboard, resistências, jumpers, cabo USB
  • Fonte de alimentação: Power bank ou adaptador 5V

Software

  • Arduino IDE 2.x com bibliotecas ESP32/Arduino
  • Bibliotecas: WiFi, PubSubClient (MQTT), ArduinoJson
  • Python 3.8+ com matplotlib, numpy, pyserial
  • MQTT broker (Mosquitto local ou HiveMQ Cloud)
  • Postman para testes de API

Infraestrutura

  • Rede Wi-Fi local com acesso à internet
  • Servidor HTTP simples (Node.js/Express ou Python Flask)
  • MQTT broker configurado
  • Computadores com portas USB disponíveis

Metodologias de Ensino

Abordagem Hands-on (120 min presencial)

  1. Briefing teórico (15 min): Princípios de sensores biomédicos
  2. Montagem guiada (30 min): Circuito passo-a-passo
  3. Programação assistida (45 min): Desenvolvimento do firmware
  4. Testes e debug (30 min): Resolução de problemas

Trabalho Autónomo (60 min)

  • Implementar funcionalidades adicionais
  • Otimizar código para menor consumo energético
  • Criar interface web simples para visualização
  • Documentar limitações e melhorias

Avaliação

Critérios de Avaliação (100 pontos)

  • Montagem do circuito (20 pts): Ligações corretas, funcionalidade
  • Qualidade do código (30 pts): Estrutura, comentários, boas práticas
  • Aquisição de dados (25 pts): Sampling rate correto, dados válidos
  • Transmissão (15 pts): Pelo menos um protocolo funcionante
  • Relatório técnico (10 pts): Análise de limitações e propostas

Entregáveis

  1. Código fonte comentado (.ino + bibliotecas)
  2. Esquema do circuito (Fritzing ou similar)
  3. Dataset com 5 minutos de dados recolhidos
  4. Relatório (máx. 3 páginas) com análise de qualidade dos dados

Extensões Avançadas

Para estudantes avançados

  • Filtragem digital: Implementar filtros passa-banda em tempo real
  • Detecção de artefactos: Algoritmos para identificar ruído
  • Compressão de dados: Reduzir bandwidth de transmissão
  • Segurança: Encriptação básica dos dados transmitidos
  • Edge computing: Processamento local básico (ex. cálculo de BPM)

Integração com experiências seguintes

  • Os dados recolhidos serão utilizados na Experiência 2 para processamento
  • O formato JSON será compatível com REDCap (Experiência 3)
  • Os protocolos MQTT preparam para IoMT (Experiência 6)

Troubleshooting Comum

Problemas típicos e soluções

  1. Sinal ruidoso: Verificar ligações, usar condensadores de desacoplamento
  2. Dados inconsistentes: Calibrar sensores, verificar alimentação
  3. Conexão Wi-Fi instável: Implementar reconnect automático
  4. Overflow do buffer: Aumentar frequência de transmissão
  5. Consumo elevado: Otimizar código, usar deep sleep modes