在嵌入式系統開發中,硬體重置和環境感測是常見的需求。本文將引導您如何在樹莓派上安裝重置按鈕,並示範如何使用電阻、光敏電阻和熱敏電阻等感測器收集環境資料。我們將探討步階回應技術在電阻測量中的應用,並提供詳細的電路圖和 Python 程式碼範例。此外,文章也涵蓋了不同溫度感測技術,例如使用熱敏電阻、TMP36 和 DS18B20 等,並提供程式碼實作參考。

給樹莓派新增重置按鈕

問題

你想要一個重置按鈕來啟動你的樹莓派,就像典型的桌面電腦一樣。

解決方案

當你完成使用樹莓派時,應該正確關閉它;否則,可能會損壞 SD 卡映像,這意味著你需要重新安裝 Raspbian。關閉樹莓派後,你可以透過按下重置按鈕來啟動它。為了實作這個功能,你需要以下材料:

  • 兩個 2.54mm 間距的公頭針(見「雜項」)
  • 一個回收的 PC 啟動按鈕或 MonkMakes Squid 按鈕(見「模組」)
  • 銲接裝置(見「原型設計裝置和套件」)

大多數樹莓派模型都有一個聯結器專門用於此目的。其位置在板上各不相同,但始終標記為 RUN。圖 12-20 顯示了其在樹莓派 4 上的位置,圖 12-21 顯示了其在樹莓派 3 上的位置。

圖 12-20. 樹莓派 4 上的 RUN 接觸點位置

圖 12-21. 樹莓派 3 上的 RUN 接觸點位置

孔距為 2.54mm,設計用於標準公頭針。從板的頂部將短端推入孔中,並在背面進行銲接。完成銲接後,帶有 RUN 公頭針的樹莓派應該如圖 12-22 所示。

圖 12-22. 樹莓派上附著的公頭針

現在公頭針已經附著,你可以直接將按鈕聯結器推入公頭針,如圖 12-23 所示。

圖 12-23. 帶有重置按鈕的樹莓派

討論

要測試你的修改,請啟動樹莓派並關閉它,如圖 12-24 所示。

圖 12-24. 關閉樹莓派

一段時間後,螢幕將關閉,Pi 將進入休眠模式,在此模式下它使用最少的電力,基本上處於待機狀態。現在,要啟動 Pi,你只需要按下按鈕,它就會啟動!

另請參閱

如需更多關於關閉和啟動樹莓派的資訊,請參閱配方 1.16。

第 13 章 感測器

13.0 簡介

在本章中,我們將探討使用各種感測器的配方,以便讓樹莓派能夠測量溫度、光線等。

與 Arduino 和 BeagleBone 等板卡不同,樹莓派缺乏類別比輸入。這意味著對於許多感測器,需要使用額外的類別比數位轉換器 (ADC) 硬體。幸運的是,這相對容易做到。另外,也可以使用電阻感測器、電容器和幾個電阻。

許多配方需要使用無焊接麵包板和公母跳線(見配方 9.8)。

13.1 使用電阻感測器

注意

請務必檢視此配方的附件影片。

使用Raspberry Pi測量可變電阻的阻值

您想要將一個可變電阻連線到Raspberry Pi,並測量其阻值,以便在Python程式中使用可變電阻旋鈕的位置。

解決方案

您可以使用一個電容器、兩個電阻器和兩個通用輸入/輸出(GPIO)引腳在Raspberry Pi上測量阻值。在這個例子中,您將能夠根據小型可變電阻(trimpot)的旋鈕位置估算其阻值。

所需元件

*麵包板和跳線(見「原型設計裝置和套件」)

  • 10kΩ可變電阻(見「電阻器和電容器」)
  • 兩個1kΩ電阻器(見「電阻器和電容器」)
  • 330nF電容器(見「電阻器和電容器」)

圖13-1顯示了麵包板上的元件排列。

安裝Python函式庫

此食譜使用了一個由作者開發的Python函式庫,以便更容易地使用類別比感測器。要安裝它,請執行以下命令:

$ cd pi_analog
$ sudo python3 setup.py install

程式碼

開啟一個編輯器並貼入以下程式碼(ch_13_resistance_meter.py):

from PiAnalog import *
import time

p = PiAnalog()
while True:
    print(p.read_resistance())
    time.sleep(1)

執行程式

當您執行程式時,您應該會看到類別似以下的輸出:

$ python3 resistance_meter.py
5588.419502667787
5670.842306126099

這個程式會不斷地讀取可變電阻的阻值,並每秒鐘印出一次。您可以使用這個值來控制您的Python程式。

內容解密:

  • 我們使用PiAnalog函式庫來簡化類別比感測器的使用。
  • read_resistance()函式傳回可變電阻的阻值。
  • 我們使用time.sleep(1)來設定程式每秒鐘讀取一次可變電阻的阻值。

圖表翻譯:

  flowchart TD
    A[開始] --> B[初始化PiAnalog]
    B --> C[讀取可變電阻的阻值]
    C --> D[印出阻值]
    D --> E[等待1秒]
    E --> C

這個流程圖顯示了程式的執行流程。首先,初始化PiAnalog函式庫,然後讀取可變電阻的阻值,印出阻值,等待1秒,然後重複這個過程。

使用 Raspberry Pi 和可變電阻測量電阻

在本文中,我們將探討如何使用 Raspberry Pi 和可變電阻(trimpot)來測量電阻。這個過程涉及使用步階回應技術(step response technique)來測量可變電阻的電阻值。

步階回應技術

步階回應技術是一種測量電阻的方法,透過測量電容器充電和放電的時間來計算電阻值。這個過程涉及以下步驟:

  1. 將電容器放電:透過設定 GPIO 18 為輸入,斷開 Rc 和 Rt 的連線,然後設定 GPIO 23 為低電平輸出,持續 100 毫秒,以放電電容器。
  2. 允許電容器充電:透過設定 GPIO 18 為高電平輸出,啟動電容器的充電過程。
  3. 測量充電時間:透過測量電容器充電到 1.65V 所需的時間,來計算電阻值。

實作步階回應技術

要實作步階回應技術,我們需要使用 Raspberry Pi 的 GPIO 引腳來控制電容器的充電和放電過程。以下是實作步驟:

  1. 連線電路:根據圖 13-2 所示的電路圖,連線可變電阻、電容器和 Raspberry Pi 的 GPIO 引腳。
  2. 設定 GPIO 引腳:設定 GPIO 18 和 GPIO 23 為輸出引腳,然後設定 GPIO 18 為高電平輸出,GPIO 23 為低電平輸出。
  3. 放電電容器:設定 GPIO 18 為輸入,斷開 Rc 和 Rt 的連線,然後設定 GPIO 23 為低電平輸出,持續 100 毫秒,以放電電容器。
  4. 充電電容器:設定 GPIO 18 為高電平輸出,啟動電容器的充電過程。
  5. 測量充電時間:透過測量電容器充電到 1.65V 所需的時間,來計算電阻值。

優點和缺點

步階回應技術是一種低成本和易於使用的方法,但是其準確度相對較低。主要原因是電容器的準確度通常只有 10%。如果需要更高的準確度,可以使用其他方法,例如使用類別比數位轉換器(ADC)。

內容解密:
import RPi.GPIO as GPIO
import time

# 設定 GPIO 引腳
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)

# 放電電容器
GPIO.output(18, GPIO.LOW)
GPIO.output(23, GPIO.LOW)
time.sleep(0.1)

# 充電電容器
GPIO.output(18, GPIO.HIGH)
start_time = time.time()

# 測量充電時間
while True:
    if GPIO.input(23) == GPIO.HIGH:
        break
    time.sleep(0.01)

end_time = time.time()
charging_time = end_time - start_time

# 計算電阻值
resistance = charging_time * 1000

print("The resistance is: ", resistance)

圖表翻譯:

  flowchart TD
    A[開始] --> B[放電電容器]
    B --> C[充電電容器]
    C --> D[測量充電時間]
    D --> E[計算電阻值]
    E --> F[輸出結果]

這個流程圖展示了步階回應技術的實作過程,從放電電容器到計算電阻值。

使用光敏電阻和熱敏電阻進行環境感測

環境感測的重要性

在許多應用中,環境感測是一個非常重要的方面。例如,在智慧家居系統中,需要感測光照度和溫度來調整照明和空調系統。在工業自動化中,需要感測溫度和濕度來控制生產過程。在這些應用中,光敏電阻和熱敏電阻是常用的感測元件。

使用光敏電阻感測光照度

光敏電阻是一種電阻值隨著光照度變化的元件。當光照度增加時,光敏電阻的電阻值會降低。使用光敏電阻可以感測環境中的光照度,並將其轉換為數字訊號。

硬體需求

*麵包板和跳線 *光敏電阻 *兩個1kΩ電阻 *330nF電容

程式碼

from PiAnalog import *

import time

p = PiAnalog()
while True:
    # 讀取光敏電阻的電阻值
    resistance = p.read_resistance()
    # 將電阻值轉換為光照度
    light_level = 1 / resistance
    print("光照度:", light_level)
    time.sleep(0.1)

使用熱敏電阻感測溫度

熱敏電阻是一種電阻值隨著溫度變化的元件。當溫度增加時,熱敏電阻的電阻值會降低。使用熱敏電阻可以感測環境中的溫度,並將其轉換為數字訊號。

硬體需求

*麵包板和跳線 *熱敏電阻 *兩個1kΩ電阻 *330nF電容

程式碼

from PiAnalog import *

import time

p = PiAnalog()
while True:
    # 讀取熱敏電阻的電阻值
    resistance = p.read_resistance()
    # 將電阻值轉換為溫度
    temperature = 1 / (resistance * 0.003354016)
    print("溫度:", temperature)
    time.sleep(0.1)

溫度感測技術

在各種感測應用中,溫度感測是一個重要的方面。下面將介紹幾種不同的溫度感測方法,包括使用熱電阻(Thermistor)、TMP36溫度感測器、數字溫度感測器(DS18B20)和Sense HAT等。

使用熱電阻感測溫度

熱電阻是一種常見的溫度感測元件,其工作原理根據電阻與溫度之間的關係。當溫度變化時,熱電阻的電阻也會相應變化。可以使用Steinhart-Hart方程計算出實際的溫度。

import time

# 假設p為熱電阻物件
print(p.read_temp_c())

time.sleep(1)

在上述程式碼中,p.read_temp_c()函式用於讀取熱電阻的溫度值。若要轉換為華氏溫度,則需修改程式碼為p.read_temp_f()

使用TMP36感測溫度

TMP36是一種簡單的溫度感測器,可以直接將溫度訊號轉換為電壓訊號。可以使用類別似的方法來讀取TMP36的溫度值。

使用數字溫度感測器(DS18B20)感測溫度

DS18B20是一種數字溫度感測器,可以透過一根線進行通訊。可以使用特定的函式庫來讀取DS18B20的溫度值。

使用Sense HAT感測溫度

Sense HAT是一種多功能感測器板,內建有溫度感測器。可以使用特定的函式庫來讀取Sense HAT的溫度值。

在樹莓派蓬勃發展的創客社群中,新增重置按鈕的需求日益增長。透過分析使用者經驗和實務落地,本文提供了一個簡單有效的硬體改裝方案,讓使用者得以如同操作桌面電腦般便捷地控制樹莓派的開關機。此方案利用樹莓派板載的 RUN 接觸點,只需簡單的焊接和連線即可完成,大大降低了技術門檻。然而,此方法仍存在潛在風險,例如焊接操作不當可能損壞樹莓派。此外,僅依靠重置按鈕控制電源並非最佳實踐,仍建議使用者養成正確關機的習慣,以保障資料安全和系統穩定性。未來,更完善的電源管理方案和使用者友善的軟體工具將進一步提升樹莓派的操控體驗。玄貓認為,對於追求便捷操作的使用者,此硬體改裝方案提供了實用價值,但仍需謹慎操作並配合正確的軟體使用習慣。