「雕爷学编程」Arduino动手做(39)——DS18B20温度传感器2
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验三十九:DS18B20单总线数字温度传感器模块
18B20元件官方链接如下:
https://www.maximintegrated.com/cn/products/sensors/DS18B20.html
相关技术参考资料:
https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
https://www.jin-hua.com.tw/upload/product/2110000001544_DATA.pdf
18B20数字温度传感器模块实验所需硬件清单
Arduino Uno开发板 X1
0.96寸OLED显示屏X1
杜邦线 若干(备了9条)
高电平触发有源蜂鸣器模块X1
IIC/I2C 1602 LCD液晶屏模块X1
18B20数字温度传感器模块X2
LED发光二极管(绿、蓝色)X2
高电平触发单路5V继电器模块X1
Proto Shield 原型扩展板(带mini面包板)X1
传感器模块实验所需软件平台
代码编程 Arduino IDE (版本1.8.19)
仿真编程 Linkboy (版本V4.6.3)
图形编程 Mind+ (版本 V1.7.0 RC2.0)
以及编玩边学(线上平台https://ide.codepku.com/?type=Arduino)
实验接线示意图
搜索安装“DallasTemperature”和“OneWire”库
1、打开Arduino——工具——管理库——搜索DallasTemperature——安装
2、打开Arduino——工具——管理库——搜索OneWire——安装
程序一:单线数字温度18B20 + Arduino
Arduino参考开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序一:单线数字温度18B20 + Arduino */ #include <OneWire.h> // 调用OneWire库 #include <DallasTemperature.h> // 调用DallasTemperature库 #define ONE_WIRE_BUS 2 // 定义18B20数据口连接arduino的 2 脚 OneWire oneWire(ONE_WIRE_BUS); // 初始连接在单总线上的单总线设备 DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(9600); // 设置串口通信波特率 Serial.println("18B20温度 IC 控制库演示"); // 温度IC控制库演示 sensors.begin(); // 初始化总线 } void loop(void) { Serial.print(" 读取温度..."); // 发起温度转换 sensors.requestTemperatures(); // 向总线上所有设备发送温度转换请求 Serial.println("完成"); // 温度转换完成 Serial.print("温度为: "); // 串口打印实时温度值 // 同一总线上可以有多个 DS18B20。 // 0指的是线上的第一个IC Serial.print(sensors.getTempCByIndex(0)); delay(500); // 延时500毫秒 }
实验串口返回情况(手摸传感器升温3度)
Arduino实验场景图
程序二:串口显示温度
实验开源仿真编程(Linkboy V4.63)
实验串口返回情况
Arduino实验场景图
程序三:带工作指示灯的温度检测器
(1)实验开源图形编程(Mind+、编玩边学)
(2)实验串口返回情况
程序四:TM1637数码管显示温度
(1)实验开源仿真编程(Linkboy V4.63)
Arduino实验场景图
程序五:温度控制红绿蓝三色灯
(1)Arduino参考开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序五:温度控制红绿蓝三色灯 */ #include <OneWire.h> // 调用OneWire库 #include <DallasTemperature.h> // 调用DallasTemperature库 int redLedPin = 2;//红色LED int greenLedPin = 3;//绿色LED int blueLedPin = 4;//蓝色LED int temp_sensor = 5;//温度传感器 float temperature = 0; //低于下限的温度值都会触发蓝色LED灯亮起。 //高于上限的变量都会触发红色LED灯亮起。 //介于两者之间的变量都将打开绿色LED灯。 int lowerLimit = 25;//温度下限阙值 int higherLimit = 27;//温度上限阙值 //创建一个OneWire对象 OneWire oneWirePin(temp_sensor); DallasTemperature sensors(&oneWirePin); void setup(void) { //激活Arduino串行接口 Serial.begin(9600); //设置LED作为输出 pinMode(redLedPin, OUTPUT); pinMode(greenLedPin, OUTPUT); pinMode(blueLedPin, OUTPUT); sensors.begin();//温度传感器初始化 } void loop() { Serial.print("Requesting Temperatures from sensors: "); sensors.requestTemperatures(); Serial.println("DONE"); temperature = sensors.getTempCByIndex(0); digitalWrite(redLedPin, LOW); digitalWrite(greenLedPin, LOW); digitalWrite(blueLedPin, LOW); Serial.print("Temperature is "); Serial.print(temperature); //设置LED作为输出 if (temperature <= lowerLimit) { Serial.println(", blue LED is Activated"); digitalWrite(blueLedPin, HIGH); } else if (temperature > lowerLimit && temperature < higherLimit) { Serial.println(", Green LED is Activated"); digitalWrite(greenLedPin, HIGH); } else if (temperature >= higherLimit) { Serial.println(", Red LED is Activated"); digitalWrite(redLedPin, HIGH); } delay(2000); }
实验串口返回情况
(2)实验场景图
温度下限为25度,上限为27度
低于下限的温度值都会触发蓝色LED灯亮起
高于上限的变量都会触发红色LED灯亮起
介于两者之间的变量都将打开绿色LED灯