目录
一、前言
项目成品图片:
哔哩哔哩视频链接:
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32智能窗帘系统。功能如下:
- 光强采集:光敏电阻实时采集环境光强度数据
- 温湿度采集:DHT11温湿度传感器采集环境温湿度
- 危险气体监测:MQ-7判断危险气体是否超标(超标板子指示灯闪烁)
- 窗帘控制:步进电机模拟窗帘驱动开闭
- OLED显示:当前时间,温湿度数据,模式信息
- 实时时钟:DS1302时钟模块读取记录当前时间
- 蓝牙APP控制:手机端蓝牙app远程遥控窗帘
- 控制模式:JR6001语音模块驱动扬声器播报提示音
- 控制模式:支持四种窗帘控制模式:自动模式、手动模式、定时模式和遥控模块,可按键切换
2.主要器件
- STM32F103C8T6最小系统板
- OLED显示屏(4针I2C协议)
- 光敏电阻
- DHT11温湿度传感器
- MQ-7一氧化碳传感器
- 28BYJ51步进电机
- ULN2003步进电机驱动芯片
- 蓝牙模块(BT04-A)
- JR6001串口语音模块
- 扬声器
三、原理图设计
四、PCB硬件设计
1.PCB图
2.PCB板打样焊接图
五、程序设计
int main(void)
{
u16 ii=0;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //语音模块串口初始化
usart3_init(9600); //蓝牙使用
DHT11_Init();
Adc_Init();
Moto_Init();
ds1302_gpio_init();
ds1032_init(); //时间设置
ds1032_read_realTime(); //读取实时数据
KEY_Init();
MQ_Init();
LED_Init();
OLED_Init(); //屏幕初始化
TIM3_Int_Init(719,7199);
printf("AF:30");//声音调到31档 最大
delay_ms(100);
delay_ms(1000);
printf("A7:00003");//欢迎使用
delay_ms(1000);
OLED_CLS();
while(1)
{
if(Flag_caidan==1)//自动模式
{
delay_ms(500);
Flag_adc=Get_Adc_Average(0,10);
delay_ms(500);
if(Flag_adc>1000&&Flag_dakai==0)
{
printf("A7:00001");//打开
TIM_Cmd(TIM3,DISABLE);
for(ii=0;ii<Num_i;ii++)
{
Motorcw_angle(1,3);
MotorStop();
}
TIM_Cmd(TIM3, ENABLE);
Flag_dakai=1;
dakai=1;
}
if(Flag_adc<1000&&Flag_dakai==1)
{
printf("A7:00002");//关闭
TIM_Cmd(TIM3,DISABLE);
for(ii=0;ii<Num_i;ii++)
{
Motorccw_angle(1,3);
MotorStop();
}
TIM_Cmd(TIM3, ENABLE);
Flag_dakai=0;
dakai=0;
}
if(MQ==0)
{
LED0 = !LED0;
delay_ms(100);
LED0 = !LED0;
delay_ms(100);
}
}
if(Flag_caidan==2)//手动模式
{
if(dakai==1&&Flag_dakai==0)
{
printf("A7:00006");//打开
TIM_Cmd(TIM3,DISABLE);
for(ii=0;ii<Num_i;ii++)
{
Motorcw_angle(1,3);
MotorStop();
}
TIM_Cmd(TIM3, ENABLE);
Flag_dakai=1;
}
if(dakai==0&&Flag_dakai==1)
{
printf("A7:00007");//关闭
TIM_Cmd(TIM3,DISABLE);
for(ii=0;ii<Num_i;ii++)
{
Motorccw_angle(1,3);
MotorStop();
}
TIM_Cmd(TIM3, ENABLE);
Flag_dakai=0;
}
}
if(Flag_caidan==3)//定时模式
{
if(TimeRAM.kai==1&&Flag_dakai==0)
{
if(TimeRAM.hour_kai==TimeData.hour&&TimeRAM.minute_kai==TimeData.minute)
{
printf("A7:00006");//打开
TIM_Cmd(TIM3,DISABLE);
for(ii=0;ii<Num_i;ii++)
{
Motorcw_angle(1,3);
MotorStop();
}
TIM_Cmd(TIM3, ENABLE);
Flag_dakai=1;
}
}
if(TimeRAM.guan==1&&Flag_dakai==1)
{
if(TimeRAM.hour_guan==TimeData.hour&&TimeRAM.minute_guan==TimeData.minute)
{
printf("A7:00007");//关闭
TIM_Cmd(TIM3,DISABLE);
for(ii=0;ii<Num_i;ii++)
{
Motorccw_angle(1,3);
MotorStop();
}
TIM_Cmd(TIM3, ENABLE);
Flag_dakai=0;
}
}
}
if(Flag_caidan==4)//遥控模式
{
if(dakai==1&&Flag_dakai==0)
{
printf("A7:00006");//打开
TIM_Cmd(TIM3,DISABLE);
ii=0;
for(ii=0;ii<Num_i;ii++)
{
Motorcw_angle(1,3);
MotorStop();
}
TIM_Cmd(TIM3, ENABLE);
Flag_dakai=1;
}
if(dakai==0&&Flag_dakai==1)
{
printf("A7:00007");//关闭
TIM_Cmd(TIM3,DISABLE);
for(ii=0;ii<Num_i;ii++)
{
Motorccw_angle(1,3);
MotorStop();
}
TIM_Cmd(TIM3, ENABLE);
Flag_dakai=0;
}
}
}
}
六、实验效果
七、资料内容