0、结果
说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是含光量,也就是光照强度,如果是你想要的,可以接着往下看。
1、外观
说明:虽然光敏电阻传感器形态各异,但是原理和代码都是适用的,只是接线可能不同。


2、连线
说明:只需要连接三根线。
uno————光敏电阻传感器
如果你的光敏电阻长这样:
接线方式如下:
说明:只需要连接三根线。
uno————光敏电阻传感器
3、源程序
说明:采用非阻塞方式编写,一定时间检测一次光照信息,并将对应功能进行函数化,方便移植。
/****************************************光敏电阻 part****************************************/
/*
注意:
光越亮,值越小;光越暗,值越大;
*/
#define photosensitivePin A0 //定义模拟口A5
#define phTimeInterval 1000 //检测一次的时间间隔
unsigned long phTimes = 0; //记录设备运行时间
int photosenVal = 0; //光照度数值
int photoContent = 0;
/****************************************set up and loop part*********************************/
void setup(){
Serial.begin(9600); //设置串口波特率为9600
Serial.println("设备上线!");
}
void loop(){
getPhData(); //获取光敏电阻的值
}
/****************************************光敏电阻 part****************************************/
/*获取光敏电阻的值*/
void getPhData() {
if (millis() - phTimes >= phTimeInterval) { //一定时间检测一次
phTimes = millis();
photosenVal = analogRead(photosensitivePin); //获取原始值
photosenVal = constrain(photosenVal, 10, 1024); //原始值限制在一定范围
photoContent = map(photosenVal, 10, 1024, 100, 0); //映射到对应的区间
Serial.print("原始数据: "); //串口打印对应的值
Serial.print(photosenVal); //串口打印对应的值
Serial.print(" ,光照强度: "); //串口打印对应的值
Serial.print(photoContent); //串口打印对应的值
Serial.println(" %"); //串口打印对应的值
}
}
4、注意事项
说明:如果有什么问题可以评论@我,我将帮助你。如果你的光敏电阻不是集成的模块,那么就需要采取第二种方式连接线路,电阻10K左右的就够了。特别注意的是:光照强度最强光,我是拿手机灯光模拟的,如果你想改,可以拿最强光照着光敏电阻,然后看原始值,就可以更改光照强度,基本上最强光也就那么亮了。
5、基本原理
光敏电阻是一种依据光线明暗程度变化而改变阻值的电阻器件,其原理是基于半导体中的内照效应。
在光敏电阻的半导体材料中,掺入了一些能够响应光线的掺杂物。当这些掺杂物受到光线的作用时,会产生载流子,从而影响电阻器的电阻值。具体来说,当有光照射在光敏电阻上时,电荷载流子就会在半导体中产生并向外扩散,使材料本身的电阻值降低。反之,如果没有光照射在光敏电阻上时,电荷载流子的数量就很少,此时材料的电阻值较高。