《Microduino实战》——3.7 光敏电阻

简介:

本节书摘来自华章出版社《Microduino实战》一 书中的第3章,第3.7节,作者:姚琪 杨立斌,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.7 光敏电阻

前面的实践都是在对数字I/O的操作以及PWM输出,本节会通过一个光敏电阻的练习来学习模拟输入。
我们所使用的微控制器是数字芯片,其数字I/O口只能有两种状态:高电平或低电平,出现中间状态芯片是不识别或无法输出的。其中PWM输出,尽管在程序中用analogWrite()这样的函数,但实际上也还是一种数字的输出。
这里要使用的I/O模拟输入功能,其实是通过ADC的电路,将环境中获取的模拟量(连续值),通常是电压值转化成一个数字量,该数值与电压值成正比例关系。

  1. 基本原理
    光敏电阻是一种将光信号转换成电信号的半导体元器件,如图3-29所示。在没有光线的情况下,电阻值很高,而当受到光照时,电阻值会下降。光照愈强,阻值愈低。光敏电阻跟普通电阻一样,没有极性,交流或直流都能使用。

在晚上没有光线时,光敏电阻的阻值在几兆欧左右,而在白天强光照射的情况下,其电阻值下降至几百欧到几千欧。如图3-30所示,光线越强,光敏电阻和固定电阻总的电阻越小,电流增大,使得定值电阻两端电压增大,而光敏电阻两端电压减小。可见光敏电阻两端的电压可以直接反映光线强度,即两端电压越高,光线越弱。所以我们可以认为,如果测到的电压高于某个值,就说明天黑了;而低于某个值,说明天亮了。通过这样的方式来模拟一个自动的路灯。

  1. 具体步骤
    硬件清单

硬 件 名 称 数  量 功  能
Microduino-Core 1 核心控制板
Microduino-USBTTL 1 下载程序,串口通信
USB数据线 1 连接计算机和USB串口设备
光敏电阻 1 感应光的强度
220Ω的电阻 2 限流,保护LED
LED 1 发光二极管
面包板 1 万能连接板
导线 若干 连接电子元器件

根据上面提供的硬件清单准备好多种元器件,然后根据连接示意图搭建电路,如
图3-31所示。

screenshot

程序清单

/* 功能描述:
 * 用光敏电阻感应周围环境光的强度,根据检测到的数值与参考值作比较,判断是白天
 * 还是黑夜
 *
 * 引脚映射:
 *  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中,并编译下载到控制板芯片中。

  1. 观察现象
    当用灯照着光敏电阻时,即模拟白天时,LED是熄灭的;而当用遮盖物罩住光敏电阻时,即模拟晚上,LED是点亮的。
相关文章
|
传感器 机器人 定位技术
《Arduino开发实战指南:机器人卷》一导读
单片机中各种复杂的寄存器曾让众多的学习者望而生畏——要完成某项功能需要耗费大量的时间去熟悉单片机的底层。Arduino的诞生,改变了这一局面。Arduino将各种寄存器封装起来,并提供了易用的接口,极其简洁的界面,C语言编程方式,强大的第三方函数库支持,这些功能赋予其强大的生命力。
2371 0
|
C语言 UED
《Arduino开发实战指南:LabVIEW卷》——导读
随着电子产品的不断发展,除了硬件性能的不断提升及开发效率的不断提高,用户体验也显得越来越重要。在很多电子产品设计中,都需要在用户界面设计上花相当多的时间。
1656 0