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

来源:https://www.cnblogs.com/helesheng/archive/2018/08/01/9400325.html
-Advertisement-
Play Games

用樹莓派和DS18B20做個汽車溫度記錄儀[原創] 很想知道夏日陽光暴曬下,汽車內的最高溫度以及溫度的變化情況。覺得用樹莓派和DS18B20來實現應該很簡單,於是就嘗試搗鼓了一下,半天時間就搞定了,寫下來和大家分享。以下原創內容歡迎網友轉載,但請註明出處:http://blog.163.com/he ...


用樹莓派和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()
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的原因造成的。另外由於下雨全天溫度峰值並不如想象中高,下次可以選擇一個晴朗的日子再次測試。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  •     經過前面的學習,tcpdump的用法相信應該都掌握了,今天我們來學習對tcpdump輸出內容的學習和瞭解。我們以第一個示例進行講解如下所示: IP協議包分析 第一行 這裡僅僅是提示如果想獲取和查看更詳細的命令可以嘗試添加的參數。 第二行 tcpdump監聽的網路設備介面和 ...
  • 在執行shell腳本時可以傳遞參數: 腳本獲取參數的格式為:$0 $1 $2 ...其中$1 為傳遞的第一個參數 而$0 接受的是./test.sh 這個東西 代碼:例: 運行結果: 註意:大家可以看到我運行時後面傳了兩個參數 11 22 但是接收時$0接的是 ./test.sh $1 $2接收的才 ...
  • 一、概念 Docker Compose 是官方編排項目之一,負責快速的部署分散式應用。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML格式)來定義一種相關聯的應用容器為一個項目。 Docker Compose 中有兩個重要的概念: 服務 (service):一個應用 ...
  • 有時候,我們使用 scp 命令可以解決我們很多問題: 使用舉例:拷貝當前文件,到 系統 10.66.65.15 之中 註意事項: -P port Specifies the port to connect to on the remote host. Note that this option is ...
  • 越來越多小伙伴都將系統升級成Win10正式版了win10功能強大令不少朋友感到非常滿意。但也有一些朋友升級後卻遇到一些問題,比方應用商店、應用打不開或閃退的問題,今天快啟動小編就跟大家介紹Win10應用商店、應用打不開或閃退的解決方法。 輸入Powershel搜索結果中右鍵單擊Powershel選擇 ...
  • 最近需要安裝一款Linux, 由於使用的電腦系統為 fedora 28, 所以只能在linux 製作U盤 使用 df 或者 fdisk -l 查看 U盤文件: 使用 umount /dev/sdb4 進行卸載 文件系統 使用 mkfs.fat /dev/sdb -I 格式化文件系統為 FAT 使用 ...
  • shell數組類似與C語言,數組下標由0開始編號。想要獲取數組中的元素要利用下標。 1、首先定義數組 在shell中,用括弧來表示數組,數組元素用“空格”符號分割開。列: 其形式為:數組名=(值1 值2 ... 值n) 也可以單獨定義數組的各個分量:例: 2、讀取數組 讀取數組元素值的一般格式是: ...
  • 首先說說為什麼要更新源,我是在docker容器中修改配置文件時有所需要,要用到vim,但是會報錯。找不到需要的包。 網上都會說要先更新:apt-get update 但是超級慢有沒有,我更新了4小時,被同學不小心給關了,心裡mmp。第二天不得不用網上的方法,更改源,再更新。 網上很多個源,我試了幾個 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...