智能風扇 一、任務 設計并制作一個基于MCS51系列單片機控制的小風扇。 二、要求 1.基本部分: (1)按鈕開關可以控制風扇的啟停及調速; (2)自動隨溫度的高低調節風扇的風速。
2.擴展部分:
(2)有人在附近,且溫度較高時,自動開啟風扇。
設計思路
1.本設計采用機械開關控制風扇啟停,采用PWM加減調速按鍵控制調速。
2.本設計采用DS18B20獲取溫度并顯示在1602屏幕上,并把溫度值賦給PWM參數。
3.本設計采用熱釋電傳感器檢測人體。
設計圖
原理圖.png (86.76 KB, 下載次數: 85)
下載附件
2019-10-18 12:05 上傳
實物圖
IMG_20191018_120812.jpg (1.08 MB, 下載次數: 80)
下載附件
2019-10-18 12:13 上傳
IMG_20191018_120749.jpg (1.53 MB, 下載次數: 104)
下載附件
2019-10-18 12:12 上傳
IMG_20191018_120715.jpg (1.47 MB, 下載次數: 71)
下載附件
2019-10-18 12:12 上傳
IMG_20191018_120657.jpg (1.37 MB, 下載次數: 90)
下載附件
2019-10-18 12:10 上傳
熱釋電傳感器
接口.png (837.05 KB, 下載次數: 74)
下載附件
2019-10-18 12:19 上傳
電路.png (46.93 KB, 下載次數: 93)
下載附件
2019-10-18 12:42 上傳
主程序
#include<reg52.h> //注:本題所用為5V電機(實際可以為l298n可以輸出的30多V)
#include"18b20.h" //溫度顯示有問題————解決方法為1.提高晶振頻率到24mhZ之前運行速度較慢(提高cpu運行速度即可)。
#include"1602.h" //temp最好變成全局變量
#define uint unsigned int //現在是40攝氏度以上風速達到最大,0-40攝氏度自動調速的風扇.
#define uchar unsigned char //關于紅外控制————可以設置按下按鍵后,某個值加一,if判斷為(1or2or3or4后執行某種操作互不沖突)
sbit in1=P1^0; //L298N輸入1
sbit in2=P1^1; //L298N輸入2
sbit ena=P1^2; //L298N PWM輸入
sbit led1=P1^3; //減速到最低后紅燈亮
sbit led2=P1^4; //加速到最高后綠燈亮
sbit s1=P1^5; //加速按鍵
sbit s2=P1^6; //減速按鍵
sbit s3=P1^7; //按鍵調速總開關----一直按下后才可以加減速,防止與自動溫度控制沖突
sbit renti=P3^6; //人體識別輸入
sbit s4=P0^4; //溫度自動控制總開關
uint pwm,sum; //待比較數
void LcdDisplay(int temp); //lcd顯示
void delay(uint t); //延時聲明
void anjian(); //按鍵處理函數
void ledone(); //減速到最低后紅燈閃
void ledtwo(); //加速到最高后綠燈閃
void main()
{
initialize(); //1602初始化
EA=1; //總中斷
ET0=1; //T0開
TMOD=0X01; //工作方式16位定時
TH0=(65536-400)/256;
TL0=(65536-400)%256; //200us
TR0=1; //開始定時
sum=0;
pwm=0; //此處不可更改 ———— 解決了之前按減速時會加速的問題
while(1)
{
renti=1; //51讀引腳時先把那個引腳拉高
delay(10);
LcdDisplay(Ds18b20ReadTemp()); //溫度顯示及自動控制風速
anjian(); //按鍵速度控制函數
}
}
void anjian() //按鍵處理函數
{
if(s2==0&s3==0&s4!=0) //減速
{
delay(10);
if(s2==0&s3==0&s4!=0)
{
in1=0; //正轉條件
in2=1;
if(pwm>0)
{
pwm--;
delay(10000);//100ms
}
else
{
ledone();
}
}
}
if(s1==0&s3==0&s4!=0) //加速
{
delay(10);
if(s1==0&s3==0&s4!=0)
{
in1=0; //正轉條件
in2=1;
if(pwm<41)
{
pwm++;
delay(10000); //100ms
}
else
{
ledtwo();
}
}
}
}
void delay(uint t) //延時函數
{
while(t--);
}
void ledone() //減速到最低后紅燈閃
{
led1=0;
delay(10000);
led1=1;
delay(10000);
}
void ledtwo() //加速到最高后綠燈閃
{
led2=0;
delay(10000);
led2=1;
delay(10000);
}
void time0() interrupt 1 //定時器0
{
TR0=0;
TH0=(65536-400)/256;
TL0=(65536-400)%256; //200s
sum++;
if(sum>40)
{
sum=0; //如果num的值大于40,歸0
}
if(sum<pwm) //注:此處不可更改---否則會出現減速或加速加減不到最大或最小的情況
{
ena=1; //pwm信號
}
else
{
ena=0; //pwm占空比
}
TR0=1; //起動定時器0
}
void LcdDisplay(int temp) //lcd顯示
{
unsigned char datas[] = {0,0,0,0,0}; //定義數組
float tp;
float xujia; //自動溫控變量
if(temp>0) //當溫度為負值時
{
Writecommanda(0x80); //寫地址 80表示初始地址
Writedata('+'); //顯示正
tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
//如果溫度是正的那么,那么正數的原碼就是補碼它本身
xujia=tp*0.0625*1+0.5;
temp=tp*0.0625*100+0.5;
//留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
//后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算加上0.5,還是在小數點后面。
if(renti==1&xujia>30&s1!=0&s2!=0&s3!=0&s4!=0)//人體檢測&溫度大于30度時風扇轉程序其中一條不滿足風扇不轉
{
in1=0; //正轉條件
in2=1;
pwm=40;
delay(10000);
}
else if(renti==0&xujia>30&s1!=0&s2!=0&s3!=0&s4!=0)
{
in1=0; //正轉條件
in2=1;
pwm=0;
delay(10000);
}
else if(renti==1&xujia<30&s1!=0&s2!=0&s3!=0&s4!=0)
{
in1=0; //正轉條件
in2=1;
pwm=0;
delay(10000);
}
if(s4==0&s3!=0) //溫度檢測風速自動跟隨程序
{
if(s4==0&s3!=0)
{
if(xujia>pwm) //加速 溫度提高1攝氏度————轉速提高約100轉
{
in1=0; //正轉條件
in2=1;
pwm++;
delay(10000); //還可以加一個按鍵控制&s4==0
}
if(xujia<pwm) //減速
{
in1=0; //正轉條件
in2=1;
pwm--;
delay(10000); //還可以加一個按鍵控制&s4==0
}
}
}
}
datas[0] = temp / 10000;
datas[1] = temp % 10000 / 1000;
datas[2] = temp % 1000 / 100;
datas[3] = temp % 100 / 10;
datas[4] = temp % 10;
Writecommanda(0x81); //寫地址 80表示初始地址
Writedata('0'+datas[0]); //百位
Writecommanda(0x82); //寫地址 80表示初始地址
Writedata('0'+datas[1]); //十位
Writecommanda(0x83); //寫地址 80表示初始地址
Writedata('0'+datas[2]); //個位
Writecommanda(0x84); //寫地址 80表示初始地址
Writedata('.'); //顯示 ‘.’
Writecommanda(0x85); //寫地址 80表示初始地址
Writedata('0'+datas[3]); //顯示小數點
Writecommanda(0x86); //寫地址 80表示初始地址
Writedata('0'+datas[4]); //顯示小數點
}

全部資料51hei下載地址:
完整版HC-SR501人體感應模塊.zip
(696.46 KB, 下載次數: 94)
2019-10-18 12:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
程序.zip
(44.5 KB, 下載次數: 97)
2019-10-18 12:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
仿真不知道為什么有錯,求大神指導.7z
(26.69 KB, 下載次數: 86)
2021-3-22 01:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|