YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16171|回复: 13
打印 上一主题 下一主题

Arduino入门教程—基础实验篇六 光控开关

[复制链接]

签到天数: 866 天

[LV.10]以坛为家III

跳转到指定楼层
楼主
发表于 2013-5-26 08:29:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 AllBlue 于 2013-10-29 19:20 编辑

光控开关
今天我们做一个光控开关实验,我们使用到一种电阻--光敏电阻。
实验元件:

UNO 实验套装(UNO R3控制板、USB数据线、面包板、跳线)

LED灯 一枚

光敏电阻 一个

电阻220Ω 一枚

电阻10KΩ  一枚

光敏电阻又称光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。实物图如下:


光敏电阻的工作原理是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。当有光线照射时,电阻内原本处于稳定状态的电子受到激发,成为自由电子。所以光线越强,产生的自由电子也就越多,电阻就会越小。经过测试,光敏电阻在黑暗中,电阻值大概有1~10M,在光照下,电阻值大概有几百到几千欧姆。



下面我们就用它来做本次实验。
下图是实验电路图(接线时注意尽量不要遮挡住光敏电阻,以免影响实验结果):

电路搭建好了,我们要将程序烧写到UNO 中,例程如下:
  1. /*
  2. 光敏电阻控制 LED
  3. 根据传感器的模拟值大小设定LED的亮度
  4. */

  5. #define LED 11      //定义LED引脚为11
  6. int val = 0;        //储存传感器的变量数值

  7. void setup(){
  8.   pinMode(LED, OUTPUT);     //设定LED引脚为输出状态
  9.           //注意:模拟接口自动设为输入
  10. }

  11. void loop(){
  12.   val = analogRead(5);       //读取传感器的模拟值并储存
  13.   analogWrite(LED,val/4);    //设置LED亮度(PWM输出范围0-255)
  14.   delay(10);                 //延时10毫秒
  15. }
复制代码

例程中,val = analogRead(5);这个语句是读取模拟端口A5的值,不是数字端口5,模拟接口默认为输入端口,不用再写语句。analogWrite(LED,val/4); 这个语句是设置LED亮度,val/4是因为val读取出来的值范围是0~1023,而上面介绍过PWM范围是0~255,所以要将val的值除以4!!


该程序,实际效果有遮挡时,LED亮度变亮,无遮挡时,LED亮度变暗,光线强烈时,LED会熄灭(有可能只是肉眼看不到LED的亮度了)!
  1. int photoresistancePin = 5;  //定义变量photoresistance=5,为电压读取端口。
  2. int ledPin = 11;   //设置led数字IO脚
  3. int val = 0;       //定义变量i
  4. void setup() {
  5.   pinMode(ledPin, OUTPUT);  //设置ledPin脚模式,为输出
  6. }
  7. void loop() {
  8.   val = analogRead(photoresistancePin);    //从传感器读取值
  9.   if(val<=512){      
  10.     /*512=2.5V,想让传感器敏感一些的时候,把数值调高,
  11.      想让传感器迟钝的时候把数值调低。*/
  12.     digitalWrite(ledPin, LOW);//当光照强度过强时led灭。
  13.   }
  14.   else{
  15.     digitalWrite(ledPin, HIGH); //当光照强度过低时led亮。
  16.   }
  17. }
复制代码

这个程序效果:用手遮挡光敏电阻,LED点亮,不遮挡,LED熄灭,当然这是在白天的情况下。(其中可以改变判断值来改变光敏电阻的灵敏度)

在此感谢sangluyuan 同学的指出文章中的错误!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对

该用户从未签到

沙发
发表于 2015-7-28 20:46:38 | 只看该作者
什么是photoresistancePin
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

板凳
 楼主| 发表于 2015-7-28 21:15:47 | 只看该作者
handanqibu 发表于 2015-7-28 20:46
什么是photoresistancePin

这只是个名称,用来指定连接光敏电阻的引脚
回复 支持 反对

使用道具 举报

该用户从未签到

地板
发表于 2015-8-13 21:24:52 | 只看该作者
不明白什么意思,能具体点吗

点评

哪里不太明白呢~  发表于 2015-8-14 08:08
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2015-8-18 15:21:04 | 只看该作者
photoresistancePin是个人定义的,还是arduiro中的专门定义 模拟端口不需要在编程中注明吗
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

6#
 楼主| 发表于 2015-8-18 20:04:51 | 只看该作者
handanqibu 发表于 2015-8-18 15:21
photoresistancePin是个人定义的,还是arduiro中的专门定义 模拟端口不需要在编程中注明吗

自己定义的哦
回复 支持 反对

使用道具 举报

签到天数: 22 天

[LV.4]偶尔看看III

7#
发表于 2019-5-1 19:50:22 | 只看该作者
Arduino入门教程—基础实验篇六 光控开关
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

9#
发表于 2020-2-10 23:50:28 | 只看该作者
感谢,明天做做这个试验,如果灯的变化很小,会不会是电阻10KΩ的问题?
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

10#
发表于 2020-3-22 22:43:15 | 只看该作者
幸亏,有读过一些 c++
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-4-27 01:06 , Processed in 0.052571 second(s), 32 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表