单个DS18B20长距离传输,大于20m。

DS18B20长距离传输测试
//测试单个DS18B20的约5.4m排线,返回温度数据为0。
//测试单个DS18B20的约23.4m屏蔽线,返回温度数据正确。

1.先用了大约5.4m的排线做测试。
结果:接收不了传回的温度数据,温度数据始终为0。
排线图片如下图所示:
在这里插入图片描述
两头的连接放大图如下两图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061在这里插入图片描述
在这里插入图片描述

2.原子哥说用屏蔽线测试,凭着对原子哥yyds的信任,去实验室库房翻箱倒柜找到的屏蔽线约23.4m(线只有这么长,更长的没有测试),网上说可调上拉电阻还没试过。
结果:接收到了温度数据。
实物图如下图所示:
在这里插入图片描述一头连接单片机,一头连接DS18B20放大图如下两图所示:
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
DS18B20是一种数字温度传感器,它使用1-Wire总线协议进行通信。以下是单个DS18B20读取温度的步骤: 1. 初始化1-Wire总线:将总线拉低一段时间,然后释放。 2. 发送读取温度的命令:向DS18B20发送“转换温度”命令。 3. 等待转换完成:DS18B20需要一些时间来完成温度转换。转换时间取决于分辨率设置。一般来说,分辨率越高,转换时间越长。 4. 读取温度数据:将温度数据从DS18B20读取到微控制器中。温度数据以16位二进制补码形式存储。 5. 计算温度值:将读取到的温度数据转换为实际温度值。具体的转换公式可以在DS18B20的数据手册中找到。 下面是一个示例代码,用于读取单个DS18B20的温度值: ```c #include <OneWire.h> // DS18B20的引脚连接到Arduino的2号引脚 OneWire ds(2); void setup() { Serial.begin(9600); } void loop() { byte data[9]; byte addr[8]; if ( !ds.search(addr)) { // 如果没有找到DS18B20,则重新开始搜索 ds.reset_search(); delay(250); return; } if ( OneWire::crc8( addr, 7) != addr[7]) { // 如果地址校验失败,则跳过该传感器 Serial.println("CRC is not valid!"); return; } if ( addr[0] != 0x28) { // 如果不是DS18B20,则跳过该传感器 Serial.println("Device is not a DS18B20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); for (byte i = 0; i < 9; i++) { data[i] = ds.read(); } int16_t raw = (data[1] << 8) | data[0]; float celsius = (float)raw / 16.0; Serial.print("Temperature: "); Serial.print(celsius); Serial.println("C"); delay(5000); } ``` 这个代码使用OneWire库来与DS18B20通信。它首先搜索总线上的设备,找到DS18B20后发送转换温度命令。然后等待一段时间,读取温度数据并将其转换为实际温度值。最后将温度值打印到串口监视器中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值