National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 72 24°C PM2.5 13
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 11

感測器原理與校正

感測器怎麼把物理量變成訊號、雜訊與校正
Interaction 25 minute(s)

Learning Objectives

  • 說明感測器怎麼把溫度、光線這類物理量變成電壓或數字
  • 分辨解析度、準確度與重複性,說明讀值為什麼會跳動
  • 用移動平均減少雜訊,並說明視窗大小與反應速度的取捨
  • 用兩個已知的點校正感測器,把原始讀值換算成有意義的單位

感測器:把世界變成數字

微控制器只看得懂電壓。感測器(sensor)的工作,是把溫度、光線、距離、濕度這些物理量,轉成電壓或數字。

常見的轉換方式:

感測器 物理量怎麼變成訊號 輸出
光敏電阻(LDR) 光線越強,電阻越小 類比:接成分壓電路,用 ADC 讀電壓
熱敏電阻(NTC) 溫度越高,電阻越小 類比:同上,但電阻和溫度不是直線關係
電容式土壤濕度 土壤越濕,電容越大,模組輸出的電壓改變 類比
DHT22、TMP102 晶片內部量好、轉好 數位:單線協定、I2C(上一課)

類比輸出的感測器多半是「電阻會變」,所以要和一顆固定電阻組成分壓電路(第 04 課),把電阻的變化變成電壓的變化,再交給 ADC 轉成數字。 ESP32 的 ADC 是 12 位元:0~3.3V 對應 0~4095,每一格大約 0.8 mV。

讀規格時常見的名詞

  • 量測範圍:能量的最小值到最大值,例如 −40~80°C。
  • 解析度:能分辨的最小變化,例如 0.1°C。解析度高不代表準。
  • 準確度:量到的值和真實值差多少,例如 ±0.5°C。
  • 重複性:同樣的條件量很多次,結果一不一致。
  • 反應時間:環境改變後,讀值多久才跟上。

解析度和準確度常被混在一起:溫度計顯示到小數點後兩位(解析度高),但整體偏高 2°C(準確度差),一樣不能用。

讀值為什麼會跳動

把感測器放著不動,連續讀 ADC,數字還是會跳。原因很多:

  • 電源電壓本身的小波動(馬達、Wi-Fi 傳送時特別明顯)
  • 導線像天線一樣,收到附近電器的干擾
  • ADC 的量化:連續的電壓被切成一格一格,剛好在兩格中間時會來回跳
  • ADC 本身的誤差:例如 ESP32 的 ADC 在接近 0V 與接近最大量測值時不太線性,量測時盡量讓訊號落在中間的範圍

硬體上可以在 ADC 腳位加一顆小電容濾波(第 07 課的 RC),程式上最常用的是平均:

方法 做法 特色
一次讀多筆取平均 連續讀 10 次,加起來除以 10 簡單,但每次都要花讀 10 次的時間
移動平均 只保留最近 N 筆,每讀一筆就丟掉最舊的一筆 每次只讀一筆,結果平滑;N 越大越平滑,反應也越慢
中位數 最近 N 筆排序後取中間那一個 偶爾出現一個離譜的值時,幾乎不受影響

平滑和反應速度是取捨:視窗越大,雜訊越小,但真的改變發生時,平均值要更久才跟上。

逐步看:移動平均

光線其實沒有變,但讀值在 1800~2300 之間跳動。看串列 window 怎麼保持最近 4 筆,以及平均值比讀值穩定多少。

互動練習:別被雜訊騙了

光線感測器的讀值越大代表越亮,超過 2048(一半)就亮起提醒燈。實際上要到 3 秒之後陽光才真的變強, 但在 1 秒與 2.5 秒時,各有一下短暫的雜訊(例如有人拿手電筒晃過)。依序完成任務:

  1. 直接執行起始程式,看提醒燈被雜訊騙了幾次。
  2. 改用最近 5 筆的移動平均和 2048 比較,讓燈只在陽光真的變強之後亮起。
  3. 回答一個問題。

這個練習的光線變化是固定的,所以沒有輸入設定。

校正:把讀值換成有意義的單位

ADC 讀到 2538,代表土壤多濕?要先校正(calibration):用已知的狀態,找出「讀值」和「真實值」的對應。

同一款感測器,每一顆、每一種接法讀到的數字都可能不一樣,所以校正要用你手上的那一顆做。 最常見的是兩點校正:量兩個已知的狀態,中間用直線換算。

土壤濕度感測器:
  放在空氣中(0%)  讀到 3200
  插進水裡(100%)  讀到 1400
  濕度 =(3200 − 讀值)÷(3200 − 1400)× 100

兩點校正同時修正了兩件事:零點(偏移,offset)和斜率(每一單位讀值代表多少,gain)。

注意事項:

  • 校正要有可信的參考:校正溫度要用準確的溫度計對照,不能用另一個沒校正過的感測器。
  • 兩點校正假設感測器是直線的。熱敏電阻、光敏電阻不是直線,要用規格書的公式(例如熱敏電阻的 B 值公式)或查表,或多量幾個點分段換算。
  • 超出兩個校正點的範圍,誤差可能變大;換算結果最好限制在合理的範圍內。

逐步看:土壤濕度的兩點校正

DRY 和 WET 是事先量好的兩個校正點。花盆裡的土慢慢被澆濕,看原始讀值怎麼換算成 0~100% 的濕度。 這款感測器越濕讀值越小,所以公式是用 DRY 減去讀值。

小測驗:感測與雜訊

1.

光敏電阻和一顆固定電阻組成分壓電路接到 ADC。光線變強時,ADC 量到的是什麼在改變?

2.

下面的程式計算最近 4 筆的移動平均,會印出什麼?

readings = [500, 520, 900, 510, 490]
window = readings[-4:]
print(sum(window) // len(window))
3.

一支溫度計顯示到小數點後兩位,但和標準溫度計比,一直多了 2°C。這支溫度計:

第 1 次作答

小測驗:校正

1.

用本課的兩點校正,讀到 2300 時濕度是多少?

DRY, WET = 3200, 1400
raw = 2300
print(round((DRY - raw) / (DRY - WET) * 100))
2.

同一款的兩顆感測器,為什麼要各自校正?

3.

讀值大多很穩定,但偶爾會出現一筆 4095 這種離譜的錯誤值。哪一種處理最不受這筆錯誤值影響?

第 1 次作答

重點整理

  • 感測器把物理量轉成電訊號;電阻型感測器接成分壓電路,用 ADC 讀電壓。
  • 解析度是能分辨多細,準確度是和真實值差多少,重複性是多次量測一不一致。
  • 讀值跳動來自電源、干擾與 ADC 的量化;用移動平均、中位數讓讀值穩定,視窗越大越平滑也越慢。
  • 兩點校正用兩個已知的狀態,同時修正零點與斜率;非線性的感測器要用公式、查表或分段。

下一課換一塊開發板:micro:bit 內建 LED 點陣、按鈕與加速度計,用 MicroPython 馬上就能做出互動作品。

這一課完成了!
Next lesson:micro:bit
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。