「雕爷学编程」Arduino动手做(39)——DS18B20温度传感器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

实验三十九:DS18B20单总线数字温度传感器模块

DS18B20

是世界第一片支持"一线总线"接口的温度传感器,一线总线独特而且经济的特点,使用户可轻松组建传感器网络,为测量系统构建系统引入全新要概念。

DS18B20 的内部结构主要由64 位ROM、温度灵敏元件、内部存储器和配置寄存器4 部分组成,如上图所示。

( 1) 64 位ROM。它的内容是64 位序列号,它可以被看作是该DS18B20 的地址序列码,其作用是使每个DS18B20 都各不相同,这样就可以实现一根总线上挂接多个DS18B20 的目的。

( 2) 温度灵敏元件。它完成对温度的测量,测量后的结果存储在2 个8 b 的温度寄存器中。

( 3) 内部存储器。内部存储器包括一个高速暂存RAM 和一个非易失性的可电擦除的E2 PROM,后者存放高温度和低温度触发器TH、TL 以及配置寄存器。

测温原理

用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于-55摄氏度的一个值。如果计数器在门周期结束前到达0,则温度寄存器(同样初始化到-55摄氏度)的值增加,表明所测温度大于-55摄氏度。

1。温度系数振荡器是指一种振荡器,它的振荡频率与温度之间有一个特定的关系,即不同的温度对应不同的振荡频率。反之,测量出振荡器的输出频率,就可测量出温度值。

2.高温度系数振荡器:它的振荡频率受温度的影响很大,温度稍有变化,频率就会变化很多,即对温度敏感,多用于温度传感器。

3.低温度系数振荡器:它的振荡频率受温度的影响很小,即使温度变化很大,它的频率也基本不变。

同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到 0,如果门周期仍未结束,将重复这一过程。 斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力。这是通过改变计数器对温度每增加一度所需计数的的值来实现的。因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。

主要特性

(1) 独特的单线接口方式,与单片机连接时仅需要一条口线;

(2) 测温范围为- 55~ + 125℃,在- 10~ + 85℃范围内精度为±0. 5 ℃;

(3) 通过编程可实现9~ 12 位的数字读数方式;

(4) 用户可自设定非易失性的报警上下限值;

(5) 外围电路简单,使用时不需要外围元件,可用数据总线供电,电压范围为3. 0 ~ 5. 5 V 无需备用电源;

(6)无需外部元件,独特的一线接口,电源和信号混合在一起;

(7)每个芯片唯一编码,支持联网寻址,零功耗等待;

(8)DS18B20 有TO 92、SOIC 及CSP 封装,其中VDD 为外接供电电源输入端,GND 为公共地,DQ为数字信号输出端;

(9)适用于冷冻库,粮仓,储罐,GPS卫星定位系统,电讯机房,电力机房,电缆线槽等测温和控制领域。

部件描述

存储器---DS18B20的存储器包括高速暂存器RAM和可电擦除RAM,可电擦除RAM又包括温度触发器TH和TL,以及一个配置寄存器。存储器能完整的确定一线端口的通讯,数字开始用写寄存器的命令写进寄存器,接着也可以用读寄存器的命令来确认这些数字。当确认以后就可以用复制寄存器的命令来将这些数字转移到可电擦除RAM中。当修改过寄存器中的数时,这个过程能确保数字的完整性。高速暂存器RAM是由8个字节的存储器组成;用读寄存器的命令能读出第九个字节,这个字节是对前面的八个字节进行校验。

64-位光刻ROM---前8位是DS18B20的自身代码,接下来的48位为连续的数字代码,最后的8位是对前56位的CRC校验。64-位的光刻ROM又包括5个ROM的功能命令:读ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。

外部电源的连---DS18B20可以使用外部电源VDD,也可以使用内部的寄生电源。当VDD端口接3.0V—5.5V的电压时是使用外部电源;当VDD端口接地时使用了内部的寄生电源。无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电阻。

配置寄存器---配置不同的位数来确定温度和数字的转化。可以知道R1,R0是温度的决定位,由R1,R0的不同组合可以配置为9位,10位,11位,12位的温度显示。这样就可以知道不同的温度转化位所对应的转化时间,四种配置的分辨率分别为0.5℃,0.25℃,0.125℃和0.0625℃,出厂时以配置为12位。

温度的读取---DS18B20在出厂时以配置为12位,读取温度时共读取16位,前5个位为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。温度为正时读取方法为:将16进制数转换成10进制即可。温度为负时读取方法为:将16进制取反后加1,再转换成10进制即可。例:0550H = +85 度,FC90H = -55 度。

使用要点

DS18B20 采用的是单线总线协议方式,即在一条数据线上实现数据的双向传输,而单片机硬件上不支持单总线协议,因此必须采用软件方法来模拟单总线的协议是序来完成对DS18B20 芯片的访问。由于DS18B20 是在一根I/ O 线上读写数据,因此对读写的数据位有严格的时序要求,它有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序: 初始化时序、读时序、写时序。所有时序都是将单片机作为主设备,DS18B20 作为从设备,而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求DS18B20 回送数据,在进行写命令后,主机需启动读时序完成数据接收。

几个应用电路

DS18B20单总线数字温度传感器模块

一、尺寸:长28mm X宽12mm X高10mm

二、主要芯片:18B20温度传感器

三、工作电压:直流5V

模块特点

1、分辨率调整范围:9-12位

2、带安装孔方便安装,孔径:2.5

3、温度测量范围:-55~+125℃

4、温度测量精度:0.5℃

5、工作电压:DC5V

6、数字信号输出

引脚接线
Arduino Uno      <------>         18B20温度传感器模块  
Pin 3                  <------>          OUT (S)      
5V                      <------>          VCC   
GND                   <------>          GND

搜索、下载库文件-DallasTemperature

后来又安装了一个库-OneWire

/*

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

实验三十九:DS18B20单总线数字温度传感器模块

*/

#include <OneWire.h>

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 3

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

void setup(void)

{

  Serial.begin(9600);

  Serial.println("Dallas Temperature IC Control Library Demo");

  sensors.begin();

}

void loop(void)

{

  Serial.print(" Requesting temperatures...");

  sensors.requestTemperatures(); 

  Serial.println("DONE");

  Serial.print("Temperature for Device 1 is: ");

  Serial.print(sensors.getTempCByIndex(0));  

  delay(500);

}

  

用手触摸DS18B20,温度升高

原文地址:https://www.cnblogs.com/eagler8/p/11618248.html

时间: 2024-10-09 17:19:39

「雕爷学编程」Arduino动手做(39)——DS18B20温度传感器的相关文章

「雕爷学编程」Arduino动手做(12)——霍尔磁力模块

37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]66种传感器模块系列(专业资料+实验代码+图形仿真) 实验之十二:数字霍尔磁力传感器模块 霍尔效应所谓霍尔效应,是电磁效应的一种,指磁场作用于载流金属导体.半导体中的载流子时,产生横向电位

「雕爷学编程」Arduino动手做(13)——触摸开关模块

37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]66种传感器模块系列(专业资料+实验代码+图形仿真) 实验之十三:数字触摸开关传感器模块 触摸模块 1.工作电压:DC 3-5V 2.主要器件:运放,三极管 3.尺寸:长45mmX宽18m

「雕爷学编程」Arduino动手做(14)——倾斜角度模块

37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]66种传感器模块系列(专业资料+实验代码+图形仿真) 实验之十四:倾斜传感器模块(角度开关) SW-520D滚珠震动开关 铜壳镀金 振动开关 防跌角度开关 尺寸:5MM*12MM(直径*高

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十六:4X4矩阵键盘模块(轻触式按键) 矩阵键盘 是单片机外部设备中所使用的排布类似于矩阵的键盘组.矩阵式结构的键盘显

「雕爷学编程」Arduino动手做(38)——joystick双轴摇杆模块

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]108种传感器模块系列实验(资料+代码+图形+仿真) 实验三十八:joystick双轴XY按键摇杆模块(PS2游戏航模控制杆) 摇杆电位器 安装了两个10K高精度电位器和一个按键

「雕爷学编程」Arduino动手做(23)——矩形脉冲发生器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十三:NE555频率可调脉冲发生器模块(方波占空比50%简版) NE555 NE555 (Timer IC)为8脚时基

「雕爷学编程」Arduino动手做(17)---人体感应模块

37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]108种传感器模块系列实验(资料+代码+图形+仿真) 实验十七:HC-SR312微型热释电人体感应传感器模块 热释电效应 在某些绝缘物质中,由于温度的变化引起极化状态改变的现象称为热释电效

【雕爷学编程】Arduino动手做(59)---RS232转TTL串口模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉. [Arduino]168种传感器模块系列实验(资料+代码+图形+仿真) 实验五十九: RS232转TTL2代串口模块刷机板模块(MAX3232芯片) MAX3232芯片 采

【雕爷学编程】Arduino动手做(60)---WS2812直条8位模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉. [Arduino]168种传感器模块系列实验(资料+代码+图形+仿真) 实验六十: 直条8位 WS2812B 5050 RGB LED内置全彩驱动彩灯模块 WS2812B芯