
【活动】夏日电子--智能夜灯
简介
夏日电子--智能夜灯可以自动调整亮度以适应环境光照发生的变化
简介:夏日电子--智能夜灯可以自动调整亮度以适应环境光照发生的变化开源协议
:Public Domain
(未经作者授权,禁止转载)描述
夏日电子--智能夜灯
一、系统方案
1.1 照度调节电路方案
方案一:采用stm32单片机产生PWM信号,并且PWM可以由一只100K电位器控制调节输出。
方案二:采用555定时器输出PWM信号, 并且PWM可以由一只100K电位器控制调节输出。
方案选择:方案一,成本更大;方案二,电路简单,;综合考虑,使用方案二。
1.2 电源方案
方案一:选用可调电源
方案二:选用电池组和Type-C接口加升压模块组合
方案选择:方案一,可调电源不易携带;方案二,台灯是实用性的产品,应更偏向于用户使用需求便捷性,故考虑干电池,易拆解或者Type-C接口,好更换购买;综合考虑,使用方案二。
1.3 灯板方案
方案一:选用条状灯带组合
方案二:选用点状灯板组合
方案选择:方案一,如果需要题目中要求A4纸面光照整个区域内亮度均匀稳定,各点照度差小于 5%,则必须增加很多灯带,且灯带的LED更密集,功耗更大,不经济环保;方案二,点状灯板可以更自由分布,因为它面积小。它也可以在任何位置增加灯板数量或改变任何灯板的位置,简单可自定义调整。且LED灯不会太密集,节能;综合考虑,使用方案二。
1.4 照度显示方案
方案一:选用4位数码管
方案二:选用OLED屏幕
方案选择:方案一,只能显示数字;方案二,可以显示文字和其他内容,有更好的显示界面;综合考虑,使用方案二。
二、理论分析与计算
在照度调节电路中,由于要适合LED的工作频率,于是需要计算电路中一个电容的数值。这个电容的作用是它通过充放电产生锯齿波,输入进入555定时器之中,555定时器产生PWM方波信号。而电容的充放电频率由一个100K电位器调节。其中锯齿波与方波信号频率是一样的,所以,确定了锯齿波的频率,就却定了PWM波的频率,从而可以通过调节电位器间接调节555定时器PWM输出,进而调节LED亮度。以下为电容数值的计算与确定:
电容计算(使用公式计算电位器在50%时充放电时间)
充电时间:t开=0.693*(R1+R2)*C
t开=0.693*(1000欧+50000欧)*0.00000001F
t开=0.00035343秒(0.35毫秒)
充电时间:t关=0.693*R3*C
t关=0.693*50000欧*0.00000001F
t关=0.0003465秒(0.34毫秒)
周期(T):t开+t关
0.00035343+0.0003465=0.00069993(0.69毫秒)
频率(f):1/T
=1/0.00069993(1.428Hz)
工作周期:t开/(t开+t关)=50.5%
其中元件取值:R1=1000欧,R2=50000欧,R3=50000欧,C=0.0000000F
确定电容值
由于肉眼可探测低频闪烁光线,因此LED频率不能太低。否则会看见LED在闪烁。
其中一些常见LED灯的频率对比如下:
刚计算的LED |
标准家用灯 |
发光二极管灯板 |
1Hz |
50-60Hz |
>1400Hz |
可用较大的电容器来降低较高工作频率。但是要合适,下面计算对比:
10nF小电容(高频): |
100uF大电容(低频):
|
频率=1/周期 =1/0.00069993 =1.428Hz
|
周期=6.99秒 频率=0.14Hz
|
显然100uF大电容频率太低不合适,于是要选一个小电容。最后选择10nF小电容作为实验选材。
三.电路与程序设计
1.照度调节电路设计
备注:其中元件选型已在原理图中标出
2. 照度检测电路设计
3.照度检测程序设计(keil5中的main.c程序)
#define EXAMPLE_DATE "2023-11-16"
#define DEMO_VER "1.0"
static void PrintfLogo(void);
SYSDATA_T g_tSYSDATA;
void bsp_keyProcess(void);
uint8_t buf[100]={0};
float myflux = 0.0;
uint8_t writeflag = 0;
uint8_t count; //次数
int main(void)
{
uint8_t i = 1; /* 按键代码 */
uint8_t result = 0 ;
uint8_t test[100] ="fkdjfkajkfjdskfjd12132443590549689";
bsp_Init(); /* 硬件初始化 */
// PrintfLogo(); /* 打印例程信息到串口1 */
bsp_StartAutoTimer(3, 2000);
printf("SYSCORE = %d \r\n",SystemCoreClock);
for(i=0;i<100;i++)
{
buf[i]= 255-i;
}
while(1)
{
bsp_Idle();
if(bsp_CheckTimer(3))
{
myflux = BH1750_GetLux();
printf("当前光照值为 %0.2f\r\n",myflux);
sprintf(buf,"%0.2fLux ",myflux);
OLED_ShowChinese(0,0,0,16,1);//光
OLED_ShowChinese(16,0,1,16,1);//光
OLED_ShowChinese(32,0,2,16,1);//光
OLED_ShowString(48,0,buf,16,1);
OLED_Refresh();
g_tSYSDATA.flux = myflux;
g_tSYSDATA.advalue = count;
if(writeflag == 1 )//需要存数据
{
if(count<20)
{
printf("存入数据 次数: %02d --> %0.02f \r\n",g_tSYSDATA.advalue,g_tSYSDATA.flux);
count++;
ee_WriteBytes((uint8_t *)&g_tSYSDATA,sizeof(g_tSYSDATA)*(count-1),sizeof(g_tSYSDATA));
}
else
{
count =0;
writeflag =0;
}
}
}
bsp_keyProcess();
}
}
四、测试方案与测试结果
1. 测试环境
①完全黑暗环境
②示波器:CA620T型双踪示波器
③电源:9V电池组和5.3伏Type-C输出加12V升压模块
2.测试方案
将整个装置置于完全黑暗环境中,以避免环境光的干扰,使用示波器检测锯齿波和555定时器发出的 pwm调制信号。调节电位器,测量在多组不同的电位器电阻阻值下流经led灯的电流大小,同时用手机软件照度计和BH1750模块照度表测量照度对比数值。用万用表测量电源输入电压和电流大小,通过功率P=电压U*电流I,计算得输入功率大小。再测量流经LED灯的电压和电流大小,通过公式计算得输出功率大小。最后计算电源效率(LED 灯板消耗功率与供电电源输出功率之比)。
设计图

BOM


评论