# 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 ?
生活中許多智慧裝置都依靠「微控制器」運作,例如:
體溫偵測門、智慧手環、自動開燈裝置。
這些裝置的核心,其實就是「開發板 + 感測器 + 程式控制」。
我們要學會讓電腦「聽懂環境資料」並「作出反應」。

# 2. 常見的類別
| 類型 | 特色 | 適合用途 |
| ------------------- | ----------------- | ------------- |
| **Arduino UNO** | 初學者最常用;腳位明確、穩定度高 | 感測器實驗、簡易自動化裝置 |
| **Arduino Nano** | 體積小、功能與 UNO 類似 | 穿戴裝置、小型專題 |
| **Arduino Mega** | 腳位多、適合大型專案 | 多感測器整合、機械手臂控制 |
| **ESP32 / ESP8266** | 內建 Wi-Fi / 藍牙;可連網 | 物聯網、遠端監控、影像傳輸 |
| **micro:bit** | 圖像化介面簡單易懂 | 國中入門課程、邏輯訓練 |
| **Raspberry Pi** | 是電腦非微控器,能跑完整系統 | AI、影像辨識、伺服應用 |
Arduino UNO

Arduino Nano

ESP32

# 3. 前置準備
## 安裝軟體
下載網址: https://www.arduino.cc/en/software/


# 4.認識介面

內建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 秒
}
```
正確沒問題

錯誤訊息

# 5. 模擬電路
進入thinkcad


拖拉出元件

打開coding

貼上程式 按下模擬看看是否成功運行

成功運行LED燈會閃爍

完成電路模擬確認沒問題後可以實際進行接線測試
## 設計LED燈線路

程式碼
```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 秒
}
```
## 讀取與寫入
晶片基本運作架構

輸入訊號
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 秒
}
```
電阻公式

### 範例 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 秒再重複
}
```


### 範例 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);
}
}
```

### 範住二: 開關切換
```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按下一顆按鈕後依序閃爍

常見指令
| 指令名稱 | 功能 |
| -------------- | --------------------------- |
| pinMode() | 設定腳位為輸入或輸出 |
| digitalRead() | 讀取按鈕或腳位電位 HIGH / LOW |
| digitalWrite() | 設定腳位輸出 HIGH / LOW,控制 LED 亮滅 |
| delay() | 暫停程式執行指定毫秒,可用於 LED 閃爍或防抖 |
# 6.燒入檔案
## 選擇正確的板子

## 確認序列埠有正確連接

## 韌體更新

第一課 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