光感 LED 燈

【說明】

使用光遮斷模組(Light-Blocking Module)或光敏電阻器(Photovaristor)又叫光感電阻(Light-Sensitive Resistor)來偵測周遭光線的狀態,以決定 LED 的開關。可應用於路燈的自動開始,當傍晚時分光線不足時路燈自動開啟,當早晨光線足夠時可自動的關閉路燈。

光敏電阻器是利用半導體的光電效應製成的一種電阻值隨入射光的強弱而改變的電阻器,;入射光強,電阻減小,入射光弱,電阻增大。光敏電阻器一般用於光的測量、光的控制和光電轉換(將光的變化轉換為電的變化)。

光敏電阻可廣泛應用於各種光控電路,如對燈光的控制、調節等場合,也可用於光控開關。

【零件表】

No.零件名稱數量
1光光遮斷模組
light-blockingmodule
或光感電阻
light-sensitiveresistor
1
2LED1

【零件接腳】

No.零件接腳UNO R3 接腳
1光敏斷模組 (S)或光感電阻(任一腳)A0
2LED (長腳)D8

【按線圖】

lightblockingled

【程式碼】

/*
 * 使用光遮斷模組(Light-Blocking Module)使決定 LED 的開關
 */
int lbmPin = 0;         // 定義光遮斷模組腳位
int ledPin = 8;         // 定義 LED 腳位
int lbmVal = 0;         // 儲存光遮斷模組的值
int lbmMaxVal = 0;      // 儲存一段時間周圍光線的最大值
long lastTime = 0;      // 儲存上次偵測光線的時間

void setup() { 
  pinMode(ledPin, OUTPUT);      // 定義蜂鳴器腳位為輸出模式
  Serial.begin(9600);           // 開啟序列埠
  lastTime = millis();          // 儲存程式執行開始的時間 ms
} 

void loop() { 
  /* 偵測三秒鐘判斷周圍光線是否有大幅變化,
   * 當有大幅變化時才決定 LED 是否開或關,
   * 以避免反應過快造成 LED 閃爍。 */
  if (millis() - lastTime <= 3000) {    
    lbmVal = analogRead(lbmPin);  // 讀取光感電阻的值
    Serial.println(lbmVal);       // 於序列埠視窗顯示光線值
    if (lbmVal > lbmMaxVal) {
      lbmMaxVal = lbmVal;         // 儲存光線最大值
    }
  } else {
    lastTime = millis();          // 當超過三秒時,重設時間重新偵測
    /* 光線值大於 30 表示太暗,門檻值要設多少需視使幃的光感電阻或
     * 光遮模組及周遭環境光線的需求而定,且傳回值亦不同,有些傳回
     * 0 ~ 255 ,有些傳回 0 ~ 1023 的值,請參考你所使用的規格文件
     * 光線值亦需視光遮斷模組的範圍值設定適當判斷值 */
    if (lbmMaxVal > 30) {        
      digitalWrite(ledPin, HIGH); // 當光線太暗時就開啟 LED
    } else {
      digitalWrite(ledPin, LOW);  // 當光線不暗時就關閉 LED
    }
    lbmMaxVal = 0;                // 重新讀取周圍光線的最大值
  }
  delay(100);                     // 每隔 100 ms 才偵測一次光線值
}
下載程式碼

 ※  分享結束  ※


發佈留言