Você está na página 1de 6

Circuito Monitor de Batimentos Cardíacos




 inShare1
 102

A frequência cardíaca ou ritmo cardíaco é o número de batimentos do


coração por unidade de tempo, geralmente expresso em batimentos por
minuto ou bpm. A frequência cardíaca pode ser medida manualmente
através da leitura da pulsação nos pulsos, pescoço, pernas, etc.
Mas os batimentos do coração também pode ser medida eletronicamente
pelo eletrocardiograma ou monitor cardíaco. No caso do
eletrocardiograma veja os artigos já publicados como
o Eletrocardiograma usando Placa de Som que é um ECG Caseiro e
a Máquina de Eletrocardiograma Caseiro.
Este circuito surgiu por acaso, já que segundo o criador o circuito original
era para detectar se a água está fluindo por um tubo através da medição
da vibração com um sensor piezoelétrico, só que o criador percebeu que
o sensor estava lendo os seus batimentos cardíacos quando o sensor
era segurado por ele.

Medidor de Batimentos Cardíacos

Sensor de vibração
O projeto usa um Arduino e um sensor de vibração que utiliza um piezo
comercial como este acima, não deve custar mais de R$15,00. Mas caso
queira, você mesmo pode fazer seu sensor, abaixo um circuito eletrônico
de sensor de vibração com uma pastilha piezoelétrica.
No circuito R3 é um resistor de 1 MΩ e R2 uma resistência de 250 kΩ,
todas de 1/8 Watts. Não esqueça de fazer as modificações para acoplar
ao Arduino.

Sensor de vibração
usando transdutor Piezoelétrica via
O circuito do Medidor de Batimentos Cardíacos usando o sensor piezo
é mais simples que o monitor usando Led.

Sensor
Piezo no dedo
Ao definir um limite arbitrário (por exemplo, metade do valor máximo
medido), a borda de subida do sinal vai passar o limiar de uma vez por
batimento cardíaco, fazendo medi-lo tão simples como medir o tempo
entre duas batidas sucessivas.
Para calcular a frequência cardíaca é utilizada a média dos últimos 16
batidas do coração.

Abaixo está o código rápido  que calcula a taxa de frequência cardíaca


média ao longo dos últimos 16 batidas :

void setup() {
Serial.begin(57600);
}
void loop() {
int avg = 0;
for(int i=0;i<64;i++){
avg+=analogRead(A2);
}
Serial.println(avg/64,DEC);
delay(5);
}

A ligação é simples basta ligar a saída analógica do sensor em A2 (ou


alterar o código) e conectar as linhas do sensor de 5V e GND.

int threshold = 60;


int oldvalue = 0;
int newvalue = 0;
unsigned long oldmillis = 0;
unsigned long newmillis = 0;
int cnt = 0;
int timings[16];
void setup() {
Serial.begin(57600);
}
void loop() {
oldvalue = newvalue;
newvalue = 0;
for(int i=0; i<64; i++){ // Average over 16 measurements
newvalue += analogRead(A2);
}
newvalue = newvalue/64;
// find triggering edge
if(oldvalue=threshold){
oldmillis = newmillis;
newmillis = millis();
// fill in the current time difference in ringbuffer
timings[cnt%16]= (int)(newmillis-oldmillis);
int totalmillis = 0;
// calculate average of the last 16 time differences
for(int i=0;i<16;i++){
totalmillis += timings[i];
}
// calculate heart rate
int heartrate = 60000/(totalmillis/16);
Serial.println(heartrate,DEC);
cnt++;
}
delay(5);
}

18MAR/1524
While trying to create a circuit that detects whether water is
flowing through a pipe by measuring the vibration with a
piezoelectric sensor, just to see what happens I taped the sensor
around my finger and - to my surprise - got values that were a
very noise-free representation of my heart rate!

Piezo sensor taped to finger


Analog values from a piezoelectric sensor taped to my finger.

This is even easier than using LEDs as it only requires a


piezoelectric sensor and an Arduino. (and a piece of tape)
The sensor I used is a DFRobot Piezo Disc Vibration Sensor
Module.

1 void setup() {
2   Serial.begin(57600);
3 }
4  
5 void loop() {
6   int avg = 0;
7   for(int i=0;i<64;i++){
8     avg+=analogRead(A2);
9   }
10   Serial.println(avg/64,DEC);
11   delay(5);
12 }

When defining an arbitrary threshold (e.g. half of the maximum


measured value), the rising edge of the signal will pass the
threshold once per heartbeat, making measuring it as simple as
measuring the time between two successive beats. For less jitter,
I chose to calculate the heart rate using the average of the last
16 time differences between the beats.
Here's a quick and dirty code that calculates the heart rate and
outputs the average heart rate over the last 16 beats at every
beat:
1 int threshold = 60;
2 int oldvalue = 0;
3 int newvalue = 0;
4 unsigned long oldmillis = 0;
5 unsigned long newmillis = 0;
6 int cnt = 0;
7 int timings[16];
8  
9 void setup() {
10   Serial.begin(57600);
11 }
12  
13 void loop() {
14   oldvalue = newvalue;
15   newvalue = 0;
16   for(int i=0; i<64; i++){ // Average over 16 measurements
17     newvalue += analogRead(A2);
18   }
19   newvalue = newvalue/64;
20   // find triggering edge
21   if(oldvalue<threshold && newvalue>=threshold){
22     oldmillis = newmillis;
23     newmillis = millis();
24     // fill in the current time difference in ringbuffer
25     timings[cnt%16]= (int)(newmillis-oldmillis);
26     int totalmillis = 0;
27     // calculate average of the last 16 time differences
28     for(int i=0;i<16;i++){
29       totalmillis += timings[i];
30     }
31     // calculate heart rate
32     int heartrate = 60000/(totalmillis/16);
33     Serial.println(heartrate,DEC);
34     cnt++;
35   }
36   delay(5);
37 }

If you would like to try this at home, just connect the analog
output of the sensor to A2 (or change the code) and connect the
5V and GND lines of the sensor.

Você também pode gostar