1.概述
这是一个常用的18B20温度传感器,它主要采用DS18B20传感器元件。该元件是美国DALLAS公司生产的总线数字温度感测元件。它支持多点组网功能,即多个DS18B20可以并联在唯一的三线上,实现多点测温。DS18B20 的核心功能是直接数字测温,分辨率是 9,10,11,12 位,用户可配置的,对应的温度分度分别是 0.5°C, 0.25°C, 0.125°C, 和0.0625°C,上电后的默认分辨率是 12 位。它的测量结果以9-12位数字量方式串行传送,测温范围是55℃~+125℃。
为了方面接线,我们还配送1根3pin线,线的一端为白色防反插接口(和传感器上防反插白色端子匹配),另一端为3pin杜邦线母头接口。
传感器兼容各种单片机控制板,如arduino系列单片机。使用时,我们可以在单片机上堆叠一个传感器扩展板。传感器和自带导线连接,然后连接在传感器扩展板上,简单方便。同时,传感器自带4个直径为3mm的定位孔,方便你将传感器固定在其他设备。
2.规格参数
导线长度:200mm
工作电压:DC 3.3V或5V
接口:间距为2.54mm 3pin防反接口
定位孔大小:直径为3mm
控制信号:数字信号
温度测量范围:-55℃~+125℃
测量精度:±0.5℃(-10℃至+85℃范围内)
全温范围内最大误差为±1.5℃
尺寸:34*22*9mm
重量:2.7g
3.接线图
4.测试代码
特别注意:在烧录程序前,要把OneWire文件夹放到 编译器安装目录下的\Arduino\libraries里。不然编译不过。例如我的:C:\Program Files\Arduino\libraries
#include <OneWire.h>
int DS18S20_Pin = 3; //定义数字口3
OneWire ds(DS18S20_Pin);
void setup(void) {
Serial.begin(9600); //设置波特率
}
void loop(void) {
float temperature = getTemp(); //调用函数计算温度值
Serial.println(temperature); //显示温度值,并自动换行
delay(100); //延迟0.1S
}
float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println(“CRC is not valid!”);
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print(“Device is not recognized”);
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two’s compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
5.测试结果
烧录好测试代码,按照接线图连接好线,利用USB线上电后,打开软件串口监视器,设置波特率为9600,我们可以,看到当前环境中的温度值,如下图。
6.库文件链接地址
https://pan.baidu.com/s/1DC29ej-6Ytf65XffpMjUhQ
提取码:9hjy