電路不動、程式不跑,是這門課最正常的事。先別急著拆掉重接,照這張表從上往下找你的症狀。每一列都是「先查最簡單的,再查難的」。
開始找問題前,先做這三件事(八成的問題在這裡就解決了):
- 拔掉電源,用眼睛看一遍。 杜邦線有沒有插在麵包板同一排(五個孔一組)?LED 長短腳對嗎?電解電容正負對嗎?
- 用三用電表量 GND 到電源的電壓。 沒電壓就不用往下查電路了,先查電池、USB 線。
- 把程式裡最簡單的 Blink 燒一次。 板上 LED 會閃就代表板子和上傳都沒問題,問題在你的程式或接線。
| 症狀 | 可能原因 | 怎麼檢查/解決 | 相關章節 |
| LED 完全不亮 | LED 接反(長腳要接電阻/正極那邊) | 把 LED 拔起來轉 180° 再插。 | 1、8 |
| LED 完全不亮 | 迴路沒有閉合:杜邦線沒插到同一排、電阻腳沒插進去、GND 沒接回去 | 用三用電表通斷檔(蜂鳴)從電源正極一路量到負極,哪一段不響就是哪一段斷了。 | 1 |
| LED 完全不亮 | 電阻太大(例如拿到 100 kΩ 當 220 Ω) | 讀色碼或用 Ω 檔量。紅紅棕才是 220 Ω。 | 2 |
| LED 完全不亮(ESP32、藍/白 LED) | 3.3 V 減掉 LED 的 3.2 V 順向電壓後幾乎沒剩,推不亮 | 換紅色或綠色 LED,或限流電阻改 68–100 Ω。 | 8、16 |
| LED 完全不亮(Arduino) | 程式腳位寫錯,或 pinMode 沒設成 OUTPUT | 檢查程式裡的 ledPin 數字和實際插的腳一不一樣;setup() 裡要有 pinMode(ledPin, OUTPUT)。 | 12 |
| LED 一閃就暗掉、或變很暗、聞到焦味 | 沒接限流電阻,或電阻太小,LED 燒掉了 | LED 燒了就換一顆(它不會自己好)。接之前確認有 220 Ω 串聯。 | 2、8 |
| LED 很暗 | 電阻太大、電池快沒電、並聯了太多 LED 分電流 | 量 LED 兩端電壓:低於 1.8 V 就是電流不夠。換小一點的電阻(最小 150 Ω)或換電池。 | 2、3、4 |
| 電阻發燙、變色、冒煙 | 功率超過 1/4 W:電阻太小或電壓太高(例如 9 V 直接接 100 Ω 以下) | 立刻拔電源。用 P = V² ÷ R 算一次,超過 0.25 W 就要換大一點的電阻。附錄 B 有算例。 | 4 |
| 電解電容鼓起來、噴液、爆開 | 接反極性,或電壓超過耐壓 | 拔電源,丟掉這顆(戴手套、不要碰到液體)。長腳是正極、有白色條紋那一側是負極。耐壓要大於電路電壓。 | 5 |
| 電池一下子就沒電、摸起來燙 | 短路:正負極直接相碰,或麵包板電源軌被一條線接通了 | 拔掉電池。用通斷檔量電池扣的兩條線,會響就是短路。9 V 電池扣的兩個金屬頭很容易互碰。 | 1、4 |
| 電池沒電 | 用太久,或存放太久 | 用三用電表直流 V 檔量:9 V 電池低於 7 V、3 號電池低於 1.2 V 就該換。量的時候最好接著負載。 | 4 |
| 三用電表量不到電流 | 電表要「串聯」進電路,不是「並聯」;或電表的保險絲燒了 | 把迴路拆開一個缺口,電表的兩支棒接在缺口兩端。紅棒要插在 mA 孔不是 V 孔。 | 1、2 |
| 三用電表量電阻讀值亂跳 | 電阻還接在電路上,或你的手指同時摸到兩支棒 | 把電阻拔起來單獨量,手不要碰金屬腳。 | 2 |
| 麵包板接觸不良(時好時壞、碰一下就變) | 麵包板孔鬆了、杜邦線針頭彎了、元件腳太細 | 換一排孔插;把杜邦線針頭弄直;電阻腳可以稍微折一下再插。老舊麵包板直接換。 | 全書 |
| 症狀 | 可能原因 | 怎麼檢查/解決 | 相關章節 |
| 馬達不轉 | 電流不夠:直接接 Arduino 腳位(最多 20 mA)當然推不動 | 馬達一定要經電晶體或 MOSFET,電源用電池盒或 5V 腳。 | 9、14 |
| 馬達不轉 | 電晶體腳位接錯(E-B-C 弄反) | 對照附錄 C 的腳位圖。用三用電表二極體檔找 B 腳。 | 9 |
| 馬達不轉 | 基極沒有電阻,或電阻太大 | B 腳要經 330 Ω–1 kΩ 接 Arduino。10 kΩ 以上電流不夠讓電晶體飽和。 | 9 |
| 馬達不轉(MOSFET) | 用了 IRFZ44N 而不是 IRLZ44N;或 G 腳沒接 10 kΩ 下拉 | 看元件上的印字。ESP32 的 3.3 V 只推得動 IRLZ 系列。 | 9 |
| 馬達一轉 Arduino 就重開機、序列埠斷線 | 馬達啟動電流把 5 V 拉垮;或沒接飛輪二極體,反電動勢打到板子 | 馬達用獨立電池盒,只有 GND 和 Arduino 共接。馬達兩端並聯 1N4007(色環接正極)。 | 7、9 |
| 伺服馬達抖動、嗡嗡叫、轉不到位 | 電流不足:SG90 瞬間可以吃 500 mA 以上,Arduino 的 5V 腳撐不住 | 伺服的紅線接 4 顆電池盒(6 V)或獨立 USB 5 V,棕線 GND 和 Arduino GND 接在一起,橘線接 D9。 | 14 |
| 伺服馬達亂轉或不動 | 訊號線接錯腳;程式沒有 myServo.attach(9) | 訊號線(橘/黃)接程式裡 attach 的那一腳。用示波器看 D9 有沒有 50 Hz 脈波(附錄 D)。 | 14 |
| 繼電器一直喀喀響 | 線圈電流讓電源電壓抖動,Arduino 跟著不穩 | 繼電器模組的 VCC 接獨立 5 V,GND 共接。 | 7、9 |
| DHT11 讀到 nan 或 -999 | 接線錯(VCC/DATA/GND 順序每家模組不同);讀太快;沒上拉電阻 | 看模組上的印字再接。兩次讀取間隔至少 2 秒。裸件要加 4.7 kΩ–10 kΩ 上拉(DATA 到 VCC)。 | 13、16 |
| DHT11 讀到的數值不變、或明顯錯 | 函式庫選錯型號(DHT22 vs DHT11) | 程式裡 #define DHTTYPE DHT11。 | 13 |
| 光敏電阻讀值一直是 0 或 1023 | 分壓器沒接對,變成直接接電源或直接接 GND | 光敏電阻和 10 kΩ 串聯在 5 V 和 GND 之間,A0 接「中間那一點」。 | 13 |
| OLED 沒畫面(全黑) | I2C 位址錯:程式寫 0x3D 但模組是 0x3C(或相反) | 先跑 I2C 掃描程式(第 15 章)看到位址幾號,再改程式。 | 15、16 |
| OLED 沒畫面(全黑) | SDA、SCL 接反 | UNO:SDA = A4、SCL = A5。ESP32:SDA = 21、SCL = 22。對調一下。 | 15、16 |
| OLED 沒畫面,摸起來燙 | VCC 和 GND 接反(有些模組前兩腳順序相反) | 立刻拔掉。看模組印字重接。燒掉的 OLED 通常救不回來。 | 15 |
| OLED 有畫面但只亮一半、或字疊在一起 | 程式裡的解析度設錯(128×32 vs 128×64) | 本書的模組是 128×64,display 初始化的參數要對。 | 16 |
| 蜂鳴器只有「嗒」一聲,不會發出音調 | 買到有源蜂鳴器(Active),它不吃頻率 | 要用無源(Passive)蜂鳴器。有源的通電就只會叫固定一個音。 | 10 |
| 蜂鳴器完全沒聲音 | tone() 用在 ESP32 上(ESP32 沒有 tone()) | ESP32 用 ledcWriteTone(),第 14 章有範例。 | 10、14、16 |
| 症狀 | 可能原因 | 怎麼檢查/解決 | 相關章節 |
| Arduino IDE 的連接埠選單是灰的、找不到 COM 埠 | USB 線只有充電功能;相容板的 CH340 驅動沒裝;USB 孔沒電 | 換一條確定能傳資料的線。Windows 到裝置管理員看有沒有「未知裝置」,去 CH340 驅動網站下載安裝。macOS 新版通常免裝。 | 12 |
| 上傳失敗:avrdude: stk500_recv(): programmer is not responding | 選錯連接埠或選錯板子;D0/D1 腳上有接東西 | 工具 → 板子選 Arduino UNO,連接埠選有 Arduino 字樣的那個。把 D0、D1 上的線拔掉再上傳。 | 12 |
| 上傳失敗:Access is denied / 連接埠被占用 | 序列埠監控視窗、PulseView 或另一個 IDE 視窗還開著 | 關掉其他正在用這個埠的程式,再上傳。 | 12 |
| 程式編譯錯誤:‘xxx’ was not declared in this scope | 打錯字、大小寫錯、沒有 #include 函式庫、變數在用之前沒宣告 | 看錯誤訊息的行號,去那一行。Arduino 分大小寫:digitalwrite 不等於 digitalWrite。 | 12 |
| 序列埠監控視窗出現亂碼(方塊、問號、奇怪符號) | 監控視窗右下角的鮑率和程式 Serial.begin() 的數字不一樣 | 兩邊都設 9600(或都設 115200)。ESP32 開機時會先用 115200 印一段開機訊息,那段是正常的亂碼。 | 12、15 |
| 序列埠監控視窗什麼都沒印 | 程式沒有 Serial.begin();選錯連接埠;板子一直在重開 | 加 Serial.begin(9600)。看板上的 TX LED 有沒有閃,有閃就是有在送。 | 12 |
| ESP32 上傳卡在 Connecting…….._____….. | 板子沒進入燒錄模式 | 看到 Connecting 時按住 BOOT 鍵不放,等開始上傳(出現 Writing at…)再放開。還是不行就按住 BOOT、按一下 EN、再放開 BOOT。 | 16 |
| ESP32 上傳失敗:A fatal error occurred: Failed to connect | 同上;或 USB 線不良;或 CP2102/CH340 驅動沒裝 | 先換線,再裝驅動,再試 BOOT 鍵。 | 16 |
| ESP32 一直重開機,序列埠印 Brownout detector was triggered | 電壓不夠:USB 線太細、USB 孔供電弱、Wi-Fi 開啟瞬間電流拉太高 | 換短一點粗一點的 USB 線;插電腦後面的 USB 孔;3V3 和 GND 之間並一顆 470 µF–1000 µF 電解電容;馬達、伺服改用獨立電源。 | 16 |
| ESP32 一直重開機,印 Guru Meditation Error | 程式當掉:通常是陣列越界、用到空指標、或 Wi-Fi 還沒連上就去用 | 看錯誤訊息下面的 Backtrace;用 Serial.println 一步一步找是哪一行。 | 16 |
| ESP32 開機後完全沒反應、不印任何東西 | GPIO 12 開機時被拉 HIGH,或 GPIO 0 被拉 LOW | 把 GPIO 0、2、12、15 上的線拔掉再開機。 | 16 |
| ESP32 analogRead 一直回傳 0 | 用到 ADC2 的腳位(0、2、4、12–15、25–27),Wi-Fi 開啟後它們不能用 | 類比輸入改接 GPIO 32–39(本書用 34)。 | 13、16 |
| ESP32 腳位燒壞、讀值怪怪的 | 給它輸入了 5 V | ESP32 腳位只能 3.3 V。5 V 感測器輸出要先用 10 kΩ + 20 kΩ 分壓再接。 | 16 |
| Wi-Fi 連不上(WiFi.status() 一直不是 WL_CONNECTED) | SSID 或密碼打錯(大小寫、空格);Wi-Fi 是 5 GHz(ESP32 只支援 2.4 GHz);訊號太弱 | 用手機熱點測試(記得開 2.4 GHz 相容模式)。SSID 和密碼用複製貼上。靠近路由器。 | 16 |
| Wi-Fi 連上了,但手機打不開網頁 | 手機和 ESP32 不在同一個 Wi-Fi;IP 位址打錯;學校網路把裝置互相隔離 | 序列埠印出的 IP 要和手機的網段一樣(例如都是 192.168.1.x)。用手機熱點最保險。 | 16 |
| 按鈕按一下,Arduino 卻數成好幾次 | 按鈕彈跳 | 加 50 ms 延遲去抖動,或在按鈕兩端並 100 nF 電容。用示波器看彈跳(第 11 章)。 | 11 |
| 按鈕沒按也亂觸發 | 腳位浮接,沒有上拉或下拉電阻 | 用 pinMode(buttonPin, INPUT_PULLUP),按鈕另一端接 GND。ESP32 的 34–39 沒有內建上拉,要外接 10 kΩ。 | 11 |
| 症狀 | 可能原因 | 怎麼檢查/解決 | 相關章節 |
| 示波器畫面沒有波形、一條直線在 0 V | 通道沒打開;探棒沒接好;鱷魚夾沒夾 GND;電路本來就沒訊號 | 按 CH1 鈕讓它亮;把探棒勾到 Probe Comp 看有沒有方波(有就是電路問題,沒有就是示波器或探棒問題)。 | 6 |
| 示波器波形超出畫面、或壓成一條線 | V/div 太小或太大 | 轉 Vertical Scale 讓波形占 3–6 格。按 Auto Set 重來。 | 6 |
| 示波器波形左右亂跑、重疊、閃爍 | 觸發準位在訊號範圍外;觸發來源選錯通道;模式在 Auto 卻沒抓到 | 轉 Trigger Level 到訊號中間(5 V 訊號設 2.5 V);來源改成有訊號的那個通道;穩了之後改 Normal。 | 6 |
| 示波器讀值剛好差 10 倍(5 V 顯示 0.5 V 或 50 V) | 探棒撥在 10× 但示波器通道設 1×,或相反 | 探棒上的開關和 CH 選單裡的 Probe 設定要一致。本書統一用 10×。 | 6 |
| 示波器量電池看到 0 V | 耦合設成 AC,直流被濾掉了 | CH 選單裡 Coupling 改 DC。 | 6 |
| 示波器量 1 Hz Blink 看不到東西 | s/div 太小,一格才幾 ms,畫面裡只有一小段 HIGH 或 LOW | s/div 轉到 200–500 ms;模式用 Auto。 | 12 |
| 示波器抓不到尖波、彈跳這類一次性事件 | 用 Auto 或 Normal 模式,畫面一直被後面的訊號蓋掉 | 用 Single:設好準位和斜率,按 Single,再去觸發事件。 | 7、11 |
| 示波器波形有一層毛毛的雜訊 | 鱷魚夾接的 GND 離訊號太遠;探棒線繞到馬達旁邊;電路沒有去耦電容 | GND 夾離訊號點越近越好;電源腳旁邊並 100 nF 電容。 | 6、10 |
| 示波器一接上去,電路就壞了或不動 | 鱷魚夾夾到不是 GND 的地方,把那一點短路到地了 | 鱷魚夾只能夾 GND。先接 GND 再勾訊號。 | 6 |
| 邏輯分析儀每個通道都是全高或全低 | GND 沒接(最常見);通道接錯腳;取樣率太低 | 先接 GND 再接訊號;取樣率至少是訊號的 4 倍。 | 15 |
| PulseView 找不到裝置 | Windows 驅動沒換成 WinUSB;USB 線只能充電 | 用 Zadig 裝 WinUSB(附錄 D)。換線。 | 15 |
| UART 解碼出亂碼或一堆 Frame error | 鮑率設錯;取樣率不到鮑率的 4 倍;通道選到 RX 而不是 TX | 解碼器鮑率設和程式一樣(9600);取樣率 1 MHz;Arduino 的 TX 腳接到解碼器的 RX 欄位。 | 15 |
| I2C 解不到,或只有 Start 沒有位址 | 取樣率不夠(100 kHz 的 I2C 要 1–2 MHz);SDA/SCL 選反 | 取樣率改 2 MHz;解碼器設定裡 SCL/SDA 對調。 | 15 |
| 邏輯分析儀擷取時間太短,看不到想看的事件 | 取樣數太少 | 取樣數加大到 1 M 以上,或取樣率降低(錄得比較久)。 | 15 |
| 邏輯分析儀接上去之後電路變怪 | 通道接到超過 5 V 的點,或接到反電動勢尖波 | 邏輯分析儀只能接 0–5 V 的數位訊號。看尖波請用示波器。 | 7、15 |
- 整個拆掉,從最簡單的開始重建。 先只接電源 + 電阻 + LED,亮了再加下一個元件。每加一個就測一次。
- 換一個元件試。 杜邦線、LED、電晶體都可能壞。用三用電表通斷檔量杜邦線兩頭。
- 換一塊麵包板、換一塊板子。 排除掉硬體本身的問題。
- 把接線畫成 ASCII 圖,程式印出來,拿給同學或老師看。 很多錯自己看十遍看不到,別人一眼就看到。
- 寫下來。 「我做了什麼 → 看到什麼 → 預期是什麼」。這就是除錯,也是專題報告裡最有價值的一段(第 17 章)。