光传感器是利用光敏元件将光信号转换为电信号的传感器,它的敏感波长在可见光波长附近,包括红外线波长和紫外线波长。光传感器不只局限于对光的探测,它还可以作为探测元件组成其他传感器,对许多非电量进行检测,只要将这些非电量转换为光信号的变化即可。
光敏电阻是一种电阻值随照射光强度增加而下降的电阻,光照越强电阻值越小,光照越弱,电阻值越大。
(1)实验材料
Arduino板一个;
光敏开关一个;
导线若干;
电阻2个,1个光敏电阻,1个1K普通电阻;
配套USB数据线;
1个LED灯;
1个220Ω限流电阻;
(2) 实验步骤
将光敏电阻作为一个电阻跟一个普通电阻串联,根据串联分压的方法,通过analogRead() 读取其电压,直插LED灯正极连接限流电阻,电阻另一端连接开发板第10引脚,LED灯负极接开发板GND。光敏电阻一端接GND,电阻一端接5V,光敏电阻和普通电阻相接,然后接入A0引脚。
(3)连图如下:
(4)代码块:
/*
通过光敏电阻检测环境光,进而控制LED灯亮度
*/
int ledPin = 10;
int sensorValue = 0; //保存读到的传感器模拟值
int ledValue = 0; //保存LED灯占空比
void setup () {
pinMode (ledPin, OUTPUT); //数字口要选择带~号的具有pwm功能的输出口
}
void loop () {
sensorValue = analogRead(A0); //读取A0模拟口的数值
ledValue = map(sensorValue, 400, 800, 0, 200); //将400到800之间的数据映射成0到200之间的数据
analogWrite(ledPin, ledValue); //PWM控制LED灯亮度
delay(100);
}
(5)关键代码
通过analogRead()读取光敏电阻与普通电阻串联分压后的电压数据,使用map()函数做重新映射,然后使用analogWrite()函数改变LED灯的亮度。根据串联分压,光敏电阻上的电压值为R1/(R1+R2) * 5V。通过测试发现遮挡和不遮挡的情况下,模拟输入的范围大概在400~800之间,所以map()函数里面区间为[400,800],由于电源波动或外界干扰等原因,输出的数据可能也会受到一定的影响。
(6)连接开发板,设置好对应端口号和开发板类型,进行程序下载。
(7)效果
遮挡光敏电阻,LED灯变亮,不遮挡光敏电阻,LED灯变暗。