一. 系统功能
此设计采用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(请去掉特殊符号).