创客联盟网

标题: Arduino小白自学教程016——analogRead之温度计 [打印本页]

作者: CCFIVE    时间: 2013-7-25 20:50
标题: Arduino小白自学教程016——analogRead之温度计
说了那么多analogRead来测电压好像没什么用丫~其实是很有用的,很多传感器都是通过测出当前电压表示当前的环境量。

例如今天实验用到的温度传感器LM35,它从零度开始通过感受到温度每升高1度,电压就升高10mV。例如现在是20度,那么电压就是20x10mV=200mV。现在analogRead若读回的电压数是200mV(200mA=0.2V),200mV/10=20度。我们明白了原理就很容易做出温度计出来了。

现在看下如何接线
(, 下载次数: 168)
让温度传感器上面的字“LM35”面向自己,然后从左到右引脚分别是vcc,Vout(接A0),gnd。然后再看下我们的程序:
[mw_shl_code=cpp,true]void setup()
{
    Serial.begin(9600);
}
void loop()
{
    int val = analogRead(A0);
    float temp = ((val * 5.0) / 1024.0) * 100;//((val*5.0)/1024.0)*1000/10
    Serial.println(temp);
    delay(1000);
}[/mw_shl_code]

                (, 下载次数: 144)
打开串口窗口,可以看到现在我的环境温度了~温度是在浮动的,因为电压也是在浮动的,这个跟很多因素有关,所以我们如果想让更准确的温度,最简单就是求平均数就好了!好了温度传感器的实验搞定了~



作者: 爷灬淡定    时间: 2013-8-16 20:10
做出了温度计,好兴奋啊,终于不用看天气预报了。
对了,能否解释一下
  float temp = ((val * 5.0) / 1024.0) * 100;//((val*5.0)/1024.0)*1000/10
是什么意思,小白,不太懂
作者: kekexinqing    时间: 2013-8-16 20:46
想把温度显示在lcd1602液晶屏上,代码要怎么写啊,,,,,
作者: CCFIVE    时间: 2013-8-16 20:56
爷灬淡定 发表于 2013-8-16 20:10
做出了温度计,好兴奋啊,终于不用看天气预报了。
对了,能否解释一下
  float temp = ((val * 5.0) / 10 ...

LM35从零度开始通过感受到温度每升高1度,电压就升高10mV。例如现在是20度,那么电压就是20x10mV=200mV。现在analogRead若读回的电压数是200mV(200mA=0.2V),200mV/10=20度。


(val*5.0)/1024.0 求出电压(V)

*1000 转换电压单位(mV)

/10 求出温度

作者: 爷灬淡定    时间: 2013-8-17 12:27
//A0是光敏电阻的检测模拟引脚
//A5是热敏电阻的检测模拟引脚
void setup()
{
  Serial.begin(9600);
  pinMode(1,OUTPUT);//热敏电阻蜂鸣器警告的引脚
  pinMode(7,OUTPUT);//光敏电阻光控灯的引脚
}
void loop()
{
int val=analogRead(A5);
float temp=((val*5.0)/1024.0)*100;
Serial .println(temp);
delay(1000);
if (temp>35)    //如果气温达到35度以上,蜂鸣器会发出警告
{
  digitalWrite(1.HIGH);
}
else
{
  digitalWrite(1,LOW);
}

int l=analogRead(A0);
Serial.println(l);
if(l>900)                                         //如果亮度达到900以上,光控灯会发光
{
  digitalWrite(7,HIGH);
}
else
{
  digitalWrite(7,LOW);
}
}


这是我写的一个气温计+光控灯,就是温度高了,就会有响声(夏天很实用),如果在晚上,就会自动发光。(也算是个小家电了吧,用电池很方便的)
不过有几个问题
1.这个程序居然编译出错,我也不知道哪错了,编译器给出的答案是
ino:15:16: error: invalid suffix "HIGH" on floating constant
错误: 无效的后缀“高电平”在悬浮的常数。
2.因为串口记录的是两个值,气温值和光敏值,但是蜂鸣器检测到一个基本是30,还有一个光敏基本是800左右
所以蜂鸣器会一直叫。怎么让蜂鸣器只检测到气温的temp?

求大神指点


作者: CCFIVE    时间: 2013-8-18 10:41
爷灬淡定 发表于 2013-8-17 12:27
//A0是光敏电阻的检测模拟引脚
//A5是热敏电阻的检测模拟引脚
void setup()
f (temp>35)    //如果气温达到35度以上,蜂鸣器会发出警告
{
  digitalWrite(1.HIGH);
}



HIGH前面你用的不是英文逗号,所以报错

第二点没理解...你现在情况是一直报警吗?

作者: 爷灬淡定    时间: 2013-8-18 11:11
CCFIVE 发表于 2013-8-18 10:41
HIGH前面你用的不是英文逗号,所以报错

第二点没理解...你现在情况是一直报警吗?

这是因为粗心啊,细节是关键第二点我是感觉是不是temp检测到光敏电阻的值

delay(1000);
if (temp>31)
{
  digitalWrite(1,HIGH);
}
else
{
  digitalWrite(1,LOW);
}


因为,这时候光敏电阻能正常使用
但是蜂鸣器就一下一下的叫着
(, 下载次数: 62)
这是为什么





欢迎光临 创客联盟网 (https://immaker.org/) Powered by Discuz! X3.3