celikthomas
Published © GPL3+

Portable Signal Processing Kit with ECG

This kit is designed to acquire signals, filter them and record an ECG.

BeginnerFull instructions provided507
Portable Signal Processing Kit with ECG

Things used in this project

Hardware components

Arduino Due
Arduino Due
×1
SparkFun Single Lead Heart Rate Monitor - AD8232
SparkFun Single Lead Heart Rate Monitor - AD8232
×1
ECG electrodes
×1
Male/Male Jumper Wires
×1
Circuit connectors
×1
different resistors
×1
different capacitors
×1

Story

Read more

Schematics

Lowpass

With the low pass high frequencies are suppressed

ECG

Starting up the ECG Module

Code

NOISE.ino

C/C++
This code is there to generate a noise signal
void setup()
{
  analogWriteResolution(12);      //Bit Auflsung
  analogReadResolution(12);
  Serial.begin(250000);            //Auswahl serieller Plotter

}

void loop() {
  analogWrite (DAC1, random(0, 4095.0)); //Erzeugung Zufallssignal
  Serial.print(analogRead(A6));   //Ausgabe: Ungefiltertes Rauschen
  Serial.print(" ");
  Serial.println(analogRead(A7));  //Ausgabe: Gefiltertes Rauschsignal
delay(1);
}

LookupTable.ino

C/C++
With this sketch you can create a sine wave up to a frequency of 500Hz. The method is to use a LookupTable
//Erzeugung eines Sinussignals
//Deklarieren von Variablen
float einlesen;
float spannung;
float einlesen1;
float spannung1;
float t;                                                      // Zeitvariable
// Einstellung der Abtastfrequenz / Nyquisttheorem aufstellen
const float Fa = 1000.0;                               
float Nyquist = 0.5*Fa;
// Eingabe einer gewnschten Frequenz ( Beispiele: 0.1; 1.0; 10.0; 50.0; 100.0; 200.0)      [Hz]
const float frequenz = 0.5;
//Initialisieren der Blocklnge N (Gre des Arrays) und Deklarieren des Arrays fr das Signal 
const int N = Fa/frequenz;  
int sig[N]; // Array
// Initialisieren des Abtastintervalls
float delaydt = (1/Fa)*1000;
//Einstellen der gewnschten Amplitude (DAC OUTPUT: 0.55 - 2.65V)
float maxamp = 2.65;
float minamp = 0.55;
float Amplitude = 2.65;      // -> 1.05V ist die maximale Amplitude = [(2.65-0.55)/2] 
float amp = Amplitude/maxamp;

void setup()
{
  analogWriteResolution(12);    //Bit Auflsung auf 2^12 setzen
  analogReadResolution(12);
  Serial.begin(250000);         //Plotauswahl
    for (int i = 0; i < N; i++)
    {
      t =  i/Fa; // t = betrachteter Zeitpunkt
      // +1.0 fr den Versatz an der Ordinate
      sig[i] = 2047.0*(amp*(sin(2*PI*frequenz*t))+1.0);   //Erstellen einer Lookup Table
      
      
    }
}

void loop()
{
  if( frequenz < Nyquist){      //Abfrage des Nyquisttheorems
  for (int i = 0; i < N; i++)   
  {
    
    analogWrite (DAC1, sig[i]);           
    einlesen = analogRead(A7);
    spannung = (einlesen * 2.65) / 4095.0;      //Umrechnung in Voltwerten
    einlesen1 = analogRead(A6);                 
    spannung1 = (einlesen1 * 2.65) / 4095.0;
    
    Serial.print(spannung);                     //Ausgabe vor der Filterung
    Serial.print(" ");
    Serial.println(spannung1);                  //Ausgabe nach der Filterung
    delay(delaydt);                             //Einstellen des Abtastintervalls
  }
  }
  else {                                                  
    Serial.println("Nyquist Abtasttheorem nicht erfllt");     
    delay(1000);                                //Ausgabe im Sekundentakt, wenn die Frequenz zu hoch ist
  }

  
}

ECG.ino

C/C++
This sketch is used to acquire and output the ECG signal.
void setup() {
  
Serial.begin(9600);   //Auswahl serieller Plotter
pinMode(10, INPUT);   //einstellen der digitalen Pins als Eingnge
pinMode(11, INPUT);
}
void loop() {
 
  if((digitalRead(10) == 1) || (digitalRead(11) == 1)){   //LeadsOffDetection
Serial.print('!');                  
  }
  else {

    Serial.println(analogRead(A7 ));    //Ausgabe des EKGs
  }
delay(10);
}

Credits

celikthomas
0 projects • 0 followers
Contact

Comments

Please log in or sign up to comment.