如何将模拟信号(即从脉冲速率传感器)转换为Arduino中的数字信号?

时间:2017-08-09 11:55:45

标签: arduino

这是我的第一篇文章。就像标题所说的那样,如何将模拟信号(如脉冲速率传感器)转换为数字信号,以便我可以使用类似Java的方式读取脉冲率?

这基本上是它的要点,在任何人问之前,我已经找到了这样的问题,但我仍然没有真正理解。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果通过"脉搏率传感器",你的意思是测量你的心率,那么我假设你正在处理输出模拟信号

通过模拟,我的意思是信号是随时间变化的电压。

在Arduino中,有一个名为analogRead(some pin # here)的内置命令,用于测量该瞬间的电压并返回一个10位数字(即0-1023)。此过程称为ADC(模数转换)。有关ADC的更多信息,请尝试使用Sparkfun Electronics的tutorial/article

在您的问题中,您提到您希望将数据读入Java应用程序(据我所知)。那么这样的事情怎么样:

关于你的arduino:

// ...

void loop() {
  // read voltage from 0-5V on pin A0 and store it in our sample buffer
  int sample = analogRead(A0);

  Serial.println(sample);
  delay(10);
}

这将通过串行连续发送转换后的数字信号,以便您可以通过USB将arduino连接到运行Java应用程序的计算机。

有许多方法可以用Java读取USB串口,但我推荐的库是jssc,因为它与Arduino的串口库相似。

Here是一些JSSC示例

您关注的主要问题是如何阅读串口:

import jssc.SerialPort; import jssc.SerialPortException;

public class Main {

public static void main(String[] args) {
    SerialPort serialPort = new SerialPort("COM1");
    try {
        serialPort.openPort();//Open serial port
        serialPort.setParams(9600, 8, 1, 0);//Set params.
        byte[] buffer = serialPort.readBytes(10);//Read 10 bytes from serial port
        serialPort.closePort();//Close serial port
    }
    catch (SerialPortException ex) {
        System.out.println(ex);
    }
}

}

在你的情况下,你应该:

  1. 声明样本的全局缓冲区
  2. 运行serialPort = ...serialPort.openPort()serialPort.setParams(...)
  3. 在循环中,在try ... catch块中使用serialPort.readBytes(...)将数据存储在缓冲区中
  4. 一旦你有足够的数据,你就可以从循环中分解出来(对于心跳等等)。
  5. 我会告诉您如何显示数据。快乐的编码:)