查看: 2416|回复: 1

用树莓派和DS18B20做个汽车温度记录仪

[复制链接]
  • TA的每日心情
    擦汗
    2020-3-24 10:37
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2018-12-25 22:11:02 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 只取一瓢 于 2018-12-25 22:19 编辑

    很想知道夏日阳光暴晒下,汽车内的最高温度以及温度的变化情况。觉得用树莓派和DS18B20来实现应该很简单,于是就尝试捣鼓了一下,半天时间就搞定了,写下来和大家分享。
    一、树莓派读取DS18B20的温度值
        Raspbian系统已经能够支持DS18B20单总线(1-wire)温度传感器,只要简单配置就可以直接读取,无需自己编写底层驱动。 配置过程也很简单,打开Raspbian系统的/boot/config.txt文件,在最后一行添加如下代码。
    1. dtoverlay=w1-gpio-pullup,gpiopin=17
    复制代码
      其中最后一个数字17表示:树莓派和DS18B20连接所使用的扩展引脚编号,即下表中BCM编码列中对应的数字。可根据需要选择树莓派40pin扩展口中的任意引脚。
    1380455-20180801113410268-1843125554.jpg
    图1 树莓派40Pin引脚对照表
        修改完config.txt后关机,将DS18B20的数据脚(TO-92封装的中间一个引脚)连接到树莓派的17pin,同时连接电源和地引脚。另外,还要在DS18B20的数据引脚和VCC之间连接一个4.7K的上拉电阻方可正常使用。
       重新开启树莓派后就可以在/sys/bus/w1/devices下找到名为28-XXXXXXX(XXXXXXX为实际DS18B20的编号)的目录了,其中的文件w1_slave包含了实际温度值,用cat指令查看文件内容如下图所示。
    1380455-20180801113533236-1084677661.jpg
    图2 命令行读取温度数值
        其中第一行末尾都会有一个YES或NO,如果是YES,那第二行紧接着就是温度,以1/1000摄氏度为单位。
        在使用中我发现,如果直接使用DS18B20芯片和树莓派相连,则由于DS18B20和树莓派的CPU过近,往往会使测量得到的温度偏高近10℃。因此我在某宝购买了一个带有金属外壳和较长连线的DS18B20,价格不过7-8元,但测量准确度大大提高。另外由于有较长的连线,4.7K电阻的焊接也变得很容易。完成的传感器如下图3所示。
    1380455-20180801113640768-183435856.jpg
    图3 完成后的DS18B20探头
    二、用Python读取并保存温度值
          编写一个简单的Python程序,每分钟读取一个温度值,并将其按照固定格式保存在文件中,方便查看和分析。具体代码如下所示,其核心思路是每5秒查看一次系统时间,如果达到1分钟就读取并保存一次数据。
    1. # -*- coding: utf-8 -*-
    2. import time
    3. while True:
    4.     time.sleep(5)#休眠5秒再次查看有没有到分钟数字发生改变
    5.     year=time.localtime(time.time()).tm_year
    6.     mon=time.localtime(time.time()).tm_mon
    7.     mday=time.localtime(time.time()).tm_mday
    8.     hour=time.localtime(time.time()).tm_hour
    9.     min=time.localtime(time.time()).tm_min
    10.     sec=time.localtime(time.time()).tm_sec
    11.     if sec <= 5:
    12.         tp=open("/home/pi/temp_data/temp.csv","a")
    13.         #用末尾添加的方式在temp.csv文件的末尾添加新的时间和温度数据
    14.         tp.write(str(year))
    15.         tp.write("/")
    16.         tp.write(str(mon))
    17.         tp.write("/")
    18.         tp.write(str(mday))
    19.         tp.write("/")
    20.         tp.write(str(hour))
    21.         tp.write("/")
    22.         tp.write(str(min))
    23.         tp.write("/")
    24.         tp.write(str(sec))
    25.         tp.write(",")#csv文件的分隔符
    26.        #读取温度传感器
    27.         tfile=open("/sys/bus/w1/devices/28-000003e6d2d2/w1_slave",'r')
    28.         lines=tfile.readlines()
    29.         tfile.close()
    30.         k=lines[1].find('t=')
    31.         temp_str = lines[1][k+2:k+7]
    32.         temperature=float(temp_str)/1000.0
    33.         print(temperature)
    34.         tp.write(str(temperature))
    35.         tp.write("\n")
    36.         tp.close()
    复制代码
    三、将保存温度值配置成系统启动任务
        由于汽车内没有显示器,也不方便每次开机还要用终端启动上边的Python程序。因此有必要将这个程序配置为开机就运行的系统任务。
       首先,安装用于配置和查看启动任务的chkconfig,在终端中更实用如下命令行:
    1. sudo apt-get install chkconfig
    复制代码
      其次,编写启动Python程序的脚本tmp_rec.sh如下所示。
    1. #!/bin/bash
    2. python3 /home/pi/python_ex/DS18B20/wr_time_temp.py
    复制代码
       为这个脚本增加可执行权限,并将其拷贝到/etc/init.d/下
    1. mv tmp_rec.sh /etc/init.d/
    2. chmod +r /etc/init.d/tmp_rec.sh
    复制代码
       第三,将tmp_rec.sh添加到启动运行的服务进程中:
    1. chkconfig --add tmp_rec.sh
    复制代码
        添加后可以通过以下命令行查看该服务的状态:
    1. chkconfig --list tmp_rec.sh
    复制代码
       第四,如果需要关闭该启动运行的服务则可以执行以下命令行:
    1. chkconfig --del tmp_rec.sh
    复制代码
    四、记录温度车内温度变化曲线
        将连接了DS18B20的树莓派放入车内,采用点烟器车载充电器的USB口供电,即可实现车内温度变化曲线记录功能。
    1380455-20180801114105055-1327868394.jpg
    图4 车内连接树莓派和DS18B20
         使用时值得注意的是,树莓派3没有实时时钟,每次上电需要连接网络获取时间来作为系统时间。而本记录程序在温度的同时还要记录当前时间。因此除非你的车停在有WIFI信号的地方,否则需要打开手机热点供树莓派连接网络获取系统时间。
         前面的Python程序在记录温度数据文件(*.csv)时采用了ASCII码,因此可以使用Matlab、Excel和Python matplot等任意流行的绘图工具来绘制车内温度变化曲线。
    1380455-20180801114248555-322154832.jpg
    图5 车内温度曲线
         由上图可以基本看出一天中车内温度变化趋势,中午10:00左右放入后数小时达到最高值29℃左右,随后由于下午和晚间有雨,从而导致温度逐渐降低。刚开始阶段的温度骤降,是由于手握DS18B20的原因造成的。另外由于下雨全天温度峰值并不如想象中高,下次可以选择一个晴朗的日子再次测试。

    转载自博客园 helesheng的博客

    回复

    使用道具 举报

  • TA的每日心情
    难过
    2021-2-27 22:16
  • 签到天数: 1568 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2019-4-21 18:19:42 | 显示全部楼层
    如果有什么实验就好了 522.jpg
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-6 04:44 , Processed in 0.118259 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.