【单片机毕业设计】【mcuclub-dz-762】基于STM32智能家政机器人系统与设计
一、功能简介
项目名:基于STM32智能家政机器人系统与设计
项目编号:dz-762
单片机:STM32F103C8T6
功能简介:
1、通过SU-03T语音识别模块可控制各类电器
2、通过一个继电器控制灯的开关(语音指令:开灯、关灯)、通过一个继电器控制风扇的开关(语音指令:打开空调、关闭空调)、通过一个继电器控制电视的开关(OLED显示屏模拟)(语音指令:打开电视、关闭电视)、通过步进电机正反转模拟窗帘的开关(语音指令:打开窗帘、关闭窗帘)
3、通过时钟模块DS1302设置空调开关时间,在设置时间内检测到环境温度大于设置的最大值,控制空调打开,空调打开1分钟后没有检测到人自动关闭空调;
4、通过WIFI模if块,手机端APP可远程控制各继电器。
5、通过光照检测模块检测当前环境中的光照强度,检测到光照大于设置的最小值,控制窗帘打开,否则关闭窗帘;
6、通过温度检测模块检测当前环境温度,通过人体热释电感应模块检测到人,温度较高自动打开空调,温度较低,自动关闭空调。
二、系统框图设计
绘制软件:VISIO
本设计以STM32F103c8t6单片机为核心控制器,加上其他模块一起组成此次设计的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了STM32F103c8t6单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。
输入由七部分组成,第一部分是温度检测模块,通过该模块检测当前环境的温度,第二部分是光照检测模块,通过该模块检测当前环境的光照强度;第三部分是时钟模块,通过该模块获取当前的时间;第四部分是人体热释电模块,通过该模块获取当前环境是否有人;第五部分是语音识别模块,通过该模块 可以语音控制各类电器;第六部分是按键模块,通过该模块可以切换界面、设置数值、切换工作模式等;第七部分是供电模块,通过该模块可给整个系统进行供电。
输出由三部分组成,第一部分是显示屏模块,用于模拟电视的开启和关闭;第二部分是继电器模块,通过三个继电器控制灯、风扇、OLED电视的开启和关闭;第三部分是步进电机模块,模拟窗帘的打开和关闭。
除此之外,WIFI模块既作为输入又作为输出,WIFI模块和手机进行连接,可以将监测的数据传输到用户手机端,用户也可以通过手机端发送指令设置各参数阈值,并能远程控制继电器的工作。
具体系统框图如图3.1所示。

三、51实物图
单片机型号:STM32F103C8T6
板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。
供电接口:TYPE-C
四、原理图
软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图
五、PCB图
由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
六、部分程序展示
软件版本:keil5
逻辑程序和驱动程序分开,分布于main.c和其他.c文件
/**********************************
函数名:处理函数
传参值:无
返回值:无
**********************************/
void Manage_Function(void)
{
if(time_begin_hour * 60 + time_begin_minute < time_end_hour * 60 + time_end_minute) //开始时间小于结束时间
{
if(ds1302_buf[4] * 60 + ds1302_buf[5] > time_begin_hour * 60 + time_begin_minute && ds1302_buf[4] * 60 + ds1302_buf[5] < time_end_hour * 60 + time_end_minute)//当前时间在定时时间内
{
flag_alarm = 1;
}
else
{
flag_alarm = 0;
}
}
else if(time_begin_hour * 60 + time_begin_minute > time_end_hour * 60 + time_end_minute)//开始时间大于结束时间
{
if(ds1302_buf[4] * 60 + ds1302_buf[5] > time_end_hour * 60 + time_end_minute && ds1302_buf[4] * 60 + ds1302_buf[5] < time_begin_hour * 60 + time_begin_minute)//当前时间不在定时时间内
{
flag_alarm = 0;
}
else
{
flag_alarm = 1;
}
}
else
{
flag_alarm = 0;
}
if(temp_value > temp_max) //温度超出最大值
{
if(flag_alarm == 1) //在定时时间内
{
if(flag_kt == 0)
{
flag_temp = 0;
RELAY_TF = 1; //打开空调
flag_begin_1min = 1; //开始计时
if(flag_end_1min == 1 && HUMAN == 1) //计时完成且没有人情况下
{
RELAY_TF = 0; //关闭空调
flag_kt = 1;
}
}
else if(HUMAN == 0)
{
flag_kt = 0;
}
}
else
{
if(HUMAN == 0) //有人情况下打开空调
{
RELAY_TF = 1;
flag_kt = 0;
}
else //不在定时时间内且没人并没有手动打开的情况下关闭空调
{
if(flag_temp == 0)
{
RELAY_TF = 0;
}
}
}
}
else if(temp_value < temp_min)
{
RELAY_TF = 0;
}
else
{
if(flag_temp == 0)
{
RELAY_TF = 0;
}
}
if(light_value > light_min) //当光照大于最小值打开窗帘
{
flag_window = 1;
flag_window_state = 0;
}
else
{
if(flag_window_state == 0)
{
flag_window = 0;
}
}
if(flag_window == 1) //执行开关窗帘操作
{
if(flag_bujin_state == 0)
{
flag_bujin_foreward = 1;
}
}
else
{
if(flag_bujin_state == 1)
{
flag_bujin_reversal = 1;
}
}
if(RELAY_OLED == 1) //电视机第一次打开进行初始化并显示内容
{
if(flag_oled == 0)
{
Oled_Init();
Oled_Clear_All();
flag_oled = 1;
}
Oled_ShowCHinese(1,2,"我是电视机");
}
else
{
Oled_Clear_All();
flag_oled = 0;
}
if(huart2_rx_data != 0x00) //根据语音内容执行操作
{
switch(huart2_rx_data)
{
case 0x01:
RELAY_ZM = 1;
break;
case 0x02:
RELAY_ZM = 0;
break;
case 0x03:
RELAY_TF = 1;
flag_temp = 1;
break;
case 0x04:
RELAY_TF = 0;
break;
case 0x05:
RELAY_OLED = 1;
break;
case 0x06:
RELAY_OLED = 0;
break;
case 0x07:
flag_window = 1;
flag_window_state = 1;
break;
case 0x08:
flag_window = 0;
flag_window_state = 1;
break;
default:
break;
}
huart2_rx_data = 0x00;
}
if(flag_finish_5s == 1) //5秒上传一次数据
{
flag_begin_5s = 0;
Aliyun_Send_Data();
flag_begin_5s = 1;
}
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)