☛ 功能说明

使用 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);
        }
     }
}