Arduion学习(三)驱动温度传感器
一、实验目的:
1、将温度值打印显示在串口监视器
2、将温度值打印显示在串口,不同温度段显示不同的灯光,并在温度过高或过低时利用蜂鸣器报警。(温度>=34℃为过高,15~34℃为正常,<=34℃为过低)。
二、实验准备:
1、查阅相关资料,了解本次实验所用到的引脚、接口的相关知识。
DS18B20引脚定义:
(1)DQ为数字信号输入/输出端;
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
2、准备Arduion板(本次实验所用到的型号为mega2560)、温度传感器DS18B20、杜邦公母线、三色发光二极管、无源蜂鸣器
三、实验操作:
(一)1.0版本
1、将温度传感器的DQ引脚用杜邦线与Arduion板上的数字IO接口2相连,VDD和GND引脚分别与Arduion上的5V、GND接口相连。
2、将Arduion连上主机,打开IDE,在工具选项卡中设置对应的开发板(本次选择mega2560)和一个端口
3、验证代码并上传代码至Arduion
(二)2.0版本
1、将温度传感器的DQ引脚用杜邦线与Arduion板上的数字IO接口2相连,VDD和GND引脚分别与Arduion上的5V、GND接口相连。
2、将三色发光二极管的R、G、B引脚用杜邦线分别与Arduion板上的数字IO接口11、12、13相连,GND引脚连接Arduion上的GND接口。
3、将无源蜂鸣器的I/O引脚用杜邦线与Arduion板上的数字IO接口7相连,VDD和GND引脚分别与Arduion上的5V、GND接口相连。
4、将Arduion连上主机,打开IDE,在工具选项卡中设置对应的开发板(本次选择mega2560)和一个端口
5、验证代码并上传代码至Arduion
四、以下为我本次实验的运行代码:
1.0版本:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // 定义DS18B20数据口连接arduino的 2 脚
OneWire oneWire(ONE_WIRE_BUS); // 初始连接在单总线上的单总线设备
DallasTemperature sensors(&oneWire);
void setup()
{
Serial.begin(9600); // 设置串口通信波特率
sensors.begin(); // 初始库
}
void loop(void)
{
sensors.requestTemperatures(); // 发送命令获取温度
Serial.print("温度值:"); //串口监视器打印温度值
Serial.print(sensors.getTempCByIndex(0));
Serial.println("℃");
delay(10);
}
温度传感器Plus代码:
2.0版本
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // 定义DS18B20数据口连接arduino的 2 脚
OneWire oneWire(ONE_WIRE_BUS); // 初始连接在单总线上的单总线设备
DallasTemperature sensors(&oneWire);
int buzzer=7;
int redled = 11;
int greenled =12;
int blueled = 13;
void setup()
{
Serial.begin(9600); // 设置串口通信波特率
sensors.begin(); // 初始库
pinMode(buzzer, OUTPUT); //设置数字IO脚模式,OUTPUT为输出
pinMode(redled, OUTPUT);
pinMode(greenled, OUTPUT);
pinMode(blueled, OUTPUT);
}
void loop(void)
{
sensors.requestTemperatures(); //发送命令获取温度
Serial.print("温度值:"); //串口打印"温度值:"
Serial.print(sensors.getTempCByIndex(0)); //串口打印温度
Serial.println("℃"); //串口打印摄氏度
delay(10); //等待10毫秒以观察数据
float temp = sensors.getTempCByIndex(0); //指定温度为一个浮点数数据类型
if(temp>=15.0) //如果温度大于15摄氏度,进入for循环
{
if(temp>=34.0)
{
int i=2000;
digitalWrite(redled, HIGH); //红灯亮起,温度过高报警
tone(buzzer,i); //在四号端口输出频率
delay(1000); //该频率维持1000毫秒
digitalWrite(redled, LOW); //红灯熄灭,报警结束
noTone(7); //报警停止
}else
{
digitalWrite(greenled, HIGH); //绿灯亮起
delay(1000); //等待1000毫秒
digitalWrite(greenled, LOW); //绿灯熄灭
delay(1000); //等待1000毫秒
}
}else{
int i=1000;
digitalWrite(blueled, HIGH); //蓝灯亮起,温度过低报警
tone(buzzer,i); //在四号端口输出频率
delay(1000); //该频率维持1000毫秒
digitalWrite(blueled, LOW); //蓝灯熄灭,报警结束
noTone(7); //报警停止
}
}
没大胆尝试怎知不可,未坚持到底如何放弃!
转载请注明出处