本设计的硬件构成:
STM32F103C8T6单片机最小系统板(包含+3.3V稳压电路+时钟晶振电路+复位电路(上电自复位,手动复位)),光敏电阻、人体识别模块、按键、LED灯、蓝牙无线模块组合而成;
功能介绍:
1、 用户可以通过按键切换台灯光强度的控制模式,有自动模式和手动两种模式;
2、自动模式下,系统通过人体检测模块识别周围是否有人;在有人的情况下,系统开启自动控制模式;系统通过光敏电阻检测到环境的光线强度大小,使用PWM方式来调节台灯的亮度(占空比为0-100%)。
3、自动模式下,系统如果检测到周围没有人,并且持续30秒钟,系统则直接熄灭台灯,达到节能的效果;
4、手动模式下,可通过按键增加或减少亮度;系统有三个按键,按键1为模式切换键;按键2和按键3在手动模式下才生效,分别为档位减一,档位加一;
5、系统带有黄绿两个LED指示灯;绿灯亮表示周围有人,灭则无人;黄灯亮表示为自动模式,灭则为手动模式。
4、可通过蓝牙连接手机APP,通过手机监控当前光强度,和模式切换及PWM调整。
主要物料清单及型号:
单片机:STM32F103C8T6;
蓝牙模块:JDY-31-SPP;
人体检测模块:SR602;
USB台灯:5V-USB小台灯;
LED灯:直插型5mmLED;
PCB:
部分程序源码:
int main(void)
{
u8 key=0;
u8 dir=1;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为115200
KEY_Init();
LED_Init(); //LED端口初始化
TIM2_PWM_Init(3999,0); //不分频。PWM频率=72000000/4000=18Khz,占空比最大为(3999+1)
TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms
Adc_Init();
LED1=0;
while(1)
{
key=KEY_Scan(0);
key_handle(key);
APP_Command_Process();
if(T_100ms>=10)
{
T_100ms=0;
if(SR501==1)
{
people = 600;
LED0 = 0;
}
else
{
if(people>0)
people--;
else
{
people=0;
LED0 = 1;
TIM_SetCompare3(TIM2,0);
PWM_DUTY=0;
}
}
light=Get_Adc_Average(9,10)-95;
if(people>0)
{
if(ctl_mode==AUTO_MODE)
{
if(light>500)
PWM_DUTY=4000-light;
else
PWM_DUTY=4000;
TIM_SetCompare3(TIM2,PWM_DUTY);
}
}
APP_Data_Update();
}
}
}