quarta-feira, 20 de março de 2019

Monitor de Frequência Cardíaca AD8232 com interface Arduino


      O AD8232 é um circuito integrado para monitorar a frequência cardíaca. O AD8232 é um bloco de condicionamento de sinal integrado para aplicações de medição de ECG e outros sinais de bioeltericidade. Ele é projetado para extrair, amplificar e filtrar pequenos sinais na presença de condições ruidosas através de 3 eletrodos.



     Este projeto permite que um conversor analógico-digital de energia ultrabaixa (ADC) ou um microcontrolador incorporado adquira o sinal de saída com facilidade.

O que é ECG?



     Crédito de imagem: Wikipedia.org

           Esta onda de ECG tem duas seções como intervalo PR e intervalo QT, usando o AD8232 IC podemos obter menos informações de ruído.

Placa de monitor de coração AD8232








.




     É simples e fácil de usar esta placa para monitoramento de freqüência cardíaca. Esta placa mede a atividade elétrica do coração através dos eletrodos  colocados na pele. Ao conectar esta placa com o Arduino, podemos obter o gráfico de ECG através da janela Processing IDE.


Ligações.

 Etiqueta da placa
Pino Função
Conexão Arduino
GND
terra
GND
3.3v
Fonte de alimentação 3.3v
3.3v
OUTPUT
Sinal de saída
A0
LO-
Leads-off Detectar -
11
LO +
Leads-off Detect +
10
SDN
Desligar
Não usado

Eletrodos.


Cor do cabo
Sinal
Preto
RA (braço direito)
Azul
LA (braço esquerdo)
Vermelho
RL (perna direita)


AD8232 Conexão com Arduino


Crédito de imagem: theorycircuit.com

      Conecte os eletrodos correspondentes na pele e forneça a fonte de alimentação 3.3V e GND da placa Arduino, o pino SDN (shutdown) não está conectado a nenhuma parte. O pino OUTPUT está ligado ao A0 (entrada analógica 0) do Arduino. Para detectar o Leads off, os pinos LO -, LO + estão conectados ao pino digital Arduino D11 e D10, respectivamente.

Código Arduino


/******************************************************************************

Heart_Rate_Display.inoDemo Program for AD8232 Heart Rate sensor.

Casey Kuhns @ SparkFun Electronics 6/27/2014

https://github.com/sparkfun/AD8232_Heart_Rate_Monitor

******************************************************************************/

 

void setup() {
  // initialize the serial communication:
  Serial.begin(9600);
  pinMode(10, INPUT); // Setup for leads off detection LO +
  pinMode(11, INPUT); // Setup for leads off detection LO -
 
}
 
void loop() {
  
  if((digitalRead(10) == 1)||(digitalRead(11) == 1)){
    Serial.println('!');
  }
  else{
    // send the value of analog input 0:
      Serial.println(analogRead(A0));
  }
  //Wait for a bit to keep serial data from saturating
  delay(1);
}
 

 

Código de processamento


/******************************************************************************
Heart_Rate_Display.inoDemo Program for AD8232 Heart Rate sensor.
Casey Kuhns @ SparkFun Electronics 6/27/2014
https://github.com/sparkfun/AD8232_Heart_Rate_Monitor
******************************************************************************/
import processing.serial.*;
 
Serial myPort;        // The serial port
int xPos = 1;         // horizontal position of the graph
float height_old = 0;
float height_new = 0;
float inByte = 0;
 
 
void setup () {
  // set the window size:
  size(1000, 400);
 
  // List all the available serial ports
  println(Serial.list());
  // Open whatever port is the one you're using.
  myPort = new Serial(this, Serial.list()[0], 9600);
  // don't generate a serialEvent() unless you get a newline character:
  myPort.bufferUntil('\n');
  // set inital background:
  background(0xff);
}
 
 
void draw () {
  // everything happens in the serialEvent()
}
 
 
void serialEvent (Serial myPort) {
  // get the ASCII string:
  String inString = myPort.readStringUntil('\n');
 
  if (inString != null) {
    // trim off any whitespace:
    inString = trim(inString);
 
    // If leads off detection is true notify with blue line
    if (inString.equals("!")) {
      stroke(0, 0, 0xff); //Set stroke to blue ( R, G, B)
      inByte = 512;  // middle of the ADC range (Flat Line)
    }
    // If the data is good let it through
    else {
      stroke(0xff, 0, 0); //Set stroke to red ( R, G, B)
      inByte = float(inString);
     }
 
     //Map and draw the line for new data point
     inByte = map(inByte, 0, 1023, 0, height);
     height_new = height - inByte;
     line(xPos - 1, height_old, xPos, height_new);
     height_old = height_new;
 
      // at the edge of the screen, go back to the beginning:
      if (xPos >= width) {
        xPos = 0;
        background(0xff);
      }
      else {
        // increment the horizontal position:
        xPos++;
      }
 
  }
}
 
No link abaixo há informações sobre a janela do Processing.
https://www.arduinoecia.com.br/2014/09/tutorial-arduino-processing.html

Nenhum comentário:

Postar um comentário