Arduino 類比輸入與PWM輸出實習(光感應調光燈)

學習如何學習!

設備與材料

個人電腦 × 1
arduino Uno × 1
麵包板 × 1
3色LED(共陽) × 1
1/4 色碼電阻10k × 1
光敏電阻 × 1
連接線 若干

電路圖

實體接線圖

光敏電阻

光敏電阻(light dependent resistor)簡稱 LDR,製作材料可分為光敏反應接近可見光的硫化鎘(CdS)或光敏反應
接近紅外線的硒化鎘(CdSe),因為使用材料的關係,所以我們常以 CdS 代表光敏電阻器。

光敏電阻的電阻值大小會隨光線亮度改變,光線越強,電阻越小。這次選用的光敏電阻在日光燈下,電阻約5kΩ,遮住光線電阻值約50k Ω 。

程式

/*
*   功能:光感應調光燈
*   輸入腳:A0
*   輸出腳:3,5,6
*/

//宣告全域變數

//宣告輸出入接腳
const int LDR   = A0;    //光敏電阻輸入腳
const int rLED  = 3;     //紅色LED PWM輸出腳

//綠色LED PWM輸出腳 要自己訂義
//藍色LED PWM輸出腳 要自己訂義

int val = 0;      //類比輸入
int _val  = 0;      //舊類比輸入

void setup() {
  // 設定輸入接腳
  pinMode(LDR, INPUT);
  //設定 rLED 接腳為輸出模式
  pinMode(rLED, OUTPUT);
  //設定 gLED 接腳為輸出模式 要自己設定
  //設定 bLED 接腳為輸出模式 要自己設定

  //開啟串列埠 功能,並設定鮑率9600 除錯用的,沒要除錯時可刪除 
  Serial.begin(9600);
}

void loop() {
  int brightness;
  val = analogRead(LDR);  //讀取 光敏電阻接腳的類比輸入
  brightness=map(val, 150, 600, 0, 255); //將光敏電阻類比輸入轉換成0-255 PWM 輸出用
  
  //亮度低於一定程度才點燈 亮度越暗 val 越小
  if(val<600){
    analogWrite(rLED,brightness); //紅色LED PWM 輸出

    //綠色LED PWM 輸出 要自己寫
    //藍色LED PWM 輸出 要自己寫
  }else{
    digitalWrite(rLED,HIGH);    //紅色LED滅 (共陽LED 高電位 不亮) 
    //綠色LED滅 要自己寫
    //藍色LED滅 要自己寫
  }

  //數值有改變時則傳送給電腦 除錯用,如果不用除錯可以刪除

  if (val != _val) {
    Serial.println(val);  //傳送資料給電腦
    _val = val;           //更新舊讀取值
    delay(100);            //延時 10ms
  }

}

功能

本實習用光敏電阻偵測光線,當光線越暗時,3色LED越亮,光線亮度達一定程度時,3色LED全滅

提示

上面程式只是示範 紅色LED PWM 輸出,要自行完成綠色與藍色LED PWM輸出。


相關知識

光敏電阻
PWM 控制
三色LED
byte
INPUT_PULL
analogWrite 函式
switch 選擇指令
Arduino 布林運算子
自定函數
if 判斷式
if else 判斷式
digitalRead 函式
boolean
陣列
for 迴圈
Arduino 複合運算子
const
Arduino Uno 硬體
int
void
setup 函數
loop 函數
pinMode 函數
digitalWrite 函數
delay 函數

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *