基于STM32的“智能家居”课程设计

基于STM32的“智能家居”课程设计
基于STM32的“智能家居系统”课程设计
此设计是基于STM32F407单⽚机的智能家居系统,具体完成要求如下:
基于蓝⽛的智能家居系统设计
设计⼀个基于蓝⽛/Wifi的智能家居控制系统,实现⼿机端蓝⽛发射和接收控制,并能实现控制各种家⽤电器设备,设计并完成特定的控制对象。
1、遥控距离⼤于6⽶,
2、采⽤单⽚机与HC05蓝⽛模块实现信号接收与控制端输出。
3、能实现多种负载控制,如灯光、窗帘控制、门铃等智能家居设备的控制
4、画出的系统原理图并焊接调试。
5、单⽚机可选⽤stm32系列,⼿机端app控制家居的开关与灯光亮暗。
6、⾃⾏设计其他功能如语⾳控制等。
⼀、设计主体思路
cvd刀具
设计流程如下图:
值得注意的是我们选择的蓝⽛模块是必须要3.3V供电的,否则发送/接收的信号会乱码
(如果选择Wifi模块的话,我选择的是正点原⼦的Esp8266模块,相关资料⽐较完善)
⼆、硬件电路设计
01# MCU主控电路
通过查阅STM32F4的数据⼿册,查到对应复⽤功能的引脚,进⾏引脚的选择(按键和拨码开关本来是想做⼀些复杂⼀点的⽤户界⾯以及状态机进⾏切换,但是时间原因以及课程设计本来没有要求,个⼈也⽐较懒,就没有⽤到这些外设。。。)
02# PCB-3D展⽰
硬件⽅⾯最后插⼀句嘴,就是舵机的可控电压范围是4.5~8V,基于成本的考虑,设计了两种不同的供电⽅式,分别引出接⼝给两舵机
5V/6V供电,实测5V(1117-5.0进⾏稳压)效果也不错,所以可以不对6V(AS1015稳压电路)供电部分电路进⾏焊接。
三、机械结构设计
由于项⽬本⾝是“智能家居”嘛,所以DIY了⼀个⼩房⼦,并且利⽤3D打印技术将⼩房⼦模型打印了出来,拼接起来。(没有3D打印机可以⽤的同学可以⽤纸板粘⼀个出来)。
四、程序设计部分
01# 主函数部分
// 硬件初始化
void BoardInit()
{
//  GPIO_InitTypeDef GPIO_InitStructure; //GPIO的初始化
BEEP_Init();//蜂鸣器初始化
TIM4_LightPWM_Init(10000,168);//照明装置初始化--频率50HZ(由于照明与舵机在同⼀个定时器下初始化,故定时器频率只能按照舵机的50Hz进⾏初始化)
TIM4_SERVOPWM_Init(10000,168);//舵机初始化--频率50HZ
uart_init(115200);//串⼝1初始化,波特率为115200
delay_init(168);//delay函数的初始化
OLED_Init();//OLED的初始化
LED_GPIO_Config();//LED初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级组别为2(抢占优先级和响应优先级均为4位)
EXTIX_Init();//外部中断初始化
}
int main()
{
BoardInit();
TIM_SetCompare2(TIM4,550);//设定两舵机的初始位置
TIM_SetCompare4(TIM4,300);
//  TIM_SetCompare1(TIM4,10000);    //测试照明灯亮度是否可控
//  TIM_SetCompare3(TIM4,10000);
while(1)
{
if(oled_flag !=0)
{
悬挂链OLED_P6x8Str(3,2,"SMART HOME!");
}
else
{
OLED_Cls();
}
}
}
⼤部分的动作代码放在串⼝中断服务函数中,主函数主要是对各模块进⾏初始化,具体的初始化函数分别在各外设的.c⽂件中。这⾥就不⼀⼀展⽰了。
02# 串⼝1中断服务函数
该部分的代码主要是对接收到的指令进⾏对应操作(存在⼀些不⾜,具体会在后⾯章节中详细说明)
void USART1_IRQHandler(void)//串⼝1中断函数
污水处理流程{
u8 Res;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)
{
Res =USART_ReceiveData(USART1);//(USART1->DR);  读取串⼝1的存储数据的寄存器
switch(Res)
{
//
case('1'):
{
//发送1激活
printf("Welcome to smart home system!!\r\n");
printf("Please send order to choose the mode:\r\n");
oled_flag =1;//屏幕标志位置1,开始显⽰
printf("2--DoorBell\r\n3--Open Door\r\n4--Lighting\r\n5--Draw the Curtain\r\n6--Close thr Curtain\r\no--Close All\r\n");
光电眼LED_Bling(2);//指⽰灯闪2次,表⽰智能家居系统已被激活
USART1_ClearBUF();//清除串⼝1缓冲区数据(⾃⼰编写)以保证串⼝1设定的100个数据不会溢出break;
}
case('2'):
{
火灾预警系统Beep_Bling();
USART1_ClearBUF();
break;
}
case('3'):
{
TIM_SetCompare2(TIM4,900);
delay_ms(2000);
TIM_SetCompare2(TIM4,550);
USART1_ClearBUF();
break;
}
case('4'):
{
printf("Please send l,m or h to choose Brightness!");
break;
}
case('l'):
{
TIM_SetCompare1(TIM4,2000);
TIM_SetCompare3(TIM4,2000);
break;
}
case('m'):
{
TIM_SetCompare1(TIM4,6000);
TIM_SetCompare3(TIM4,6000);
break;
}
case('h'):
{
TIM_SetCompare1(TIM4,10000);
TIM_SetCompare3(TIM4,10000);
break;
}
case('5'):
{
TIM_SetCompare4(TIM4,1100);
//        delay_ms(3000);
//        TIM_SetCompare4(TIM4,800);
USART1_ClearBUF();
break;
}
case('6'):
{
TIM_SetCompare4(TIM4,300);
USART1_ClearBUF();
break;
}
case('o'):
{
printf("GoodBye!");
oled_flag =0;
TIM_SetCompare4(TIM4,300);
TIM_SetCompare1(TIM4,0);
TIM_SetCompare3(TIM4,0);
span80USART1_ClearBUF();
LED_Bling(1);
break;

本文发布于:2024-09-22 01:50:41,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/187829.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:控制   数据   舵机   设计
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议