• Nenhum resultado encontrado

“Vendo” os pulsos cardíacos

No documento Livro sobre arduino (páginas 157-163)

Experimento#12 – Um Monitor de Batimentos Cardíacos com o Arduino

Parte 1 “Vendo” os pulsos cardíacos

A Eletronica 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 alteram 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 computador. 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 57. Os componentes são interligados com pequenos fios no lado da solda da placa.

Nesse projeto utilizamos o par de amplificadores operacionais dentro do LM358N. O circuito completo está na figura 58, 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

158

Experimentos com o Arduino - Edição 2.0

159

Experimentos com o Arduino - Edição 2.0

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. Em nosso protótipo usamos como sensor de pulsações um LDR comum com uma resistencia de 1 M ohm sem nenhuma luz

incidente, e 400 ohms com incidencia de luz natural direta. Veja a figura 59 abaixo. 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 junção entre a ponta e o meio do

dedo sobre o LED. A luz que é emitida pelo LED atravessa a pele da junção 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 LM358N 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

Figura 61: Montagem do sensor

160

Experimentos com o Arduino - Edição 2.0

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 60. 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. 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 computador. Para ver os batimentos cardíacos de uma pessoa carregue no seu Arduino o sketch da listagem abaixo.

int pinLed = 3;

volatile int state = 0; void setup() {

pinMode(pinLed, OUTPUT); //pino 3 saida

attachInterrupt(0, pulse, CHANGE);//pino 2 entrada interrupção }

void loop() {

digitalWrite(pinLed, state); //LED pisca com batimentos }

void pulse() {

state = !state; //complementa 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. Já conhecemos a função attachInterrupt( ) do capítulo 5, quando montamos o contador de dois dígitos. Vimos que ela requer tres parâmetros. O primeiro deverá ser o dígito 0 para o pino digital 2, ou 1 para o pino digital 3 do Arduino; o segundo parâmetro é a

161

Experimentos com o Arduino - Edição 2.0

função que será chamada quando a interrupção ocorrer; e o último parâmetro 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. Essa 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 o leitor 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 pressionando menos o dedo sobre o sensor é possível achar o ponto ótimo para ver oLED piscar regularmente. O ajuste fino é feito com o potenciometro.

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 LM358N dual opamp Outros Placa CI perfuração padrão

Borne 3 pinos parafuso

Podemos enviar nossos batimentos cardíacos pela porta serial para o computador e ver no terminal serial do Windows ou do Arduino sua forma digital como uma

162

Experimentos com o Arduino - Edição 2.0

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 abaixo e a forma dos pulsos na figura 60. As pausas de 10 ms entre as transmissões evitam a sobrecarga do buffer da porta serial.

// Enviando os pulsos cardiacos pela porta serial //

int pinLed = 3; //pino 3 saida volatile int state = 0;

void setup() {

pinMode(pinLed, OUTPUT);

attachInterrupt(0, pulse, CHANGE); //pino entrada interrupção Serial.begin(9600); //porta serial 9600 b/s }

void loop() {

digitalWrite(pinLed, state); //LED pisca com batimentos if(!state) Serial.write(45); //envia ascii 45 se falso delay(10);

if(state)Serial.write(95); //envia ascii 95 se verdadeiro

delay(10); //pausa 10 ms

}

void pulse(){

state = !state; //complementa state. }

163

Experimentos com o Arduino - Edição 2.0

No documento Livro sobre arduino (páginas 157-163)