2014-5-29 18:45:31 [显示全部楼层]
58365浏览
查看: 58365|回复: 14

[入门教程] Arduino教程10 感光灯 「DFR0100 」

[复制链接]
【本篇课程内容于 2024年11月14日更新】

>本系教程配套硬件套件:【新版】Arduino入门套件 DFR0100


个项目中将介绍一个新元件——光敏电阻。从名字可以看出,这个元件是依赖光作用的。在黑暗的环境中,光敏电阻具有非常高阻值的电阻。光线越强,电阻值反而越低。通过读取这个电阻值,就可以检查光线的亮暗了。我们这里选用的是光敏二极管,光敏二极管其实就是光敏电阻中的一种,只是它还具有正负极性。
我们这次做的这个非常好玩,叫做感光灯。它能随着光线明暗而选择是否亮灯。这个光感灯非常适合用做夜晚使用的小夜灯。晚上睡觉的时候,家中灯关掉后,感光灯感觉到周围环境变暗了,就自动亮起。到了白天,天亮后,感光灯就又恢复到关闭的状态了。

元件清单
Arduino教程10 感光灯 「DFR0100 」图1

硬件连接
LED灯还是和以往一样的接法。而光敏二极管是有正负极的,和LED一样,也是遵循长脚(-),短脚(+)的原则(在下方连接图中左侧为负极,右侧为正极)。还需注意的与光敏二极管相连的电阻是10k,而不是220Ω。

Arduino教程10 感光灯 「DFR0100 」图2
1 感光灯连线图


示例代码

样例代码:
  1. //项目 – 感光灯
  2. int LED = 13;                  //设置LED灯为数字引脚13
  3. int val = 0;                   //设置模拟引脚0读取光敏二极管的电压值
  4. void setup(){
  5.      pinMode(LED,OUTPUT);        // LED为输出模式
  6.      Serial.begin(9600);        // 串口波特率设置为9600
  7. }
  8. void loop(){
  9.      val = analogRead(0);         // 读取电压值0~1023
  10.      Serial.println(val);         // 串口查看电压值的变化
  11.      if(val<1000){                // 一旦小于设定的值,LED灯关闭
  12.           digitalWrite(LED,LOW);
  13.      }else{                        // 否则LED亮起
  14.           digitalWrite(LED,HIGH);
  15.      }
  16.      delay(10);                   // 延时10ms
  17. }
复制代码

下载完代码后,LED灯会亮起,这时,你需要拿一个手电筒照你的光敏二极管(用手机后置摄像头的闪光灯应该也可以),这时你会发现LED灯神奇般的自动熄灭。但是,一旦你的手电筒移开,LED灯又再次亮起。

代码回顾

这段代码想必你一定能看的懂了吧?我就简单说一下可能不明白的地方。我们之前在项目【温度报警器】中讲LM35温度传感器的时候,也用到了模拟口读取。强调了模拟量不需要设置pinMode()输入输出模式。这里,也是同样用模拟口用来读取光敏二极管的模拟值。
一旦有光照射,读出的模拟值就会减小,这里设定的上限值是1000。这个值可以按你需要的亮度来选取。选取方法:先把整个装置放在你想让LED关闭的一个环境下,然后打开串口,查看串口显示的值,把这个值替换掉代码中的1000。
从串口读值,是调试代码一种很好的方法。

硬件回顾
光敏二极管
这里接触了一种新元件——光敏器件。这类器件都是将光信号变成电信号的特殊电子元件。元件内部有特殊的光导材料,外部用塑料或者玻璃封装。光线照射在这类光导材料上时,光敏器件的电阻值就会迅速变小。光敏元件有很多,光敏电阻,光敏二极管,光敏三极管等等。不过原理是差不多的。我们这里选用的是光敏二极管。光敏二极管其实是光敏电阻中的一种。所谓二极管,就是有正负极的,所以在连线的时候也要注意正负极。
光敏电阻在黑暗的环境中,具有非常高阻值的电阻。光线越强,电阻值反而越低。随着两端电阻值的减小,电压也就相应减小(从模拟口读到的值也就变小,模拟口0~1023的值对应是0~5V的电压值)。
那电压为什么会减小呢?那就要用到我们初中学的物理知识——分压原理。让我们看一个典型的分压电路,看看它是如何工作的。(图2)

Arduino教程10 感光灯 「DFR0100 」图3
2 分压电路图
输入电压Vin(我们这里也就是5V),连在两个电阻上,只测量通过电阻R2的电压Vout,其电压将小于输入电压。计算R2两端的Vout电压公式如下图所示。(图3)

Arduino教程10 感光灯 「DFR0100 」图4
3 分压公式

在我们这项目中,R1代表的就是10k电阻,R2代表的就是光敏二极管。本来R2在黑暗中,值很大很大,所以Vout也就很大,接近5V。一旦有光线照射的话,R2的值就会迅速减小,所以Vout也就随之减小了,读取的电压值就小。通过上面这个公式可以看出,R1选取不能太小,最好在1k~10k左右,否则比值变化不明显。


示例代码下载附件Auto_Light_Chinese.rar
下一篇教程:Arduino教程 Lesson 11 -- 舵机初动

本帖被以下淘专辑推荐:

youyu3515  学徒

发表于 2014-8-6 21:33:13

学习中
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2014-8-6 22:29:44


有问题欢迎随时交流~
回复

使用道具 举报

aylwin  学徒

发表于 2016-11-19 10:43:08

感觉教程有个错误。
光电二极管应该反接, 即正极对GND,负极对5v。

“没有光照的时候,它有很小的饱和反向漏电流,也就是我们所说的暗电流。当受到光照的时候,里面的饱和反向漏增大,形成光电流,电流的强度随入射光强度的变化而变化”

google一下光敏电阻的实例电路,也都是反接的。
亲测之后反接的确在室内较暗的光照下面灵敏度更高。
回复

使用道具 举报

zuoyan  见习技师

发表于 2017-3-1 20:28:53

学习了
回复

使用道具 举报

芝士就是力量  学徒

发表于 2018-5-31 09:24:11

您好!看了您的帖子觉得受益匪浅,作为小白,还是有很多不懂得地方,冒昧想您请教。最近在做apds9960手势传感器相关的内容,不懂得它的原理也不知道该如何用arduino控制,不知道您有没有相关的资料??希望得到您的回复,万分感谢!
回复

使用道具 举报

Jane  高级技匠
 楼主|

发表于 2018-6-12 15:26:33

芝士就是力量 发表于 2018-5-31 09:24
您好!看了您的帖子觉得受益匪浅,作为小白,还是有很多不懂得地方,冒昧想您请教。最近在做apds9960手势传 ...

看到论坛是上有另外一位小伙伴在玩这个传感器,希望对你有帮助
https://mc.dfrobot.com.cn/thread-24805-1-1.html
回复

使用道具 举报

明天已在  见习技师

发表于 2018-12-30 14:24:45

学习中
回复

使用道具 举报

1528  见习技师

发表于 2019-1-29 08:37:29

完习了!完习了!完习了!
回复

使用道具 举报

Shuuei  高级技师

发表于 2019-4-4 08:16:09

请问有没有公式可以转换将电压转换成光强?
回复

使用道具 举报

LeSoleil  见习技师

发表于 2019-7-17 09:18:37

太好了!
回复

使用道具 举报

云飞  见习技师

发表于 2019-10-15 17:18:15

回复

使用道具 举报

云飞  见习技师

发表于 2019-10-15 17:18:25

1528 发表于 2019-1-29 08:37
完习了!完习了!完习了!

学习完
回复

使用道具 举报

ZXM  学徒

发表于 2022-1-28 23:11:06

大神,我是小白。我将LED换成RGB LED,用光敏电阻,灯只显示为白色。可以帮我看看我的电路和代码哪有问题吗?谢谢啦!
FriJanuary-202201288979..png
FriJanuary-202201285247..png
回复

使用道具 举报

Elijah_Xu  学徒

发表于 2022-6-13 22:41:53

ZXM 发表于 2022-1-28 23:11
大神,我是小白。我将LED换成RGB LED,用光敏电阻,灯只显示为白色。可以帮我看看我的电路和代码哪有问题吗 ...

问题在于你的loop中先调用了colorRGB函数显示了一个随机色彩,又向每个颜色对应的引脚写入了LOW或HIGH,colorRGB其实没效果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail