该文章也是与最近制作的V4小车有关,打算将温度传感器也安装到小车上,用于稍微的增加小车的附加功能吧。
DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
以下为百度百科的引用内容:
技术性能描述:
①、** 独特的单线接口方式**,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
② 、测温范围 -55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源: 3.0~5.5V/DC (可以数据线寄生电源)
⑤ 、在使用中不需要任何外围元件
⑥、 测量结果以9~12位数字量方式串行传送
⑦ 、不锈钢保护管直径 Φ6
⑧ 、适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温
⑨、 标准安装螺纹 M10X1, M12X1.5, G1/2”任选
⑩ 、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
sudo raspi-config
3.Interface Options
P7 1-Wire
如:
dtoverlay=w1-gpio, gpiopin=17
则在GPIO17(BCM)可进行单总线操作。
关于树莓派单总线的相关博客文章
(1)如下为非代码型查看当前传感器温度:
cd /sys/bus/w1/devices/
ls
cd 28-012029ad0b30
cat w1_slave
最后的 “ t=29750 ” 为当前的温度(摄氏度) X 100 后的结果,所以除以100才是真正的温度(29.75℃)。
(2)如下为写成代码形式:
#!/usr/bin/python3
import os
import time
device_file ='/sys/bus/w1/devices/28-012029ad0b30/w1_slave'
def read_temp_raw():
f = open(device_file,'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string)/1000.0
return temp_c
while True:
print('当前温度是%f'%read_temp(),'度')
time.sleep(0.5)
结果如下所示:
Python 3.7.3 (/usr/bin/python3)
>>> %Run DS18B20.py
当前温度是30.375000 度
当前温度是30.312000 度
当前温度是30.312000 度
当前温度是30.250000 度
有点感觉该程序不能实时显示温度,它会有大约0.5S的变化延迟。
之后打算将此温度放于OLED中进行显示,这样小车就能有个微型情况显示屏了。
然后还打算装个人体红外传感器,用于感知周围大约一米内是否有人,虽然还没想好到底有什么用,就当是个待扩展功能吧。