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);//设置串口波特率为9600Serial.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、基本原理
光敏电阻是一种依据光线明暗程度变化而改变阻值的电阻器件,其原理是基于半导体中的内照效应。
在光敏电阻的半导体材料中,掺入了一些能够响应光线的掺杂物。当这些掺杂物受到光线的作用时,会产生载流子,从而影响电阻器的电阻值。具体来说,当有光照射在光敏电阻上时,电荷载流子就会在半导体中产生并向外扩散,使材料本身的电阻值降低。反之,如果没有光照射在光敏电阻上时,电荷载流子的数量就很少,此时材料的电阻值较高。