这里是小殷学长,单片机毕业设计篇3 基于stm32的智能家居控制系统
创作不易,拒绝白嫖(有需可点击最后链接)可私
企鹅号:2836235214
------------------------------------------智能家居系统-----------------------------------------
a. 通过DHT11温湿度传感器模块与显示屏结合将实时采集的环境温湿度的数据进行显示监控,当温度低于或高于我们所设阈值时则会触发蜂鸣器发出相应的警报;
b. 红外传感器模块,通过红外感应进行灯光的控制。
c. MQ2烟雾传感器进行可燃气体的检测;
d. 雨滴传感器检测是否有下雨,通过发出警报提醒居家者;
e. 火焰传感器实时检测当前环境是否有火灾,并发出警报警示居家者及时处理;
f. 震动传感器,类似声控灯,检测到震动后就会打开灯光;
g. 8组继电器实现电器的模拟控制(空凋、冰箱、电视、风扇、灯等);
h. 语音模块(SU-03T)通过智能公元AI平台进行相应命令配置从而与单片机进行串口通信控制;
i. 蓝牙模块(HC-05)通过手机端蓝牙APP实现控制;
j. WIFI (ESP826601s)模块,通过OneNet云端平台进行数据上传监测和指令下发控制。
功能可定制
实物展示
下面为该毕设中所用到的相关硬件说明,具体参数不做细节描述
硬件材料
PCB和原理图
部分流程图
程序
main.c部分代码
int main(void)
{
unsigned char *dataPtr = NULL;
unsigned short timeCount = 0; //发送间隔变量
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
Led_Init(); //LED初始化
Init_MQ2(); //MQ2初始化
Beep_Init(); //蜂鸣器初始化
InitRelay(); //继电器初始化
Fire_Init(); //火焰初始化
Rain_Init(); //雨滴初始化
Shake_Init(); //震动初始化
Infrared_Init(); //红外初始化
TIMER3_Init(); //定时器初始 1ms
Init_Usart(); //串口初始化
LCD_Init(); //液晶屏初始化
//温度初始化
if(!DHT11_Init())
{
printf(" Error! T DHT11 HAS NO RESPOND...\n");
}
else
{
printf("\r\n THE DHT11 HAS RESPOND");
}
Init_Inteface(); //界面初始化
ESP8266_Init(); //初始化ESP8266
//printf("8266_INIT_END\n");
while(OneNet_DevLink()) //接入OneNET
delay_ms(500);
printf("接入onenet成功");
delay_ms(500);
Show_Str(180,280,RED,BLUE,(unsigned char *)"WIFI加载成功...",16,0);
LCD_Clear(WHITE);
delay_ms(500);
onenet_flag = 1; //WIFI接入成功后将其标志位置1 在定时器中进行相关OneNet数据上报处理
while(1)
{
if(temp > set_temp || humi > set_humi)
{
Buzzer_Action(5);
}
Param_Interface(); //参数界面实时刷新
Sensor_Task(); //传感器任务
Usart_Task(); //串口任务
if(++timeCount >= 150) //时间间隔1s
{
//传感器检测
if(DHT11_Read_Data(&temp,&humi) == 1)
{
delay_ms(100);
//printf("temp:%02d humi:%02d \r\n",temp,humi);
}
OneNet_SendData();//发送数据给onenet
//printf("send_data_end\n");
timeCount = 0;
ESP8266_Clear();
}
dataPtr = ESP8266_GetIPD(0);//获取平台返回的数据
if(dataPtr != NULL)//如果返回数据不为空
OneNet_RevPro(dataPtr);//平台返回数据检测
delay_ms(10);
}
}
//1 蓝牙 RX- PA9 TX-PA10
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
Usart_cmd = USART_ReceiveData(USART1);
USART_ClearFlag(USART1, USART_FLAG_RXNE);
}
}
//2 语音 RX- PA2 TX-PA3
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)
{
Usart_cmd = USART_ReceiveData(USART2);
USART_ClearFlag(USART2, USART_FLAG_RXNE);
}
}
void TIM3_IRQHandler()
{
static unsigned int t = 0,set_t = 0,set_t1 = 0,temp_t,onenet_t,t2 = 0,t3 = 0;
if(TIM_GetITStatus(TIM3, TIM_IT_Update))
{
t++; //时间变量
temp_t++; //温度刷新变量
if(t == 1000) //1s
{
t = 0;
sec++;
if(sec == 60) //1hour
{
sec = 0;
hour++;
if(hour == 24)
{
hour = 0;
}
}
sprintf(strtime,"%4d-%02d-%02d %02d:%02d:%02d\r\n",year,month,day,hour,min,sec); //更新时间
//printf("%02d:%02d:%02d\r\n",hour,min,sec); //调试打印信息 不用的时候屏蔽
}
//========================定时功能==============================
if(light_flag == 1) //开启灯光定时模式
{
corridor_light(1);
set_t++;
if(set_t == 1000) //1s
{
set_t = 0;
set_light_timer--;
if(set_light_timer == 0) //时间到
{
corridor_light(0);
light_flag = 0; //关闭定时标志
set_light_timer = 10; //再次重装初值
}
}
}
if(fan_flag == 1) //开启定时模式
{
//打开风扇
Relay3_ON();
set_t1++;
if(set_t1 == 1000) //1s
{
set_t1 = 0;
set_fan_timer--;
if(set_fan_timer == 0) //时间到
{
//关闭风扇
Relay3_OFF();
fan_flag = 0; //关闭定时标志
set_fan_timer = 10; //再次重装初值
}
}
}
//下面为温湿度数据更新 200ms
if(temp_t == 200)
{
temp_t = 0;
DHT11_Read_Data(&temp,&humi);
}
//下面为OneNet云平台数据上报 2S更新一次
/*
if(onenet_flag == 1)
{
onenet_t++;
}
if(onenet_t == 2000)
{
OneNet_SendData();//发送数据给onenet
onenet_t = 0;
}
*/
//下面为红外检测后的功能处理 走廊灯亮5s后自动关闭
if(people_flag == 1)
{
corridor_light(1);
status[15] = 1;
t2++;
if(t2 == 5000) //5s时间到 关闭走廊灯标志位清零 灯光状态置0
{
t2 = 0;
corridor_light(0);
status[15] = 0;
people_flag = 0;
}
}
//下面为震动传感器检测后的功能处理 卧室灯亮5s后熄灭
if(shake_flag == 1)
{
Relay8_ON();
status[7] = 1;
t3++;
if(t3 == 5000) //5s时间到 关闭卧室灯标志位清零 灯光状态置0
{
t3 = 0;
Relay8_OFF();
status[7] = 0;
shake_flag = 0;
}
}
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}
上面为基于stm32f103c8t6的智能家居控制系统相关的大致介绍,源码,pcb和原理图以及相关文档说明做了详细说明,有需可私
创作不易,拒绝白嫖
很有幸获得2023届优秀本科毕业论文和毕业设计
实物+资料