Central de monitoramento cardíaco para academias da terceira idade

Participantes:

Diego Augusto Silva
Eduardo Bento Pereira
Luan Pascoal da Costa Andrade

Resumo do projeto:

O objetivo do projeto é criar um dispositivo simples de monitoramento cardíaco em academias para terceira idade. O sistema contará com identificação biométrica e alimentação solar.

Descrição do projeto:

Os benefícios da prática de exercícios físicos são muitos e recomendados para todas as idades. Para pessoas idosas esta prática é fundamental para a garantia da saúde. Várias cidades e prefeituras têm instalado academias ao ar livre em praças e parques de modo a incentivar que as pessoas da melhor idade possam, de forma gratuita, praticar exercícios. Porém, os equipamentos instalados nestes locais são simples e não possuem nenhum prossionais e tecnologias para acompanhar se esses exercícios estão sendo feitos de maneira segura. Entre os riscos da prática de exercícios físicos não supervisionada está o risco de um problema cardíaco como um infarto.

Neste projeto, é proposto a construção de uma central de monitoramento cardíaco utilizando a placa LCPXpresso 4337 Development Board como unidade central. O objetivo é permitir que o usuário possa acompanhar o seu ritmo cardíaco antes, durante e após a prática dos exercícios utilizando um fotopletismógrafo de baixo custo acoplado à placa LCPXpresso. O fotopletismógrafo é um equipamento pequeno e de baixo custo que pode dar informações sobre capacidade pulmonar e batimentos cardíacos do usuário, bastando a ele o dedo dentro de uma unidade sensora baseada em luz infravermelha. Será utilizado um sensor biométrico para identicação do usuário com o banco de dados e a comunicação Ethernet da placa para troca de dados com a central de monitoramento que pode ser instalada na Secretaria de Saúde do Município. O shield LPC General Purpose será utilizado para dar informações no local (academia) ao usuário sobre seu ritmo cardíaco. A placa LCPXpresso será usada para processar os dados do sensor e informar ao usuário se ele deve descansar, parar o exercício, entre outras. Um cartão SD será utilizado para armazenar as mensagens a serem mostradas no LCD e o módulo sensor biométrico será usado para registro e identicação dos usuários por meio do módulo LCD contido no shield. O equipamento contará com uma placa solar e bateria para alimentação. O projeto contará também com uma interface para a WEB que dará acesso aos profissionais da secretaria de saúde informações sobre os usuários em toda a cidade.

Histórico do desenvolvimento:

Diagrama de blocos do projeto:

Diagrama de blocos da Central

Diagrama de blocos do sensor fotopletismográfico:

Diagrama de blocos fotopletismógrafo

Hardware:

 

Conjunto de materiais a serem utilizados:

kit_central

Placa LPCXpresso 4337 OM13070:

LPCXpresso_central

LPC General Purpose Shield OM13082:

Shield_central

Scaner biométrio G1-511C1R:

scanner_central

 

Placa solar:

solar_central

 

Desenvolvimento final:

Ao fim do projeto, o diagrama de blocos do projeto pode ser representado da seguinte forma:

central_cardiaca-page-1

Funcionamento do Scanner biométrico com a LPCXpresso 4337:

Funcionamento do fotopletismógrafo:

Aquisição de sinal da Central Cardíaca:

Dificuldades técnicas encontradas no projeto:

O desenvolvimento do software para a central de monitoramento cardíaca teve início na IDE LPCXpresso. Em primeira instancia, o leitor biométrico foi testado com um software (Windows) do fabricante, e os pacotes da comunicação foram interceptados com a finalidade de analisar o protocolo e as instruções do scanner de impressões digitais, possibilitando juntamente com o datasheet do dispositivo a criação de uma biblioteca para a utilização do mesmo. Alguns logs da comunicação podem ser vistos no anexo 1. Enfrentando algumas dificuldades com o UART, e frente a um pequeno tempo de execução do projeto, o desenvolvimento do software foi transferido para a IDE online MBED. Para a interação com a placa foi utilizado o joystick e o display de LCD do Shield 0M13082.

O Software é composto de um menu onde se pode salvar um usuário (cima), identificar um usuário (baixo), selecionar um usuario (esquerda e direita, esse comando pode ser utilizado por exemplo para sobrescrever usuários) e realizar uma leitura cardíaca e envia-la (centro).

Seleção de usuários: Foi definida uma variável global e volátil para representar o usuário. Quando se aperta o joystick para a direita ou para a esquerda, essa variável que é inicializada como zero, sofre um incremento ou decremento respectivamente, ficando limitada a um valor entre 0 e 19. Quando um usuário pré cadastrado é identificado por sua impressão digital a variável que representa os usuários recebe o valor respectivo à pessoa identificada.

Salvar/identificar usuário: Para a utilização do scanner de impressões digitais, foi utilizada uma biblioteca encontrada para o Mbed, a GT511C3. As únicas funções utilizadas desta biblioteca foram as de enviar e receber um pacote de dados, sendo as ações de salvar e identificar usuários, criadas a partir da análise dos logs da comunicação do scanner (anexo 1).

Realizar leitura cardíaca e a enviá-la: Segundo o teorema da amostragem, para um sinal ser bem discretizado, a frequência de amostragem deve ser no mínimo o dobro da maior componente de frequência do sinal. Como o sinal cardíaco possui no máximo uma frequência de 5Hz, uma freqüência de amostragem de 10Hz foi setada, ou seja, uma leitura analógica é realizada (na porta A2) a cada 100ms. Esses dados são então alocados em uma matriz linha, associados ao usuário atual (que foi identificado através de sua impressão digital), e enviados via porta serial. Para que os dados possam ser importados e analisados em softwares matemáticos (como Matlab ou Scilab por exemplo), o envio foi formatado de forma tabular (através da fprintf).

Fotopletismógrafo: Certamente foi a parte mais trabalhosa do projeto. O sensor que utilizamos foi projetado por um ex-aluno da UFSJ, Éric Ferreira, em seu projeto de TCC. Porém, acabamos queimando alguns componentes em alguns testes. Apesar de se tratar da construção de um novo sensor cujo projeto já tínhamos em mãos, trabalhar com eletrônica analógica não é uma tarefa nada linear. Diversas montagens em protoboard, indisponibilidade de componentes em tempo hábil, uma certa inexperiência para a análise do sinal e tempo corrido foram alguns dos fatores que tornaram tão árdua a tarefa de se obter um bom sinal cardíaco. Felizmente conseguimos lidar com essa parte, conseguindo um sinal muito parecido com o sinal do sensor original. Dentre os vídeos presentes nessa página, em um deles mostramos o fotopletismógrafo em funcionamento.

Comunicação via Bluetooth: Infelizmente devido ao tempo gasto nos contratempos do projeto e a agenda dos participantes próximo a data limite não foi possível completar essa parte. A intenção nossa era desenvolver um aplicativo Android que recebesse o valor de batimentos cardíacos medido via Bluetooth. Essa comunicação seria feita via Módulo RS232-Bluetooth HC05. Embora o app estivesse pronto, não foi possível realizar a comunicação com ele. O app foi construído através do App Inventor 2 do MIT.

Outras dificuldades mais: Antes de qualquer coisa, o projeto como um todo foi uma imensa fonte de aprendizado para nós. Desenvolver um projeto em Internet das Coisas, utilizar a IDE MBED, trabalhar com produtos da NXP, construir um fotopletismógrafo (mesmo sendo projeto de outrem) e utilizar scanner biométricos foram experiências inéditas para nós. O que mais pesou para o saldo final de nosso projeto, que apesar de tudo consideramos que foi positivo, foi a questão do gerenciamento de atividades, tempo e equipe. Com relação ao tempo, cada imprevisto era uma incógnita que poderia nos tomar desde dias até semanas. Tínhamos um cronograma original que pretendíamos seguir à risca, mas os imprevistos e as incertezas quanto ao tempo que gastaríamos neles jogou tudo por terra abaixo. Com relação à equipe, devido as diferentes agendas encontramos muitas dificuldades em reunir todos os membros, o que dificulta um pouco o processo de tomada de decisões.

 

ANEXO 1: Logs de comunicação do sensor biométrico

https://drive.google.com/file/d/0B81MGuPBXHCfcVZEWWxKd0FoZXc/view

 

ANEXO 2: Código principal desenvolvido no MBED, com extensão .cpp

#include “mbed.h”

#include “GT511C3.hpp”

#include “ST7567.h”

#include “PCAL9555.h”

 

//Leitor Biometrico em D0 e D1

GT511C3 finger(D1,D0);

Serial pc(USBTX, USBRX);            //configura a comunicação serial

Serial bluetooth(P3_4,P1_14); // Configura módulo RS232-HC05 para comunicação Bluetooth

Timer T; // Configura um timer

//Instancia o LCD

ST7567 lcd(D11, D13, D12, D9, D10); // mosi, sclk, reset, A0, nCS

AnalogIn pot(A3); //potenciometro pino Analogico 3

//Instancia o CI responsavel pela expancao de GPIOs, onde os leds e o joystick estao conectados.

PCAL9555    gpio_exp(SDA, SCL);

//GpioBusOut  leds(gpio_exp, X1_4, X1_5, X1_6, X1_7);

GpioBusIn   joystick(gpio_exp, X0_0, X0_1, X0_2, X0_3, X0_4);

//

//Inicia as teclas do joystic de acordo com a leitura

int const Key_Up=15;

int const Key_Down=30;

int const Key_Left=27;

int const Key_Right=23;

int const Key_Center=29;

 

volatile  int ID=0;

 

int main()

{

int sts=0;

int Keys=0;

float cardiaco=0;

 

//Seta o contraste do LCD

lcd.set_contrast(0x35);

//Limpa o LCD

lcd.cls();

 

loop:

//Imprime a mensagem inicial no display

lcd.cls();

lcd.locate(0, 1);

lcd.printf(“ID atual: %d”,ID);

lcd.printf(“n”);

lcd.printf(“Cima = salvar IDn”);

lcd.printf(“Baixo= identificar IDn”);

lcd.printf(“Direita = ID + n”);

lcd.printf(“Esquerda = ID -n”);

lcd.printf(“Cima = salvar IDn”);

 

 

while(true) {

int Keys = joystick.read();

 

switch (Keys)

{

case Key_Up:

if(finger.CheckEnrolled(ID)==0){

finger.DeleteID(ID);

}

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Coloque o dedo”);

finger.CmosLed(1);

 

loop2:

sts=finger.EnrollStart(ID);

if(sts != 0)

goto loop2;

 

while(1){

 

finger.WaitPress(1);

if (finger.Capture(1) == 0){

break;

}

}

 

if(finger.Enroll_N(1) != 0){

continue;

}

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Remova o dedo”);

finger.WaitPress(0);

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Coloque o dedo”);

 

while(1){

 

finger.WaitPress(1);

if (finger.Capture(1) == 0){

break;

}

}

if(finger.Enroll_N(2) != 0){

continue;

}

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Remova o dedo”);

finger.WaitPress(0);

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Coloque o dedo”);

while(1){

 

finger.WaitPress(1);

if (finger.Capture(1) == 0){

break;

}

}

if(finger.Enroll_N(3) != 0){

continue;

}

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Remova o dedo”);

finger.WaitPress(0);

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Usuario Salvo”);

finger.CmosLed(0);

wait(1.5);

goto loop;

break;

case Key_Down:

loop3:

finger.CmosLed(1);

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Coloque o dedo”);

finger.WaitPress(1);

while(1){

 

finger.WaitPress(1);

if (finger.Capture(1) == 0){

break;

}

}

ID=finger.Identify();

if(ID<0){

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Remova o dedo”);

finger.WaitPress(0);

goto loop3;

}

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“Remova o dedo”);

finger.WaitPress(0);

finger.CmosLed(0);

lcd.cls();

lcd.locate(0, 2 + 8);

lcd.printf(“ID= %d”,ID);

wait(1.5);

goto loop;

break;

case Key_Right:

ID++;

if(ID>19)

{

ID–;

}

goto loop;

break;

case Key_Left:

ID–;

if(ID<0){

ID++;

}

goto loop;

break;

case Key_Center:

int i=0;

float sinal[64];

lcd.locate(0,10);

lcd.cls();

lcd.printf(“Adquirindo Sinal”);

T.start();

for(i=0;i<63;i++){

sinal[i]=pot;

wait_ms(80);

}

T.stop();

 

pc.printf(“O tempo gasto na aquisição de sinal foi  %.8f segundosn”, T.read());

lcd.cls();

lcd.locate(0,0);

lcd.printf(” Enviando sinal”);

pc.printf(“Sinal do Usuario: %d n”,ID);

for(i=0;i<63;i++){

pc.printf(” t %.2f”,sinal[i]);

}

}

 

wait(3);

goto loop;

break;

 

}

 

 

 

 

}

Software/Firmware:

  • MBED;
  • MIT APP INVENTOR 2;

Referências: