---
# System prepended metadata

title: Arduino 電路實驗 快速類比 I/O

---

---
###### tag：`Arduino` `Analog`
---


# Arduino 電路實驗 快速類比 I/O
[TOC]

 系級：資工三乙
 座號：16
 姓名：王君翔
 指導老師：林宏益


---

## 實驗壹 滑動式電位計與大功率LED


### 1.實驗目的
透過實際操作電路，並實作程式碼，了解滑動式電位計與輸入類比輸入之關係。


---


### 2.實驗原理
透過讀取滑動式電位計之類比訊號輸入之大小，改變LED燈之亮度。
#### LED燈之特性曲線

| ![](https://i.imgur.com/0mskFbF.jpg =300x225) | ![](https://i.imgur.com/iEtRx8J.jpg =300x225) |
|:---------------------------------------------:|:---------------------------------------------:|
|                LED順向特性曲線                |                     照度特性曲線                      |



---


### 3.實驗材料

| 名稱 | 數量 | 備註 |
| -------- | -------- | -------- |
| Arduino uno板 | 1 | 附USB線 |
| KTduino 積極體驗板 | 1 |  |
| 杜邦線 | 2 | 公對公 |

* 以下簡稱KTduino 積極體驗板為體驗板


---


### 4.實驗步驟
1. 將以下腳位連接：

| 來源板子 | 來源位置 | 連接板子 | 連接位置 | 備註 |
| -------- | -------- | -------- | -------- | -------- |
| 體驗板    | P8  | Uno板 | 6 | 連接LED |
| 體驗板    | P7-1  | Uno板 | A2 | 連接滑動式電位計 |

2. 將以下程式完成後，透過USB線上傳至Uno板。
``` C=
const int LED = 6, POT = A2; //pins
int val = 0; //tmp analog Value

void setup(){
  pinMode(LED, OUTPUT); //set pin mode
}

void loop(){
  val = analogRead(POT); //scan input
  analogWrite(LED, (val >> 2)); //output
}
```
3. 在體驗板上進行操作，並紀錄實驗結果。


---


### 5.實驗結果
![](https://i.imgur.com/Syv2gRh.jpg =400x300)
Δ電位計位置偏右

![](https://i.imgur.com/72gBJbp.jpg =400x300)

Δ電位計位置偏左

可以觀察到，透過改變電位計之位置來改變輸出，確實有影響LED之亮度，符合預期結果。



----


## 實驗貳 電壓量測
### 1.實驗目的
透過實際操作電路，並實作程式碼，以Arduino測量電路電壓。


---


### 2.實驗原理
透過讀取滑動式電位計之類比訊號輸入之大小，透過類比訊號之換算，得到電壓大小。

---


### 3.實驗材料

| 名稱 | 數量 | 備註 |
| -------- | -------- | -------- |
| Arduino uno板 | 1 | 附USB線 |
| KTduino 積極體驗板 | 1 | |
| 杜邦線 | 1 | 公對公 |
| 三用電表 | 1 |  |

* 以下簡稱KTduino 積極體驗板為體驗板


---


### 4.實驗步驟
1. 將以下腳位連接：

| 來源板子 | 來源位置 | 連接板子 | 連接位置 | 備註 |
| -------- | -------- | -------- | -------- | -------- |
| 體驗板    | P7-1  | Uno板 | A0 | 連接滑動式電位計 |

2. 將以下程式完成後，透過USB線上傳至Uno板。
``` C=
const int POT = A0; //pin
int val = 0; //tmp analog value
float vol = 0; // voltage value

void setup(){
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop(){
  val = analogRead(POT); // scans the analog value
  vol = val * 5. / 1023.; // converts analog to voltage
  Serial.println(vol); // output
  delay(200); // waits 0.2s
}
```
3. 在體驗板上進行操作，並紀錄實驗結果。


---


### 5.實驗結果


| ![](https://i.imgur.com/NcGQP5b.jpg =300x225) | ![](https://i.imgur.com/l7Xu9bU.jpg =300x225) |
| -------- | -------- | 
| 三用電壓測量    | Serial視窗顯示     | 

Δ電位計位置偏右
| ![](https://i.imgur.com/J25V540.jpg =300x225)| ![](https://i.imgur.com/d0SS2Pt.jpg =300x225)|
| -------- | -------- | 
| 三用電壓測量    | Serial視窗顯示     | 

Δ電位計位置偏中
| ![](https://i.imgur.com/jFTk7Qd.jpg =300x225) | ![](https://i.imgur.com/qqXRxjw.jpg =300x225) |
| -------- | -------- | 
| 三用電壓測量    | Serial視窗顯示     | 

Δ電位計位置偏左

可以觀察到，三用電表及Serial之輸出雖有誤差，但仍然受到滑動式電位計之控制。



---


## 實驗參 聲音量測
### 1.實驗目的
透過實際操作電路，並實作程式碼，了解透過麥克風之感測所得到的類比訊號輸入。


---


### 2.實驗原理
透過讀取麥克風之類比訊號輸入之大小，顯示在Serial視窗。


---

### 3.實驗材料

| 名稱 | 數量 | 備註 |
| -------- | -------- | -------- |
| Arduino uno板 | 1 | 附USB線 |
| KTduino 積極體驗板 | 1 |  |
| 杜邦線 | 1 | 公對公 |

* 以下簡稱KTduino 積極體驗板為體驗板


---


### 4.實驗步驟
1. 將以下腳位連接：

| 來源板子 | 來源位置 | 連接板子 | 連接位置 | 備註 |
| -------- | -------- | -------- | -------- | -------- |
| 體驗板    | P20-1  | Uno板 | A0 | 連接麥克風 |

2. 將以下程式完成後，透過USB線上傳至Uno板。
``` C=
const int MIC = A0; //pin
int val = 0, _val = 0; //tmp value

void setup(){
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop(){
  val = analogRead(MIC); // scans analog signal
  if(val != _val){ //if the signal changed
    Serial.write(val); //shows new value
    _val = val;
  }
  delay(200); //waits
}
```
3. 在體驗板上進行操作，並紀錄實驗結果。


---


### 5.實驗結果
![](https://i.imgur.com/g38Par4.jpg =400x300)
Δ電路圖

![](https://i.imgur.com/sxePceR.png =400x300)
Δ輸出結果

透過麥克風感測周遭音量，有影響到Serial之輸出，但因周遭環境過於吵雜無法準確控制。


---


## 實驗肆 PC調光燈
### 1.實驗目的
透過實際操作電路，並實作程式碼，讀取Serial之輸入，並控制類比訊號輸出，與使用者互動。


---

### 2.實驗原理
透過讀取Serial之使用者輸入，改變類比訊號之輸出，控制LED燈之亮度。

---


### 3.實驗材料

| 名稱 | 數量 | 備註 |
| -------- | -------- | -------- |
| Arduino uno板 | 1 | 附USB線 |
| KTduino 積極體驗板 | 1 |  |
| 杜邦線 | 1 | 公對公 |

* 以下簡稱KTduino 積極體驗板為體驗板


---


### 4.實驗步驟
1. 將以下腳位連接：

| 來源板子 | 來源位置 | 連接板子 | 連接位置 | 備註 |
| -------- | -------- | -------- | -------- | -------- |
| 體驗板    | P8  | Uno板 | ~3 | 連接LED |

2. 將以下程式完成後，透過USB線上傳至Uno板。
``` C=
const int LED = 3; // pin
int in = 0, pwm = 0; // tmp value

void setup(){
  pinMode(LED, OUTPUT); // set pin mode
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop(){
  if(Serial.available()){ // if there is any char typed
    in = Serial.read(); // gets input
    if(in > 47 && in < 58){ // check input char is available
      pwm = map((in&15), 0, 9, 0, 255); // convert
      Serial.print("PWM: "); 
      Serial.println(pwm); // print pwm value
      analogWrite(LED, pwm); // output
    }else{
      Serial.println("unavailable!!"); // received an unavailable input
    }
  }
  delay(200); // waits 0.2s
}
```
3. 在體驗板上進行操作，並紀錄實驗結果。


---


### 5.實驗結果
| 圖片 | ![](https://i.imgur.com/hcKDzUc.jpg =180x200)| ![](https://i.imgur.com/BCXzjLY.jpg =180x200) | ![](https://i.imgur.com/i65cArB.jpg =180x200) |
| -------- | -------- |  -------- |  -------- | 
| 輸入 | 0 | 5 | 9 | 

ΔLED亮度

![](https://i.imgur.com/ZRfaHVk.png =400x300)
Δ輸出電壓

可以觀察到，透過改變Serial輸入來改變輸出，確實有影響LED之亮度，符合預期結果。

---


## 實驗心得
這種實驗相較於上一次來的簡單許多，也有餘力多做幾個，希望之後可以保持這個步調繼續學習。


---


## 參考文獻
* 艾迪諾 2017 Arduino全能微處理機實習-強效解析第四版第三章 全華圖書股份有限公司