Arduino基礎入門篇11—光控燈
阿新 • • 發佈:2019-02-06
本篇介紹光敏電阻,通過模擬輸入採集環境光強來控制LED燈亮度,做一個無需人為干預的自動控制裝置。
感測器是一種檢測裝置,能感受並採集到被測量的資訊,在當下物聯網、智慧家居中佔據重要地位。一切智慧化、自動化裝置、各種雲端計算大資料分析中最基礎的就是資料,資料從何而來,絕大多數都來自感測器。其中光敏電阻可算是最簡單的感測器之一了。
光敏電阻是一種電阻值隨照射光強度增加而下降的電阻,基於其內部光電效應,光照越強電阻值越小,光照越弱,電阻值越大。
1. 實驗材料
- Uno R3開發板
- 配套USB資料線
- 麵包板及配套連線線
- 1個LED燈
- 1個220Ω限流電阻
- 1個光敏電阻
- 1個1K普通電阻
我們將光敏電阻作為一個電阻跟一個普通電阻串聯,根據串聯分壓的方法,通過analogRead() 讀取其電壓。
2. 實驗步驟
-
根據原理圖搭建電路。
直插LED燈正極連線限流電阻,電阻另一端連線開發板第10引腳,LED燈負極接開發板GND。光敏電阻一端接GND,電阻一端接5V,光敏電阻和普通電阻相接,然後接入A0引腳。
實驗原理圖如下圖所示:
實物連線圖如下圖所示:
-
新建sketch,拷貝如下程式碼替換自動生成的程式碼並進行儲存。
/*
AutoLed
通過光敏電阻檢測環境光,進而控制LED燈亮度
*/
int ledPin = 10;
int sensorValue = 0; //儲存讀到的感測器模擬值
int ledValue = 0; //儲存LED燈佔空比
void setup ()
{
pinMode(ledPin, OUTPUT); //數字口要選擇帶~號的具有pwm功能的輸出口
}
void loop()
{
sensorValue = analogRead(A0); //讀取A0模擬口的數值
ledValue = map(sensorValue, 400, 800, 0, 200); //將400到800之間的資料對映成0到200之間的資料
analogWrite(ledPin, ledValue); //PWM控制LED燈亮度
delay(100);
}
-
連線開發板,設定好對應埠號和開發板型別,進行程式下載。
3. 實驗現象
遮擋光敏電阻,LED燈變亮,無遮擋下,LED燈亮度變暗。
4. 實驗分析
通過analogRead()讀取光敏電阻與普通電阻串聯分壓後的電壓資料,使用map()函式做重新對映,然後使用analogWrite()函式改變LED燈的亮度。
根據串聯分壓,光敏電阻上的電壓值為R1/(R1+R2) * 5V。
通過測試發現遮擋和不遮擋的情況下,模擬輸入的範圍大概在400~800之間,所以map()函式裡面區間為[400,800],由於電源波動或外界干擾等原因,輸出的資料可能也會受到一定的影響,你得到的區間可能有變化,需要多次調整測試來達到理想效果。