2025-10-14
Arduino 數位輸出輸入教學|以 LM393 光敏模組為例
前言 在前兩篇中,你已經學會讓 Arduino 成功連線、上傳程式,並控制板載 LED 閃爍。這一篇要更進一步,讓 Arduino 不只是「發出訊號」,而能「讀懂環境變化」。我們會使用 LM393 光敏模組 這個常見的入門感測器,學習如何讓 Arduino 讀取明暗變化(數位輸入),並控制 LED 反應(數位輸出)。這個過程會用到兩個非常重要的函式:digitalRead() 與 digitalWrite()。
完成本篇後,你將能:理解數位輸入與輸出的原理(HIGH/LOW 電位代表什麼)。正確接線並操作 LM393 光敏模組。撰寫程式讓 LED 自動亮起或熄滅。為後續感測器與自動控制專案打下基礎。 文章內容目錄 Arduino 的數位輸入與輸出是什麼LM393 光敏模組介紹與接線方式Arduino 程式範例:LM393光敏模組讀取光線並控制LED常見錯誤排查(快速表)延伸應用與實作建議結論與延伸閱讀 Arduino 的數位輸入與輸出是什麼 在 Arduino 的世界裡,所有「互動」都從這兩件事開始:
輸入(Input)代表「接收訊號」,例如按鈕被按下、光線變亮。輸出(Output)代表「發送訊號」。例如讓燈亮、蜂鳴器響、馬達轉。 這是感測器與控制元件之間的語言,幾乎每個專案都會用到。可以想成 Arduino 是一個「判斷盒」,外界把訊號丟進來(輸入)→ Arduino 判斷 → 再把指令送出去(輸出)。而這就是每個感測器專案的基本流程。 一、數位腳位與 HIGH/LOW 電位概念 Arduino 的板子上有一排「Digital」字樣的接腳,這些就是數位腳位(Digital Pins)。就像一排「可以自己開關的插座」。
每個腳位都能做兩件事:當 輸出孔(Output) → 發出電訊號,控制外部裝置(像是讓 LED 亮)。當 輸入孔(Input) → 接收外界訊號(像是讀取按鍵或感測器的狀態)。而數位腳位只認得兩種狀態:HIGH(高電位):有電,通常是 5V(或 3.3V)。LOW(低電位):沒電,通常是 0V。 狀態電位意思舉例HIGH有電(約 5V 或 3.3V)表示「打開」「偵測到」LED 亮、按鈕被按下LOW沒電(0V)表示「關閉」「未偵測到」LED 滅、按鈕放開
數位腳位是 Arduino 跟外界溝通的「開關孔」,可以選擇「自己發電」(輸出)或「去感應」(輸入)。 小提醒:數位腳位只有兩種狀態:「0=沒電」「1=有電」。跟它不同,類比腳位可以量到「中間程度」的強弱,會用數字表示(0~1023)。你看到的 512 就是「大約一半強度」,768 則是「比一半再強一些」。本篇主要介紹數位開/關;類比「強弱多少」的細節,我們會在後續章節再完整補充。 二、digitalRead() 與 digitalWrite() 是什麼? 當你要讓 Arduino 操作這些腳位時,就會用到兩個最基本的指令:digitalRead() 與 digitalWrite() 簡單的來說可以這樣記digitalRead() 是「耳朵」,用來聽訊號 = 我接收訊號(感受世界)
digitalWrite() 是「手」,用來執行動作 = 我發出訊號(控制別人) 三、digitalRead() 與 digitalWrite() 的用途與差別指令用途白話解釋範例digitalWrite(pin, HIGH/LOW)輸出訊號「我讓這個腳位有電或沒電」讓 LED 亮或滅digitalRead(pin)讀取訊號「我去看這個腳位現在有沒有電」判斷按鈕有沒有被按下 而這兩個指令要搭配 pinMode() 使用。先用 pinMode(pin, OUTPUT) 或 pinMode(pin, INPUT) 指定腳位方向,
再依用途選擇讀或寫。告訴 Arduino 這個腳位是要「讀」還是「寫」: pinMode(2, INPUT); // 宣告第 2 腳是輸入(感測器)
pinMode(13, OUTPUT); // 宣告第 13 腳是輸出(LED)範例 int sensor = digitalRead(2); // 讀取感測器訊號
if (sensor == HIGH) {
digitalWrite(13, HIGH); // 亮燈
} else {
digitalWrite(13, LOW); // 滅燈
}範例 四、Arduino 的數位輸入與輸出流程怎麼運作? Arduino 先「聽」外界(read),再「想」要不要動作(if 判斷),最後「做」出反應(write)。
整個過程是一個訊號進出循環(Input → Process → Output)。 可以從以下步驟想像訊號流動的方向: 外界事件(光線變亮 / 按鈕被按下)
↓
感測器輸出電壓(HIGH 或 LOW)
↓
Arduino 的數位腳位接收訊號
↓
digitalRead() 讀取電位狀態
↓
if 判斷邏輯(條件成立或不成立)
↓
digitalWrite() 輸出指令
↓
模組 /LED / 馬達 / 蜂鳴器執行反應
五、實際應用:LED、按鍵、感測器控制 舉三個常見的例子: LED 控制(數位輸出)
digitalWrite(13, HIGH); → LED 亮
digitalWrite(13, LOW); → LED 滅 按鍵偵測(數位輸入)
if (digitalRead(2) == HIGH) → 代表按鍵被按下 感測器(如 LM393 光敏模組)
if (digitalRead(3) == LOW) → 偵測到光線變亮
把 Arduino 當成一個「判斷盒」的概念後,就可以執行:
輸入訊號(光、聲、溫度) → 經過程式判斷 → 執行對應輸出(亮燈、發聲、轉動)。 理解了數位腳位的概念後,接下來我們就用 LM393 光敏模組 來實際操作一次, Arduino 如何透過「數位輸入」讀取光線變化,並用「數位輸出」控制 LED 反應,讓抽象的「輸入與輸出」變成可以親眼看到的互動結果。 LM393 光敏模組介紹與接線方式LM393 光敏模組是一個常見的光線感測器模組,能根據環境明暗變化,輸出「有電(HIGH)」或「沒電(LOW)」的訊號給 Arduino。
它的特點是已內建比較器電路,不需要自己處理複雜的電壓判斷,非常適合初學者。 延伸閱讀:比較器(Comparator)是一種用來比較兩個電壓高低的電路。當感測端的電壓高於設定的參考電壓時,輸出 HIGH;反之則輸出 LOW。LM393 模組就是利用這個原理,將光敏電阻感測到的亮度變化轉換成「亮」或「暗」兩種數位訊號給 Arduino。 一、LM393 模組工作原理與比較器輸出 LM393 模組組成 這個模組主要由三個部分組成: 組成部分功能說明光敏電阻(LDR)會隨光線強度改變阻值。光越亮,阻值越小;光越暗,阻值越大。LM393 比較器晶片負責比較光敏電阻與可調電位器之間的電壓差,輸出 HIGH 或 LOW。可調電位器(旋鈕)用來設定光線判斷的臨界值,決定在多亮的情況下輸出改變。 LM393運作邏輯簡圖 光線變化 → 改變電阻值 → 產生電壓差 → LM393 比較器判斷 → 輸出 HIGH / LOW → Arduino 數位腳位讀取 當環境變亮時,光敏電阻的阻值變小,電壓變化導致比較器電壓改變=輸出狀態改變;
LM393 晶片會根據這個變化,輸出 HIGH(有電) 或 LOW(沒電) 給 Arduino。
你可以轉動模組上的藍色電位器(旋鈕),設定感光臨界值,以利更靈敏的讀值,建議調整到給予/移開光源時觸發。 LM393輸出型態 不同模組會以不同方式把偵測結果傳給 Arduino,而 Arduino 必須依照「輸出型態」選對指令來讀取。LM393 採用的是 數位輸出訊號(DO, Digital Output),也就是透過 HIGH/LOW 兩種電位狀態告訴 Arduino 目前的光線變化。 當 DO 腳輸出 HIGH → 代表光線亮(感測到足夠光線)
當 DO 腳輸出 LOW → 代表光線暗(感測到光線不足) 因為 LM393 的 DO 腳屬於「數位輸出型態」,它只會回傳「亮」或「暗」兩種狀態(HIGH/LOW),所以我們要使用 digitalRead() 來讀取它的輸出,而不是使用 analogRead()。 補充說明: 有些版本的 LM393 模組還會多出一個 AO(Analog Output) 腳,可輸出 0~5V 的連續電壓值,用來量化亮度強弱。不過本篇著重於 DO 腳 的數位輸出應用。 延伸閱讀:什麼是「輸出型態」? 「輸出型態」(Output Type)指的是模組用什麼方式把偵測結果送出給 Arduino。
不同模組會輸出不同型式的訊號,Arduino 要依照輸出型態選對指令來讀取。輸出型態傳送的訊號Arduino 對應腳位讀取方式常見用途Digital(數位輸出)只有 HIGH/LOW 兩種狀態數位腳位(D2~D13)digitalRead()LM393 光敏模組、按鍵模組Analog(類比輸出)0~5V 之間連續電壓值類比腳位(A0~A5)analogRead()光敏電阻模組 AO 腳、溫度感測器PWM(脈衝模擬輸出)用閃爍頻率模擬亮度變化支援 PWM 的數位腳analogWrite()LED 調光、馬達控制Open Collector(開集輸出)需外接上拉電阻才能輸出電壓數位腳位digitalRead()(需共地)工業紅外線模組等 數位輸出(Digital) → 像開關,只告訴你「亮」或「暗」。類比輸出(Analog) → 像旋鈕,可以知道「多亮、多暗」。PWM 輸出 → 像旋鈕,但其實是用「快速閃爍」假裝連續變化。 二、LM393接線表(VCC/GND/DO 對應 Arduino 腳位) LM393 光敏模組共有三個主要接腳:VCC、GND、DO。它們分別負責供電、接地與傳送感測訊號。由於這個模組輸出的是數位訊號(HIGH/LOW),因此 DO 腳應接到 Arduino 的「數位腳位」(例如 D2 或 D3),以便用 digitalRead() 讀取。 模組腳位功能說明接到 ArduinoVCC電源正極(+),為模組供電5V(部分版本支援 3.3V)GND電源負極(–),必須與 Arduino 共地GND(接地)DO數位輸出(Digital Output),輸出 HIGH/LOW 狀態任一數位腳位(建議 D2) 接線實例:LM393 VCC → Arduino 5V
LM393 GND → Arduino GND
LM393 DO → Arduino D2 補充說明: 如果模組上有 AO 腳(Analog Output),那是用來輸出類比值的,可接到 Arduino A0 腳做進階亮度測量(非本篇重點)。若只需要判斷「亮或暗」,本篇示範的 DO 腳(數位輸出)就足夠使用。 三、共地的重要性與電壓穩定提示 在所有 Arduino 實作中,「共地(GND 共用)」是確保訊號穩定、感測正確的關鍵步驟。
所謂「共地」的意思是:所有裝置都要有相同的電壓參考點(0V)。
如果 Arduino 的 GND 與模組的 GND 沒有接在一起,兩邊的電壓基準會不同,就會導致資料亂跳或讀值錯誤。可以把「共地」想像成兩個人講話時要用同一種語言。如果 Arduino 和模組沒有共地,它們的「0V」定義不一樣,訊號雖然有傳,但雙方聽不懂,就會出現 LED 不亮、讀值不穩、感測器無反應 等問題。 操作建議: 一定要把模組 GND 與 Arduino GND 接在一起。若同時使用多個感測器或馬達,建議使用外部電源供電,並與 Arduino 共地,避免 Arduino 供電不足。若感測器輸出不穩,可在模組 VCC 與 GND 之間加上一顆 100nF~10µF 電容,幫助濾除電源雜訊。 如果沒有共地會發生什麼事? 1.Arduino 可能讀不到正確的 HIGH/LOW。 2.感測器輸出會亂跳或持續輸出固定值。 3.有時甚至會造成板子誤判或重啟。
當專案越做越大(例如連接多顆感測器或驅動模組),共地線路的重要性會更明顯。
穩定的共地能避免誤判、閃爍或隨機重啟等問題,是所有硬體系統「穩定運作」的基礎。 Arduino 程式範例:LM393光敏模組讀取光線並控制LED 理解了 LM393 模組的運作與接線後,接下來我們要實際寫程式,讓 Arduino 透過 數位輸入(digitalRead) 讀取光線變化,並用 數位輸出(digitalWrite) 控制 LED 的亮滅。 在這一節中,我們會分成三個階段練習。這三段程式其實都在做同一件事——讀取 LM393 光敏模組的訊號,控制 LED 的亮或滅。每一階段都在前一階段的基礎上多加一個新功能或觀察方式,讓你能一步一步理解 Arduino 的運作邏輯。 建議按照順序執行這三段程式:
從 第 1 階段 開始,先確認感測器與 LED 能正常反應;
接著進入 第 2 階段,透過 Serial Monitor 觀察感測器的輸出變化;
最後挑戰 第 3 階段,嘗試調整臨界值或改變 LED 的亮滅邏輯。 這樣的學習流程能讓你從「讓它動起來」→「看懂它的輸入」→「能控制它的行為」,循序建立完整的 Arduino 感測與輸出控制基礎。 學習階段主要功能新學到的重點使用時機第 1 階段:光線偵測 → LED 點亮讓感測器與 LED 正常運作認識數位輸入/輸出、if 判斷邏輯第一次操作 Arduino,確認接線與模組是否正常第 2 階段:加入 Serial Monitor 觀察變化在電腦端觀察感測器輸出狀態學會使用序列監控視窗(Serial Monitor)除錯想確認感測結果是否與環境變化一致時使用第 3 階段:設定臨界值或反向輸出自訂 LED 亮滅條件與反應方向學會修改判斷條件與旋鈕調整靈敏度想讓裝置行為更貼近實際應用或進階專案時使用 在本章節,我們會先實際跑程式,因此你會先看到幾個常見的程式語法:
if / else:做判斷——「如果…就…,否則…」。用來決定是否亮燈。for:重複執行多次,常用於「漸亮/漸暗」這類連續變化。setup()/loop():Arduino 的基本結構;setup() 開機跑一次,loop() 之後持續重複。const:宣告「常數(設定好就不能改的數值或參考點)」常用來固定腳位或參數,避免誤改。int:Arduino用到整數的時候使用,用來儲存整數。本篇用於儲存腳位編號的資料。void:函式沒有回傳值。常見在 setup()、loop() 前面,表示這兩個函式只做事、不回傳結果。詳細的程式概念與更多範例會在後續章節(控制結構與時間函式)再完整說明。這邊先著重理解數位訊號,讓程式順利運行。
一、基礎範例:光線偵測 → LED 點亮 這是最簡單的光控範例:當感測到環境變亮時,LED 亮;變暗時,LED 滅。 // LM393 光敏模組 x LED 控制範例
const int sensorPin = 2; // DO 腳接 D2 (輸入腳)
const int ledPin = 13; // LED 接 D13 (輸出腳)
void setup() {
pinMode(sensorPin, INPUT); // 宣告感測器為輸入
pinMode(ledPin, OUTPUT); // 宣告 LED 為輸出
}
void loop() {
int sensorValue = digitalRead(sensorPin); // 讀取感測器狀態
if (sensorValue == HIGH) {
digitalWrite(ledPin, HIGH); // 光線亮 -> LED 亮
} else {
digitalWrite(ledPin, LOW); // 光線暗 -> LED 滅
}
}
程式邏輯 讀取感測器 DO 腳的電壓(HIGH/LOW)。若是 HIGH(亮)→ 輸出 HIGH 給 LED。若是 LOW(暗)→ LED 熄滅。 測試方式
將模組放在明亮處 LED 會亮,遮住光敏電阻 LED 會滅。(部分廠牌邏輯可能反向,即明亮處LED熄滅)
若不靈敏或不觸發可透過旋轉電位器微調感測閾值。 二、加入 Serial Monitor 觀察輸入變化 為了清楚看到感測器輸出的狀態,可以透過 序列監控視窗(Serial Monitor) 顯示當前讀值。const int sensorPin = 2;
const int ledPin = 13;
void setup() {
pinMode(sensorPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // 開啟序列埠監控, 鮑率設定為 9600
}
void loop() {
int sensorValue = digitalRead(sensorPin);
Serial.print("感測器狀態 : ");
Serial.println(sensorValue); // 顯示 0 (LOW) 或 1 (HIGH)
if (sensorValue == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(200); // 每 0.2 秒更新一次
}
觀察結果 在 工具 → 序列監控視窗 開啟後,會看到輸出 0 或 1。1 代表模組輸出 HIGH(亮),0 代表輸出 LOW(暗)。這樣可以更容易判斷模組反應是否正確。 三、進階:設定臨界值或反向輸出 不同品牌的 LM393 模組在亮/暗判斷上可能反向,若你想在「訊號為LOW時亮燈」而不是「訊號為HIGH時亮燈」,只要在判斷式裡反轉條件即可: if (sensorValue == LOW) {
digitalWrite(ledPin, HIGH); // 光線暗 → LED 亮
} else {
digitalWrite(ledPin, LOW); // 光線亮 → LED 滅
}
可調整電位器若反應不靈敏或觸發太頻繁,轉動模組上的藍色電位器可改變亮度判斷臨界值。
順時針轉 → 提高靈敏度;逆時針轉 → 降低靈敏度(依模組設計略有差異)。 四、本段落結論 這三個階段的練習中,你會循序理解整個 Arduino 的輸入與輸出流程。 digitalRead() 負責接收感測器訊號(HIGH/LOW),讓 Arduino 知道外界狀態。digitalWrite() 負責輸出控制指令,讓 LED 亮或滅。LM393 模組的判斷邏輯可以在程式中反轉,或透過電位器微調靈敏度。 學習重點回顧:
第 1 階段學會「讓它動起來」;
第 2 階段看懂「它在讀什麼」;
第 3 階段則能「控制它怎麼反應」。 完整流程:光線變化 → LM393 DO 輸出 HIGH/LOW → Arduino 讀取 → 判斷 → LED 亮或滅。 常見錯誤排查(快速表) 在實際操作 LM393 光敏模組時,若 LED 沒反應或讀值異常,通常不是模組壞掉,而是幾個常見的接線或設定問題。
以下整理出最容易踩到的三類狀況與對應檢查方向。 問題現象可能原因檢查與解決方式LED 不亮或一直亮腳位接錯或沒有共地確認 DO 腳接的是數位腳(如 D2),且模組與 Arduino 的 GND 一定要相連。讀值亂跳、不穩定沒共地或環境光干擾檢查共地是否確實接好,並嘗試在模組 VCC 與 GND 間加上電容(100nF~10µF),或調整電位器靈敏度。序列監控顯示數值固定不變感測器方向錯/旋鈕設定錯確認光敏電阻朝向光源,嘗試轉動藍色旋鈕調整臨界值,直到輸出在亮/暗之間能切換。上傳成功但沒有反應腳位未設定正確檢查程式中的 sensorPin 和實際接線腳位是否一致(常見錯接成 A0 或 D0)。 當你遇到Arduino 專案有問題時,我們會建議先從「電」與「線」開始排查。所以如果不確定問題來自程式還是接線,可以先上傳 Blink 範例測試板子,再用 Serial Monitor 檢查感測值是否有變化。 延伸應用與實作建議把「讀 → 判斷 → 寫」用在更多元件上,就能做出更多小專案。下面列三個延伸方向,範例可以沿用本篇接線(DO→D2、LED→D13),只需要多接 1–2 個元件即可上手。 一、光控蜂鳴器(環境過暗提醒) 目標: 當環境變暗時自動鳴叫提醒,恢復明亮時停止。硬體:被動蜂鳴器(或主動蜂鳴器)接到 D8、與 Arduino 共地。程式重點:暗→鳴叫、亮→安靜。 // LM393 : D0→D2 ; Buzzer(主動)→D8
const int sensorPin = 2;
const int buzzerPin = 8;
void setup() {
pinMode(sensorPin, INPUT);
pinMode(buzzerPin, OUTPUT);
}
void loop() {
bool isDark = (digitalRead(sensorPin) == LOW); // 若你的模組相反,改成 == HIGH
digitalWrite(buzzerPin, isDark ? HIGH : LOW);
}
這段程式碼加入了一個新的硬體元件:蜂鳴器 (Buzzer)。並且把蜂鳴器連接到 buzzerPin (設定為 D8),控制的對象從 ledPin 改成了 buzzerPin:當光線暗 (LOW) 時,蜂鳴器會響起 (HIGH)。 小提醒:主動蜂鳴器可直接 HIGH/LOW 控制;被動蜂鳴器可改用 tone(buzzerPin, 2000); noTone(buzzerPin);。 二、閃爍的警示燈光 目標:當條件觸發時(過暗),則警示LED持續保持閃爍用以提示。硬體:把 LED + 330Ω 電阻後接地。程式重點:當 digitalWrite() 不再只是只能做單純的開關動作,也可以是閃爍的效果。 // LM393 : D0 → D2 (輸入)
// LED : → D9
const int sensorPin = 2;
const int ledPin = 9;
const int ledFreq = 10; // 閃爍頻率(毫秒)
void setup() {
pinMode(sensorPin, INPUT); // 感測器輸入
pinMode(ledPin, OUTPUT); // LED PWM 輸出
}
void loop() {
// LOW=暗、HIGH=亮 (若相反, 改判斷式或調電位器)
if (digitalRead(sensorPin) == LOW) {
// 暗 → 閃爍,可以透過更改閃爍頻率參數變更閃爍的頻率
digitalWrite(ledPin, HIGH);
delay(ledFreq);
digitalWrite(ledPin, LOW);
delay(ledFreq);
} else {
// 亮 → 停止
digitalWrite(ledPin, LOW);
}
}
三、與超音波避障邏輯結合(情境判斷) 目標:同時考量「光線」與「距離」兩種條件,例如「暗」且「太近」才啟動警示。硬體:加上 HC-SR04(Trig→D9,Echo→D10;注意與上例 PWM 腳位錯開)。程式重點:多條件 if 判斷,形成「情境規則」。 // 雙模件:LM393(光) + HC-SR04 (距離)
const int sensorPin = 2; // LM393 D0 → D2
const int trigPin = 9; // HC-SR04 Trig → D9
const int echoPin = 10; // HC-SR04 Echo → D10
const int ledPin = 13; // 警示輸出 (可改蜂鳴器腳)
long readDistanceCm() {
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long dur = pulseIn(echoPin, HIGH, 30000UL); // 最長等 30ms = 5m
if (dur == 0) return 9999; // 無回波視為很遠
return (dur * 0.0343) / 2; // 時間→距離 (公分)
}
void setup() {
pinMode(sensorPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
bool isDark = (digitalRead(sensorPin) == LOW); // 依你的模組, LOW=暗
long dist = readDistanceCm();
digitalWrite(ledPin, (isDark && dist < 20) ? HIGH : LOW); // 暗且近→啟動警示
delay(50); // 簡單節流, 避免過於頻繁觸發
}
結論與延伸閱讀到這裡,你已經已完成接線(VCC/GND/DO)→ 設定腳位(pinMode)→ 讀取輸入(digitalRead)→ 判斷(if)→ 輸出控制(digitalWrite)→ LED 亮/滅。LM393 的 DO 為數位輸出,只回傳 HIGH/LOW;行為可在程式中反轉,靈敏度透過電位器調整。 若遇到異常,先檢查「共地是否確實相連」、「DO 是否接到數位腳」與「在 Serial Monitor 中,讀值是否會隨明暗變化」。 下一步練習建議 LED的明/滅更平滑: 把 LED 改接到支援 PWM 的腳(如 D9),用 analogWrite() 做簡單的漸亮/漸暗,體驗「類比輸出(模擬)」帶來的效果差異。讓反應更流暢: 嘗試把 delay() 改成 millis() 的非阻塞寫法,避免卡住迴圈(之後要加蜂鳴器或顯示器時會更穩)。情境規則練習: 加一個條件(例如超音波距離或按鍵),做「同時滿足 A 與 B 才觸發」的 if 判斷。資訊可視化: 加上 I2C LCD(或序列監控)顯示「Bright/Dark」、「最後變化秒數」,練習字串與變數輸出。 站內延伸閱讀(推薦依序) Arduino IDE 安裝與 Blink:選板/選埠/上傳檢查(新手必讀) 相關產品導覽(站內) ATmega328 R3 開發板(相容 Arduino UNO)(可搭配本篇範例上傳/燒錄) LM393 系列 光敏電阻 光敏二極體 光敏感測器 模組Buzzer 蜂鳴器模組HC-SR04 超音波測距 距離測量 感測器 模組線材與配件|杜邦線、麵包板、USB 線 【撰文編修/瑪可希維編輯部】 Lisette 、Jhin 【監修/瑪可希維站長】 瑪可