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

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

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

(资料分享见文末) 

二、项目简介

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灯模块
  • 加湿器模块
  • 继电器
     

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

#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;	//声明系统状态结构体变量

#define FLASH_START_ADDR	0x0801f000	//写入的起始地址

uint8_t oledPages = 1;	//系统显示页面


int main(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)
		{
			case DISPLAY_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;
					}
					else if ((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;
				
			case SETTINGS_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);	//数据上传至机智云					
	}
}

六、实验效果 

七、资料内容

项目分享

猜你喜欢

转载自blog.csdn.net/qq_44016222/article/details/146112312
今日推荐