本设计的硬件构成:
STM32F103C8T6单片机最小系统板+时钟晶振电路+复位电路(上电自复位,手动复位),LCD1602显示屏电路,独立按键电路,ULN2003步进电机驱动电路,蓝牙模块,语音识别模块,总电源供电电路;
功能介绍:
1. LCD1602液晶显示当前风扇等级,语音控制状态,摇头状态;
2.共设置有4个按键,按键1为摇头开关键;按键2为语音识别功能的开关键;按键3为风扇挡位上调键;按键4为风扇挡位下调键;
3. 可通过蓝牙模块,在手机APP上对风扇状态进行监控和控制;
4. 可通过语音识别模块,用户说出相应语音,实现对风扇的语音控制(演示视频有详细的演示过程);
主要物料清单及型号:
显示屏:LCD1602-5V;
单片机:STM32F103C8T6;
蓝牙模块:JDY-31-SPP;
语音识别模块:LD3320;
步进电机驱动:ULN2003;
步进电机:28BYJ-48-5V
PCB图
程序:
int main(void)
{
u8 key=0;
u8 dir=1;
u8 count=0;
u8 temp_dif=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为115200
LED_Init(); //LED端口初始化
KEY_Init();
motor_init();
Lcd_Init();
TIM2_PWM_Init(99,7200); //不分频。PWM频率=72000000/900=80Khz
TIM3_Int_Init(499,7199);//50ms
Lcd_Puts(0,0,"Level:00 V:ON ");
Lcd_Puts(0,1,"Shake:NO ");
PWM_adjust(PWM_Level);
Lcd_SetXY(6,0);
Lcd_Write_Data(PWM_Level/10+0x30);
Lcd_Write_Data(PWM_Level%10+0x30);
while(1)
{
key=KEY_Scan(0);
KEY_Handle(key);
rev_handle();
if(shake_mode==ON)
{
if(count<=150&&shake_state==ON)
{
count++;
if(count==150)
shake_state=OFF;
motor_open(0,2);
}
else if(count>0&&shake_state==OFF)
{
count--;
if(count==0)
shake_state=ON;
motor_close(0,2);
}
}
if(time50ms>=10)
{
time50ms=0;
Lcd_SetXY(6,0);
Lcd_Write_Data(PWM_Level/10+0x30);
Lcd_Write_Data(PWM_Level%10+0x30);
APP_Data_Update();
printf("%s",APP_Data);
}
}
}