Um Monitor de batimentos cardíacos com o Arduino Hardware Nosso protótipo foi montado numa pequena placa p 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 ladoo da solda da placa. Parte 1: Vendo os pulsos Joãoo Alexandre da Silveira 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 s 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 nossoo coração. Emoções fortes como raiva e excitação causam um aumento da taxa de batimentos do coração humano. Outrass emoções como tristeza e pesar fazem essa taxa diminuir. Meditação, contemplaçã ão e outros estados mentais tambem mexemm com essa taxa. Com a ajudaa do Arduino e um amplificador de alto ganho com sensor ótico podemos monitorar nossa taxa dee 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. Figura 1: monitor de batimentos 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 t Stress-O-Meter. Esse tipo de monitor de batimentos cardíacoss é uma variante de um aparelho médico-hospm pitalar chamado pletismógrafo, que serve para medir (e registrar) variações no volume de um orgão como resultadoo de flutuações rítmicas da d circulaçãoo do sangue pelo corpo humano. Normalmente nesse tipo de aparelho essas e flutuações são captadas por um sensorr ótico posicionado em um lado do lóbulo de uma orelha, ou um lado da ponta de um u dos dedos, e com a fonte de 1
luz alinhada no lado oposto. Diferentemente, nosso aparelho mede as pulsações no fluxo de sangue na pontaa do dedo de uma das mãos do experimenta ador 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ótipoo 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. contrações do músculo cardíaco. Essa informação vai modular a resistência do LDR. Figura 3: 3 montadoo no Arduino Figura 2: sensor na caixa No circuito do monitor o resistorr R1 limita a correntee 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á s função da resistência do LDR que é função da luz refletida pelo dedo do experimentador. Como fonte de luz para o sensor usamos um LED vermelho comum de 3 mm. O experimentador deve posicionar o ladoo oposto à unha de seu dedo indicador i sobre o LDR, e a dobra entre a ponta e o meio do dedo sobre o LED. A luz que é emitidaa pelo LED atravessa a pele da dobra e é refletida pelo osso sobre uma pequena a concentração de artérias bem em cima do LDR. O volume de sangue nesse grupoo de artérias pulsa em sintonia com as Figura 4 2
inversor com c ganho de 560. Aqui o sinal moduladoo com os batimentos do coração do experimentador pode ser entregue para tratamentoo 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 f de luz/sensor. Para o nosso protótipo montamos esse conjunto em uma pequena caixa c plástica de 3x4x1 cm, como na figura 2. 2 Nessa caixa foi montada a pequena placa p perfurada com o LED Esses pulsos de muito baixaa frequencia, entree 1 e 2 hertz, seguem para um filtroo passa-altas formado por C1 e R3 e é amplificado pelo primeiro opamp do LM- ganho de 120. C2 e R5 formam um filtro passa-baixas centrado em 1,5 Hz. Essaa frequencia corresponde a 90 pulsos por minuto, que é a metade da frequencia f 358N na configuração não-inversor com maxima do coração humano. O potenciometro P1, que é a resistencia r de cargaa do primeiro amplificador, controla a entrada do segundo opampp tambem não- Figura 3: circuito do monitor de batimentos cardíacos Lista de componentes monitor de batimentos cardiacos com o Arduino 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 Led vermelho 3 mm LED2 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 vermelho de 3 mm e seu resistorr de 270 ohms e o LDR L 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. 3
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 / monitor batimentos cardíacos 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 4
transmissões evitam a sobrecarga do buffer da porta serial. e muito parecida comm a do Arduino, a linguagemm Processing. Listagem 2 / monitor batimentos cardíacoss 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; Figura 5: os pulsos do batimentoo cardíaco Na segunda parte desse artigo vamos visualizar melhor esses pulsos cardíacos agoraa digitalizados numa interface gráfica na tela do seu PC usando alguns poucos comandos de uma linguagem open source 5