「雕爷学编程」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参考开源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /* 【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参考开源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | /* 【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灯
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性