DS18B20温度传感器怎么接线?Arduino单总线读取防水探头-55°C到125°C实测

电机传感器师硬件DIY 2026-10-16 16:40:23 2阅读 举报

给恒温箱监控温度、给鱼缸测水温、给充电宝做过热保护,很多人最后都会用到DS18B20。它是个数字温度传感器,最讨喜的地方是只要一根数据线就能通信,靠单总线协议把温度直接以数字量发给主控,不用再接ADC模拟口。不锈钢壳的防水探头版本能直接泡水里用,测温范围从零下55度到零上125度,常用段精度正负0.5度,几十块的方案很能打。这篇把它的三根线怎么接、那个4.7K上拉电阻为什么必须有讲透。

DS18B20引脚的识别:红黑黄三根线

防水版的DS18B20引出三根线,颜色几乎固定:红色是VDD电源、黑色是GND地、黄色是DQ数据线,千万别把黄色当电源怼进去。裸封的TO-92直插版也是三只脚,从左往右通常是GND、DQ、VDD,不同厂家丝印略有差异,接之前先看datasheet核对最稳妥。它本身能工作在3.0到5.5V,Arduino UNO的5V或3.3V都能带得动。

接线图:为什么D2要接一颗4.7K上拉电阻

标准接法很省心:DS18B20的VDD接5V,GND接地,DQ接Arduino的数字口D2。关键的坑在于DQ这根数据线是开漏输出,必须外接一颗4.7K欧电阻去拉高,不然主控读不到稳定的高电平,串口刷新出来就是一片乱值甚至全零。上拉电阻一端接DQ、一端接VDD就行,这是单总线最容易被新人忽略的一步。想省一根线还能用寄生供电,把VDD和GND短接靠数据线供电,但因为稳定起见新手先别省这根线。

读取温度的代码:OneWire加Dallas两块库

Arduino官方库里没有直接封装DS18B20,要装两件套:OneWire负责单总线底层时序,DallasTemperature负责把数据译成温度。代码套路很固定,先include两个头文件,声明单总线对象和温度对象,setup里调用begin(),loop里用requestTemperatures()请求读数,再用getTempCByIndex(0)取出第一个传感器的摄氏温度,串口打印出来即可。默认精度是12位,也就是0.0625度的分辨率,用setResolution可以改成9到12位,位数越低转换越快。

常见坑:地址冲突与上电慢

每颗DS18B20出厂都带唯一的64位序列号,多片并联时靠地址区分,但地址可能被人为改写过,读到奇怪温度时先扫描一下总线上有几颗、各自的ROM地址对不对。另外它上电后第一次读数往往偏低或为85度这个假值,转换稳定需要一点时间,代码里加个预热延时再读数会更可靠。数字传输抗干扰强,布线比模拟传感器随意,这也是它受欢迎的原因。

版权声明:
作者:电机传感器师
链接:https://www.aiddithome.com/p/3cce9ad1d7b14.html
来源:硬件DIY
实践版权归作者所有,未经允许请勿转载,若此实践存在违规行为,您可以点击 “举报”。


登录 后发表评论
3条评论
触底反弹的Tony
1楼 · 8小时前

85度那个假值提醒太救命,我上电第一次读数总是怪怪的,加个预热延时就好

阿伟不emo
2楼 · 8小时前

红黑黄三根线那个图一下就懂了,我第一次还差点把黄线当电源怼上去,看到这篇放心了

老张装机
3楼 · 8小时前

4.7K上拉电阻这个坑我踩过,忘了加直接串口全零,原理讲明白了就不会再犯