一 任务
设计并制作一个照度稳定可调的 LED 台灯和一个数字显示照度表。调光台灯由 LED 灯板和照度检测、调节电路构成,如图 1 所示。
二 要求
1.基本要求
(1)数字显示照度表由电池供电,相对照度数字显示不少于 3 位半,不需照度校准。数字显示照度表检测头置于调光台灯正下方 0.5 米处,调整台灯亮度,最大照度时显示数字大于 1000;遮挡检测头达到最低照度时显示数字小于 100。台灯亮度连续变化时,数显也随之连续变化。亮度稳定时,数显稳定,跳变不大于 10。数字显示照度表和调光台灯间不能有信息交换。
(2)调光台灯输入电压 Vi:直流 10V~15V,Vi 变化不影响亮度。
(3)亮度从最亮到完全熄灭连续可调,无频闪(LED 灯板供电电压纹波小于5%)。
(4)台灯供电电压为 12V 时, 电源效率(LED 灯板消耗功率与供电电源输出功率之比)不低于 90%。
2.发挥部分
(1)将台灯调整到最大亮度,在其下方 0.5 米距离处放置一张 A4 白纸,要求白纸整个区域内亮度均匀稳定,各点照度差小于 5%。台灯的照度检测头可有多个,位于 A4 纸面以外的任何位置。
(2)用另一调至最大亮度的 LED 灯板作为测试用环境干扰光源,改变距离实现干扰光强变化。当环境光缓慢变化时,最弱最强变化时长不小于 10 秒,台灯能自动跟踪环境光的变化调节亮度,保持纸面中心照度变化不大于 5%;当环境光突变时,最弱最强变化时长不大于 2 秒,纸面中心照度突变变化不大于 10%。当环境光增强直至台灯熄灭,纸面中心照度变化不大于 10%。
(3)环境干扰光强变化对纸面照度影响越小越好。
(4)其他。
三 说明
(1)台灯结构不做限制,参赛队自行确定。
(2)供电电源用带输出电压、电流显示的可调稳压电源。
(3)现场测试所用外加干扰光源由参赛队自备。
(4)如果自制数字显示照度表不能使用,可自带成品照度表代替测试,但要扣除基本要求(1)项 20 分。
GPT-4o给出的设计方案:
LED灯及驱动电路
照度检测及调节电路
PWM控制算法
数据处理和显示
硬件连接
初始化
实时检测与调节
显示照度值
调光算法的核心是通过实时读取照度传感器的数据,利用反馈控制机制调节LED灯的PWM信号占空比,使其亮度稳定在期望水平。我们以Arduino为例,用C++实现该算法。
程序步骤
a. 初始化和配置 初始化硬件引脚和变量,设置PWM输出频率和初始化显示屏库。
#include <LiquidCrystal.h>
// 定义引脚
const int sensorPin = A0; // 照度传感器连接的模拟输入引脚
const int ledPin = 9; // LED灯连接的PWM输出引脚
// 定义液晶显示屏的引脚
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// 初始化变量
int sensorValue = 0;
float desiredLux = 300.0; // 期望的照度值
float currentLux = 0.0;
int pwmValue = 0;
void setup() {
pinMode(sensorPin, INPUT);
pinMode(ledPin, OUTPUT);
// 初始化LCD
lcd.begin(16, 2);
lcd.print("Loadding...");
}
b. 主循环 在主循环中,读取传感器数据,通过比例积分微分(PID)控制算法调节PWM信号,实现调光。
void loop() {
// 读取照度传感器的原始数据值
sensorValue = analogRead(sensorPin);
// 将原始数据转换为实际的照度值
// 例如假设传感器的输出为线性比例,最大值为1023,对应最大照度为1000lux
currentLux = (sensorValue / 1023.0) * 1000.0;
// 调用调光算法,基于当前照度调整PWM值
pwmValue = calculatePWM(currentLux, desiredLux);
// 将PWM输出
analogWrite(ledPin, pwmValue);
// 更新LCD显示
lcd.setCursor(0, 0);
lcd.print("Current Lux: ");
lcd.print(currentLux);
lcd.setCursor(0, 1);
lcd.print("PWM: ");
lcd.print(pwmValue);
delay(100); // 小延迟,降低处理负荷
}
c. 调光算法 使用PID算法进行控制,确保照度值稳定在期望值。
// PID算法的参数
float Kp = 2.0;
float Ki = 0.5;
float Kd = 1.0;
float previousError = 0;
float integral = 0;
int calculatePWM(float currentLux, float desiredLux) {
// 计算误差值
float error = desiredLux - currentLux;
// 积分和微分
integral += error;
float derivative = error - previousError;
// 计算PID控制量
float output = Kp * error + Ki * integral + Kd * derivative;
// 更新前一个误差
previousError = error;
// 将控制量转换为PWM输出值,限制在0-255的范围内
int pwmValue = constrain(output, 0, 255);
return pwmValue;
}
将以上部分结合即为完整的调光控制算法,实现LED台灯照度的稳定控制。
通过上述代码实现了对LED照度的稳定控制,利用PID算法自动调节PWM信号,确保照度持续稳定在期望值。这种方法方便集成到各类照度控制项目中,具有较高的实际应用价值。
本题考察知识点
本设计考察了LED调光电路的设计、照度检测、PWM控制、数据采集和处理,以及数字显示模块的应用,确保台灯在不同照度水平下保持稳定,且在复杂环境中能够快速响应变化。这涉及硬件电路设计和控制算法的实现。