用樹莓派和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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...