使用Arduino同时读取两个模拟输入

问题描述 投票:2回答:3

我们正在模拟一个烤箱。电位计设定所需的温度,传感器读取当前温度为“烤箱”的小铜板。

温度传感器都连接到我的arduino uno上的模拟输入引脚。单独地,我已经获得了有意义的电位计和温度传感器的值(我正在监视串行窗口上的值)。但是,当我调整电位器时,它会显着改变传感器读数。

例如:

  • 电位器处于0位置,传感器处于室温空气中。序列显示TempSensor = 22 C,TSet = 0 C.这是正常的。
  • 然后当我把锅翻起来时:TempSensor = 40 C,TSet = 55 C.但是温度传感器仍然在室温空气中!因此,罐值TSet应该像它应该的那样上升,但是即使温度没有真正改变,它也会影响传感器的读数。

任何建议将不胜感激。谢谢!

 void setup() {    
     Serial.begin(9600); 
 }

 void loop() {  
     int sensorValue = analogRead(A3);
     float tsens =  map(sensorValue, 0, 1023, 0, 500); 

     int sensorValue2 = analogRead(A1);
     float tset =  map(sensorValue2, 0, 1023, 0, 70);

     Serial.println(tsens); 
     Serial.println(tset);
 }
arduino analog-digital-converter
3个回答
2
投票

我最近遇到了类似的问题,我的搜索建议在读取之间插入延迟可能会有所帮助。在this question,我发现this answerthis answer特别有帮助。

这个想法是你需要在读取后让一些时间过去,然后在ADC稳定后再做一次读数。这是我一直在使用的功能:

int safeAnalogRead(int pin)
{
  int x = analogRead(pin);  // make an initial reading to set up the ADC
  delay(10);                // let the ADC stabilize
  x = analogRead(pin);      // toss the first reading and take one we will keep
  delay(10);                // delay again to be friendly to future readings
  return x;
}

我仍然无法准确读取连接到模拟引脚的几个电位器,这些模拟引脚被配置为vcc和地之间的分压器,但至少现在这些值是稳定的。

顺便说一下,可以说,由于你在第一次阅读后有延迟,所以没有必要进行第二次延迟。如果你在两个不同的引脚上快速连续两次调用safeAnalogRead(),这可能很重要。


0
投票

您的温度传感器很可能没有接地或接线错误。 Arduinos中模拟引脚上的引脚配置彼此非常靠近,这样当附近的引脚具有施加的电压时浮动电压将向上或向下移动。如果传感器断开或固定在高阻抗线路上的接地连接(或电源,但如果它在开始时可能正确接地),则模拟电压将在整个地方移动,因为其他通常微小的电压源将主导信号寻路。如果你把手指放在A3引脚附近,它可能会波动很大。


0
投票

是噪音还是坏价值?我做了一个小测试程序,查看一个引脚,并根据之前的最大值和最小值检查它。每当出现新的边界值时,我都会将其打印到串行监视器上。如果错误值稳定,请检查电路。如果噪声在有效值附近,则数字低通滤波器工作得很好。拿34个锅的读数。找到最高和最低值并丢弃它们。然后取其余32个读数的平均值。我看到我的设置有90%的改进(40个计数误差减少到3个)。 36个读数有2个高和2个低丢弃可能会进一步改善。如果你有时间,你可以做一个双通过滤器。做同样的过程34次,然后扔掉高低,再次平均。所有这些都是34 x 34读数,因此噪音应该消失,但是您需要花费很长时间才能获得样品并且更换锅需要一段时间才能被检测到。为了帮助节省时间,我每次通过主循环读取底池并将每个值保存在循环缓冲区中。当我需要阅读一个底池时,我会看到历史上的33个读数以及第34个新的读数。

© www.soinside.com 2019 - 2024. All rights reserved.