一、设计方案
由于实验在课堂上没有做出来,自己身边只能找到一个LED灯,所以对实验进行了修改,希望通过改变LED灯的闪烁次数来区分光照强度。实验需要实现:
当光照强度为 1-1400 时,LED灯开始闪烁 3 下后常亮 0.5 秒;
当光照强度为 1400-3400 时,LED灯开始闪烁 5 下(闪烁间隔较长)后常亮 0.5 秒;
当光照强度为 3400-4095 时,LED灯开始闪烁 10 下(闪烁间隔最长)后常亮 0.5 秒。
二、实验器件
开发板:ESP32
面包板:1 个
LED 灯: 1 个
光敏电阻:1 个
电阻:1 个
多彩杜邦线:若干
三、电路连接图
电路连接使用电路图绘制软件Fritzing设计并画图,图一图二为电路连接图和原理图。
图一,电路连接图
图二,原理图
四、程序设计代码
该实验的程序代码如下:
const int LDR_AO_PIN = 34; // 模拟输出引脚(AO)
const int LED1 = 27; // 数字输出引脚(DO)
void setup() {
Serial.begin(9600);
pinMode(LDR_AO_PIN, INPUT); // 设置数字引脚为输入模式
pinMode(LED1, OUTPUT);
}
void loop() {
// 读取模拟输出
int analogValue = analogRead(LDR_AO_PIN);
if (analogValue>=1&&analogValue<=1400)
{
for (int i=0;i<5;i++)
{
digitalWrite(LED1, HIGH);
delay(100);
digitalWrite(LED1, LOW);
delay(100);
}
digitalWrite(LED1, HIGH);
delay(50);
}
else if(analogValue>1400&&analogValue<=3400)
{
for (int i=0;i<3;i++){
digitalWrite(LED1, HIGH);
delay(240);
digitalWrite(LED1, LOW);
delay(240);
}
}
else if (analogValue>3400&&analogValue<=4095){
for (int i=0;i<10;i++)
{
digitalWrite(LED1, HIGH);
delay(400);
digitalWrite(LED1, LOW);
delay(400);
}
}
else{
digitalWrite(LED1, LOW);
delay(30);
}
delay(500); // 延迟300ms
}
五、验证结果图
图三,实验成果验证1
图四,实验成果验证2
如上图所示,光感电阻传感器的指示灯亮起证明其在正常工作,随着手遮挡光线造成亮度的变化,LED灯闪烁的次数和频率发生改变,达到了检测光照强度的实验目的。
六、总结与改进
这次实验我对内容的修改虽然解决了只有一个LED灯无法实验的问题,但是仅凭借一个LED灯的闪烁频率来区分亮度范围还是不太明显,观测者不能很轻易的得到准确的亮度。如果凭借闪烁次数来区分亮度范围的话,观测者必须观测一段时间,不能很迅速的得到结果,而且观测过程中容易走神。
对于以上问题,我认为可以将方案改成:当光照强度为 1-1400 时,LED灯熄灭; 当光照强度为 1400-3400 时,LED灯不停闪烁; 当光照强度为 3400-4095 时,LED灯常亮。