用樹莓派和DS18B20作個汽車溫度記錄儀[原創]

用樹莓派和DS18B20作個汽車溫度記錄儀[原創]python

     很想知道夏日陽光暴曬下,汽車內的最高溫度以及溫度的變化狀況。以爲用樹莓派和DS18B20來實現應該很簡單,因而就嘗試搗鼓了一下,半天時間就搞定了,寫下來和你們分享。如下原創內容歡迎網友轉載,但請註明出處:https://www.cnblogs.com/heleshengbash

1、樹莓派讀取DS18B20的溫度值網絡

    Raspbian系統已經可以支持DS18B20單總線(1-wire)溫度傳感器,只要簡單配置就能夠直接讀取,無需本身編寫底層驅動。ide

   配置過程也很簡單:工具

   打開Raspbian系統的/boot/config.txt文件,在最後一行添加以下代碼。測試

   dtoverlay=w1-gpio-pullup,gpiopin=17編碼

   其中最後一個數字17表示:樹莓派和DS18B20鏈接所使用的擴展引腳編號,即下表中BCM編碼列中對應的數字。可根據須要選擇樹莓派40pin擴展口中的任意引腳。spa

 

圖1 樹莓派40Pin引腳對照表命令行

    修改完config.txt後關機,將DS18B20的數據腳(TO-92封裝的中間一個引腳)鏈接到樹莓派的17pin,同時鏈接電源和地引腳。另外,還要在DS18B20的數據引腳和VCC之間鏈接一個4.7K的上拉電阻方可正常使用。code

   從新開啓樹莓派後就能夠在/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探頭

2、用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()
37  
View Code

3、將保存溫度值配置成系統啓動任務

    因爲汽車內沒有顯示器,也不方便每次開機還要用終端啓動上邊的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

4、記錄溫度車內溫度變化曲線

    將鏈接了DS18B20的樹莓派放入車內,採用點菸器車載充電器的USB口供電,便可實現車內溫度變化曲線記錄功能。

圖4 車內鏈接樹莓派和DS18B20

     使用時值得注意的是,樹莓派3沒有實時時鐘,每次上電須要鏈接網絡獲取時間來做爲系統時間。而本記錄程序在溫度的同時還要記錄當前時間。所以除非你的車停在有WIFI信號的地方,不然須要打開手機熱點供樹莓派鏈接網絡獲取系統時間。

     前面的Python程序在記錄溫度數據文件(*.csv)時採用了ASCII碼,所以可使用Matlab、Excel和Python matplot等任意流行的繪圖工具來繪製車內溫度變化曲線。 

 

圖5 車內溫度曲線

     由上圖能夠基本看出一天中車內溫度變化趨勢,中午10:00左右放入後數小時達到最高值29℃左右,隨後因爲下午和晚間有雨,從而致使溫度逐漸下降。剛開始階段的溫度驟降,是因爲手握DS18B20的緣由形成的。另外因爲下雨全天溫度峯值並不如想象中高,下次能夠選擇一個晴朗的日子再次測試。

相關文章
相關標籤/搜索