基于Protues的Arduino学习07-DS18B20与数字式温度测量的实现
作者:我不是奔跑哥 来源:我不是奔跑哥的blog 点击数:
… 更新时间:2014年06月08日 【字体:
大 中 小】
这次我们使用数字式温度传感器DS18B20实现温度测量,并且串口输出温度测量值。
DS18B20是美国DALLAS半导体公司的数字化单总线智能温度传感器,与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。从DS18B20读出信息或写入信息仅需要一根线(单总线)读写,总线本身也可以向所挂接的设备供电,而无需额外电源。
DS18B20的性能特点如下:
(1)单线接口方式实现双向通讯;
(2)供电电压范围:+3.0V~+5.5V,可用数据线供电;
(3)测温范围:-55~+125℃。固有测温分辨率为0.5℃。
(4)通过编程可实现9~12位的数字读数方式;
(5)支持多点的组网功能,多个DS18B20可以并联在唯一的单总线上,实现多点测温。
DS18B20的外形及管脚排列如图1所示,DS18B20引脚定义:(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
图1 DS18B20封装图
首先,我们需要proteus仿真里面添加DS18B20数字式温度传感器,在元器件搜索栏中输入“DS18B20”,并添加至元器件选择栏中,如图2所示。并将其DQ管脚接至数字口2脚,也就是ATmega328P的4管脚,同时接10kΩ的上拉电阻,VCC接至+5V,GND接至地端,修改后的Arduino
UNO仿真图如图3所示。
图2
添加DS18B20传感器
图3 修改后的Arduino
UNO仿真板
双击DS18B20、右击选择编辑参数属性(第二项)如图4所示、或者左击选中DS18B20然后按下ctrl+E,会弹出如图5所示的DS18B20设置框。设置框里有内部序列号【注】、当前温度值、调节的最小变化量。
【注】内部序列号用于单总线上挂有多个DS18B20的情况下,甄别不同的传感器。只有内部序列号相同的DS18B20才会响应单总线上的命令并作出相应的响应。
图4 选择“编辑属性”一项
图5
DS18B20传感器参数设置栏
DS18B20设置完成后,下面进入Arduino编程部分。首先,在网上下载DallasTemperature的库文件,然后解压放置在arduino的libraries文件夹下面,启动arduino
IDE,进入example中的DallasTemperature中选择simple文件并打开,如图6所示。
图6
打开DS18B20例子
Arduino代码清单:
#include
<OneWire.h>
#include
<DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire
devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas
Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
// start serial port
Serial.begin(9600);
Serial.println("Dallas Temperature IC
Control Library Demo");
// Start up the library
sensors.begin();
}
void loop(void)
{
// call sensors.requestTemperatures() to
issue a global temperature
// request to all devices on the bus
Serial.print("Requesting
temperatures...");
sensors.requestTemperatures(); // Send the
command to get temperatures
Serial.println("DONE");
Serial.print("Temperature for the device 1
(index 0) is: ");
Serial.println(sensors.getTempCByIndex(0));
}
编译成功之后,导入proteus仿真软件进行仿真。通过调节DS18B20的温度值,可以看到串口输出的温度数值,以及与DS18B20设置的标准值之间的误差。【注】温度为0℃、25℃、50℃和100℃的仿真图如图7、8、9、10所示。
【注】由于仿真环境为理想环境,传感器为理想模型,仅能验证能否对传感器进行读写操作,初步地验证程序的正确性。实际测量过程中,测量温度与实际温度会有一定的误差,误差大小和传感器、环境等都有关系。
图7 温度为0℃时的情况
图8
温度为25℃时的情况
图9
温度为50℃时的情况
图10
温度为100℃时的情况