--- ###### 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全能微處理機實習-強效解析第四版第三章 全華圖書股份有限公司