3.7 光敏电阻
前面的实践都是在对数字I/O的操作以及PWM输出,本节会通过一个光敏电阻的练习来学习模拟输入。
我们所使用的微控制器是数字芯片,其数字I/O口只能有两种状态:高电平或低电平,出现中间状态芯片是不识别或无法输出的。其中PWM输出,尽管在程序中用analogWrite()这样的函数,但实际上也还是一种数字的输出。
这里要使用的I/O模拟输入功能,其实是通过ADC的电路,将环境中获取的模拟量(连续值),通常是电压值转化成一个数字量,该数值与电压值成正比例关系。
- 基本原理
光敏电阻是一种将光信号转换成电信号的半导体元器件,如图3-29所示。在没有光线的情况下,电阻值很高,而当受到光照时,电阻值会下降。光照愈强,阻值愈低。光敏电阻跟普通电阻一样,没有极性,交流或直流都能使用。
在晚上没有光线时,光敏电阻的阻值在几兆欧左右,而在白天强光照射的情况下,其电阻值下降至几百欧到几千欧。如图3-30所示,光线越强,光敏电阻和固定电阻总的电阻越小,电流增大,使得定值电阻两端电压增大,而光敏电阻两端电压减小。可见光敏电阻两端的电压可以直接反映光线强度,即两端电压越高,光线越弱。所以我们可以认为,如果测到的电压高于某个值,就说明天黑了;而低于某个值,说明天亮了。通过这样的方式来模拟一个自动的路灯。
- 具体步骤
硬件清单
硬 件 名 称 数 量 功 能
Microduino-Core 1 核心控制板
Microduino-USBTTL 1 下载程序,串口通信
USB数据线 1 连接计算机和USB串口设备
光敏电阻 1 感应光的强度
220Ω的电阻 2 限流,保护LED
LED 1 发光二极管
面包板 1 万能连接板
导线 若干 连接电子元器件
根据上面提供的硬件清单准备好多种元器件,然后根据连接示意图搭建电路,如
图3-31所示。
程序清单
/* 功能描述:
* 用光敏电阻感应周围环境光的强度,根据检测到的数值与参考值作比较,判断是白天
* 还是黑夜
*
* 引脚映射:
* D13 --> LED
* A0 --> 光敏电阻
*/
int ledPin = 13;
int rPin = A0;
int ref =600; //光线强度参考值,此处数值要略大于所测得的数据但小于灯光下的数据
void setup ()
{
Serial.begin(115200); //初始化串口通信,设置115?200波特率
pinMode(ledPin,OUTPUT); //将D13引脚设置为输出
}
void loop()
{
int n = analogRead(rPin); //读取光敏电阻的电压,读到的数值为0~1023
Serial.println(n);
if (n>= ref ) //对光线强度进行判断,如果高于参考值,则点亮LED,否则关闭
digitalWrite(ledPin,HIGH);
else
digitalWrite(ledPin,LOW);
delay(1000);
}
程序中用于判断的参考值是一个经验值,可以根据实际情况在程序中修改该参考值。当然,另一种可选的方案是,将外部的固定电阻换成一个100KΩ的可调电阻,同样可以用来调节开关灯的阈值。
将程序清单中的源代码输入Arduino IDE中,并编译下载到控制板芯片中。
- 观察现象
当用灯照着光敏电阻时,即模拟白天时,LED是熄灭的;而当用遮盖物罩住光敏电阻时,即模拟晚上,LED是点亮的。