硬件方案
智能台灯以专门感应人体红外信号的红外传感器为基础,这意味着仅当有人的时候,红外传感器才输出一个信号,经放大处理后达到单片机的输入门限电压,单片机开始运行,台灯自动点亮。当人离开的时候,单片机控制台灯自动关闭,以达到节约用电的目的。此外,通过功能按键可以设置台灯的工作模式分为自动和手动,在此之前如果检测到人坐姿不正确可以通过红外光电进行检查,台灯上的蜂鸣器将会响起,提醒使用者应该注意坐姿,这个功能可以帮助保护使用者的视力。
整体电路主要由stm32单片机最小系统,光敏电阻检测电路,红外人体检测电路,OLED显示电路,DS1302时钟电路,LED台灯模块,蜂鸣器报警电路;原理图如图:
PCB图如下:
设计功能
1.通过光敏采集当前光线强度,通过单片机内部AD进行模数转换,通过人体红外检测当前是否有人。
2.采用OLED液晶显示屏来显示,用于显示当前的时间、光强度、控制模式、姿势提醒等。
3.通过单片机的PWM引脚,根据不同光线情况下来调整PWM的占空比,以达到调节当前灯光亮度。
4.通过DS1302时钟芯片显示当前的时间,并可以通过按键设置提示时间。
5.通过光电传感器检测坐姿,当坐姿不正导致红外光电开关被遮挡时被判断坐姿不正确。如果坐姿不正或者是定时时间到后蜂鸣器会进行提醒。
主程序源码
int main(void)
{
char i=0;
DelayInit();
I2C_Configuration(); //IIC初始化
OLED_Init(); //OLED初始化
KEY_Init(); //按键初始化
BEEP_AND_GD_RTHW_GPIO_Config();
OLED_CLS();//清屏
DS1302_Init(&SysDate);
DelayMs(100);
DS1302_DateRead(&SysDate);//读时间
OLED_CLS();//清屏
for(i=0;i<4;i++)OLED_ShowCN(i*16,2,i+8,0);//测试显示中文:亮度等级
OLED_ShowStr(62,2,": ",2);//显示冒号
for(i=0;i<4;i++)OLED_ShowCN(i*16,4,i,0);//测试显示中文:提醒时间
DisplayMode();
Adc_Init();
TIM2_Init(49,71); //定时器初始化,定时50us
TIM3_Init(499,7199); //定时器初始化,定时50ms
//Tout = ((arr+1)*(psc+1))/Tclk ;
//Tclk:定时器输入频率(单位MHZ)
//Tout:定时器溢出时间(单位us)
while(1)
{
KeySettings();
DisplayTime();
DisplayTiXingTime();
AutoHandle();
LedGearHandle(GearTemp);
if(GD == 0)//检测坐姿不正确
{
if(PostureFlag==0)
{
PostureFlag=1;
BEEP=1;//蜂鸣器提醒
OLED_CLS();//清屏
for(i=0;i<6;i++)OLED_ShowCN(i*16+16,2,i+16,0);//测试显示中文:请注意坐姿!
DelayMs(1000);
OLED_CLS();//清屏
for(i=0;i<4;i++)OLED_ShowCN(i*16,2,i+8,0);//测试显示中文:亮度等级
OLED_ShowStr(62,2,": ",2);//显示冒号
for(i=0;i<4;i++)OLED_ShowCN(i*16,4,i,0);//测试显示中文:提醒时间
DisplayMode();
}
}
else
{
PostureFlag=0;
}
}
}
资料链接:https://pan.baidu.com/s/1h609T4krQL4XSxzR2Nubpw?pwd=39pq