【STM32项目开源】STM32单片机智能语音家居控制系统

目录

一、设计背景和意义

1.1设计背景:

1.2设计意义:

二、实物展示

三、硬件功能介绍

[2.1 硬件清单:](#2.1 硬件清单:)

[2.2 功能介绍:](#2.2 功能介绍:)

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示

七、单片机实物资料

[资料获取 查看主页介绍:兆龙电子单片机设计](#资料获取 查看主页介绍:兆龙电子单片机设计)


一、设计背景和意义

1.1设计背景:

在日常家庭生活便捷化操控、老人儿童简易居家交互、全屋智能设备语音联动、独居人群语音便捷求助及别墅家居场景语音高效管控中,语音快速识别、指令精准响应、设备无缝联动、操作简易便捷是核心需求。传统家居控制方式存在明显局限:一方面,高端全屋智能控制系统(如定制化家居中控、多协议工业级智能网关、高端品牌成套智能家居设备)功能虽全但成本高昂,部署复杂且需专业人员上门调试与后期维护,难以普及到普通刚需家庭、小户型住宅及租房群体等日常场景,且设备生态封闭性强,不同品牌、不同协议的智能设备兼容性差,无法与个人移动终端、家庭语音交互设备灵活联动,更换或升级成本高,无法满足不同人群(如普通家庭用户、老人儿童、独居人士)的便捷家居控制需求;另一方面,普通简易家居控制装置(如传统机械开关、单功能遥控控制器、基础款智能插座)虽操作简单、价格低廉,但功能单一,仅能实现单一点位的基础开关或控制,缺乏多设备联动控制、语音指令智能判断、操作记录存储、远程语音交互及设备故障状态提醒(如设备断电、指令接收失灵)等功能,无法满足现代化家居场景下对全面覆盖、智能响应、便捷高效的家居控制管控需求。

现有关家居控制方案还存在功能割裂与集成度低的问题:部分高端全屋智能控制系统虽具备多维度设备控制与场景联动功能,但依赖复杂的软硬件架构与专属生态维护,后期使用成本高,难以覆盖预算有限的普通消费群体或租房过渡性居住场景;而低成本家居控制装置又在功能完整性与智能化上存在欠缺,无法实现语音控制指令与家居设备、移动 APP、家庭中控平台的实时联动,导致指令响应延迟、语音识别误差偏大、个性化需求(如老人语音控制灯光、夜间语音联动窗帘)无法满足等问题,无法为用户安心居家生活(如解放双手便捷操控家居)及高效居家管理(如精准管控全屋智能设备)提供可靠支撑。基于此,本设计以 STM32 单片机为核心,融合高精度语音交互与辅助模块(如语音采集模块、语音识别模块、家居设备联动辅助模块、语音播报模块)、LCD 显示模块、数据存储模块及蓝牙通信与异常提醒模块,构建低成本、高集成度的物联网智能家居语音控制系统,以解决传统家居控制方式操作繁琐、智能化程度低、功能单一及家居控制管控效率低的问题。

1.2设计意义:

从使用体验与家居智能控制效率角度,该系统突破了传统家居控制方式的局限:一是实现了多维度语音交互与全场景家居联动(如支持语音采集识别、家居设备开关控制、场景模式语音触发、设备状态语音查询,联动蓝牙通信模块、语音播报模块、全屋家居联动执行模块),无需用户手动操作各类开关或遥控器,减少家居控制的繁琐性与设备操控的延迟性;二是配备 OLED实时显示模块,直观呈现当前各家居设备运行状态、语音指令类型、系统运行状态(正常 / 异常)及联动设备响应进度,同时支持数据自动存储(可通过蓝牙传输至移动 APP / 家庭智能中控平台 / 全屋智能家居管理平台),方便用户长期追溯操作记录与设备运行历史,也为用户优化居家智能控制方案、排查设备故障及全屋智能统筹管理提供完整数据支撑;三是新增个性化语音场景与自动联动执行功能,当识别到有效语音指令(如灯光开启 / 关闭、窗帘升降、空调温度调节、睡眠 / 离家 / 归家场景触发、设备故障语音查询),系统根据指令内容自动触发对应执行动作(同时通过语音播报模块反馈操作结果与设备当前状态),并联动相关家居设备完成场景化运行(如联动 "睡眠场景" 语音指令,自动关闭灯光、拉合窗帘、调低空调温度、关闭客厅电器),无需人工逐一操控即可实现全屋家居的智能化协同运行,大幅提升了家居控制的便捷性与高效性。

从技术实践与成本控制角度,本设计以 STM32 单片机为核心,充分利用其低功耗、高性价比的优势,搭配低成本的高精度语音交互模块及通用外围模块,在保证交互精度(语音指令识别准确率可控制在 98% 以上,指令响应时间可控制在 0.5 秒以内)的前提下,有效降低了系统整体成本,相比同功能的高端全屋智能控制系统成本降低 40%-60%,更易普及到普通刚需家庭、小户型住宅、租房群体及社区老旧住宅智能改造等场景。同时,系统支持模块化扩展(如后续可新增方言语音识别功能、多人个性化语音权限管理功能、远程语音联动控制功能),为后续功能升级预留了空间,具备良好的灵活性与可扩展性。

**二、**实物展示

下方为实物演示视频

演示视频https://www.bilibili.com/video/BV1e9YPzBEsv/?spm_id_from=333.1387.upload.video_card.click&vd_source=2a672ca4e8794dca68cbe6d047b42ca5

下方为实物展示图片

三、硬件功能介绍

2.1 硬件清单:

  • STM32F103C8T6

  • OLED显示

  • 温湿度传感器

  • ULN2003步进电机驱动

  • 降压电路

  • 语音识别模块

  • 蓝牙模块

  • RTC时钟

  • MQ-2烟雾传感器

  • 光照采集

2.2 功能介绍:

(1)光强采集:光敏电阻实时采集环境光强度数据

(2)温湿度采集:DHT11温湿度传感器采集环境温湿度

(3)危险气体监测:MQ-2判断烟雾是否超标,语音播报警告提示

(4)窗帘控制:步进电机模拟窗帘驱动开闭

(5)OLED显示:当前时间,温湿度、光照数据,模式信息

(6)实时时钟:DS1302时钟模块显示当前实时时间

(7)控制模式:支持五种窗帘控制模式:自动模式、手动模式、定时模式、蓝牙模式、语音模式,可按键切换

(8)语音控制:语音控制窗帘的打开和关闭,以及播报窗帘开关状态

(9)定时模式:设置定时和关闭时间来控制窗帘

(10)手动模式:按键可控制窗帘开启/关闭

(11)自动模式:由环境光强、烟雾是否超标来自动控制窗帘开/关

(12)蓝牙APP控制:手机端蓝牙APP远程遥控窗帘、模式切换以及数据监控

四、软件设计流程图

五、硬件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;




		}
//            MQ_res = MQ_Scan();
            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;
      }	
		}
  }
}

七、单片机实物资料

资料获取 查看主页介绍:兆龙电子单片机设计

相关推荐
梦想的旅途218 小时前
基于 UI 自动化(RPA)实现企业微信外部群操作的架构设计
ui·自动化·rpa
TaidL18 小时前
茂捷M1020电感式编码器芯片赋能工业智能升级,适用于工业及机器人等领域的各种应用场景
单片机·嵌入式硬件
意法半导体STM3218 小时前
【官方原创】SAU对NSC分区的影响 LAT1578
stm32·单片机·嵌入式硬件·mcu·信息安全·trustzone·stm32开发
SmartRadio18 小时前
MK8000(UWB射频芯片)与DW1000的协议适配
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·dw1000
LDR00618 小时前
芯片电路的引脚标识代表什么?
stm32·单片机·嵌入式硬件
恒锐丰小吕19 小时前
屹晶微 EG3116 600V高压、2A/2.5A驱动、双高有效输入逻辑的半桥栅极驱动芯片技术解析
嵌入式硬件·硬件工程
Van_captain19 小时前
rn_for_openharmony常用组件_Empty空状态
javascript·开源·harmonyos
Van_Moonlight19 小时前
RN for OpenHarmony 实战 TodoList 项目:底部 Tab 栏
javascript·开源·harmonyos
墨香幽梦客19 小时前
企业IT运维流程标准化:从事件管理到问题闭环的自动化实践
运维·自动化