【单片机毕业设计选题24001】-智能语音控制风扇

一. 系统功能

此设计采用STM32和SU-03T离线语音模块来控制风扇, 主要功能如下:

1. 通过DHT11温湿度模块来采集环境温湿度。

2. 通过SU-03T语音模块来控制风扇启停加减速等。

3. 通过OLED显示系统状态。

4. 可以通过按键控制风扇启停加减速等。

5. 通过蓝牙模块监视系统状态。

6. 通过场效应管模块使用PWM方法控制风扇转速。

其它功能定制

二. 系统功能框图

三. 系统主要功能模块原理图

四. 系统主要功能模块代码

初始化部分:

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
    InitVar();

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  MX_TIM1_Init();
  /* USER CODE BEGIN 2 */
    HAL_Delay(100);
//uart2打开接收中断
    HAL_UART_Receive_IT(&huart2, (uint8_t*)&uart2RecBuff, 1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
    
    InitOled();
    InitOledDisp();
    HAL_Delay(100);
    InitDHT11();

    HAL_Delay(100);
//    TestFlash();
    FlashReadLevel();
  __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwmPulse);

 OLED显示部分:

void InitOledDisp(void)
{
    uint8_t i = 0;

    HAL_Delay(100); 
    OledFill(0x00);     //全屏熄灭
    for(i=0;i<6;i++)
    {
        OledShowCN(16+i*16, 0, i);  //“智能调速风扇”
    }
    OledShowString(0, 2, (uint8_t*)"T:xxxx H:xxxx", OLED_FONT_8X16);  
    OledShowString(0, 4, (uint8_t*)"Fan:Close", OLED_FONT_8X16);
    OledShowString(0, 6, (uint8_t*)"Pulse:xxxx", OLED_FONT_8X16);       
}

 按键检测部分 :

/*********************************************************************************
  * @brief  Scan key board
  * @param  None
  * @retval None
  *********************************************************************************/
void ScanKeyBoard(void)
{
	uint8_t keyVal;
	
	keyVal = CheckKeyVal();
	if(KeyInfo.OldKeyValue!=keyVal)	//first time enter after key changed
	{
		KeyInfo.ReleaseDelayCnt = 0;    //clear key release time count
		if(keyVal!=NO_KEY_PRESSED_DEF)
		{
			KeyInfo.HoldDelayCnt=0;
		}
		KeyInfo.OldKeyValue = keyVal;
	}
	else	
	{
		if(keyVal!=NO_KEY_PRESSED_DEF)    //have key press
		{  
//			if(KeyInfo.HoldDelayCnt<254)
            if(KeyInfo.HoldDelayCnt<1000)
			{
				KeyInfo.HoldDelayCnt++;
			}			
			if(KeyInfo.HoldDelayCnt==SHORT_PRESS_TIME_DEF)	//pressed for a short time
			{
				KeyInfo.NewKeyValueTemp = KeyInfo.OldKeyValue;
			}
		}
		else    //release
		{   
			if(KeyInfo.ReleaseDelayCnt<254)  
				KeyInfo.ReleaseDelayCnt++;
				
			if(KeyInfo.ReleaseDelayCnt==RELEASE_TIME_DEF)
			{
                if(KeyInfo.HoldDelayCnt>=LONG_PRESS_TIME_3S)
                {
                    ;
                }
                else    //短按键
				{
	                KeyInfo.ConfirmKeyValue = KeyInfo.NewKeyValueTemp;
				}
				KeyInfo.HoldDelayCnt = 0;
				KeyInfo.NewKeyValueTemp = NO_KEY_PRESSED_DEF;
			}
		}
	}
}

 系统控制部分:

//更新系统状态
void UpdateSystem(void)
{
    static uint8_t systemCnt = 0;

    systemCnt++;    
    if(systemCnt>=READ_TEMP_INTER)
    {
        systemCnt = 0;
        if(DHT11ReadData()==0)  //DHT11温湿度读取OK
        {
            DispDHT11Val();
        }
        UpdateSU03T();

        printf("T:%02d.%01d  H:%02d.%01d\r\n", DHT11_Data.temp_int, DHT11_Data.temp_deci, DHT11_Data.humi_int, DHT11_Data.humi_deci);
        if(fanLevel==FAN_CLOSE)
        {
            printf("Fan:Close\r\n");   
        }
        else if(fanLevel==FAN_LEVEL1)
        {
            printf("Fan:Level1\r\n");   
        }
        else if(fanLevel==FAN_LEVEL2)
        {
            printf("Fan:Level2\r\n");   
        }
        else if(fanLevel==FAN_LEVEL3)
        {
            printf("Fan:Level3\r\n");   
        } 
        else if(fanLevel==FAN_OPEN)
        {
            printf("Fan:Open\r\n");   
        }        
        printf("Pulse:%04d\r\n", pwmPulse);
    }
    DispFanState();  
}

此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。

资料获取链接

如需资料或硬件制作或方案定制请联系,

视频演示地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机毕业设计-远望创客学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值