专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

基于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℃时的情况
最后奉上视频:

相关文章