# Arduino課程綱要與工具對照表 | 節次 | 主題 | 教學目標 | 內容重點 / 範例 | 工具 | | -- | --------------- | ------------------------------ | -------------------------------------------------------------- | ---------------------------------- | | 1 | 認識開發板與基礎架構 | 了解 Arduino / ESP32 生態與程式架構 | 認識 Arduino UNO / ESP32-CAM;程式骨架 setup() / loop();LED 閃爍與按鈕控制練習 | Arduino IDE、Tinkercad、draw.io(流程圖) | | 2 | 感測與輸出控制 | 理解輸入(感測器)與輸出(LED / 蜂鳴器 / 伺服)概念 | 光敏電阻、Pulse Sensor、伺服馬達;讀取感測值 → 控制輸出裝置 | Arduino IDE、Tinkercad、Fritzing | | 3 | 整合小範例 | 建立「輸入 → 處理 → 輸出」完整流程 | 光控 LED、按鈕控制蜂鳴器、心跳偵測燈;嘗試改變閾值與條件 | Arduino IDE、Tinkercad、AI 輔助程式(選用) | | 4 | 動力控制與擴充應用 | 學會使用繼電器與馬達控制外部設備 | 控制 DC 馬達、風扇、水泵等;了解繼電器接線與安全電壓概念 | Arduino IDE、Tinkercad、Fritzing | | 5 | 主題發想與設計規劃 | 學生能定義主題並設計 Prototype 架構 | 小組討論應用主題(如電動小船 / 遠距醫療);畫流程圖與線路圖;分配工作 | Miro / Jamboard、draw.io、Fritzing | | 6 | Prototype 製作與測試 | 製作可運作的原型並進行測試與除錯 | 整合感測器、蜂鳴器、繼電器、馬達或伺服;模擬情境測試與 Debug | Arduino IDE、Tinkercad、AI 輔助程式 | # 1. 為什麼要學 Arduino ? 生活中許多智慧裝置都依靠「微控制器」運作,例如: 體溫偵測門、智慧手環、自動開燈裝置。 這些裝置的核心,其實就是「開發板 + 感測器 + 程式控制」。 我們要學會讓電腦「聽懂環境資料」並「作出反應」。 ![image](https://hackmd.io/_uploads/B1t710EAlx.png) # 2. 常見的類別 | 類型 | 特色 | 適合用途 | | ------------------- | ----------------- | ------------- | | **Arduino UNO** | 初學者最常用;腳位明確、穩定度高 | 感測器實驗、簡易自動化裝置 | | **Arduino Nano** | 體積小、功能與 UNO 類似 | 穿戴裝置、小型專題 | | **Arduino Mega** | 腳位多、適合大型專案 | 多感測器整合、機械手臂控制 | | **ESP32 / ESP8266** | 內建 Wi-Fi / 藍牙;可連網 | 物聯網、遠端監控、影像傳輸 | | **micro:bit** | 圖像化介面簡單易懂 | 國中入門課程、邏輯訓練 | | **Raspberry Pi** | 是電腦非微控器,能跑完整系統 | AI、影像辨識、伺服應用 | Arduino UNO ![image](https://hackmd.io/_uploads/SJq6jaEAxx.png) Arduino Nano ![image](https://hackmd.io/_uploads/rywznpVRgg.png) ESP32 ![image](https://hackmd.io/_uploads/ryQHmANCxx.png) # 3. 前置準備 ## 安裝軟體 下載網址: https://www.arduino.cc/en/software/ ![image](https://hackmd.io/_uploads/B1V0J0VAll.png) ![image](https://hackmd.io/_uploads/rkAeg0EAxg.png) # 4.認識介面 ![image](https://hackmd.io/_uploads/rkwRz0N0ex.png) 內建LED燈閃爍亮燈 ```C++= void setup() { pinMode(13, OUTPUT); // LED 腳位設定為輸出 } void loop() { digitalWrite(13, HIGH); // LED 亮 delay(500); // 暫停 0.5 秒 digitalWrite(13, LOW); // LED 熄 delay(500); // 暫停 0.5 秒 } ``` 正確沒問題 ![image](https://hackmd.io/_uploads/SyEM80ERgl.png) 錯誤訊息 ![image](https://hackmd.io/_uploads/ByvHIRNRxg.png) # 5. 模擬電路 進入thinkcad ![image](https://hackmd.io/_uploads/r1qaIANRle.png) ![image](https://hackmd.io/_uploads/rJ64vCNAee.png) 拖拉出元件 ![image](https://hackmd.io/_uploads/B1RbdA40le.png) 打開coding ![image](https://hackmd.io/_uploads/HyeAdRVRlg.png) 貼上程式 按下模擬看看是否成功運行 ![image](https://hackmd.io/_uploads/HkK8YRVAlg.png) 成功運行LED燈會閃爍 ![image](https://hackmd.io/_uploads/HkzhK0N0ee.png) 完成電路模擬確認沒問題後可以實際進行接線測試 ## 設計LED燈線路 ![image](https://hackmd.io/_uploads/B1vETCVAgx.png) 程式碼 ```C++= void setup() { pinMode(4, OUTPUT); // LED 腳位設定為輸出 } void loop() { digitalWrite(4, HIGH); // LED 亮 delay(1000); // 暫停 0.5 秒 digitalWrite(4, LOW); // LED 熄 delay(1000); // 暫停 0.5 秒 } ``` ## 讀取與寫入 晶片基本運作架構 ![image](https://hackmd.io/_uploads/H1wKNCSRge.png) 輸入訊號 1.數位輸入(Digital Input) 2.類比輸入(Analog Input) 3.通訊型輸入(Serial / Communication Input) 4.進階訊號(特定用途)參考元件文檔 輸出訊號 1.數位輸出(Digital Output) 2.類比輸出(Analog Output,PWM 模擬) 3.通訊輸出(Serial / Communication Output) ## 數位訊號寫入 ```C++= void setup() { pinMode(13, OUTPUT); // LED 腳位設定為輸出 } void loop() { digitalWrite(13, HIGH); // LED 亮 delay(500); // 暫停 0.5 秒 digitalWrite(13, LOW); // LED 熄 delay(500); // 暫停 0.5 秒 } ``` ## 加入迴圈 ### 範例 1:LED 閃爍(使用 loop()) ```C++= void setup() { pinMode(13, OUTPUT); // LED 腳位 } void loop() { digitalWrite(13, HIGH); // LED 亮 delay(500); // 暫停 0.5 秒 digitalWrite(13, LOW); // LED 熄 delay(500); // 暫停 0.5 秒 } ``` 電阻公式 ![image](https://hackmd.io/_uploads/HJ5EmNUAxl.png) ### 範例 2 列印出訊號 ```C++= void setup() { Serial.begin(9600); // 啟動序列埠 } void loop() { for(int i = 1; i <= 5; i++) { Serial.println(i); // 印出 1~5 delay(500); // 每 0.5 秒印一次 } delay(2000); // 迴圈結束後停 2 秒再重複 } ``` ![image](https://hackmd.io/_uploads/BkiqHQD0lx.png) ![image](https://hackmd.io/_uploads/rkStS7w0el.png) ### 範例 3 按鈕控制 LED ```C++= void setup() { pinMode(13, OUTPUT); } void loop() { for(int i = 0; i < 3; i++) { // 重複 3 次 digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(300); } delay(1000); // 閃 3 次後停 1 秒 } ``` ## 讀取訊號範例 ### 範例一:按著開關 顯示燈號  ```C++= void setup() { pinMode(4, INPUT_PULLUP); // 啟用內建上拉電阻 pinMode(9, OUTPUT); // LED 腳位 } void loop() { int sw = digitalRead(4); // 讀取按鈕狀態 if (sw == LOW) { // 按下(接地)→ 亮 digitalWrite(9, HIGH); } else { // 放開 → 滅 digitalWrite(9, LOW); } } ``` ![image](https://hackmd.io/_uploads/rJRh-NLCge.png) ### 範住二: 開關切換 ```C++= int ledState = LOW; int lastButtonState = HIGH; void setup() { pinMode(4, INPUT_PULLUP); pinMode(9, OUTPUT); } void loop() { if (digitalRead(4) == LOW and lastButtonState == HIGH) { delay(50); // 簡單防抖 ledState = !ledState; digitalWrite(9, ledState); } lastButtonState = digitalRead(4);// 回復原本state } ``` | 時間 | 按鈕實際狀態 | 4號腳位狀態 | lastButtonState | 判斷結果 | | ----- | ------ | ------- | --------------- | ------------- | | 第一次讀取 | HIGH | HIGH | HIGH | 沒變化 | | 按下瞬間 | LOW | LOW | HIGH | ✅ 偵測到「狀態改變」 | | 按住中 | LOW | LOW | LOW | 無變化,不重複觸發 | | 放開瞬間 | HIGH | HIGH | LOW | 狀態改變,但不切換 LED | | 下一輪 | HIGH | HIGH | HIGH | 穩定 | ### 範例三:類比訊號開關切換 ```cpp= int currentSpeed = 0; int lastButtonState = HIGH; void setup() { pinMode(4, INPUT_PULLUP); pinMode(9, OUTPUT); analogWrite(9, 0); } void loop() { int buttonState = digitalRead(4); if (buttonState == LOW && lastButtonState == HIGH) { delay(50); if (currentSpeed == 0) { currentSpeed = 127; } else { currentSpeed = 0; } analogWrite(9, currentSpeed); } lastButtonState = buttonState; } ``` ### 回家作業 試著按下開關讓LED按下一顆按鈕後依序閃爍 ![image](https://hackmd.io/_uploads/Sy8g0bDAxe.png) 常見指令 | 指令名稱 | 功能 | | -------------- | --------------------------- | | pinMode() | 設定腳位為輸入或輸出 | | digitalRead() | 讀取按鈕或腳位電位 HIGH / LOW | | digitalWrite() | 設定腳位輸出 HIGH / LOW,控制 LED 亮滅 | | delay() | 暫停程式執行指定毫秒,可用於 LED 閃爍或防抖 | # 6.燒入檔案 ## 選擇正確的板子 ![image](https://hackmd.io/_uploads/BkmJmQwRgl.png) ## 確認序列埠有正確連接 ![image](https://hackmd.io/_uploads/Sk-zQXDCge.png) ## 韌體更新 ![image](https://hackmd.io/_uploads/rJPB7QvAlg.png) 第一課 arduino認識數位信號與開關 https://hackmd.io/@godgods/SkaUwHi6xe 第二課 arduino認識類比信號與讀取與寫入 https://hackmd.io/@godgods/SJbpxvn0gg 第三課 arduino LCD函式控制 https://hackmd.io/@godgods/ryxXL7skWe 第四課 arduion 小電控制大電繼電器與馬達擴充版 https://hackmd.io/@godgods/HJllN2n0xg