【问题标题】:Why is the data coming out weird in arduino code?为什么在 arduino 代码中出现的数据很奇怪?
【发布时间】:2020-05-18 15:29:36
【问题描述】:

我想从传感器获取数据(我使用了 velostat)。这是我的代码。

Arduino 代码

#define numRows 1
#define numCols 1

int rows_out = 13;
int cols_in = 12;
int Values = 0;

void setup() {
  // set all rows and columns to INPUT (high impedance):
  pinMode(rows_out, INPUT_PULLUP);
  pinMode(cols_in, INPUT);
  Serial.begin(9600);
}

void loop() {

  pinMode(cols_in, OUTPUT); // set as OUTPUT
  digitalWrite(cols_in, LOW); // set LOW

  Values = analogRead(rows_out); // read INPUT
  pinMode(cols_in, INPUT); // set back to INPUT!

  // Print the incoming values of the grid:
  Serial.println(Values);
  delay(1000);

}

我用 velostat 制作了一个传感器。它有两条电缆。 我将其中一个与 arduino 板的模拟引脚连接起来。另一个带有 GND 和其他模拟引脚。像这样。

velostat 电缆 1 - 模拟针 12

velostat 电缆 2 - 模拟引脚 13 - GND

但是当我上传这个程序时,奇怪的数据出现在串行监视器上。

串行监视器上显示的数据

4095
4095
4075
3283
3082
3056
2973
2941
2865
2685
2308
1859
1365

如果有人知道原因,请帮助我。我猜是因为电缆连接有问题或者我连接了错误的引脚,但我不确定。

【问题讨论】:

  • Velostat 基本上是一个电阻器,它的电阻会随着施加的压力而变化。所以你需要通过在 Velostat 和 5v 之间连接一个电阻来形成一个分压器,Velostate 的另一端只需连接到 GND。如果您理解这一点,那么您的代码根本没有任何意义。

标签: arduino sensors


【解决方案1】:

数据可能没问题,你很可能跳过了校准步骤。

velostat 测量压力,但根据用于制造传感器的材料,其 PressureIn-VoltageOut 特性可能会有很大差异。此外,即使在相同构造的传感器中也存在差异,因此在需要精度的应用中,校准的需求至关重要。

为了简单起见,我建议您假设一个线性特性,并执行以下 3 步校准:

  1. 在传感器上没有任何压力时平均 10 个值。那将是您的零参考。我们将其称为 X1
  2. 按 velostat 上的平均预期压力并再次平均 10 次测量。这将是您的“ON”引用,我们将其引用为 X2。这个 ON 值需要一个任意数字等价物。我选择了 15。

在数学中,它看起来像:
aX1 + b = 0
aX2 + b = 15

  1. 求解 ab 后,您的 true 值将表示为:a*[measuerement]+b。李>

P.S.:对于可怕的数学格式感到抱歉,仍然不熟悉如何在 Markdown 中很好地集成数学。

稍后编辑:通过对更多测量值进行平均并为第二个方程选择更大的任意值(以获得更多粒度),可以获得更高的精度。

【讨论】:

  • 首先,感谢您的友好回答。但是,我认为存在一些误解。首先,我说这很奇怪的原因是数据已经改变,不管按下“velostat”。另外,我知道你的公式是为了平滑测量。如果我理解错了,你能再解释一下吗?
  • 嗯......你没有在 OP 中提到你没有改变压力水平,现在是吗?可能只是传感器构造,如果您使用两个铜片或其他一些自制构造,这是相当预期的。关于校准方法:只有平均是为了平滑,而 ax+b 只是为了将测量值转移到更有意义的尺度(意思是,再次,任意)。
猜你喜欢
  • 2021-10-11
  • 1970-01-01
  • 2014-02-05
  • 2018-07-08
  • 2023-01-07
  • 2022-07-08
  • 2020-05-30
  • 2014-06-01
  • 1970-01-01
相关资源
最近更新 更多