《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是点亮的。
相关文章
|
6月前
|
Oracle IDE Java
启航Java编程:基础三部曲-第一部
启航Java编程:基础三部曲-第一部 揭秘Java:从Hello World开始的编程之旅
41 0
|
7月前
|
前端开发 JavaScript 开发工具
前端知识笔记(三十)———前端需要掌握的技术有哪些方面
前端知识笔记(三十)———前端需要掌握的技术有哪些方面
104 1
|
消息中间件 设计模式 Java
如何高效地阅读源码,我总结了18条心法,助你修炼神功
大家好,我是三友~~ 这篇文章我准备来聊一聊如何去阅读开源项目的源码。 在聊如何去阅读源码之前,先来简单说一下为什么要去阅读源码,大致可分为以下几点原因: - 最直接的原因,就是面试需要,面试喜欢问源码,读完源码才可以跟面试官battle - 提升自己的编程水平,学习编程思想和和代码技巧 - 熟悉技术实现细节,提高设计能力 - ...
如何高效地阅读源码,我总结了18条心法,助你修炼神功
|
存储 人工智能 算法
MATIC马蹄链佛萨奇2.0系统源码搭建|现成案例|成熟技术
function _setImplementation(address newImplementation)internal{