2013-01-05 165 views
3

我想用arduino使用温度传感器来构建一个小程序。Arduino温度传感器

我以为我知道如何去做,但我得到了一些奇怪的输出。

这里是我的代码:

int sensorPin = 0; 
void setup() 
{ 
    Serial.begin(9600); 
} 
void loop() 
{ 
    int reading = analogRead(sensorPin); 
    float voltage = reading * 5.0/1024; 
    float temperatureC = (voltage - 0.5) * 100; 
    Serial.print(temperatureC); Serial.print(" degrees C, "); 
    Serial.print(voltage); Serial.println(" volts"); 
    delay(1000); 
} 

此代码给我的输出:

-26.56 degrees C, 0.23 volts 
-26.56 degrees C, 0.23 volts 
-27.05 degrees C, 0.23 volts 
-26.56 degrees C, 0.23 volts 
-26.07 degrees C, 0.24 volts 
-26.07 degrees C, 0.24 volts 

为什么度-?为什么我可以将其更改为我想要的任何引脚,并且它仍然会给我一个类似的输出?

+0

示例'漂浮temperatureC =(电压 - 0.5)* 100;'如果您的电压为0.23五:'(0.23-0.5)* 100C =〜-26C' –

+0

请编辑以表明您正在使用的Arduino电路板版本。同时指出温度传感器型号。 – jdr5ca

+0

你从哪里得到'(电压-0.5)* 100'公式? – ZnArK

回答

3

模拟输入0不引脚0

应该使用所定义的符号:
A0,A1,...,A7
为模拟输入。

尝试

int sensorPin = A0; 

和你的程序应该工作。

如果你是好奇的实际值,你的Arduino IDE下的文件中安装的外观
.. \五金\ Arduino的\变种\标准\ pins_arduino.h

2

您正确阅读此输入。 为了让您不会得到负面的学位,您必须以不同的方式处理它。

有了这个:

float temperatureC = (voltage - 0.5) * 100; 

的任何值< 0.5结果由100

负数乘以尝试打破下来使用可交换的财产。

  • (voltage - 0.5) * 100(voltage * 100) - (0.5 * 100)相同。
  • 这可以进一步简化为(voltage * 100) - 50

仍然,对于所有值,其中voltage < 0.5的温度将是负值。

  • 我会建议由-1乘以temperatureC,使之积极,而不是把传感器附近的任何东西,是`〜> = 50摄氏度。

此外,由于jdr5ca指出here,你不会得到真正从传感器还没有任何数据... :(

你可能得到噪声(或垃圾)无论从任何pin0是。

编辑

它是用括号使运算顺序更清晰的最佳实践。

  • 即:
    • float voltage = reading * 5.0/1024;
    • 应该是
    • float voltage = reading * (5.0/1024);
0

首先,你必须使用定义的符号A0

int sensorPin = A0; 

in the next 

float voltage = reading * (5.0/1024); 

有一个在File/Examples/Basic/AnalogReadSerial