Arduino 卡片7 温度报警器

来源:互联网 发布:linux中find mtime 编辑:程序博客网 时间:2024/04/29 21:00

1、硬件部分

温度报警器。当温度到达我们设定的限定值时,报警器就会响,只是抛砖引玉,以后可自由发挥,能学到的知识点,串口监视器的使用。

LM35温度传感器正负为两测(正负极的方法:平面对自己,左边为+,右边为负,中间为模拟信号输出,具体还得看说明,这是自己总结的),Arduino板的右下方A0-A5是模拟信号的输入端子;

 

2、代码部分

float sinValue;int toneVal;unsigned long tepTimer;void setup() {  pinMode(8,OUTPUT);  Serial.begin(9600); //使用串口监控}void loop() {  int val = analogRead(0);  //用于读取LM35的值,读取到的是电压的值  double data = (double) val * (5/10.24);  //用于存储已经转换过的值,通过电压值利用公式转换成温度  if(data > 30){    for(int i=0;i<180;i++){      //将sin函数角度转化为弧度      sinValue = (sin(i*(3.1412/180)));      //用sin函数值产生声音的频率      toneVal = 2000 + (int(sinValue*1000));      tone(8,toneVal);      delay(2);    }  }else{    noTone(8);  //如果温度小于30,则关闭蜂鸣器  }  if(millis() - tepTimer > 5000){    tepTimer = millis();    Serial.print("tmp:");    Serial.print(data);    Serial.println("C");  //输出温度单位并换行  }}
成功下载完程序后,打开Arduino IDE的串口监视器。

 

就可以直接从串口中读取温度值,并尝试升高周围环境温度,或者用手直接接触LM35使其升温,串口可以很直观的看到温度有明显的变化。

 

蜂鸣器工作的条件是,一旦检测到环境温度大于30度,蜂鸣器鸣响,环境温度小于30度,则关闭蜂鸣器。

3、关键部分

setup()函数的第一句,我们想必已经很熟了,设置蜂鸣器为输出模式,有人可能会问为什么LM35不用设置呢?LM35是个模拟量,模拟量不需要设置引脚模式。pinMode只用于数字引脚。


Arduino的通信伙伴——串口
串口是Arduino和外界进行通信的一个简单的方法。每个Arduino都至少有一个串口,UNO分别与数字引脚0(RX)和数字引脚1(TX)相连。所以如果要用到串口通信的,数字0和1不能用于输入输出功能。

这里用到了一个新函数——analogRead(pin)。

int val = analogRead(0);  //用于读取LM35的值,读取到的是电压的值
这个函数用于从模拟引脚读值,pin是指连接的模拟引脚。Arduino的模拟引脚连接到一个了10位A/D转换,输入0~5V的电压对应读到0~1023的数值,每个读到的数值对应的都是一个电压值。

double data = (double) val * (5/10.24);  //用于存储已经转换过的值,通过电压值利用公式转换成温度
这里读到的是温度的电压值,是以0~1023的方式输出。而我们LM35温度传感器每10mV对应1摄氏度。从传感器中读到的电压值,它的范围在0~1023,将该值分成1024份,再把结果乘以5,映射到0~5V,因为每度10mV,需要再乘以100得到一个double型温度值,最后赋给data变量。

Serial.print("tmp:");Serial.print(data);Serial.println("C");  //输出温度单位并换行
print()的解释是,以我们可读的ASCII形式从串口输出。


这条命令有多种形式:
(1)数字则是以位形式输出(例1)
(2)浮点型数据输出时只保留小数点后两位(例2)
(3)字符和字符串则原样输出,字符需要加单引号(例3),字符串需要加双引号(例4)。


例如:
(1)Serial.print(78);  输出“78”
(2)Serial.print(1.23456);  输出“1.23”
(3)Serial.print(‘N’);    输出“N”
(4)Serial.print(“Hello world.”);   输出“Hello world.”

0 0