STM32项目分享:智能家居语音系统(ASRPRO版)

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1zVwLeTEDx/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末)

01

项目简介

1.功能详解

STM32智能家居语音系统(ASRPRO版)

功能如下:

  1. 基于STM32F103C8T6主控芯片

  2. 检测功能:系统检测周围 温湿度数据、烟雾浓度、光照强度

  3. 显示功能:将检测到的数据显示在oled屏幕上

  4. 手动模式:按键控制LED灯、风扇、窗帘、加湿器的开关

  5. 自动模式:温湿度、烟雾、光照阈值控制灯、窗帘、风扇、加湿器开关以及报警,

  6. 语音控制:系统也可以通过语音指令控制,LED灯、风扇、窗帘(步进电机模拟)、加湿器的运行。

  7. PWM调光/速:系统中的LED灯和风扇都支持PWM调节

  8. 阈值调节:系统传感器阈值大小可以通过按键自行设置调节

  9. 接入云平台:系统通过ESP8266 WIFI模块连接网络,接入机智云服务器

  10. 远程控制:可以通过APP查看传感器数据,以及远程控制

2.材料清单

  • STM32F103C8T6单片机

  • OLED 屏幕

  • DHT11温湿度传感器

  • MQ-2烟雾传感器

  • BH1750光照传感器

  • ESP8266-01S(WIFI模块)

  • ASRPRO语音模块

  • 有源蜂鸣器

  • 风扇模块

  • 大功率LED灯模块

  • 加湿器模块

  • 继电器

02

原理图设计

03

PCB硬件设计

PCB图

04

程序设计

#include"stm32f10x.h"        // Device header#include"oled.h"#include"adcx.h"#include"sensormodules.h"#include"dht11.h"#include"key.h"#include"tim2.h"#include"tim3.h"#include"flash.h"#include"motor.h"#include"pwm.h"#include"usart.h"#include"iwdg.h"#include"relay.h"#include"usart3.h"	#include"BH1750.h"#include"fan.h"SensorModules sensorData;			//声明传感器模块的结构体变量SensorThresholdValue Sensorthreshold;	//声明传感器阈值结构体变量SystemState	systemState;	//声明系统状态结构体变量#defineFLASH_START_ADDR	0x0801f000	//写入的起始地址uint8_toledPages =1;	//系统显示页面intmain(void){	OLED_Init();	DHT11_Init();	Key_Init();	MOTOR_Init();	Buzzer_Init();	Relay_Init();	Init_BH1750();	LED_Init();	Fan_Init();	ADCX_Init();	Timer2_Init(9,14398);	Uart2_Init(9600);	Uart1_Init(115200);	IWDG_Init();	Uart3_Init();	PWM_Init(100-1,720-1);	Sensorthreshold.tempValue =FLASH_R(FLASH_START_ADDR);	//从指定页的地址读FLASH	Sensorthreshold.humiValue =FLASH_R(FLASH_START_ADDR+2);	//从指定页的地址读FLASH	Sensorthreshold.luxValue =FLASH_R(FLASH_START_ADDR+4);	//从指定页的地址读FLASH	Sensorthreshold.smokeValue =FLASH_R(FLASH_START_ADDR+6);	//从指定页的地址读FLASH	Sensorthreshold.flameValue =FLASH_R(FLASH_START_ADDR+8);	//从指定页的地址读FLASH	GENERAL_TIM_Init();	userInit();		//完成机智云初始赋值	gizwitsInit();	//开辟一个环形缓冲区	gizwitsSetMode(WIFI_AIRLINK_MODE);	Delay_ms(1000);	while(1)	{		IWDG_ReloadCounter();	//使能重装载寄存器计数		SensorScan();	//获取传感器数据		switch(oledPages)		{			caseDISPLAY_PAGE1:				OLED_Menu1();	//显示主页面1固定信息				SensorDataDisplay1();//显示传感器1数据				/* 手动模式下按键控制执行器的运行 */				if(!systemState.mode)				{					LED_PWM_KEY();	//LED按键控制					Fan_PWM_KEY();	//风扇按键控制					/* 按键控制步进电机的运行 */					if(KeyNum == KEY_4 && systemState.motorCommand.motorLocation == motorLocation_OFF)					{						KeyNum =0;						systemState.motorCommand.motorAnterogradeFlag =1;					}					elseif((KeyNum == KEY_4 && systemState.motorCommand.motorLocation == motorLocation_ON))					{						KeyNum =0;						systemState.motorCommand.motorReversalFlag =1;					}				}				/*按键按下时切换模式*/				if(KeyNum == KEY_1)				{					KeyNum =0;					systemState.mode = !systemState.mode;					if(!systemState.mode)					{						Buzzer_OFF();						Relay_OFF();					}				}				/*按键按下时进入阈值设计界面*/				if(KeyNum == KEY_Long1)				{					KeyNum =0;					oledPages = SETTINGS_PAGE;					OLED_Clear();				}				Asrpro();	//语音控制				MotorOperation();	//步进电机控制				break;			caseSETTINGS_PAGE:				OLED_Option(SetSelection());	//实现阈值设置页面的选择功能				OLED_SetInterfacevoid();	//显示阈值设置界面1的固定内容				ThresholdModification(SetSelection());	//实现阈值调节功能					//判断是否退出阈值设置界面				if(KeyNum == KEY_2)				{					KeyNum =0;					oledPages = DISPLAY_PAGE1;	//跳转到主界面					OLED_Clear();	//清屏					//存储修改的传感器阈值至flash内						FLASH_W(FLASH_START_ADDR, Sensorthreshold.tempValue,Sensorthreshold.humiValue,					Sensorthreshold.luxValue, Sensorthreshold.smokeValue, Sensorthreshold.flameValue);				}				break;			default:break;		}		userHandle();	//更新机智云数据点变量存储的值		gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云						}}

05

实验效果

资料分享(百度网盘)

https://pan.baidu.com/s/1zHsarNp6l3Myh9laqpiwWA?pwd=qdcb 提取码: qdcb

(或扫描下方二维码获取)
实物购买扫描下方二维码