原理是利用光敏电阻,对周围环境进行测试,如果较暗则开启红外感应模式,有人经过就亮。
电路图:
int ledPin = 5; //定义LED群的输出引脚为 D5
int redData = 9; //定义读取红外传感器的数据引脚 为 D9
int redDataValue; //设置红外传感器初始变量
int light_value=0; //设置光敏电阻变量 初始为0
void setup() {
Serial.begin(9600); //用于测试9600下光敏电阻的感应数值
pinMode(redData, INPUT); //设置D9 引脚的红外传感器 为输入 也就是机器要读取它的数值
pinMode(A5, INPUT); //设置A5 也是机器读取的数值,
pinMode(ledPin, OUTPUT); //设置D5 也就是LED群的接口为 输出
}
void loop() {
light_value = analogRead(A5); //读取A5接口的光敏电阻数据
Serial.println(light_value); //在串口监视器中打印获取的数值,用于调试明暗
delay(500); //延迟500ms
if (light_value>700) //若光敏电阻反馈的数值大于700,则开启红外感应模式
{
redDataValue = digitalRead(redData); //读取D9引脚的红外感应器的 数值
//Serial.print(redDataValue); //后台打印数值用于调试
if (redDataValue>0){ //如果红外感应器 数值大于0,则认为可以开启LED群
lightOn(ledPin);
}
delay(500);
redDataValue = 0; //红外感应器 数值归0
}
light_value = 0; //结束时 将光敏电阻数值归0
}
void lightOn(uint8_t pin){ //LED群 亮起和熄灭函数
for (int i = 0; i < 150; i++)
{
analogWrite(pin, i); //向LED接口输入的电压 逐渐增大,产生渐变效果
delay(400);
}
delay(10000);
for (int i = 151; i >0; i--) //向LED接口的电压逐渐减小,产生渐变效果
{
analogWrite(pin, i);
delay(200);
}
digitalWrite(pin, LOW); //最终将LED灯的电压降为LOW 也就是0.
}
参考资料:https://blog.csdn.net/jacka654321/article/details/81837186