iT邦幫忙

2023 iThome 鐵人賽

DAY 15
2
自我挑戰組

WiFiBoy Python 玩學機介紹系列 第 15

15. 溫溼度記錄器

  • 分享至 

  • xImage
  •  

DHT11 溫溼度感測器介紹

物聯網課程有幾個著名教學範例,其中溫溼度感測器就是一個相當有意思的裝置。我們在日常生活中常會確認目前室內溫度幾度,決定是否要開電扇或是空調?如果覺得室內環境很潮濕、悶熱。就更要適時開啟除濕機,調整室內的濕度。除了使用傳統的溫度計或是溼度計,那冷氣或是除溼機等設備,它們是如何偵測到現場的溫溼度呢?我們來看看很常在家電中見到的 DHT 11 感測元件。

我們平常買到的DHT11溫濕度感測器模組,如同下圖所示。

https://ithelp.ithome.com.tw/upload/images/20230916/20105707vrUwbRDJU9.png

DHT11 是一種數位式的溫溼度感測器,其主要的特點有:

  1. 測量範圍: 可測量溫度範圍 0°C 到 50°C,濕度範圍 20% 到 90%。
  2. 溫度測量精度: 正負 2°C
  3. 濕度測量精度: 正負 5%
  4. 使用數位訊號輸出
  5. 每次讀取訊號時間,最好間隔2秒以上。

工作原理:

  • 當環境中的溼度發生變化,感濕元件會吸收或釋放濕氣,讓感測器的電容值發生變化。
  • 通過測量電容值變化,DHT11可以透過先前在實驗室的校準的數值,判斷出當前的溼度值。
  • 同時,熱敏電阻會測量環境的溫度。
  • 內建的控制器會將濕度和溫度值轉換為數位訊號,並將訊號輸出。
  • 微控制器會用通訊腳位與DHT11進行通訊,發出請求並接收感測器返回的數據。

技術規格書可從此連結下載。如果有興趣了解更深入的技術規格與傳輸協定解析,強烈推薦閱讀由「早安,苦命工程師的胡言亂語」所撰寫的「DHT11 DHT22 溫溼度感測器[Flash FORTH]」的文章。裡面有詳細的圖解與原理解釋,非常值得學習。

Micropython 檔案系統介紹

讀取溫溼度資料的程式並不難編寫,但困難的是如何長期記錄(溫溼度感測器能穩定地持續工作)並將這些資料能夠存下(存在內部的記憶體、網路通訊上傳至伺服器或是將數據寫到資料庫中)。因此,我們來學學 MicroPython 中跟檔案存取有關的幾個函數。

MicroPython 內建一個檔案讀寫的 uio 模組,可以將記憶體緩衝區中的物件進行讀取與寫入的操作。

讀檔

https://ithelp.ithome.com.tw/upload/images/20230916/20105707dMcCtJCsZA.png

# 開檔
import uio
file = uio.StringIO()
# 讀檔
with open('boot.py', 'r') as f:
    file_content = f.read()
    print(file_content)

file.close()

寫檔

https://ithelp.ithome.com.tw/upload/images/20230916/20105707AGbvxrl2wA.png

import uio
file = uio.StringIO()
file.write("Hello, WiFiBoy!")
# 建立一個檔案並將記憶體的內容寫到檔案中
with open('example.txt', 'w') as f:
    f.write(file.getvalue())
    
# 讀檔
with open('example.txt', 'r') as f:
    file_content = f.read()
    print(file_content)

file.close()

範例實作: 建立一個溫溼度記錄器

接線方式

https://ithelp.ithome.com.tw/upload/images/20230916/20105707hfqKzIVcQ5.png

# 溫溼度記錄器
from machine import Pin
import utime as time
from dht import DHT11
import uio

DHT_PIN = 5

dhtSensor = DHT11(Pin(DHT_PIN, Pin.OUT,  Pin.PULL_DOWN))

f = open('TempHumd.txt', 'w')
f.write('# Temperature and Humidity\n')
f.close()
f = open('TempHumd.txt', 'a')
count = 0
while True:
    if count >= 10:
        break
    else:
        dhtSensor.measure()
        temp = dhtSensor.temperature()
        humidity = dhtSensor.humidity()/100
        f.write('%d , %3.2f\n' % (temp, humidity))
        time.sleep(5)
        count += 1
f.close()

上一篇
14. 用四位七段顯示器來做小時鐘
下一篇
16. 經典遊戲(一) 終極密碼
系列文
WiFiBoy Python 玩學機介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言