用树莓派和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("\n")
  36. tp.close()

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

由于汽车内没有显示器,也不方便每次开机还要用终端启动上边的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的原因造成的。另外由于下雨全天温度峰值并不如想象中高,下次可以选择一个晴朗的日子再次测试。

用树莓派和DS18B20做个汽车温度记录仪[原创]的更多相关文章

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

    原文:用树莓派和DS18B20做个汽车温度记录仪 用树莓派和DS18B20做个汽车温度记录仪[原创] 很想知道夏日阳光暴晒下,汽车内的最高温度以及温度的变化情况.觉得用树莓派和DS18B20来实现应该 ...

  2. 读取树莓派4B处理器(CPU)的实时温度

    读取树莓派4B处理器(CPU)的实时温度 树莓派发布4B后,性能提升了不少,但是温度也是高的不行,所以最好配置一个小风扇和散热片还是比较好的 俩种办法都可以实现 1.Shell命令读取 打开终端 cd ...

  3. 树莓派进阶之路 (015) - 树莓派使用DS18B20模块测量温度

    参考:http://shumeipai.nxez.com/2013/10/03/raspberry-pi-temperature-sensor-monitors.html 第一步,允许单总线接口 su ...

  4. 用树莓派USB摄像头做个监控

    [前言] 看着阴暗的角落里吃灰噎到嗓子眼的树莓派,一起陪伴的时光历历在目,往事逐渐涌上心头,每每触及此处,内心总会升腾起阵阵怜悯之情... 我这有两个设备,一个是积灰已久的树莓派,另一个是积灰已久的U ...

  5. python3 树莓派 + usb摄像头 做颜色识别 二维码识别

    今天又啥也没干 我完蛋了哦  就是没办法沉下心来,咋办....还是先来条NLP吧.. 七,凡事必有至少三个解决方法 对事情只有一个方法的人,必陷入困境,因为别无选择. 对事情有两个方法的人也陷入困境, ...

  6. 树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)

    近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 . 准备: 树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (00 ...

  7. 单片机C语言实现的采用DS18B20的温度检测装置

    这几天老师布置了一个课程设计题目:采用51单片机控制的DS18B20温度检测系统.大概花了我一个礼拜的时间,幸好我的C语言学得还可以,最后还是让我搞出来了,真是高兴,我是采用STC-52单片机和DS1 ...

  8. 树莓派 基于Web的温度计

    前言:家里的树莓派吃灰很久,于是拿出来做个室内温度展示也不错. 板子是model b型. 使用Python开发,web框架是flask,温度传感器是ds18b20 1 硬件连接 ds18b20的vcc ...

  9. 转:Raspberry Pi(树莓派)试用小记

    近期入手一树莓派卡片机,体验了一下它的强大,写篇报告,推广一下哈! 机器截图: 基础参数: CPU:700 MHz, ARM11 内存:512M(还有一种是256M的) 支持GPU加速(高清视频无压力 ...

随机推荐

  1. Handlebars.js中集合(list)通过中括号的方式取值

    有这么一个需求,在一个table中,tr是通过each取值,取出的值要与table标题相对应,如何实现?例如: <table> <thead> <tr> {{#ea ...

  2. [日常]蒟蒻的高一生活 Week 4

    啊啊啊好颓啊...石乐志 (药丸...最近更新的全都是日常了...(果然只做内部题效果滑稽)) 正在考虑把日常部分从科别体改成编日体(什么鬼)反正现在每天都能更新(x OI 整个一周 $dg$ 都没有 ...

  3. JS实现图片上传之前先预览

    <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat=&quo ...

  4. 【OpenCV】透视变换矫正

    演示结果参考: 功能实现:运行程序,会显示图片的尺寸,按回车键后,依次点击需矫正的图片的左上.右上.左下.右下角,并能显示其坐标,结果弹出矫正后的图片,如图上的PIC2对话框.可以继续选择图片四个点进 ...

  5. 协议森林03 IP接力赛 (IP, ARP, RIP和BGP协议)

    网络层(network layer)是实现互联网的最重要的一层.正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet.更高层的协议,无论是TCP还是UDP,必须通过网络 ...

  6. myeclipse解决JSP文件里script背景颜色的调整

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/27971401 1导入MyEclipse的主题 ...

  7. HDU 4652 Dice

    嘟嘟嘟 题目大意就是对于一个m面的骰子,回答这么两个问题: 1.求连续扔n次都是同一数字的期望次数. 2.求连续扔n次每一次数字都不相同的期望次数. 对于期望dp特别菜的我来说,这道题已经算是很难了. ...

  8. Vue系列——在vue项目中使用echarts

    该示例使用 vue-cli 脚手架搭建 安装echarts依赖 npm install echarts -S 或者使用国内的淘宝镜像安装 npm install -g cnpm --registry= ...

  9. jQuery Mobile中jQuery.mobile.changePage方法使用详解

    jQuery.mobile.changePage方法用的还是很多的.作为一个老手,有必要对jQuery mobile中实用方法做一些总结.系列文章请看jQuery Mobile专栏.jquery.mo ...

  10. jmeter接口测试2-断言

    接上篇 要想更好的查看接口测试结果,可以添加断言 举一个最简单的响应断言的例子 前提环境:根据接口文档可知,待测试接口返回值1,-1,-2,-3 (1)添加断言 (2)设置断言内容,看响应的内容是否含 ...