资讯详情

arduino水温度传感器数字显示_温度传感器DS18B20

DS18B20 单线数字温度传感器,即一线设备,具有独特的优点:

( 1 )采用单总线接口法 与微处理器连接时 微处理器和 DS18B20 双向通信。 单总线具有经济性好、抗干扰能力强、现场温度测量适用于恶劣环境、使用方便等优点,使用户能够轻松构建传感器网络,引入测量系统构建的新概念。

( 2 )测量温度范围宽,测量精度高 DS18B20 测量范围为 -55 ℃ ~ 125 ℃ ; 在 -10~ 85°C 精度在范围内 ± 0.5°C 。

( 3 )持有多点组网功能 多个 DS18B20 可并联在唯一的单线上,实现多点测温。

( 4)供电方式灵活 DS18B20 数据线上可以通过内部寄生电路获取电源。因此,当数据线上的时间顺序满足一定的要求时,可以不连接外部电源 使系统结构更简单,可靠性更高。

( 5 )可配置测量参数 DS18B20 通过程序设置测量分辨率 9~12 位。

DS18B20 包装方体积小、适用电压宽、经济、可选包装方小,电压适用范围更广,适合建立自己经济的温度测量系统,受到设计师的青睐。

产品封装

19241cb53e797af2875f8a756c97c473.png

时序图

典型应用电路

寄生供电方式

支持命令集

复位时序

读写时序

具体操作:

1、打开IDE,项目-加载库-管理库,搜索下载并安装相应的库,否则编程时会报错;

搜索 18B20 ,看到18B点击20相关库 安装好,

打开 找到第一个例子Alarm;

看到除了DallasTemperature.h,还需要另一个库OneWire.h,按照之前的步骤,搜索 OneWire 安装即可;ONE_WIRE_BUS 2 意思是 数据口连接开发版引脚pin 2;

2、Arduino 开发版用USB连接电脑,选择相应的开发版和端口,编译上传烧录,

接线时,必须加电阻,不加电阻检测不到设备;

管脚定义:面朝印字面,左边GND,右为VCC,中间是数字输出引脚(必须连接到4).7K—10K本例4.7K电阻;

BOM表

Arduino Uno *1

18B20温度传感器 *1

4.7K电阻*1

接线

Arduino Uno 18B20温度传感器 颜色

Pin 2 DO 白色

5V VCC 红色

GND GND 黄色

Arduino接线图

4.连接线后再使用USB连接电脑,打开串口监视器查看结果;

Alarm可根据需要修改案例代码:

#include ///引用单总线头文件

#include //引用18b20驱动文件

// Data wire is plugged into port 2 on the Arduino

#define ONE_WIRE_BUS 2//定义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);

// arrays to hold device addresses

DeviceAddress insideThermometer, outsideThermometer;

void setup(void)

{

// start serial port

Serial.begin(9600);

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

// Start up the library

sensors.begin()

// locate devices on the bus

Serial.print("Found ");

Serial.print(sensors.getDeviceCount(), DEC);//DEC意思是串口数据以10进制的格式输出

Serial.println(" devices.");

// search for devices on the bus and assign based on an index.

if (!sensors.getAddress(insideThermometer, 0))

Serial.println("Unable to find address for Device 0");

if (!sensors.getAddress(outsideThermometer, 1))

Serial.println("Unable to find address for Device 1");

// show the addresses we found on the bus

Serial.print("Device 0 Address: ");

printAddress(insideThermometer);

Serial.println();

Serial.print("Device 0 Alarms: ");

printAlarms(insideThermometer);

Serial.println();

Serial.print("Device 1 Address: ");

printAddress(outsideThermometer);

Serial.println();

Serial.print("Device 1 Alarms: ");

printAlarms(outsideThermometer);

Serial.println();

Serial.println("Setting alarm temps...");

// alarm when temp is higher than 30C

sensors.setHighAlarmTemp(insideThermometer, 30);

// alarm when temp is lower than -10C

sensors.setLowAlarmTemp(insideThermometer, -10);

// alarm when temp is higher than 31C

sensors.setHighAlarmTemp(outsideThermometer, 31);

// alarn when temp is lower than 27C

sensors.setLowAlarmTemp(outsideThermometer, 27);

Serial.print("New Device 0 Alarms: ");

printAlarms(insideThermometer);

Serial.println();

Serial.print("Ne Device 1 Alarms: ");

printAlarms(outsideThermometer);

Serial.println();

}

// function to print a device address

void printAddress(DeviceAddress deviceAddress)

{

for (uint8_t i = 0; i < 8; i++)

{

if (deviceAddress[i] < 16) Serial.print("0");

Serial.print(deviceAddress[i], HEX);

}

}

// function to print the temperature for a device

void printTemperature(DeviceAddress deviceAddress)

{

float tempC = sensors.getTempC(deviceAddress);

Serial.print("Temp C: ");

Serial.print(tempC);

Serial.print(" Temp F: ");

Serial.print(DallasTemperature::toFahrenheit(tempC));

}

void printAlarms(uint8_t deviceAddress[])

{

char temp;

temp = sensors.getHighAlarmTemp(deviceAddress);

Serial.print("High Alarm: ");

Serial.print(temp, DEC);

Serial.print("C/");

Serial.print(DallasTemperature::toFahrenheit(temp));

Serial.print("F | Low Alarm: ");

temp = sensors.getLowAlarmTemp(deviceAddress);

Serial.print(temp, DEC);

Serial.print("C/");

Serial.print(DallasTemperature::toFahrenheit(temp));

Serial.print("F");

}

// main function to print information about a device

void printData(DeviceAddress deviceAddress)

{

Serial.print("Device Address: ");

printAddress(deviceAddress);

Serial.print(" ");

printTemperature(deviceAddress);

Serial.println();

}

void checkAlarm(DeviceAddress deviceAddress)

{

if (sensors.hasAlarm(deviceAddress))

{

Serial.print("ALARM: ");

printData(deviceAddress);

}

}

void loop(void)

{

// call sensors.requestTemperatures() to issue a global temperature

// request to all devices on the bus

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

sensors.requestTemperatures();

Serial.println("DONE");

// Method 1:

// check each address individually for an alarm condition

checkAlarm(insideThermometer);

checkAlarm(outsideThermometer);

/*

// Alternate method:

// Search the bus and iterate through addresses of devices with alarms

// space for the alarm device's address

DeviceAddress alarmAddr;

Serial.println("Searching for alarms...");

// resetAlarmSearch() must be called before calling alarmSearch()

sensors.resetAlarmSearch();

// alarmSearch() returns 0 when there are no devices with alarms

while (sensors.alarmSearch(alarmAddr))

{

Serial.print("ALARM: ");

printData(alarmAddr);

}

*/

}

标签: 温度双传感器2线数字温度传感器s5851a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台