介紹 Raspberry Pi 與常見感測器模組整合方式,包含溫濕度、光敏、超音波、PIR 人體感測等。
適合 IoT、感測器介接、智慧裝置與 Python 控制課程。
Raspberry Pi 的 GPIO 腳位主要處理數位輸入/輸出,因此感測器可分為「可直接接 GPIO 的數位型模組」與「需要額外轉換的類比型模組」。實作前先確認模組的工作電壓、輸出型態與是否內建比較器。
| 感測器 | 用途 | 介面 | 實作重點 |
|---|---|---|---|
| DHT11 / DHT22 | 溫濕度 | 數位 | DHT22 精度較高;資料腳通常需上拉電阻。 |
| LDR 光敏電阻 | 光線強弱 | 類比模組或數位模組 | Pi 無原生 ADC,若是純類比電阻需搭配 ADC;若是 LM393 類模組可直接讀數位門檻輸出。 |
| HC-SR04 | 距離量測 | Trig / Echo | Echo 端為 5V,必須降壓後再接到 Pi。 |
| PIR | 人體移動偵測 | 數位 | 輸出通常只有高/低電位,適合事件觸發。 |
| MQ 系列 | 氣體偵測 | 模組化輸出 | 常見模組同時提供類比與數位輸出;若要看濃度變化,建議搭配 ADC。 |
gpiozero 與多數 Python 範例通常使用 BCM 編號,例如 GPIO17、GPIO4。# 建議先更新套件
sudo apt update
sudo apt install -y python3-pip python3-gpiozero
# 視感測器需求安裝額外套件
pip3 install Adafruit_DHTDHT 類感測器適合做為第一個溫濕度實驗,因為輸出內容直觀,且能延伸到環境監測、溫室控制與室內舒適度分析。
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("讀取失敗,請檢查接線、供電與上拉電阻")read_retry() 連續嘗試。None,優先檢查供電是否穩定、腳位是否正確,以及 DATA 線是否過長。PIR(Passive Infrared Sensor,被動式紅外線感測器)主要用來偵測人體或大型物體移動造成的紅外線變化。它不會量測距離,而是回傳「是否偵測到移動」的事件訊號。
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 透過發射超音波脈衝並計算回波返回時間來估計距離,常用於避障、液位量測與簡易測距實驗。
距離計算常見公式:
距離 = (回波時間 × 音速) ÷ 2
約可寫成:distance_cm = pulse_seconds * 17150感測器實驗完成後,可把資料逐步整合到完整 IoT 系統。建議依下列順序擴充:
| 應用方向 | 說明 |
|---|---|
| 終端機顯示 | 最快完成的驗證方式,適合除錯。 |
| MQTT Broker | 適合多裝置、多感測器的發布/訂閱架構。 |
| Node-RED 儀表板 | 可快速做出圖表、開關與警報流程。 |
| 資料庫 | 適合保存歷史資料,做統計分析或訓練模型。 |
| Flask / Django 網站 | 可提供遠端查詢、登入權限與跨裝置瀏覽介面。 |
| 常見問題 | 可能原因 | 處理方式 |
|---|---|---|
| DHT 讀不到資料 | 腳位錯誤、供電不穩、缺少上拉電阻、套件版本不符 | 重新確認 GPIO 編號、供電與安裝套件 |
| PIR 一直觸發 | 剛上電尚未穩定、靈敏度過高、周遭熱源干擾 | 等待穩定後再測,調整模組旋鈕 |
| 超音波距離亂跳 | Echo 電壓未保護、目標反射差、角度不正 | 加保護電路並更換量測目標與角度 |
| 程式可執行但數值異常 | 接錯 3.3V / 5V、模組規格不符、讀取間隔太短 | 查模組規格並放慢取樣速度 |