zoukankan      html  css  js  c++  java
  • 用树莓派和DS18B20做个汽车温度记录仪[原创]

    用树莓派和DS18B20做个汽车温度记录仪[原创]

         很想知道夏日阳光暴晒下,汽车内的最高温度以及温度的变化情况。觉得用树莓派和DS18B20来实现应该很简单,于是就尝试捣鼓了一下,半天时间就搞定了,写下来和大家分享。以下原创内容欢迎网友转载,但请注明出处:https://www.cnblogs.com/helesheng

    一、树莓派读取DS18B20的温度值

        Raspbian系统已经能够支持DS18B20单总线(1-wire)温度传感器,只要简单配置就可以直接读取,无需自己编写底层驱动。

       配置过程也很简单:

       打开Raspbian系统的/boot/config.txt文件,在最后一行添加如下代码。

       dtoverlay=w1-gpio-pullup,gpiopin=17

       其中最后一个数字17表示:树莓派和DS18B20连接所使用的扩展引脚编号,即下表中BCM编码列中对应的数字。可根据需要选择树莓派40pin扩展口中的任意引脚。

     

    图1 树莓派40Pin引脚对照表

        修改完config.txt后关机,将DS18B20的数据脚(TO-92封装的中间一个引脚)连接到树莓派的17pin,同时连接电源和地引脚。另外,还要在DS18B20的数据引脚和VCC之间连接一个4.7K的上拉电阻方可正常使用。

       重新开启树莓派后就可以在/sys/bus/w1/devices下找到名为28-XXXXXXX(XXXXXXX为实际DS18B20的编号)的目录了,其中的文件w1_slave包含了实际温度值,用cat指令查看文件内容如下图所示。

    图2 命令行读取温度数值

        其中第一行末尾都会有一个YES或NO,如果是YES,那第二行紧接着就是温度,以1/1000摄氏度为单位。

        在使用中我发现,如果直接使用DS18B20芯片和树莓派相连,则由于DS18B20和树莓派的CPU过近,往往会使测量得到的温度偏高近10℃。因此我在某宝购买了一个带有金属外壳和较长连线的DS18B20,价格不过7-8元,但测量准确度大大提高。另外由于有较长的连线,4.7K电阻的焊接也变得很容易。完成的传感器如下图3所示。

     

    图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("
    ")
    36         tp.close()
    37  
    View Code

    三、将保存温度值配置成系统启动任务

        由于汽车内没有显示器,也不方便每次开机还要用终端启动上边的Python程序。因此有必要将这个程序配置为开机就运行的系统任务。

       首先,安装用于配置和查看启动任务的chkconfig,在终端中更实用如下命令行:sudo apt-get install chkconfig

       其次,编写启动Python程序的脚本tmp_rec.sh如下所示。

    #!/bin/bash

    python3 /home/pi/python_ex/DS18B20/wr_time_temp.py

        为这个脚本增加可执行权限,并将其拷贝到/etc/init.d/下

    mv tmp_rec.sh /etc/init.d/

    chmod +r /etc/init.d/tmp_rec.sh

       第三,将tmp_rec.sh添加到启动运行的服务进程中:

    chkconfig --add tmp_rec.sh

         添加后可以通过以下命令行查看该服务的状态:

    chkconfig --list tmp_rec.sh

       第四,如果需要关闭该启动运行的服务则可以执行以下命令行:

    chkconfig --del tmp_rec.sh

    四、记录温度车内温度变化曲线

        将连接了DS18B20的树莓派放入车内,采用点烟器车载充电器的USB口供电,即可实现车内温度变化曲线记录功能。

    图4 车内连接树莓派和DS18B20

         使用时值得注意的是,树莓派3没有实时时钟,每次上电需要连接网络获取时间来作为系统时间。而本记录程序在温度的同时还要记录当前时间。因此除非你的车停在有WIFI信号的地方,否则需要打开手机热点供树莓派连接网络获取系统时间。

         前面的Python程序在记录温度数据文件(*.csv)时采用了ASCII码,因此可以使用Matlab、Excel和Python matplot等任意流行的绘图工具来绘制车内温度变化曲线。 

     

    图5 车内温度曲线

         由上图可以基本看出一天中车内温度变化趋势,中午10:00左右放入后数小时达到最高值29℃左右,随后由于下午和晚间有雨,从而导致温度逐渐降低。刚开始阶段的温度骤降,是由于手握DS18B20的原因造成的。另外由于下雨全天温度峰值并不如想象中高,下次可以选择一个晴朗的日子再次测试。

  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/helesheng/p/9400325.html
Copyright © 2011-2022 走看看