目标
天黑请开灯,当室内光线充足时候LED关闭,当室内光线变暗时候点亮LED
理论学习
- 光敏电阻的特性是光敏电阻的阻值随着光照强度的变大而减小。换句话说,光线约亮电阻越小,光线越暗电阻越大。
- 本实验选用1K电阻和光敏电阻串联,根据电阻分压原理,光线越暗,光敏电阻两段的电压越大
- 本实验通过A5引脚检测光敏电阻两段的电压值来检测光强。
注:A0口是10位模数转换接口,AD转换后的满值为1023,而一般情况下Catduino主板设定的参考电压为VCC(这里是5V),5V即是1023,由于光敏电阻和10K欧电阻串联接到5V和GND之间,根据电阻分压原理,(1023-AD0)/AD0=R/10K。其中AD0即从A0口上读到的AD转换后的数值,R是待测光敏电阻阻值,通过该式可算得阻值并判断周围光的强度。
光敏电阻实物图
亮度传感器/光敏传感器
接线图
Mind+
- 首先analogRead读取5号引脚的值,范围是0-1023
- 读取到之后通过串口输出参数,0表示第一个参数,并且每500ms输出一次到串口
- 另外将读取到的的值判断如果大于800则让13号led点亮,否则熄灭
- 发送串口时AD表示前缀
IDE
/*
测试光敏电阻,亮度传感器
*/
// 板载led 13
#define LED 13
// 定义光敏电阻读取
#define ADPin A5// 定义接受光敏电阻的值
int ADBuffer = 0;
// the setup function runs once when you press reset or power the board
void setup() {
// 打开串口
Serial.begin(9600);
// LED设置为输出
pinMode(LED, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
// 光敏电阻测试
ADLed();
}
void ADLed()
{
// 读取电位器的值
ADBuffer = analogRead(ADPin);
Serial.print("AD= ");
Serial.println(ADBuffer);
if(ADBuffer < 100)注意此处100
{
digitalWrite(LED,HIGH);
}
else
{
digitalWrite(LED,LOW);
}
delay(500);
}
根据电阻分压原理,(1023-AD0)/AD0=R/10K。其中AD0即从A0口上读到的AD转换后的数值,R是待测光敏电阻阻值,所以光照越强,R越小,AD0读取到的值越大,AD0读取到的数据是0~1023
参照如上公式,如果是光敏电阻的话,光线越暗,阻值越大,所以应该判断ADBuffer>800则led点亮,而且读取到的AD0的数据是0~415
如果是亮度传感器,则光线越暗,阻值越大,但是换算之后读取到值越小,所以应该判断判断ADBuffer<100则led点亮