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