How do i plot ECG sensor data from arduino to ECG graph using matlab?

84 visualizaciones (últimos 30 días)
Sai Pavan Nunna
Sai Pavan Nunna el 20 de Feb. de 2019
Comentada: Ahmar Riaz el 8 de Feb. de 2020
Can anyone share with the code on how to plot ECG sensor data into ECG graph using Matlab visualization in Thingspeak. I am able to do using Processing IDE.I want to do the same in Thingspeak.
Teh processing code is https://github.com/sparkfun/AD8232_Heart_Rate_Monitor. I want the equivalent matlab code. I am not able to get the equivalent.
Please someone help me.
  2 comentarios
Hans Scharler
Hans Scharler el 20 de Feb. de 2019
Are you using an Arduino to collect data? I recommend an Arduino MKR 1000 or 1010. These devices have Wi-Fi and can send data to ThingSpeak using our official library.
Sai Pavan Nunna
Sai Pavan Nunna el 20 de Feb. de 2019
Yes, I am using Arduino Uno. I am not able to send ECG data to Thingspeak.please help me.

Iniciar sesión para comentar.

Respuestas (2)

Madhu Govindarajan
Madhu Govindarajan el 22 de Feb. de 2019
You can search through the MATLAB File Exchange to see if there are pre-existing libraries that you can use. If not, you will have to first write the MATLAB Code equivalent of the arduino sketches yourself to bring in the ECG data to MATLAB or write custom add-on libraries to bring this in using existing arduino libraries (https://www.mathworks.com/help/supportpkg/arduinoio/ug/custom-arduino-add-on-device-library-and-code.html).
I would recommend posting the code you want converted here in MATLAB answers and ask for help, as some experts might be able to help you with that. Once you have the code to bring in the data to MATLAB, then it should be easy to send data to ThingSpeak.
  2 comentarios
Sai Pavan Nunna
Sai Pavan Nunna el 23 de Feb. de 2019
Editada: Sai Pavan Nunna el 23 de Feb. de 2019
The processing IDE code for ECG Sensor is as shown below . I know on how to get the data from the sensor to Matlab. I want to how to convert the input signals to the ECG waves done by the code.
[code]
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;
int BPM = 0;
int beat_old = 0;
float[] beats = new float[500]; // Used to calculate average BPM
int beatIndex;
float threshold = 620.0; //Threshold at which BPM calculation occurs
boolean belowThreshold = true;
PFont font;
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);
font = createFont("Ariel", 12, true);
}
void draw () {
//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++;
}
// draw text for BPM periodically
if (millis() % 128 == 0){
fill(0xFF);
rect(0, 0, 200, 20);
fill(0x00);
text("BPM: " + inByte, 15, 10);
}
}
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);
// BPM calculation check
if (inByte > threshold && belowThreshold == true)
{
calculateBPM();
belowThreshold = false;
}
else if(inByte < threshold)
{
belowThreshold = true;
}
}
}
}
void calculateBPM ()
{
int beat_new = millis(); // get the current millisecond
int diff = beat_new - beat_old; // find the time between the last two beats
float currentBPM = 60000 / diff; // convert to beats per minute
beats[beatIndex] = currentBPM; // store to array to convert the average
float total = 0.0;
for (int i = 0; i < 500; i++){
total += beats[i];
}
BPM = int(total / 500);
beat_old = beat_new;
beatIndex = (beatIndex + 1) % 500; // cycle through the array instead of using FIFO queue
}
[/code]
Ahmar Riaz
Ahmar Riaz el 8 de Feb. de 2020
sir can you please tell whar are matlab and arduino vcoads

Iniciar sesión para comentar.


Madhu Govindarajan
Madhu Govindarajan el 25 de Feb. de 2019
Here are my thoughts on this topic and unfortunately I am not a subject matter expert on this.
This video shows how we built a heart rate detector using Arduino and MATLAB to analyze ECG data. When you bring in ECG data as an analog voltage into an Arduino, usually you need a high sample rate (in our case 200 Hz) to be able to see the P wave QRS complex and T wave. When you have a code running on Arduino and send data serially over to MATLAB it is difficult to achieve those speeds reliably (best we got was around 60 Hz).
This is why we chose the Simulink Support package for Arduino workflow. As shown in the video, you can bring in Analog voltage data at 200 Hz and then use ThingSpeak blocks to log data to the cloud.
HTH,
Madhu

Comunidades de usuarios

Más respuestas en  ThingSpeak Community

Categorías

Más información sobre Write Data to Channel en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by