目錄
一、視頻展示
二、項目簡介
三、原理圖設計
四、PCB硬件設計
五、程序設計
六、資料分享
一、視頻展示
基於stm32的智能風扇 -視頻分享
二、項目簡介
題目:基於stm32的智能風扇
主控:STM32
硬件
1.DS18b20温度傳感器
2.HC-SR501紅外感應模塊
3.ASR-PRO語音識別芯片
4.BT06藍牙通信模塊
5.0LED顯示屏
功能:
1.温度檢測自動調級,根據温度自動調節風扇速度
2.人體感應功能,人不在的時候自動關風扇。
3.語音控制,可語音控制。
4.藍牙通信,可藍牙控制。
5.温度、風扇檔位顯示。
6.分為手動和自動,手動模式可調速度。自動模式根據上面的要求進行自動判斷。
三、原理圖設計
四、PCB硬件設計
五、程序設計
#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;
// }
}
}