一. 系统功能
此设计采用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 countif(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();  
}提供一整套软硬件方案, 有需要请联系QQ: 277&9_43(652(请去掉特殊符号).