700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 第三十五篇 基于Arduino uno 获取DS18B20温度传感器的温度值——结果导向

第三十五篇 基于Arduino uno 获取DS18B20温度传感器的温度值——结果导向

时间:2021-11-03 18:59:59

相关推荐

第三十五篇 基于Arduino uno 获取DS18B20温度传感器的温度值——结果导向

0、结果

说明:先来看看串口调试助手显示的结果,第一个值是空气温度值。如果是你想要的,可以接着往下看。

1、外观

说明:虽然DS18B20温度传感器形态各异,但是原理和代码都是适用的,就是接线可能有点不一样。

2、连线

说明:只需要连接三根线。

uno————土壤湿度传感器

如果你手里的传感器不是集成的模块,可以按照下面的接线。

uno————土壤湿度传感器

3、源程序

说明:采用非阻塞方式编写,一定时间检测一次温度,并将对应功能进行函数化,方便移植。

/****************************************ds18b20 part****************************************/#include <OneWire.h> //调用库文件#include <DallasTemperature.h> //调用库文件#define ONE_WIRE_BUS 2//设置对应的引脚#define ds18b20TimeInterval 1000OneWire oneWire(ONE_WIRE_BUS); //实例化对象DallasTemperature sensors(&oneWire);//实例化对象DeviceAddress insideThermometer;//实例化对象unsigned long ds18b20Times = 0;float ds18b20Temp = 0;/****************************************set up and loop part*********************************/void setup(void){Serial.begin(9600); //设置串口波特率为9600sensors.begin(); //传感器波特率初始化if (!sensors.getAddress(insideThermometer, 0)) { //检测设备是否上线Serial.println("设备未上线!"); //串口打印对应的值}Serial.println("设备上线!"); //串口打印对应的值}void loop(){printTemperature(insideThermometer);//获取温度数据}/****************************************ds18b20 part****************************************//*获取温度数据*/void printTemperature(DeviceAddress deviceAddress){if (millis() - ds18b20Times >= ds18b20TimeInterval) { //一定时间执行一次ds18b20Times = millis();sensors.requestTemperatures(); //请求温度的数据ds18b20Temp = sensors.getTempC(deviceAddress);Serial.print("温度: ");//串口打印对应的值Serial.print(ds18b20Temp);Serial.println(" (C).");}}

4、注意事项

说明:如果有什么问题可以评论@我,我将帮助你。需要在线下载对应的库文件才不会编译报错,可以在管理库中很方便的搜到,如果搜不到可以评论@我,我将私发给你。

5、基本原理

DS18B20是一种数字温度传感器,它采用1-Wire接口协议进行通信,可以通过单个数据线连接到控制器或处理器中。其工作原理基于热敏电阻的特性。

当 DS18B20 暴露在环境温度下时,其内置的热敏电阻会根据温度的变化而改变电阻值。DS18B20将电压源引入热敏电阻,然后使用内部的模拟-数字转换器 (ADC) 测量电压和电阻值,并将其转换为数字温度数据。此外,DS18B20使用了独特的ROM存储器结构,可以存储其唯一的64位序列号。

通过1-Wire接口协议,控制器可以向DS18B20发送命令以获取温度数据,并且每个DS18B20具有唯一的地址,因此多个DS18B20可以在同一总线上使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。