Raspberry Pi 感測器整合教材

介紹 Raspberry Pi 與常見感測器模組整合方式,包含溫濕度、光敏、超音波、PIR 人體感測等。

適合 IoT、感測器介接、智慧裝置與 Python 控制課程。

Raspberry Pi感測器PythonIoT

一、教學目標

二、常見感測器

Raspberry Pi 的 GPIO 腳位主要處理數位輸入/輸出,因此感測器可分為「可直接接 GPIO 的數位型模組」與「需要額外轉換的類比型模組」。實作前先確認模組的工作電壓、輸出型態與是否內建比較器。

感測器用途介面實作重點
DHT11 / DHT22溫濕度數位DHT22 精度較高;資料腳通常需上拉電阻。
LDR 光敏電阻光線強弱類比模組或數位模組Pi 無原生 ADC,若是純類比電阻需搭配 ADC;若是 LM393 類模組可直接讀數位門檻輸出。
HC-SR04距離量測Trig / EchoEcho 端為 5V,必須降壓後再接到 Pi。
PIR人體移動偵測數位輸出通常只有高/低電位,適合事件觸發。
MQ 系列氣體偵測模組化輸出常見模組同時提供類比與數位輸出;若要看濃度變化,建議搭配 ADC。
選感測器時,可先問三件事:工作電壓是多少?輸出是數位還是類比?是否需要校正或預熱? 這三項通常就能判斷接線方式與程式寫法。

三、接線與實作前準備

# 建議先更新套件
sudo apt update
sudo apt install -y python3-pip python3-gpiozero

# 視感測器需求安裝額外套件
pip3 install Adafruit_DHT
若使用的是較新的 Raspberry Pi OS,某些舊版教學會使用不同的 DHT 函式庫名稱。安裝前先確認範例所對應的套件版本,避免「程式可執行但讀不到資料」的情況。

四、DHT11 / DHT22 範例

DHT 類感測器適合做為第一個溫濕度實驗,因為輸出內容直觀,且能延伸到環境監測、溫室控制與室內舒適度分析。

接線說明

Python 範例

import Adafruit_DHT

sensor = Adafruit_DHT.DHT11   # 若改用 DHT22,請改成 Adafruit_DHT.DHT22
pin = 4

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

if humidity is not None and temperature is not None:
    print(f"Temp: {temperature:.1f}°C")
    print(f"Humidity: {humidity:.1f}%")
else:
    print("讀取失敗,請檢查接線、供電與上拉電阻")

讀值特性說明

可進一步把讀到的溫濕度資料每 5 秒寫入 CSV 或上傳 MQTT,讓後續的資料視覺化與 IoT 整合更容易進行。

五、PIR 人體感測範例

PIR(Passive Infrared Sensor,被動式紅外線感測器)主要用來偵測人體或大型物體移動造成的紅外線變化。它不會量測距離,而是回傳「是否偵測到移動」的事件訊號。

接線說明

Python 範例

from gpiozero import MotionSensor
from signal import pause

pir = MotionSensor(17)

pir.when_motion = lambda: print("偵測到人體移動")
pir.when_no_motion = lambda: print("沒有移動")

pause()

使用注意事項

六、超音波感測器概念

HC-SR04 透過發射超音波脈衝並計算回波返回時間來估計距離,常用於避障、液位量測與簡易測距實驗。

基本工作流程

  1. Trig 腳送出短脈衝
  2. 模組發射超音波
  3. Echo 腳回傳高電位時間
  4. 依時間差換算距離

距離計算常見公式:

距離 = (回波時間 × 音速) ÷ 2
約可寫成:distance_cm = pulse_seconds * 17150
HC-SR04 的 Echo 端通常輸出 5V,不能直接接 Raspberry Pi GPIO。實務上應使用分壓電阻、邏輯電平轉換器或保護電路後再接入。
若量測值忽大忽小,常見原因包括:目標表面太軟、角度偏斜、環境噪音、供電不穩,或感測器與目標距離超出有效範圍。

七、感測資料應用流程

感測器實驗完成後,可把資料逐步整合到完整 IoT 系統。建議依下列順序擴充:

  1. 本機輸出:先在終端機顯示資料,確認感測器本身正常。
  2. 資料清理:加入單位、時間戳記、異常值檢查與簡單平均。
  3. 網路傳輸:上傳到 MQTT Broker,讓其他程式可訂閱資料。
  4. 視覺化:在 Node-RED Dashboard、網頁或 App 顯示即時狀態。
  5. 長期保存:寫入 SQLite、MySQL 或雲端資料庫,進行歷史分析。
應用方向說明
終端機顯示最快完成的驗證方式,適合除錯。
MQTT Broker適合多裝置、多感測器的發布/訂閱架構。
Node-RED 儀表板可快速做出圖表、開關與警報流程。
資料庫適合保存歷史資料,做統計分析或訓練模型。
Flask / Django 網站可提供遠端查詢、登入權限與跨裝置瀏覽介面。

八、實作建議與常見錯誤

  1. 先完成單一感測器:不要一開始就同時接多種模組,較容易定位問題。
  2. 接線拍照或畫圖:有助於比對 VCC、GND、GPIO 是否接反。
  3. 先確認腳位與電壓:GPIO 接錯或把 5V 直接送入 GPIO,是最常見也最危險的錯誤。
  4. 程式先求穩定再求整合:先把讀值做穩,再接 MQTT、資料庫或 Web 介面。
  5. 保留量測紀錄:把測試輸出存成文字檔或 CSV,方便後續分析與除錯。
常見問題可能原因處理方式
DHT 讀不到資料腳位錯誤、供電不穩、缺少上拉電阻、套件版本不符重新確認 GPIO 編號、供電與安裝套件
PIR 一直觸發剛上電尚未穩定、靈敏度過高、周遭熱源干擾等待穩定後再測,調整模組旋鈕
超音波距離亂跳Echo 電壓未保護、目標反射差、角度不正加保護電路並更換量測目標與角度
程式可執行但數值異常接錯 3.3V / 5V、模組規格不符、讀取間隔太短查模組規格並放慢取樣速度