目錄

一、視頻展示

二、項目簡介

三、原理圖設計

四、PCB硬件設計

五、程序設計

六、資料分享


一、視頻展示


基於stm32的智能風扇 -視頻分享


二、項目簡介

題目:基於stm32的智能風扇
主控:STM32
硬件
1.DS18b20温度傳感器
2.HC-SR501紅外感應模塊
3.ASR-PRO語音識別芯片
4.BT06藍牙通信模塊
5.0LED顯示屏
功能:
1.温度檢測自動調級,根據温度自動調節風扇速度
2.人體感應功能,人不在的時候自動關風扇。
3.語音控制,可語音控制。
4.藍牙通信,可藍牙控制。
5.温度、風扇檔位顯示。
6.分為手動和自動,手動模式可調速度。自動模式根據上面的要求進行自動判斷。

三、原理圖設計

STM32F0單片機基於Hal庫温控智能風扇_#深度學習

四、PCB硬件設計

STM32F0單片機基於Hal庫温控智能風扇_#單片機_02

STM32F0單片機基於Hal庫温控智能風扇_#深度學習_03

五、程序設計

#include "stm32f10x.h"                  // 設備頭文件
#include "delay.h"                      // 延遲函數庫
#include "lcd.h"                        // LCD顯示庫
#include "dht11.h"                      // DHT11傳感器庫
#include "IOput.h"                      // 輸入輸出控制庫
#include "usart.h"                      // 串口通信庫
#include "adc.h"                        // ADC轉換庫
#include "MOTOR.h"                      // 電機控制庫
#include "timer.h"                      // 定時器庫
#include "ds18b20.h"
#include "pwm.h"


u8 on_flag, speed, real_speed, cesu_flag, count, speed_flag,mode_flag=0,count12=3,ad_flag=1; 
u8 show_flag, show1_flag,mode_falg=0;               
float yali, count1, count2,mq2,mq135; 
u8 max_TY = 60,dec_TY = 60;

extern u8 res,ress;
void wifi()
 {
		if(res=='a')
		{
			res=0;
			set_flag=1;
		}
		else if(res=='b')
		{
			res=0;
			add_flag=1;
		}
		else if(res=='c')
		{
			res=0;
			dec_flag=1;
		}
		else if(res=='d')
		{
			res=0;
			modes_flag=1;
		}
 }
 
int main (void)
{
    delay_init();                       // 初始化延時函數
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 設置中斷優先級組
    
    OLED_Init();                        // 初始化OLED顯示屏
    delay_ms(1);                        // 延時1ms
    OLED_Clear();                       // 清屏
    output_init();                      // 初始化輸出
    input_init();                       // 初始化輸入
    Usart1_Init(9600);                  // 初始化串口1,波特率9600
		Usart2_Init(9600);
    motor_init();                       // 初始化電機
    TIM_PWM_Init(71,9999);               // 初始化PWM定時器、
//		TIM_PWM_Init1(71,9999);
    TIM2_Int_Init(71, 9999);            // 初始化定時器2
    DS18B20_Init();
    while(1)
    {
			
//			TIM_SetCompare3(TIM3,12);
			if(ress==0x01)
			{
				mode_flag=0;
				real_speed=1;
				ress=0;
			}
			else if(ress==0x02)
			{
				mode_flag=0;
				real_speed=2;
				ress=0;
			}
			else if(ress==0x03)
			{
				mode_flag=0;
				real_speed=3;
				ress=0;
			}
			else if(ress==0x04)
			{
				
				mode_flag=1;
				ress=0;
			}
			else if(ress==0x05)
			{
				mode_flag=0;
				ress=0;
			}
			else if(ress==0x06)
			{
				mode_flag=0;
				real_speed=0;
				ress=0;
			}
			wifi();
			temp_get();
        count++;
			
        key_scan(1, 0, 0,0);              // 掃描按鍵
   
				OLED_ShowCH(0, 0, "    智能風扇    ");
				OLED_ShowCH(0, 2, "温度:");
				OLED_ShowNum(48, 2, wd, 2, 16);		
				OLED_ShowCH(0, 4, "速度:");
					
				
				if(set_flag==1)
				{
					set_flag=0;
					mode_flag++;
					if(mode_flag>=2)
						mode_flag=0;
				}
				
				if(mode_flag==1)
				{
					OLED_ShowCH(96, 4, "自動");
					if(ren==1)
					{
						OLED_ShowCH(96, 6, "有人");
						if(wd>=10 && wd<20)
						{
							real_speed=1;
						}
						else if(wd>=20 && wd<30)
						{
							real_speed=2;
						}
						else if(wd>=30 && wd<40)
						{
							real_speed=3;
						}
						else
						{
							real_speed=0;
						}
					}
					else
					{
						OLED_ShowCH(96, 6, "無人");
						real_speed=0;
					}
				}
				else
				{
					OLED_ShowCH(96, 4, "手動");
					if(add_flag==1)
					{
						add_flag=0;
						real_speed++;
						if(real_speed>=4)
							real_speed=0;
					}
					if(dec_flag==1)
					{
						dec_flag=0;
						if(real_speed>=1)
							real_speed--;
					}
				}
				
				if(real_speed==0)
				{
					speed=0;
					OLED_ShowCH(40, 4, "關閉");
				}
				else if(real_speed==1)
				{
					speed=15;
					OLED_ShowCH(40, 4, "低速");
				}
				else if(real_speed==2)
				{
					speed=55;
					OLED_ShowCH(40, 4, "中速");
				}
				else if(real_speed==3)
				{
					speed=85;
					OLED_ShowCH(40, 4, "高速");
				}
				TIM_SetCompare3(TIM3,speed);
//				
//				if(wd>=max_TY)
//				{
//					speed=0;
//					go(0);
//					OLED_ShowCH(96, 6, "異常");
//				}
//				else
//				{
//					if(mode_flag==1 && real_speed!=0)
//					{
//						TIM_SetCompare3(TIM3,count12);
//					}
//					go(speed);
//					OLED_ShowCH(96, 6, "正常");
//				}
//				
//			OLED_ShowCH(0, 6, "閾值:");
//			OLED_ShowNum(40, 6, max_TY, 2, 16);

//			if(dec_flag == 1)
//			{
//					dec_flag = 0;
//					max_TY ++;
//			}
//			if(modes_flag == 1)
//			{
//					modes_flag = 0;
//					max_TY --;
//			}
//			if(max_TY >= 100 || max_TY <= 0)
//			{
//					max_TY = 0;
//			}

        

            
            
           
        
        
    }
}