<!-- .slide: data-background="https://i.imgur.com/cgViIs1.jpg" data-background-color="#111111" data-background-opacity="0.2" -->
###### tags:`js-iot` `lab` 返回[電子電路實驗與JavaScript物聯網應用](/s/8Q89ww-EQlOg8zy7XSTlCw)
## LAB 01 <br> <span style="color:#F9BF45;">ADC電壓量測實驗</span>
###### [點我開啟簡報模式](/@BEExANT-ta/S1pZrairK#)
###### <kbd>ESC</kbd> 鍵進入總覽模式
###### <kbd>←</kbd> <kbd>↑</kbd> <kbd>↓</kbd> <kbd>→</kbd> 切換頁面
---
## 目標
- 實驗一 - 分壓計算與量測
- 實驗二 - LED電壓量測
----
### :dart: 實驗一 - 分壓計算與量測
**將兩個相同大小的電阻串聯分壓,計算出應該得到的電壓值,再使用ADC輸入量測電壓,並替換不同大小電阻,觀察數據並理解爲何量測與計算值不同。**
----
### :dart: 實驗二 - LED電壓量測
**使用ADC輸入腳位量測電壓,在網頁取得ADC輸入資料,換算出電壓,調整可變電阻並觀察LED亮度與電壓變化,記錄電壓與LED亮度關係。**
---
## 使用材料
- **JavaScript開發板**
- **220、1K、10K、100KΩ 電阻**
- **100KΩ 可變電阻** (參考[電阻色碼表](/s/ZjKg95nBRVCVy3V6aPNYgQ))
- **紅、藍、綠 LED**
- **杜邦線**
---
## 線路圖
:::warning
:zap: 圖上麵包板正負極與實際不同,需注意正負極
:::
----
#### 實驗一,分壓量測(100K電阻 * 2)
<center> <img src="https://i.imgur.com/nVHbaVz.png" width="68%"></img> </center>
----
#### 實驗二,LED電壓量測(1K電阻 * 1)
<center> <img src="https://i.imgur.com/BWHhYTo.png" width="70%"></img> </center>
---
## 設計原理
- ADC轉換電壓公式(Vc: 轉換電壓, ADC: 量測ADC值, Vr: 輸入電壓, n bits ADC, 一般爲 10 bits)。
\begin{gather*}V_c = ADC \times V_r \times (2^n - 1)\end{gather*}
----
- 使用ADC量測電壓時,==主控板signal偵測電阻值(位於J1)需大於量測電阻值==(偵測>量測,越大越準確)。如下圖 ==100K(R1) > 22K + 10K(R2)==,並聯後的電阻值僅剩==24.24K==(依公式計算),使用ADC量測出約0.7V,與實際1.66V相差過大。
<center> <img src="https://i.imgur.com/aXNIjsL.png"></img> </center>
----
- 並聯和串聯電阻計算公式
\begin{gather*}R_T = {\cfrac{1}{(\cfrac{1}{R_1}+\cfrac{1}{R_2}+\cfrac{1}{R_3}+etc...)} }\end{gather*}
:::info
:globe_with_meridians: 參考資源
- [ADC 轉換公式](http://wiki.csie.ncku.edu.tw/embedded/ADC#adc-%E8%BD%89%E6%8F%9B%E5%85%AC%E5%BC%8F)
- [並聯和串聯電阻計算器
](https://www.digikey.tw/zh/resources/conversion-calculators/conversion-calculator-parallel-and-series-resistor)
:::
----
- 利用可變電阻改變電壓,透過ADC量測取得電壓(LED壓降0.7V),記錄==不同電壓下對不同LED的亮度變化==。
:::warning
:zap: LED最佳工作電流為35mA以下,超過容易損耗,而實際三用電表量測會有些許誤差,需經過校正才更精確(ADC量測最大爲3.3V)。
:::
----
- 電壓與LED間的關係圖(來源:[Testing unknown LEDs](http://lednique.com/test-equipment/testing-unknown-leds/))
<center><img src="https://i.imgur.com/YW89oKj.png"></img> </center>
---
## 範例程式
新增程式檔並命名 ==LAB01 - ADC電壓量測實驗==,將以下程式碼複製貼上程式編輯區執行。
```javascript=
let V = 3.3;
let offset = 0;
let adc = DATA.adc[0];
let v = 0;
v = (adc - offset) / 1024 * V;
v = Math.round(v * 100) /100;
console.log("電源輸入: " + V);
console.log("量測電壓: " + v);
delay(100);
```
---
## 程式解說
逐行講解程式意義。
----
```javascript=
let V = 3.3;
```
- 定義區域變數 V 為 3.3,表示輸入電壓值。
----
```javascript=
let offset = 0;
```
- 定義區域變數 offset 為 0,為ADC校正歸零的偏差值。
----
```javascript=
let adc = DATA.adc[0];
```
- 定義區域變數 adc 為DATA.adc[0],意思是DATA物件中adc陣列的第一個值,代表==第一個腳位的ADC資料==。
----
```javascript=
let v = 0;
```
- 定義區域變數 v 為0,作為儲存輸出電壓值的變數 。
----
```javascript=
v = (adc - offset) / 1024 * V;
```
- 將ADC值校正後換算成電壓,把值設給 v。
----
```javascript=
v = Math.round(v * 100) /100;
```
- 將 v 值取到小數後二位。
----
```javascript=
console.log("電源輸入: " + V);
console.log("量測電壓: " + v);
```
- 在訊息輸出區顯示輸入電源(V)與量測電壓(v)。
----
```javascript=
delay(100);
```
- 等待100毫秒後繼續執行。
---
## 參數修改
為方便實作,以下會將範例程式中可修改的參數標示出來,進行實作時只需修改對應參數,並觀察結果即可。
:::warning
:zap: 詳細內建JS參數參考 - [內建Js參數及功能總覽](/s/51F8nDF3Ss6M2DmGoRJQbA)
:::
----
:::success
**offset = ==0==;**
:::
- 依據ADC輸入的初始值設定,將其校正歸零。
----
:::success
**adc = DATA.adc[==x==];**
:::
- x可代入 0 ~ 15,表示取得第1 ~ 16個腳位的ADC資料,依據使用的腳位填入對應的數字。
---
## 範例影片
{%youtube EAYI-9glMKE %}
----
{%youtube Wgp_tpqvVic %}
<a class="btn btn-warning" style="width:100%;color:#333333;" href="/s/4CgYHd9BREiq0TwqEWpRKw" role="button"> JavaScript基礎語法與變數運用 **⇨** </a>
<a class="btn btn-primary" style="width:100%;" href="/s/r8SqOJDqQlGaYIUxYinQHw" role="button"> **⇦** 開發板網頁功能總覽
</a>
{"metaMigratedAt":"2023-06-16T12:44:32.542Z","metaMigratedFrom":"YAML","title":"LAB01 - ADC電壓量測實驗","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"transitionSpeed\":\"fast\",\"theme\":\"league\"}","contributors":"[{\"id\":\"a1db0c29-d848-4070-be84-9191a2398ca8\",\"add\":9611,\"del\":5688}]"}