YFROBOT创客社区

标题: Arduino入门教程—基础实验篇六 光控开关 [打印本页]

作者: AllBlue    时间: 2013-5-26 08:29
标题: Arduino入门教程—基础实验篇六 光控开关
本帖最后由 AllBlue 于 2013-10-29 19:20 编辑

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

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

LED灯 一枚

光敏电阻 一个

电阻220Ω 一枚

电阻10KΩ  一枚

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

[attach]478[/attach]


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



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

[attach]484[/attach]

电路搭建好了,我们要将程序烧写到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 同学的指出文章中的错误!!


作者: handanqibu    时间: 2015-7-28 20:46
什么是photoresistancePin
作者: AllBlue    时间: 2015-7-28 21:15
handanqibu 发表于 2015-7-28 20:46
什么是photoresistancePin

这只是个名称,用来指定连接光敏电阻的引脚
作者: handanqibu    时间: 2015-8-13 21:24
不明白什么意思,能具体点吗
作者: handanqibu    时间: 2015-8-18 15:21
photoresistancePin是个人定义的,还是arduiro中的专门定义 模拟端口不需要在编程中注明吗

作者: AllBlue    时间: 2015-8-18 20:04
handanqibu 发表于 2015-8-18 15:21
photoresistancePin是个人定义的,还是arduiro中的专门定义 模拟端口不需要在编程中注明吗

自己定义的哦
作者: tiantianyouyou    时间: 2019-5-1 19:50
Arduino入门教程—基础实验篇六 光控开关
作者: Kuroi    时间: 2020-1-20 10:39
很棒哦~
作者: 2806880    时间: 2020-2-10 23:50
感谢,明天做做这个试验,如果灯的变化很小,会不会是电阻10KΩ的问题?
作者: limhy1990    时间: 2020-3-22 22:43
幸亏,有读过一些 c++




欢迎光临 YFROBOT创客社区 (http://82.157.198.105/) Powered by Discuz! X3.1