Arduino ECG溅出完全随机的值

时间:2015-01-21 02:50:31

标签: c bluetooth arduino

Hello StackExchange社区,

我的ECG / EKG设计遇到了问题。我正在尝试使用Arduino作为微控制器来创建ECG,以通过蓝牙(JY-MCU)发送/检索心率测量。我知道我的电路正常工作,因为当我在运放输出端放置一个LED及其接地时,如果我轻轻地将手放在引线上,我会轻微调光。我知道问题出在我的代码上。我已经在这个项目上工作了一段时间,但仍然无法找到解决方案。这是我的原理图。

1 http://i57.tinypic.com/10p68ef.jpg

抱歉,您可能需要翻转屏幕才能看到图片!这是我认为不正确的代码。代码只是最低限度。

// External variables
const int  signal = 8;    // Pin connected to the filtered signal from the circuit
unsigned long time;   
unsigned long frequency;
char freq[3];

// Internal variables
double period = 2000;
double starttime = 2000;
double input = 0;
double lastinput = 0;
unsigned long death = 0;

// initialize the library with the numbers of the interface pins

void setup() {
pinMode(signal, INPUT);
Serial.begin(9600);
}

void loop() {
delay(500);

time = millis();
input = digitalRead(signal);

 period = time - starttime; // Compute the time between the previous beat and the one that has just been detected
 starttime = time; // Define the new time reference for the next period computing
 death = time;
 frequency = 60000/period;
 freq[0] = frequency/100+48; // Sort the hundreds character and convert it in ASCII
 freq[1] = (frequency/10)%10+48; // Sort the thents character and convert it in ASCII
 freq[2] = frequency%10+48; // Sort the units character and convert it in ASCII
 Serial.println(freq);
}

我得到的只是120或119作为我的价值。它在这两者之间波动。我尝试更换电阻器,但没有做任何事情。我也把针8和面包板之间的电线完全取出,它仍然在119到120之间波动。我不知道这里发生了什么!如果有人能帮助我,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您的代码没有做任何远程有用的事情。它肯定不会测量输入频率 - 实际上它甚至不关心输入信号的值是什么,并且无论外部发生什么,它都会表现相同。它所做的只是测量调用loop()和将此时间转换为每分钟周期的频率之间的时间。由于loop()的延迟时间为500毫秒,因此频率为2 Hz = 120周/分钟,这与您看到的数字一致。

粗暴地说,我怀疑你的电路将能够测量心电信号,即使你确实得到了正确的代码 - 它太粗糙了 - 但是你至少可以测量的东西< / em>与频率相关的您可能想尝试在loop()中实现以下代码:

input = digitalRead(signal);
while (input == digitalRead(signal))
    ; // wait for input signal to change state (sync)
start = millis();
while (input != digitalRead(signal))
    ; // wait for input signal to change state (first part of period)
while (input == digitalRead(signal))
    ; // wait for input signal to change state (one complete period)
end = millis();
period = end - start;
freq = 60000 / period;

请注意,如果您的输入信号没有定期更改状态,这将挂起。

另请注意,如果您有一个完全干净的输入信号,即仅在感兴趣的频率下改变状态且没有噪声转换的信号,这将仅提供有用的频率测量。在实践中,您可能最终只能测量电源嗡嗡声或其他背景噪音的频率。