☛ 功能說明

使用 Arduino 開發板配合光線偵測元件偵測光線的強弱,並以 LED 指示光線的強弱。 當光線轉暗時,點亮 LED,當光線轉強時,關閉 LED。 光敏電阻 ( light dependent resistor;簡記 LDR 或 CDS ),是最簡單的光線偵測元件。 當光線越強,光電流越大,其內部電阻越小,最小的電阻稱為亮電阻。 在完全沒有光線照射狀態則稱為暗電阻。

☛ 使用材料

Arduino UNO R3 開發板 × 1、光敏電阻 × 1、電阻 220Ω × 1、電阻 10KΩ × 1、LED× 1。

☛電路圖及麵包板接線圖

☛ 程式碼

const int cds=0;                   //CDS 連接至類比接腳 0
const int led=2;                   //LED 連接至數位接腳 2
int val;                           //數位值

void setup()
{
     pinMode(led,OUTPUT);          //設定數位接腳 2 為輸出模式
     digitalWrite(led,LOW);        //關閉LED
}

void loop()
{
     val=analogRead(cds);          //讀取輸入類比電壓
     if(val>512)
        digitalWrite(led,LOW);     //光線較亮時,關閉 LED
     else
        digitalWrite(led,HIGH);    //光線較暗時,點亮 LED
}

 

☛ 練習

⑴ 設計 Arduino 程式,使用 Arduino 開發板配合 CDS 偵測光線的強弱,並以 LED 指示光線的強弱。 當光線轉暗時,閃爍 LED,當光線轉強時,關閉 LED。

const int cds=0;                   //CDS 連接至類比接腳 0
const int led=2;                   //LED 連接至數位接腳 2
int val;                           //數位值

void setup()
{
     pinMode(led,OUTPUT);          //設定數位接腳 2 為輸出模式
     digitalWrite(led,LOW);        //關閉LED
}

void loop()
{
     val=analogRead(cds);          //讀取輸入類比電壓
     if(val>512)
        digitalWrite(led,LOW);     //光線較亮時,關閉 LED
     else
        flushLED();                //光線較暗時,閃爍 LED
}

void flushLED()
{
     for(int i=0;i<2;i++)
     {
         digitalWrite(led,HIGH);   //點亮 LED
         delay(100);               //延遲 100ms
         digitalWrite(led,LOW);    //關閉LED
         delay(100);               //延遲 100ms
     }
}

 

⑵ 設計 Arduino 程式,使用 Arduino 開發板配合 CDS 偵測光線的強弱,並以三個 LED 指示光線的強弱。 當光線轉暗時,只有 LED1 點亮;當光線介於全暗與全亮之間時,只點亮 LED2;當光線轉強時,只點亮 LED3。

const int cds=0;                         //CDS 連接至類比接腳 0
const int led[]={2,3,4};                 //LED 連接至數位接腳 2~4
int val;                                 //數位值

void setup()
{
     for(int i=0;i<3;i++)
     {
         pinMode(led[i],OUTPUT);         //設定數位接腳 2~4 為輸出模式
         digitalWrite(led[i],LOW);       //關閉LED
     }
}

void loop()
{
     val=analogRead(cds);                //讀取輸入類比電壓
     if(val>800)
     {
        digitalWrite(led[0],LOW);
        digitalWrite(led[1],LOW);
        digitalWrite(led[2],HIGH);       //光線較亮時,點亮 LED3
     }
     else
     {
        if(val<200)
        {
           digitalWrite(led[0],HIGH);    //光線較暗時,點亮 LED1
           digitalWrite(led[1],LOW);
           digitalWrite(led[2],LOW);
        }
        else
        {
           digitalWrite(led[0],LOW);
           digitalWrite(led[1],HIGH);    //光線介於全亮與全暗之間, 點亮 LED2
           digitalWrite(led[2],LOW);
        }
     }
}