【问题标题】:Why are Arduino AnalogOutput values always wrong? Significantly off为什么 Arduino 模拟输出值总是错误的?明显关闭
【发布时间】:2018-05-29 14:38:11
【问题描述】:

发生的情况是,无论我在 Arduino Elegoo R3 板上放置什么类型的传感器,我的值都被读取错误。

发生了什么:

模拟温度传感器 - 读数 400+ 摄氏度

火焰检测传感器 - 根据火焰距离在两者之间读取 0、1023(挖掘)或 0、1(模拟)no。

详情: 板 - Elegoo Uno R3

面包板

传感器来自 Elegoo 37 传感器套件 - https://github.com/josejuansanchez/37-in-1-arduino-sensor-kit

基本代码:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(A0, INPUT);
}

void loop() {
  int reading = analogRead(A0);  

 // converting that reading to voltage, for 3.3v arduino use 3.3
 float voltage = reading * 5.0;
 voltage /= 1024.0; 

 // print out the voltage
 Serial.print(voltage); Serial.println(" volts");

 // now print out the temperature
 float temperatureC = (voltage - 0.5) * 100 ;  //converting from 10 mv per degree wit 500 mV offset
                                               //to degrees ((voltage - 500mV) times 100)
 Serial.print(temperatureC); Serial.println(" degrees C");

 // now convert to Fahrenheit
 float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
 Serial.print(temperatureF); Serial.println(" degrees F");

 delay(1000);     
}

我尝试过其他传感器并遇到类似问题。

这让我相信我在接线上做错了什么。但是,有一张显示引脚连接的照片,我使用面包板完全按照照片所示接线

我在这里找到的教程正是我为火焰检测设置电路板的方法:http://www.instructables.com/id/Arduino-Modules-Flame-Sensor/

我或本教程缺少什么会导致传感器读数错误?

【问题讨论】:

  • 对于您的 ADC - 您不需要 ADC 的启动转换信号吗?你能提供analogRead(A0);的代码吗?另外,你的入门套件中的确切控制器是什么?

标签: arduino microcontroller sensors


【解决方案1】:

要尝试的一件事是“现实检查”:将已知的正电压连接到 A0,另一侧接地。一个已知良好的 1.5V 电池应该没问题......它应该返回大约 1024 * 1.5 / 5 = 307 的读数。如果是这样,你知道你的 Uno 和代码是好的;如果没有,请再次检查您的传感器和接线。

另一个简单的测试是使用万用表(他们经常免费提供的港口货运工作之一很好),并测量有无火焰的传感器输出电压。

【讨论】:

    【解决方案2】:

    假设 Elegoo Uno R3 使用 atmega328,这里是 ADC 的一个示例代码。 通常读取传感器涉及将传感器连接到控制器上的模拟通道之一(如果控制器内置 ADC)。然后您需要在控制器中配置 ADC。一旦配置完成,然后读取通道,您需要给出信号以开始转换(基本上在那一刻什么是模拟值并转换为数字值)并等待转换完成。然后您可以从控制器的 ADC 寄存器中读取数字值。 以下链接中的 atmega328 示例

    Example code

    在你提到的火焰传感器中,你需要连接Adreno板的任何模拟通道的A0模拟信号。 D0是一个数字通道,根据温度是否达到某个阈值,只会给你0或1。

    【讨论】:

      【解决方案3】:

      我获取了您的确切代码,并将其下载到 Arduino。

      通过插入从 A0 到 GND、3.3V 和 5V 的跳线,您的代码似乎工作正常,因为电压值显示正确。

      顺便说一句,您的 setup() 例程中不需要“pinMode(A0, INPUT)”行。

      如果此设置不起作用,则可能意味着通道 A0 出现故障。 Boggyman 建议的现实检查正是您所需要的,而 Arduino 板可以轻松提供其中三个值。顺便说一句,这些是模拟输入,而不是输出;您帖子的标题在技术上不正确。

      0.00 volts
      -50.00 degrees C
      -58.00 degrees F
      3.33 volts
      282.52 degrees C
      540.54 degrees F
      5.00 volts
      449.51 degrees C
      841.12 degrees F
      5.00 volts
      

      【讨论】:

        猜你喜欢
        • 2018-09-19
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 2013-02-03
        相关资源
        最近更新 更多