首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Arduino同时读取两个模拟输入

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

Stack Overflow用户
提问于 2013-12-17 00:22:05
回答 4查看 20.1K关注 0票数 3

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

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

例如:

  • 电位器处于0位置,传感器在室温空气中。序列显示TempSensor = 22 C,TSet =0 C,这是正常的。
  • 然后,当我打开锅: TempSensor= 40℃,TSet=55 C . -But温度传感器仍然在房间的温度空气中!所以锅值,TSet,会像它应该的那样上升,但也会影响传感器的读数,即使温度并没有真的改变。

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

代码语言:javascript
运行
复制
 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);
 }
EN

回答 4

Stack Overflow用户

发布于 2015-08-26 06:21:51

我最近遇到了一个类似的问题,我的搜索结果表明,在读取之间插入一个延迟可能会有帮助。在这个问题上,我发现这个答案这个答案特别有用。

这样做的想法是,你需要在读了一段时间后再读一遍,然后在模数转换器稳定之后再读一次。下面是我一直使用的一个函数:

代码语言:javascript
运行
复制
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()两次,这可能很重要。

票数 3
EN

Stack Overflow用户

发布于 2013-12-17 00:46:52

你很可能在你的温度传感器上有一个不接地或不接地。在Arduino中,模拟引脚上的引脚配置非常接近于彼此,因此当附近的引脚有外加电压时,浮动电压将向上或向下移动。如果你的地面连接(或者电源,如果一开始是正确的,很可能是接地的),传感器被断开或固定在高阻抗线上,模拟电压就会像其他通常极小的电压源一样在整个地方移动。如果你把你的手指靠近A3引脚,它可能会有很大的波动。

票数 0
EN

Stack Overflow用户

发布于 2016-05-03 21:32:53

它是噪音还是不好的价值?我做了一个小测试例程,看看一个引脚,并检查它与以前的最大值和最小值。每当出现新的边值时,我就把它打印到串行监视器上。如果错误的值是稳定的,检查电路。如果它的噪音围绕一个有效值,一个数字低通滤波器工作相当好。以34个读数为例。找到最高值和最低值,并丢弃这些值。然后取其余32个读数的平均值。我在我的设置中看到了90%的改进(40次计数错误下降到3)。36的读数,2次高,2次低丢弃,很可能会进一步改善情况。如果你有时间,你可以做一个双通滤波器。做同样的过程34次,然后扔掉高和低,并再次平均它。总之,这是34x34读数,所以噪音应该消失,但你需要很长时间才能得到一个样本,而一个罐子的变化将需要一段时间才能被检测到。为了节省时间,我每次通过主循环读取罐子,并将每个值保存在一个循环缓冲区中。当我需要阅读一个罐子的时候,我会看看历史上的33种读数,还有第34种新的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20623648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档