51单片机的家用风扇控制器设计 电路图 源码
基于51单片机的 电风扇控制系统

oe=1;
dat=P1;
oe=0;
if(dat>=wxin)
{wxout=0; TR0=0;}
else TR0=1; //温度大于阈值 报警
}
}
{ if(yt_cnt>59)yt_cnt=0;
if(yt_cnt<30)yt_out=1;
else yt_out=0;
}
else yt_cnt=0;
}
main()
{unsig
IE= 0x82;
TH0= (65536-1000)/256;
pwm_h=3;
ledbuf[3]=1;
break;
case key_cf: //常风3:1
pwm_h=9;ledbuf[3]=2;
break;
case key_smf: //睡眠风1:5
pwm_h=2;
ledbuf[3]=3;
break;
case key_ds: //定时
if(djs_time%10>4){djs_time=((djs_time/10)+2)*10;}
else djs_time=((djs_time/10)+1)*10;
break;
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit pwm_out=P2^6; //电扇 驱动信号
sbit yt_out=P2^7; //摇头驱动信号
sbit bit1=P2^0; // 数码管位选 因为端口 复用 所以 位选单独使用位
51单片机多功能红外遥控电风扇(自然风+阵风+多档风速+定时)

51单片机多功能红外遥控电风扇(自然风+阵风+多档风速+定时)#include "AT89x051.H"#define uchar unsigned char#define uint unsigned int#define b1 0xe200#define b2 0xe210#define b3 0xe208#define b4 0xe218#define b5 0xe204#define b6 0xe214#define b7 0xe20c //阵风#define b8 0xe21c //自然风#define b9 0xe280 //自动档#define on_off 0xe240 //电源开关#define ch_a 0xe250 //加档#define ch_s oxe248 //减档#define time 0xe2e8 //定时#define louver 0xe24c //转页#define count_num 500 //显示次数#define time1_num 18000#define time2_num 100#define bell P3_4#define c_f 0xd4 //"F"#define c_h 0xce //"H"#define c_g 0x81 //"="uint time1=time1_num; //18000*100*2ms=1huchar time2=time2_num;uint count=count_num; //显示次数uchar sort=3; //显示offuchar dis_bit=0; //显示的位uchar code_length=16;uchar data dis[4]={0x02,0x02,0x00,0xff}; //显示数据区uchar temperature;uint code_t=0;uchar code1=0;uchar code2=0;bit bdata code_start=0; //代码起始标志bit bdata button=0; //无键按下bit bdata i_flag=0; // 有无中断标志bit bdata t_flag=0;//测温标志bit bdata bt=0; //判断是否是定时键bit bdata off=0; //为0无定时uchar code TAB[11]={0x5f,0x0a,0x9d,0x9b,0xca,0xd3,0xd7,0x5a,0xdf,0xdb,0x 75};void timer_0(void);void dis_t(void); //温度显示void dis_s(void); //档位显示void dis_h(void); //时间void dis_off(void); //关机显示void delay(uint t); //延时uchar d_code(uint t); //解码uchar begin=0; //开始补偿void c_code(void); //键号转换void off_time(void); //定时关void measure_temperature(void);void key_time(void); //定时按钮void sort_key(void); //风类按钮void mov_p1(uchar t0,t1,t2); //显示void button_process(void); //按键处理//********定时关机*********void off_time(void){if(off==1){if(time1--==0){time2--;time1=time1_num;}if(time2==0){dis[3]=dis[3]-1;time2=time2_num;}if(dis[3]==0){code_t=on_off; //关机c_code();}}}//********定时器0中断********* void timer0() interrupt 1 using 2 {off_time();if(dis_bit==0&&t_flag==0){key_time();sort_key();}switch(sort){case 0:if(count!=0){mov_p1(dis[0],dis[1],TAB[10]); //显示温度count--;}break;case 1:if(count!=0){mov_p1(c_f,c_g,TAB[dis[2]]); //显示档位count--;}break;case 2:if(count!=0){dis_h(); //显示时间count--;}break;case 3:mov_p1(0x5f,c_f,c_f);//显示关机default:break;}timer_0();if(count==0) //轮流显示{P3_0=P3_1=P3_5=1;if(i_flag==0&&t_flag==0) measure_temperature();count=count_num;sort=(sort&0x03)+1;if(sort>=3)sort=0; //完成一轮显示}}//***********定时按钮************ void key_time(void){bit i=P1_2;P1_2=1;if(P1_2==0){delay(50);if(P1_2==0) //确认有按键{bell=0;delay(100);bell=1;while(P1_2==0){;}if(dis[3]==0xff){dis[3]=1;off=0; //取反后为1,定时}else{if(dis[3]<9){dis[3]=dis[3]+1;off=0; //取反后为1,定时}elseoff=1; //取反后为0,取消定时}sort=2;code_t=time; //显示时间c_code();//bt=0; //恢复}}P1_2=i;i_flag=0; //恢复执行其它任务}//***********换档按钮************ void sort_key(void){bit i=P1_1;P1_1=1;if(P1_1==0){delay(50);if(P1_1==0){button=1;bell=0;delay(200);bell=1;while(P1_1==0){;}if(dis[2]<9){dis[2]=dis[2]+1;code2=dis[2];}else{dis[2]=0;code2=10; //power off}delay(100);sort=1;count=5000;//TF0=1;}}P1_1=i;i_flag=0; //恢复执行其它任务}//********定时器1中断测温************ void timer1() interrupt 3 using 3{uint temp;TR0=0; //计数停TR1=0; //定时停temp=TH0*256+TL0; //取温度值temperature=(7000-temp)/11; //计算温度//if(dis[2]!=0)// temperature--; //工作时补偿1度/*if(F0==0&&begin<=10) //开始温度加3度temperature+=3;if(F0==0&&begin<=60&&begin>10) temperature+=2;if(F0==0&&begin<=150&&begin>60) temperature+=1;*/dis[0]=TAB[temperature/10];dis[1]=TAB[temperature%10];IE0=0;t_flag=0;timer_0();EX0=1;}//**********判断代码************ uchar d_code(uint t){if(t<=0x220&&t>=0x190)return 0;else{if(t<=0x430&&t>=0x390)return 1;elsereturn 0xff;}}//***********键号转换************ void c_code(void){bit bdata i=0;switch(code_t){case b1:code1=1;break;case b2:code1=2;break;case b3:code1=3;break;case b4:code1=4;break;case b5:code1=5;break;case b6:code1=6;break;case b7:code1=7;break;case b8:code1=8;break;case b9:code1=9;break;case on_off:code1=10; //关机dis[3]=0xff;//#####标志复位############ button=0; //无键按下i_flag=0; // 无中断标志bt=0; //无定时键按下off=0; //无定时time1=time1_num; //定时初值复位time2=time2_num;count=count_num; //显示次数break;case time:off=~off;if(off==0)dis[3]=0xff; //取消定时i=1;bt=1;count=5000; //延长显示sort=2; //显示时间TF0=1;break;case louver:P3_3=~P3_3;code1=code2;break;default:code1=0;break;}if(bt==1&&i==0) //装载代码{if(code1<9) //定时最大9h {dis[3]=code1;bt=0;}}elseif(i==0){code2=code1;count=5000; //延长显示if(code1==10){dis[2]=0; //F=0sort=3; //显示关机}else{dis[2]=code1;sort=1; //显示风类}TF0=1;}}//*********** 接收代码中断 ************void receive_code() interrupt 0 using 1{uint temp,i;ET0=0;i_flag=1; //暂停其它任务if(TR1==0){TR1=0;TMOD=0x11;TH1=TL1=0;TR1=code_start=1;}else{TR1=code_start=0;temp=TH1*256+TL1;if((d_code(temp)==0||d_code(temp)==1)&&code_length!=0) {TH1=TL1=0;TR1=code_start=1;code_t=(code_t<<1)+d_code(temp);code_length--;}else{if(code_length==0&&((code_t&0xff00)==0xe200)) //除掉误码{code_length=16;bell=0; //正确收到,响声提示c_code(); //转换代码for(i=0;i<6000;i++){EX0=0;P3_0=P3_1=P3_5=1;if(i>800)bell=1;IE0=0;if(P3_2==0)i--;button=1; //有按键需要处理}i_flag=0; //恢复执行其它任务}else //误码{code_length=16;for(i=0;i<6000;i++){IE0=0;if(P3_2==0)i--;i_flag=0; //恢复执行其它任务}}timer_0();EX0=1;}}}//***********显示代码送P1口************ void mov_p1(uchar t0,t1,t2){switch(dis_bit){case 0:P1=t0;P3_1=P3_5=1;P3_0=0;dis_bit=1;break;case 1:P1=t1;P3_0=P3_5=1;P3_1=0;dis_bit=2;break;P1=t2;P3_1=P3_0=1;P3_5=0;dis_bit=0;break;}}//***********显示定时时间************ void dis_h(void){switch(dis_bit){case 0:P1=c_h; //"H"P3_1=P3_5=1;P3_0=0;dis_bit=1;break;case 1:P1=c_g; //"="P3_0=P3_5=1;P3_1=0;dis_bit=2;break;case 2:if(dis[3]>10) //无定时P1=TAB[0]; //显示H=0elseP1=TAB[dis[3]];P3_1=P3_0=1;P3_5=0;dis_bit=0;break;}}//********定时器0************ void timer_0(void){TMOD=0x01; //T0定时方式1 TR0=0;TH0=0xfc;TL0=0x55; //2ms ET0=1;TR0=1;}//*********** 延时 ************ void delay(uint t){uint i,j;for(i=0;iif(button==0)for(j=0;j<10;j++);}//*********** 测温度 ************void measure_temperature(void){t_flag=1;ET1=1;EX0=0;ET0=0;TMOD=0x15; //T0计数方式1,T1定时方式1 TH1=0x3c;TL1=0xb0; //置初值100msTH0=0x00;TL0=0x00; //清零TR0=1; //计数开始TR1=1;}//***********风速 ************void s1(void){P3_7=0;}void s2(void){P3_7=0;delay(230);P3_7=1;delay(25);}void s3(void){P3_7=0;delay(180); P3_7=1; delay(40);}void s4(void) {P3_7=0; delay(130); P3_7=1; delay(40);}void s5(void) {P3_7=0; delay(90);P3_7=1; delay(40);}void s6(void) {P3_7=0; delay(50);P3_7=1; delay(50);}void gust(void) //阵风{uchar i,j;if(button==1) //中止任务j=255;elsej=0;//P3_7=0;//delay(5000);for(i=j;i<50;i++)s6();P3_7=0;delay(5000);for(i=j;i<25;i++)s2();for(i=j;i<35;i++)s3();for(i=j;i<25;i++)s5();delay(6000);}void natural(void) //自然风{uchar i;uchar code *p; //随机数for(i=0;i<100;i++){if(button==0) //有键按下,中止当前任务{P3_7=0;delay((*p++)*8); //放大P3_7=1;if(*p<10)delay(7000); //低速档时间补偿elsedelay(300);}}}void automation(void) //自动档{if(temperature<=29)s6();elseif(temperature<=30)gust();elseif(temperature==31)s5();elseif(temperature==32)s4();elseif(temperature<=33)s3();if(temperature==34)s2();elses1();}//***********按键处理 ************ void button_process(void){button=0;switch(code2){case 1:s1();break;case 2:s2();break;case 3:s3();break;case 4:s4();break;case 5:s5();break;case 6:s6();case 7:gust();break;case 8:natural();break;case 9:automation();break;case 10:P3_7=1; //关风扇P3_3=1; //关转页break;default:break;}}//********************************** //***********主程序开始 ************ //**********************************void main(void){EA=1;IT0=1; //边沿触发EX0=1; //外部中断0允许measure_temperature();delay(1000);timer_0();while(1){if(F0==0&&begin<255) begin++;elseF0=1;button_process();}}。
基于51单片机的智能温控风扇系统的设计

基于51单片机的智能温控风扇系统的设计题目:基于51单片机的智能温控风扇系统的设计一、需求分析在炎热的夏天人们常用电风扇来降温,但传统电风扇多采用机械方式进行控制,存在功能单一,需要手动换挡等问题。
随着科技的发展和人们生活水平的提高,家用电器产品趋向于自动化、智能化、环保化和人性化,使得智能电风扇得以逐渐走进了人们的生活中。
智能温控风扇可以根据环境温度自动调节风扇的启停与转速,在实际生活的使用中,温控风扇不仅可以节省宝贵的电资源,也大大方便了人们的生活。
二、系统总体设计1、硬件本系统由集成温度传感器、单片机、LED数码管、及一些其他外围器件组成。
使用89C52单片机编程控制,通过修改程序可方便实现系统升级。
系统的框图结构如下:图1-1硬件系统框图其中,单片机为STC89C52,这个芯片与我开发板芯片相同,方便拷进去程序。
晶振电路和复位电路为单片机最小系统通用设置,温度采集电路,使用的是DS18B20芯片,数码管使用的是4位共阳数码管,风扇驱动芯片使用的是L298N,按键为按钮按键,指示灯为发光二级管。
2、软件要实现根据当前温度实时的控制风扇的状态,需要在程序中不时的判断当前温度值是否超过设定的动作温度值范围。
由于单片机的工作频率高达12MHz,在执行程序时不断将当前温度和设定动作温度进行比较判断,当超过设定温度值范围时及时的转去执行超温处理和欠温处理子程序,控制风扇实时的切换到关闭、低速、高速三个状态。
显示驱动程序以查七段码取得各数码管应显数字,逐位扫描显示。
主程序流程图如图4-1所示。
图1-2软件系统框图这是该系统主程序的运行流程,当运行时,程序首先初始化,然后调用DS18B20初始化函数,然后调用DS18B20温度转换函数,接着调用温度读取函数,到此,室内温度已经读取,调用按键扫描函数这里利用它设置温度上下限,然后就是调用数码管显示函数,显示温度,之后调用温度处理函数,再调用风扇控制函数使风扇转动。
基于51单片机的温控风扇设计

基于51单片机的温控风扇设计一、引言风扇是家庭和办公室中常见的电器产品,用于调节室内温度和空气流通。
而随着科技的发展,人们对风扇的功能和性能也提出了更高的要求。
本文将介绍一种基于51单片机的温控风扇设计方案,通过温度传感器和单片机控制,实现智能温控风扇的设计。
二、设计方案1. 硬件设计本设计方案采用51单片机作为控制核心,温度传感器作为温度检测模块,风扇作为输出执行模块。
51单片机可以选择常见的STC89C52,温度传感器可以选择DS18B20,风扇可以选择直流风扇或交流风扇。
2. 软件设计软件设计包括温度检测、温度控制和风扇控制三个部分。
通过程序控制单片机对温度传感器进行采集,再根据采集到的温度数值进行判断,最后控制风扇的转速来达到温控目的。
三、电路连接1. 连接51单片机和温度传感器51单片机的P1口接DS18B20的数据线,P1口上拉电阻连接VCC,GND连接地,即可完成单片机和温度传感器的连接。
2. 连接风扇通过晶闸管调速电路或者直接控制风扇的开关电路来控制风扇的转速。
通过设置不同的电压或者电流来控制风扇的转速,从而实现温控风扇的设计。
四、软件设计1. 温度检测通过单片机的程序控制,对温度传感器进行采集,获取室内温度的实时数据。
2. 温度控制将获取到的温度值与设定的温度阈值进行比较,通过程序控制来实现温度的控制。
3. 风扇控制根据温度控制的结果,通过单片机控制风扇的转速,从而实现室内温度的调节。
六、总结本文介绍了一种基于51单片机的温控风扇设计方案,通过硬件和软件的设计,实现了智能温控风扇的设计。
这种设计方案可以广泛应用于家庭和办公环境,提高了风扇的智能化程度,为人们提供了更加舒适和便利的生活体验。
该设计方案也为单片机爱好者提供了一个实用的项目案例,帮助他们在学习和实践中提高自己的能力。
希望本文对读者有所帮助。
基于51单片机的温控风扇毕业设计

基于51单片机的温控风扇毕业设计温控风扇基于51单片机的毕业设计一、引言随着科技的不断进步,人们对于生活品质的要求也越来越高。
在夏季高温天气中,风扇成为了人们不可或缺的家用电器。
然而,传统的风扇常常不能够根据环境温度自动调节风速,给人们带来了一定的不便。
因此,设计一个基于51单片机的温控风扇成为了一项有意义的毕业设计。
二、设计目标本设计的目标是实现一个自动调节风速的温控风扇系统,通过测量周围环境的温度来调节风扇的风速,使风扇在不同温度下达到最佳工作效果,提高舒适度和节能效果。
三、硬件设计1.51单片机:采用AT89S52单片机作为主控制器,该单片机具有较强的性能和丰富的外设资源,能够满足本设计的需求。
2.温度传感器:采用DS18B20数字温度传感器,具有高精度和简单的接口特点。
3.风扇控制电路:通过三极管和可变电阻来控制风扇的转速,根据温度传感器的输出值来调节电阻的阻值,从而实现风扇的风速调节。
四、软件设计1.硬件初始化:包括对温度传感器和风扇控制电路的初始化设置。
2.温度检测:通过DS18B20传感器读取环境温度的值,并将其转换为数字量。
3.风速控制:根据不同的温度值,通过控制电阻的阻值来调整风扇的风速,从而实现风速的自动调节。
4.显示界面:通过LCD显示器将当前温度值和风速等信息显示出来,方便用户了解当前状态。
五、系统测试及结果分析经过对系统的调试和测试,可以发现该温控风扇系统能够根据环境温度自动调节风速。
当环境温度较低时,风扇转速较低,从而降低能耗和噪音;当环境温度较高时,风扇转速会自动提高,以提供更好的散热效果。
六、结论通过对基于51单片机的温控风扇系统的设计和测试,可以得到以下结论:1.该系统能够根据环境温度自动调节风速,提高舒适度和节能效果。
2.通过LCD显示界面,用户可以方便地了解当前温度和风速等信息。
3.本设计的目标已得到满足,具备一定的实用和推广价值。
七、展望在未来的研究中,可以进一步优化该温控风扇系统,例如添加遥控功能、改进风扇控制电路的效率等,以提高用户体验和系统的整体性能。
基于51单片机的智能温控风扇设计各部块的设计

基于51单片机的智能温控风扇设计各部块的设计智能温控风扇是一种能够自动根据温度变化调节风扇转速的风扇,其应用广泛,如家庭、办公室、工业生产等。
本文主要介绍基于51单片机实现智能温控风扇的各部分设计。
一、传感器模块设计温度传感器是实现智能控制的重要模块。
常用的温度传感器有NTC、PTC、热电偶、DS18B20等。
这里选用DS18B20数字温度传感器。
其具有精度高、反应速度快、与单片机通信简单等优点。
将DS18B20以三线方式连接至单片机,通过调用它的相关函数来读取温度值。
二、风扇驱动模块设计风扇驱动模块是指控制风扇正反转的电路。
这里选用H桥驱动芯片L298N。
它可以控制直流电动机、步进电机等多种负载的正反转,具有过流保护、过温保护等功能。
将H桥驱动芯片通过引脚连接至单片机,通过编写控制程序,实现控制风扇的正反转及转速控制。
三、单片机模块设计单片机模块是整个系统的控制中心,它通过编写程序控制温度传感器和风扇驱动芯片实现智能控制。
这里选用常用的STC89C52单片机,具有较强的通用性和高性价比。
编写的程序主要实现以下功能:1. 读取温度值并进行比较,根据温度值控制风扇的启停及转速。
2. 设置风扇的最低速度和最高速度。
3. 实现温度设置功能,用户可通过按钮设置所需的温度值。
4. 实现显示屏幕功能,将当前温度值及系统状态等信息显示在屏幕上。
四、供电模块设计供电模块是系统的电源模块,它通过转换器将交流电转化为所需的直流电。
为保证系统稳定工作,供电模块应具有过载保护、过压保护、过流保护等功能。
五、外壳设计外壳设计是将控制模块和风扇固定在一起,并起到保护作用的模块。
可采用塑料或金属等材质制作外壳,将控制模块、风扇和电源线等固定在外壳内部。
外壳应符合美观、实用及安全的设计原则。
以上是基于51单片机的智能温控风扇设计各部块的相关参考内容,其中传感器模块、风扇驱动模块、单片机模块、供电模块及外壳设计五个部分是实现智能温控风扇的核心部分。
基于51单片机的温控风扇设计

基于51单片机的温控风扇设计温控风扇是一种能够根据环境温度自动调节风速的风扇。
其设计基于51单片机,通过测量环境温度,并根据设定的温度范围控制风扇的转速。
本文将详细介绍基于51单片机的温控风扇设计。
我们需要准备以下硬件材料:1. 51单片机开发板2. 温度传感器3. 风扇4. 继电器模块5. MAX232芯片6. PC串口线在硬件准备完成后,我们需要进行以下步骤:1. 连接硬件:将温度传感器连接到51单片机的模拟输入引脚,将风扇连接到继电器模块,并将继电器模块连接到51单片机的数字输出引脚。
2. 连接电脑:使用MAX232芯片将51单片机的串口引脚连接到电脑的串口引脚上,以便进行程序的下载和调试。
3. 编写程序:使用C语言编写51单片机的程序,实现温度传感器的读取和风扇的控制。
我们需要初始化单片机的IO口和ADC模块,并设置串口通信。
然后,编写一个循环程序,在主循环中不断读取温度传感器的数值,并根据设定的温度范围控制风扇的转速。
4. 下载程序:使用单片机下载器将编写好的程序下载到51单片机的内部存储器中。
5. 调试程序:将51单片机与电脑进行连接,通过串口调试工具进行调试。
我们可以通过串口工具查看温度传感器的实时数值,并根据实际情况修改程序中的温度范围。
然后,通过串口工具发送控制指令到51单片机,观察风扇的转速是否符合预期。
6. 测试和优化:将温控风扇放置在不同的环境下进行测试,观察风扇是否能够根据环境温度自动调节转速。
根据测试结果,我们可以优化程序中的温度范围和风扇转速的控制算法,以提高温控风扇的性能。
基于51单片机的温控风扇设计可以在实际生活中广泛应用,例如用于机房散热、电器设备散热等场合。
通过合理的温度控制,可以有效延长设备的使用寿命,并提高设备的稳定性和安全性。
这种设计还具有简单、可靠、成本低等优点。
51单片机制作简易电风扇定时控制器

51单片机制作简易电风扇定时控制器
自己的床头风扇的机械定时器坏掉了,准备51单片机给设计了一个.程序在实验板初步调试通过,等待元件寄到就可以做板子了,只是有点浪费单片机的资源。
一,设计思路:
开始通过手动键给单片机供电。
直到电源指示灯LED4亮.单片机运行,继电器2工作给单片机供电。
通过按键设置继电器2的工作时间,实现系统的自动断电,通过设置继电器1的工作时间,实现风扇的间歇转动,实现节能。
1. 显示部分:通过按键,在风扇转动时间,暂停时间,和系统关闭剩余时间切换显示。
数码显示两位,为“分”走时,其中系统关闭剩余时间为“小时”走时,LED为红,黄,蓝,分别点亮对应的风扇转动,暂停,和系统关闭剩余时间的状态。
2. 按键部分:
l K1为时间调整移位键,按下此键,数码闪烁,同时对应的灯闪烁。
在风扇转动时间,暂停时间,和系统之间切换
l K2为加一和状态切换显示键,当有K1按下,为时间加1。
否则,在在风扇转动时间,暂停时间,和系统之间切换显示。
l K3为减1和备用键,当有K1按下,为时间加1,否则无效。
3. 继电器部分:
l 继电器1控制风扇的电源线,实现风扇的转动和暂时。
l 继电器2控制单片机系统的电源,实现系统定时关闭。
二,原理图
三,程序清单
/*********************************************
系统名称:电风扇简易定时控制器
创键人:w418781840 日期:2008.7.6。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机的家用风扇控制器设计+电路图+源码摘要:本文设计了一种基于单片机的家用风扇控制器,系统主要由显示模块、温度采集模块、键盘控制模块、风扇驱动模块以及控制系统模块构成。
本设计采用DS18B20 和LCD1602实时的检测和显示室内的温度,同时根据当前温度实现对风扇转速的控制,并有相应的指示灯指示选择的档位。
本设计采用C语言进行程序设计,并采用Proteus和单片机实验箱进行仿真和测试,仿真和测试结果说明本设计实现了预定的功能,并且具有节能、控制方便以及人性化等特点。
关键词:AT89C51;自动控制;温度显示;温控风扇Household Electric Fan Controller Design Based onMCUAbstract: In this paper, the design is a home fan controller based on MCU, and the system is mainly composed of display module, temperature acquisition module, the keyboard control module, fan driver module and control system module. This design adopts DS18B20 and LCD1602 to achieve real-time detection and display of indoor temperature, at the same time control the fan speed according to the current temperature, and make the corresponding indicator light indicate the gear selection. This design uses C language to design program, and uses the Proteus and MCU box to test the simulation and experiment, and the simulation and test results show that the design realized the function of reservation, and it has the characteristics of energy saving, easy control and humanized.Key Words: AT89C51; Self-acting control; Temperature display; Temperature control fan目录摘要1引言11.家用风扇控制系统21.1风扇的工作原理21.2本设计的的目的和意义22.系统总体的设计方案32.1本设计系统要实现的功能3 2.2系统的总体结构框图31. 家用风扇控制系统1.1 风扇的工作原理传统电风扇的主要部件是交流电动机,其工作原理很简单,就是通电后的电磁圈在电磁力力矩的作用下转动扇叶。
其能量转化形式主要是电能转化为机械能,由于线圈存在电阻,所以有一局部电能转化为线圈电阻的热能。
有三种方法可以控制扇叶转速:第一,上下电压电路板控制扇叶速度的变化,例如空调室内机;第二,通过改变电阻控制电压变化从而改变扇叶速率,例如局部空调柜;第三,可以用开关电路通过几组线圈改变电动机速率,例如一般吊扇调速器。
1.2 本设计的的目的和意义电风扇有很多优点,例如价格低、体积小、节能、风力温和、易于使用的优点。
伴随着人民生活水平的提高,家用电器的功能日益丰富,并朝着智能化的方向开展,过去的电器的单一功能不能够满足人们的需求,家用电风扇同样需要进行功能上的改良。
本设计就是以单片机为核心,中选择自动控制模式时,根据外界温度的变化实现对电风扇的智能控制,它能够根据外界环境温度值的变化实现自动控制并且使风扇转速根据温度变化而变化,当温度升高时电风扇的电机转速加快从而加速空气流动,使人感到凉爽,当温度降低时风扇电机转速降低,从而可以防止人体因温度降低而感冒,还能够实现节能的功能;中选择手动控制时,人们可以设置三个档位来控制三个不同的电风扇转速,从而实现电风扇控制,改善室内温度。
2. 系统总体的设计方案2.1 本设计系统要实现的功能本系统的总体设计方案:温度传感器检测到的温度信号转化为数字信息传送给单片机AT89C51进行处理,LCD液晶显示器显示当前的外界环境温度值和定时的剩余时间值,根据手动模式时哪个按键按下和自动模式时DS18B20采集到的信息经过经过单片机的信息处理控制风扇机电机的转速;本设计最大的特点就是把手动换挡模式和自动换挡模式结合起来,能够很便利的实现电风扇的控制;手动换挡模式包括三个档位,即一档位,二档位,三档位;自动控制模式亦包括三个档位,当外界环境温度是20~30℃时,自动控制档位是一档位;当外界环境温度是30~40℃时,自动控制调节为二档位;当外界环境温度是40℃以上时自动调节为三档位;以上档位越高电风扇的电机转速越大,根据不同的温度对应不同的转速,从而更加便捷的控制温度。
P1口:P1口是一个内部带有上拉电阻的8位双向I/O口;P1口缓冲器能够接收输出的4TTL门电流。
P1口管脚写入1后,内部就被上拉为高,可用于输入,P1口被外部下拉为低时,就将输出电流,这因为内部上拉的缘故。
P2口:P2 是一个提供内部上拉电阻的8位双向I/O 口,P2 的输出缓冲级可以驱动4 个TTL 逻辑门电路;当对端口P2写1,内部的上拉电阻就把端口拉到高电平,在此时可作输入口,当作输入口使用时,由于内部有上拉电阻,当某个引脚被外部信号拉低时就会输出一个电流。
P3口:P3口是一组带有内部上拉电阻8位双向I/O 口;P3口输出缓冲级可以驱动4 个TTL逻辑门电路;当对P3口写入“1”时,它们就被内部的上拉电阻拉高并作为输入端口;这时,被外部拉低的P3 口将用上拉电阻输出电流;P3口除作为一般I/O口线外,它更重要的作用是它的第二功能;另外P3口还可以接收一些用于Flash闪速存储器编程或程序校验时的控制信号。
RST是复位输入,在振荡器工作时,RST引脚将出现两个机器周期以上的高电平使单片机完成复位。
ALE和PROG:当访问外部程序存储器和数据存储器之一时,地址锁存允许ALE就输出脉冲锁存地址的低8位字节;在一般情况下,ALE 就以时钟振荡频率的1/6 输出固定脉冲信号,进而它可对外输出时钟和用于定时;在对Flash 存储器的编程期间,该引脚用于输入编程脉冲PROG。
PSEN是程序储存允许输出,就是外部程序存储器的读选通信号,在AT89C51 由外部程序存储器取指令〔或数据〕时,在每个机器周期内两次PSEN 有效,即是输出两个脉冲;在此期间,当访问外部数据存储器时,就将跳过两次PSEN信号。
3.2 温度检测芯片的选择本设计采用DS18B20温度传感器,DS18B20内部结构主要由4局部组成:64 位的ROM、非挥发的温度报警触发器TH和TL、配置存放器和温度传感器[2]。
单线数字温度传感器DS18B20具有3 引脚T0~92 小体积的封装形式;温度测量范围-55℃~+125℃;可编程9~12 位的A/D转换精度,测温分辨率能够到达0.0625℃;被测温度值用符号扩展的16 位数字量形式串行输出。
工作电压支持3V~5.5V ,不仅可在远端引入,而且可采用寄生电源方式产生;DS18B20 支持“一线总线”接口,即多个DS18B20能够并联到3 根或2 根线上使用,CPU只要一根端口线就能够与诸多DS18B20 传输数字[3],占用的微处理器端口比拟少,因此可节省大量引线或逻辑电路;另外还有存储用户定义报警温度等功能。
风扇电机驱动电路采用L298〔如图4所示〕作为驱动芯片,L298是由SGS公司生产的的恒压恒流桥式2A驱动芯片,可以驱动一个两相步进电机或者两个直流电机。
各个引脚的简单介绍如下:IN1~IN4 :电机旋转方式控制端。
OUT1~OUT4:接电动机。
VCC和VS:接电源。
图4 驱动芯片L2983.5 系统总体电路设计Proteus是英国Labcenter electronics公司的创造的EDA工具软件;Proteus有4个功能:原理图设计、电路仿真功能、单片机协同仿真功能和PCB设计平台[5];其内部元件库包含大量的元件,并且支持总线结构和智能化的连线功能;支持主流CPU及其通用外设模型的仿真等,给单片机的开发设计带来极大的方便。
本设计采用Proteus进行原理图绘制和仿真。
如图5所示是本设计的Proteus原理图设计,本设计包含几个模块,即显示模块电路、振荡电路、复位电路、指示灯指示电路、按键电路、DS18B20测温电路、电机控制模块电路。
各个模块之间相互配合完成了本设计的根本功能。
显示模块电路的功能实现实时显示室内温度值和倒计时关机剩余时间;DS18B20测温电路检测室内温度后通过单片机控制LCD1602显示当前室内温度;指示灯指示电路指示当前的工作状态;按键电路实现对系统工作状态的控制;电机控制模块电路驱动电动机按不同的转速进行转动。
振荡电路和复位电路以及单片机一起组成单片机的根本电路模块。
图5 系统的原理图设计4. 系统的软件设计4. 1 系统总体软件设计流程图程序设计主要局部包括主程序、DS18B20的初始化函数、DS18B20的温度转换函数、温度的读取函数、键盘的扫描函数、数码管的显示函数、温度处理的函数以及风扇电机转速控制的函数、LCD液晶显示函数、定时关闭电机函数[6]。
DS18B20的初始化函数主要完成对DS18B20的初始化;DS18B20的温度转换函数主要完成对环境温度的实时采集;温度的读取函数主要完成主机对传感器的读取数据和数据换算,键盘扫描的函数主要完成档位设置和类型设置;温度处理函数主要对采集到的温度分析出理,进而控制电机转速的变化;风扇电机的控制函数那么根据检测温度的数值进行对电机转速和启停的即时控制;LCD液晶显示函数显示DS18B20采集到的外界温度值和定时剩余时间;定时关闭电机函数进行定时实现电机的定时关闭。
4.3 系统程序的编译和调试编译:用Keil 软件编译,翻开Keil 软件后,建立所要编译的工程,设置目标工程的相关选项,随后用Build target对源程序进行编译;如果出现警告和错误,就要去修改使程序正确,直至程序编译正确。