# 感測與輸出控制
## 類比訊號 & PWM 控制
生活中很多量是連續的,例如光線強弱、溫度、聲音等,這些訊號都屬於類比訊號(Analog Signal)。Arduino 可以讀取類比訊號,並利用 PWM(Pulse Width Modulation)模擬類比輸出控制 LED 或馬達。
### 1. 類比訊號概念
數位訊號(Digital Signal):只有 HIGH / LOW(1 / 0)兩種狀態
類比訊號(Analog Signal):連續值,可在一定範圍內變化(例如 0~1023)
| 感測器類型 | 類比訊號範圍 | 應用 |
| ----- | ------ | ------------ |
| 光敏電阻 | 0~1023 | 光線感應、LED亮度控制 |
| 電位器 | 0~1023 | 調整旋轉角度、音量控制 |
| 溫度感測器 | 0~1023 | 溫度測量、風扇控制 |
內部轉換原理圖

### 2. 讀取類比訊號(analogRead)
Arduino 提供 analogRead(pin) 指令讀取類比電壓,回傳值 0~1023(對應 0~5V)。
```C++=
int sensorPin = A0; // 類比腳位
int sensorValue = 0;
void setup() {
Serial.begin(9600); // 開啟序列埠
}
void loop() {
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue); // 印出 0~1023
delay(500);
}
```
濕度感應器為範例

VCC=>3.3V
GND=>GND
SIG=>A0
模擬器數值

### 3. 類比輸出(PWM 模擬)
Arduino 無法直接輸出連續電壓,但可以用 PWM(Pulse Width Modulation) 模擬類比電壓。
指令:analogWrite(pin, value)
value 範圍:0~255
腳位會快速切換高低電位 → 平均電壓改變 → LED 亮度或馬達速度改變
佔空比 (Duty Cycle),訊號 HIGH 佔比,輸出的平均電壓
20%,20%,5V×0.2=1V
50%,50%,5V×0.5=2.5V
80%,80%,5V×0.8=4V
範例:LED 漸亮與漸暗
```C++=
int ledPin = 9;
int brightness = 0;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for(brightness = 0; brightness <= 255; brightness++){
analogWrite(ledPin, brightness);
delay(10);
}
for(brightness = 255; brightness >= 0; brightness--){
analogWrite(ledPin, brightness);
delay(10);
}
}
```

### 4. 結合感測器與 PWM
將感測器讀值映射到 PWM 控制 LED 亮度:
```C++=
int sensorPin = A0;
int ledPin = 9;
int sensorValue = 0;
int ledBrightness = 0;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin); // 0~1023
ledBrightness = map(sensorValue, 0, 1023, 0, 255); // 映射到 PWM
analogWrite(ledPin, ledBrightness); // 控制 LED
Serial.println(ledBrightness);
delay(100);
}
```

應用:自動調整 LED 亮度、溫度控制風扇、環境光感應裝置
### 5. 小技巧
類比輸入腳位:A0~A5(UNO)
PWM 輸出腳位會有 ~ 標示,例如 3,5,6,9,10,11
使用 map() 將不同範圍轉換,方便控制 LED / 馬達
## 延伸思考
將 LED 與感測器結合,可做自動亮度調整
將溫度感測器與馬達結合,可做簡單溫控系統
## 上下拉電阻補充說明

上拉電阻=>開關斷開時有少量的正電流入主板,保持電壓穩定不彈跳
下拉電阻=>開關斷開時接地維持負極訊號,接通後少量正極流入主板
想著開關接處不良是怎麼回是?
參考範例:
https://wokwi.com/arduino
## Eric簡單認識Arduino:
第一課 arduino認識數位信號與開關
https://hackmd.io/@godgods/SkaUwHi6xe
第二課 arduino認識類比信號與讀取與寫入
https://hackmd.io/@godgods/SJbpxvn0gg
第三課 arduino LCD函式控制
https://hackmd.io/@godgods/ryxXL7skWe
第四課 arduion 小電控制大電繼電器與馬達擴充版
https://hackmd.io/u4q_ACo6Rx-L3JLqQ-ok5Q
第五課 arduino 簡單通訊藍芽與Wifi