在上一節的學習筆記《PWM與呼吸燈的實現》中,我們學會了如何利用PWM(脈寬調制)來實現對LED亮度的控制,并仿真出了呼吸燈,下面我們接著上一節的學習筆記,繼續下面的學習,這次我們要能對LED燈亮度實現線性的調節,就像平時用的可調亮度的臺燈一樣。
要想對LED燈亮度實現線性調節,除了使用PWM來控制LED燈亮度,還需要使用ADC來讀取我們設定的亮度值。我們先來學習一下ADC。
ADC是Analog-to-Digital Converter的縮寫,即模擬/數字轉換器,可以實現將模擬量轉換為數字量的電子器件。
什么是模擬量?模擬量就是具有多個連續狀態的量值,比如溫度,有0℃,50℃,100℃等任意值,比如電壓值,有1mV,1V,1kV等任意值。
什么事數字量?數字量就是只有兩種狀態的量值,比如燈的開關,只有打開和關閉兩種狀態。
ADC是模擬量與數字量的橋梁,因為計算機等只能處理數字量,而我們接觸的模擬量有很多,當需要模擬量時必須轉換為數字量才能被處理與存儲。
這里使用到Arduino UNO的ADC,就有必要先了解一下Arduino UNO的ADC的情況。Arduino UNO擁有6路模擬輸入:標號A0至A5,每一路具有10位的分辨率(即輸入有1024個不同值),默認輸入信號范圍為0到5V,可以通過AREF調整輸入上限。AREF:模擬輸入信號的參考電壓。【文獻1】
在上一節的原理圖,我們添加電位器(滑動變阻器、可調電阻),在元器件搜索欄中輸入“POT-HG”,如圖1所示。在原來的Arduino UNO實驗板上添加"POT-HG",并將中間接線端接至A0口,修改后的原理圖如圖2所示。
下面,打開Arduino IDE自帶的AnalogInput例程,如圖3所示。
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 9; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
}
void loop() {
}
由于Arduino的ADC為10位,數字量的變化范圍為0至1023,而Arduino的PWM的輸出變化范圍為0至255,所以需要將獲得ADC除以4,從而轉換至PWM輸出,由于如上面紅色標注。
下面我們開始仿真,并調節電位器,電阻較小時,LED燈較暗,如圖4所示;電阻較大時,LED燈較亮,如圖5所示。