Try   HackMD

Arduino 教學 3:利用可變電阻控制LED

作者:王一哲
日期:2016/9/6

分壓電路

分壓電路是我們在Arduino裡最常用的技巧之一,我們可以利用可變電阻或是光敏電阻與固定電阻串聯,讀取中間接腳的電壓值,並利用這個值來控制其它元件。最簡單的接法如下

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
分壓電路示意圖

圖中電池和

R1
R2
電阻串聯,利用歐姆定律可得到電流值
I=εR1+R2

因此
R1
R2
電阻的端電壓分別為
V1=IR1=R1R1+R2ε

V2=IR2=R2R1+R2ε

如果我們使用最簡單的可變電阻,將左邊的接腳接到+5V上,右邊的接腳接0V,轉動旋鈕時會改變中間接腳到右邊接腳之間的電阻值,因此電壓值會跟著變化,我們就可以藉此控制其它元件。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
單圈碳膜式可變電阻
(圖片來源:維基百科 https://zh.wikipedia.org/wiki/File:Potentiometer.jpg

分壓電路的簡單練習

我們可以用Arduino上的+5V接腳供電,將兩個固定電阻串聯,使用三用電表測量電阻的端電壓。為了避免通過電阻器的電流過大,建議使用10kΩ或100kΩ的電阻器。請同學計算一下測量到的電壓值應該是多少?再用三用電表測量看看。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
簡單的分壓電路

利用可變電阻控制LED的亮度

我們將可變電阻中間的接腳接到類比輸入(analog in)接腳A0,讀取數值介於 0 ~ 1023 之間,換算數位接腳5輸出到LED電壓值。接腳的編號前若有 ~ 符號,代表這個可接腳可以作為PWM輸入或輸出,數值介於 0 ~ 255 之間。程式碼如下:

/* 實驗2-1: 利用分壓電路調整LED亮度 * * 日期: Sep. 5, 2016 * * 作者: 王一哲 */ int ledPin = 5; //定義LED接腳 int potPin = 0; //定義可變電阻讀取接腳 int val = 0 ; //定義可變電阻讀取數儲暫存用的變數 int voltage = 0; //輸入LED的電壓值 void setup() { pinMode(ledPin, OUTPUT); //定義LED接腳為輸出 pinMode(potPin, INPUT); //定義可變電阻讀取接腳為輸入 Serial.begin(9600); } void loop() { //讀取可變電阻電壓值 val = analogRead(potPin); //val = 0 ~ 1023 voltage = map(val, 0, 1023, 0, 255); //將val由0~1023線性變換為0~255並存入voltage analogWrite(ledPin, voltage); //點亮LED //印出數值檢查執行成果 Serial.print("val = "); Serial.print(val); Serial.print("; voltage = "); Serial.println(voltage); }

以下是程式中用到的函式

  1. analogRead(pin)
    讀取指定編號接腳的類比輸入值

  2. analogWrite(pin, value)
    將數值value寫入指定編號接腳作為類比輸出

  3. map(value, fromLow, fromHigh, toLow, toHigh)
    fromLow 對應到 toLow,fromHigh 對應到 toHigh,找出兩組數據對應的關係後將輸入值value換算成對應的值。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
電路圖

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
實際的裝置照片

利用可變電阻控制LED的閃爍頻率

接法與上個實驗相同,請同學想想看如何利用讀取到的數值以及函數 delay 控制LED的閃爍頻率。我們會用到的函式為

  1. digitalRead(pin)
    讀取指定編號接腳的數位輸入值,數值只有HIGH或LOW

  2. digitalWrite(pin, value)
    將數值value寫入指定編號接腳作為數位輸出,數值HIGH或LOW

  3. delay(value)
    延遲時間,量值為 value ,單位為毫秒(ms)。

提示:讓LED點亮一小段時間,再讓LED熄滅一小段時間,不斷地重複這個過程。如果最後還是想不通,請參考以下的程式碼:

/* 實驗2-2: 利用分壓電路調整LED閃爍的時間間隔 * * 日期: Sep. 5, 2016 * * 作者: 王一哲 */ int ledPin = 5; //定義LED接腳 int potPin = 0; //定義可變電阻讀取接腳 int val = 0 ; //定義可變電阻讀取數儲暫存用的變數 int dt = 0; //輸入LED閃爍的時間間隔 void setup() { pinMode(ledPin, OUTPUT); //定義LED接腳為輸出 pinMode(potPin, INPUT); //定義可變電阻讀取接腳為輸入 Serial.begin(9600); } void loop() { //讀取可變電阻電壓值 val = analogRead(potPin); //val = 0 ~ 1023 dt = map(val, 0, 1023, 0, 500); //將val由0~1023線性變換為0~255並存入dt digitalWrite(ledPin, HIGH); delay(dt); digitalWrite(ledPin, LOW); delay(dt); //印出數值檢查執行成果 Serial.print("val = "); Serial.print(val); Serial.print("; dt = "); Serial.println(dt); }


tags:Arduino