1. 程式人生 > >Arduino基礎入門篇11—光控燈

Arduino基礎入門篇11—光控燈

本篇介紹光敏電阻,通過模擬輸入採集環境光強來控制LED燈亮度,做一個無需人為干預的自動控制裝置。

感測器是一種檢測裝置,能感受並採集到被測量的資訊,在當下物聯網、智慧家居中佔據重要地位。一切智慧化、自動化裝置、各種雲端計算大資料分析中最基礎的就是資料,資料從何而來,絕大多數都來自感測器。其中光敏電阻可算是最簡單的感測器之一了。

光敏電阻是一種電阻值隨照射光強度增加而下降的電阻,基於其內部光電效應,光照越強電阻值越小,光照越弱,電阻值越大。

光敏電阻

1. 實驗材料

  • Uno R3開發板
  • 配套USB資料線
  • 麵包板及配套連線線
  • 1個LED燈
  • 1個220Ω限流電阻
  • 1個光敏電阻
  • 1個1K普通電阻

我們將光敏電阻作為一個電阻跟一個普通電阻串聯,根據串聯分壓的方法,通過analogRead() 讀取其電壓。

串聯分壓

2. 實驗步驟

  1. 根據原理圖搭建電路。

    直插LED燈正極連線限流電阻,電阻另一端連線開發板第10引腳,LED燈負極接開發板GND。光敏電阻一端接GND,電阻一端接5V,光敏電阻和普通電阻相接,然後接入A0引腳。

    實驗原理圖如下圖所示:

    實驗原理圖

    實物連線圖如下圖所示:

    實物連線圖

  2. 新建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); }
  1. 連線開發板,設定好對應埠號和開發板型別,進行程式下載。

    程式下載

3. 實驗現象

遮擋光敏電阻,LED燈變亮,無遮擋下,LED燈亮度變暗。

實驗現象

4. 實驗分析

通過analogRead()讀取光敏電阻與普通電阻串聯分壓後的電壓資料,使用map()函式做重新對映,然後使用analogWrite()函式改變LED燈的亮度。

根據串聯分壓,光敏電阻上的電壓值為R1/(R1+R2) * 5V。

通過測試發現遮擋和不遮擋的情況下,模擬輸入的範圍大概在400~800之間,所以map()函式裡面區間為[400,800],由於電源波動或外界干擾等原因,輸出的資料可能也會受到一定的影響,你得到的區間可能有變化,需要多次調整測試來達到理想效果。

掃碼加入微信公眾號:TonyCode