Social Icons

Um monitor de batimentos cardíacos para o ARDUINO







monitorBatimentos_01



Parte 1: “Vendo” os pulsos

Introdução

A Eletrônica nos permite criar aparelhos que são de fato extensões de nossos sentidos, como aqueles que são capazes de captar certos sinais fisiológicos que normalmente somos incapazes de sentí-los. Uma vez captados por algum tipo de sensor esses sinais podem ser amplificados e digitalizados, depois podem ser alterados e até mesmo controlados com alguma forma de feedback. Um desses sinais fisiológicos é o número de batimentos do nosso coração. Emoções fortes como raiva e excitação causam um aumento da taxa de batimentos do coração humano. Outras emoções como tristeza e pesar fazem essa taxa diminuir. Meditação, contemplação e outros estados mentais tambem mexem com essa taxa. Com a ajuda do Arduino e um amplificador de alto ganho com sensor ótico podemos monitorar nossa taxa de batimentos cardíacos na tela do nosso PC. Fica fácil assim montar um instrumento que pode ser usado para experiências com controle de stress, respiração, relaxamento e biofeedback





Hardware





Nosso protótipo foi montado numa pequena placa perfurada de 3,5 x 5,5 cm para ser encaixada sobre o Arduino como um shield. Veja a figura 1. Os componentes são interligados com pequenos fios no lado da solda da placa.

Nesse projeto utilizamos o par de amplificadores operacionais dentro do LM-358N.  O circuito completo está na figura 3, e é um projeto por nós adaptado para o Arduino a partir de um circuito originalmente publicado pela revista inglesa Elektor em 2008, sob o título “Stress-O-Meter”. Esse tipo de monitor de batimentos cardíacos é uma variante de um aparelho médico-hospitalar chamado pletismógrafo, que serve para medir (e registrar) variações no volume de um orgão como resultado de flutuações rítmicas da circulação do sangue pelo corpo humano. Normalmente nesse tipo de aparelho essas flutuações são captadas por um sensor ótico posicionado em um lado do lóbulo de uma orelha, ou um lado da ponta de um dos dedos, e com a fonte de luz alinhada no lado oposto. Diferentemente, nosso aparelho mede as pulsações no fluxo de sangue na ponta do dedo de uma das mãos do experimentador com o sensor e a fonte de luz colocados num mesmo plano e montados numa caixa separada do amplificador. Veja a figura 2 abaixo. Em nosso protótipo usamos como sensor de pulsações um LDR comum com uma resistencia de 1 Mohm sem nenhuma luz incidente, e 400 ohms com incidencia de luz natural direta.





Como fonte de luz para o sensor usamos um LED vermelho comum de 3 mm. O experimentador deve posicionar o lado oposto à unha de seu dedo indicador sobre o LDR, e a dobra entre a ponta e o meio do dedo sobre o LED. A luz que é emitida pelo LED atravessa a pele da dobra e é refletida pelo osso sobre uma pequena concentração de artérias bem em cima do LDR. O volume de sangue nesse grupo de artérias pulsa em sintonia com as contrações do músculo cardíaco. Essa informação vai modular a resistência do LDR.





No circuito do monitor o resistor R1 limita a corrente direta atraves de LED1 em cerca de 20 mA. O LDR e o resistor R2 formam um circuito divisor de tensão cuja saída pulsante será função da resistência do LDR que é função da luz refletida pelo dedo do experimentador.  

Esses pulsos de muito baixa frequencia, entre 1 e 2 hertz, seguem para um filtro passa-altas formado por C1 e R3 e é amplificado pelo primeiro opAmp do LM-358N na configuração não-inversor com ganho de 120. C2 e R5 formam um filtro passa-baixas centrado em 1,5 Hz. Essa frequencia corresponde a 90 pulsos por minuto, que é a metade da frequencia maxima do coração humano. O potenciometro P1, que é a resistencia de carga do primeiro amplificador, controla a entrada do segundo opAmp tambem não-inversor com ganho de 560. Aqui o sinal modulado com os batimentos do coração do experimentador pode ser entregue para tratamento ao Arduino no pino digital 2. O LED2 será programado para piscar com os batimentos cardíacos.



Sugerimos ao leitor primeiro montar o conjunto fonte de luz/sensor. Para o nosso protótipo montamos esse conjunto em uma pequena caixa plástica de 3x4x1 cm, como na figura 2. Nessa caixa foi montada a pequena placa perfurada com o LED vermelho de 3 mm e seu resistor de 270 ohms e o LDR e seu resistor de 39 Kohms.



Lista de componentes
R1 e R10 Resistor 270 ohms x 1/8W
R2 Resistor 39K ohms x 1/8W
R3 e R6 Resistor 68K ohms x 1/8W
R4 Resistor 8K2 ohms x 1/8W
R5 Resistor 1M ohms x 1/8W
R7 Resistor 560K ohms x 1/8W
R8 Resistor 1K ohms x 1/8W
R9 Resistor 1K8 ohms x 1/8W
P1 Potenciometro 10K linear
LED1 e LED2 Led vermelho 3 mm
LDR LDR
S1 Chave miniatura 1/0
C1 e C3 Capacitor 1uF x 25V
C2 e C4 Capacitor 100nF
CI1 LM-358N dual opamp
Outros Placa CI perfuração padrão
Borne 3 pinos parafuso


A distancia entre os centros do LED e do LDR é cerca de 1,0 cm. Da caixa saem tres fios: o de +5 volts, o de saída do divisor de tensão e o comum a esses dois, o terra. O fio de saída do divisor de tensão vai para o capacitor C1 na entrada do primeiro amplificador pelo borne B1.

Software

Depois de conferir mais de uma vez toda a fiação, encaixe o shield no seu Arduino, conecte o sensor e depois o cabo USB no seu PC. Para ver os batimentos cardíacos de uma pessoa carregue no seu Arduino o sketch da listagem 1.

Listagem 1


int pinLed = 3;    

volatile int state = 0;    



void setup(){

pinMode(pinLed, OUTPUT);        

attachInterrupt(0, pulse, CHANGE); 

}

void loop(){

digitalWrite(pinLed, state);     

}

void pulse(){

state = !state;           

}
Esse sketch configura o pino digital 3 como saída para LED2 no circuito, e o pino digital 2 como entrada de interrupção para a função attachInterrupt( ) que chama a função pulse( ) toda vez que uma interrupção externa ocorrer nesse pino. A função attachInterrupt( ) requer tres parâmetros e sua sintaxe é a seguinte:



attachInterrupt(pino, função, modo);
O primeiro parametro é pino e deverá ser 0 para o pino digital 2, ou 1 para o pino digital 3 do Arduino; o segundo é função e se refere à função que será chamada quando a interrupção ocorrer; o último parâmetro modo define o momento em relação ao sinal no pino digital especificado em que a interrupção ocorrerá, que poderá ser de quatro modos: CHANGE, na mudança do nível no pino; LOW, quando o pino for baixo; RISING, quando o pino mudar de baixo para alto; ou FALLING, quando o pino mudar de alto para baixo.

Nesse sketch toda vez que o nível lógico no pino digital 2 mudar, a função  pulse( ) será chamada, e esta vai somente complementar (mudar o estado da) a variável state. A variável state vai mudar de acordo com os batimentos do coração do experimentador e fazer o LED2 acender ou apagar conforme seu estado na função digitalWrite( )

Para testar o circuito basta você repousar a ponta de seu dedo indicador sobre o sensor e girar o cursor do potenciometro P1 para o mínimo ganho até o LED no pino 3 apagar. Depois vá aumentando o ganho até que o LED comece a piscar com os batimentos do seu coração. Depois de algum treino pressionando mais ou menos o dedo sobre o sensor é possível achar o ponto ótimo para ver o LED piscar regularmente. O ajuste fino é feito com o potenciometro.

Podemos enviar nossos batimentos cardíacos pela porta serial para o PC e ver no terminal do Windows ou do Arduino sua forma digital como uma combinação de traços horizontais com caracteres ASCII 95 e 45. Para isso acrescente ao sketch acima uma linha para iniciar a porta serial em 9600 bps e os comandos if que testam a variável state; se esta for falsa o caracter 45 será enviado para o terminal serial com a função Serial.write( ); se state for verdadeira o caracter 95 será enviado. Veja a listagem 2 e a forma dos pulsos na figura 5 abaixo. As pausas de 10 ms entre as transmissões evitam a sobrecarga do buffer da porta serial.

Listagem 2


int pinLed = 3;      

volatile int state = 0;   



void setup(){

pinMode(pinLed, OUTPUT);      

attachInterrupt(0, pulse, CHANGE);

Serial.begin(9600);

}

void loop(){

digitalWrite(pinLed, state);      

if(!state) Serial.write(45);

delay(10);

if(state)Serial.write(95);

delay(10);

}

void pulse(){

state = !state;                   

}



pulsosCardiacosTerminal Arduino 


Figura 5: os pulsos do batimento cardíaco

Na segunda parte desse artigo vamos visualizar melhor esses pulsos cardíacos agora digitalizados numa interface gráfica na tela do seu PC usando alguns poucos comandos de uma linguagem open source e muito parecida com a do Arduino, a linguagem Processing.(Já Comentada em Posts Anteriores)...

Até Lá!

Um comentário:

  1. boa noite

    alguém me pode dizer qual é o valor da ldr

    vi que era de 1M ohm e 400ohm mas não sei se os 400ohm é quando esta iluminada ao máximo.

    e também queria saber se pode usar ldr's de outros valores e a sua relação com a resistência em serie

    ResponderExcluir