《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是点亮的。
相关文章
|
12月前
|
人工智能 Cloud Native Serverless
2024云栖大会资料精选,《云原生+AI核心技术&最佳实践》PPT全量放送!
关注阿里云云原生公众号,后台回复:2024 云栖大会,即可免费下载云原生云栖大会核心资料合集。
2357 35
|
6月前
|
API 开发者
了解 HTTP 的PUT 与 POST方法的综合指南
HTTP PUT 和 POST 方法是构建 Web 应用与 API 的核心工具,用于资源的创建与更新。PUT 方法通过指定 URL 更新或创建完整资源,具有幂等性;而 POST 方法更灵活,主要用于创建新资源,但不具备幂等性。本文详细对比了两者在请求体、URL 使用、资源处理等方面的区别,并提供了实际应用示例,帮助开发者根据场景选择合适的方法以优化 API 设计。
|
11月前
|
缓存 算法 Java
Java 中线程和纤程Fiber的区别是什么?
【10月更文挑战第14天】
299 0
|
消息中间件 关系型数据库 Shell
记录贴:sentry磁盘占用过大如何清理?
记录贴:sentry磁盘占用过大如何清理?
1468 0
An动画优化之遮罩层动画
An动画优化之遮罩层动画
519 0
An动画优化之遮罩层动画
|
设计模式 前端开发 Java
Entity-Boundary-Interactor(EBI)介绍
Entity-Boundary-Interactor(EBI)介绍
323 0
|
存储 搜索推荐 安全
菲住布渴的数字化转型:阿里宜搭助力服务中枢升级,提升10倍开发效率
在新形势下,酒店纷纷通过数字化转型,提升运营管理效率。宜搭通过快速、安全、可靠的应用搭建能力不仅提升了组织内部的运营管理效率也大大节省了人力成本,低代码的应用搭建方式激发了人的主观能动性,让业务人员也具备开发应用的能力,大大提升了组织的活力。
26291 0
菲住布渴的数字化转型:阿里宜搭助力服务中枢升级,提升10倍开发效率
|
Java C++
详解JAVA中的 i++ 和 ++i ,案例及原理,通俗易懂
i++和++i是日常开发中,经常使用的语句形式,也是面试中经常见到的一个知识点。但是你真的理解其中的原理吗?
1216 0
|
存储 安全 固态存储
All In All-Flash,阿里云入门级ESSD云盘重磅发布
此次全新发布的ESSD PL0 采用NVMe存储介质,最大程度上释放阿里云的技术红利。这也是业内唯一一款基于“RDMA网络架构+NVMe存储介质”的入门级云盘
All In All-Flash,阿里云入门级ESSD云盘重磅发布
|
监控 运维 缓存
降云十八掌——阿里云运维架构最佳实践(下)
本文为驻云科技运维总监乔锐杰在阿里云MVP直播与大家分享的运维技术实践。
5842 0