51单片机的改装遥控风扇制作

51单片机通过1838D红外接收头控制风扇


由于在寝室睡觉时想关风扇十分不方便,为了科学创新和锻炼自己的动手能力决定用手头的元器件将 风扇改为遥控关闭和启动(就是因为懒)。

用到的元器件

用到的元器件为:
红外遥控器一个
STC89C52RC一个
CHQ红外接收头一个
4.7K电阻一个
1路5V低电平继电器模块一个
5号电池4个
4节电池电池盒一个
硬纸板若干

控制方式

开启单片机之后按下遥控器上的1后,风扇停止转动,按下2后,风扇继续转动。

制作过程和思路

风扇为USB供电的,将后面的接线盒拆开之后将正极红线剪断准备串联接入继电器的常闭,之后电扇这边先放这里不管,去把单片机程序写出来,然后测试下程序能否正常运行(程序见下方)。
红外接收头通过NEC通讯协议完成对数据的传输。传输时序图如下图:

在这里插入图片描述
lead code高电平约9000us 左右,低电平约4500us 左右;
custom code16 位,data code16 位,共32位;
bit0 是用高电平约560us +低电平约560us表示。
bit1 可用高电平约560us+低电平约1680us表示。

红外接头接线原理图:

在这里插入图片描述

将继电器模块的IN引脚接到单片机的P1.0引脚,给单片机的5V供电由电池提供(因为没有驱动芯片)。

程序清单

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

uchar time0;
bit IRok;//33数据位处理完成标志位
bit handle_ok;
uchar IRcode[4];//4个字节
uchar IRdata[33];//33位数据
void InitUART() //定时器初始化
{
  	    TMOD=0x02;//定时器重装初值
		TH0=0;
		TL0=0;
		EA=1;
		EX0=1;
		TCON=0X01;
		
		ET0=1;
		TR0=1;//启动定时器
	
}

void t0() interrupt 1
{
		time0++;//一次中断为277.76us
}
void int0() interrupt 0
{		
		static uchar i;
		static bit flag;
		if(flag)
		{
				if((time0<54)&&(time0>32))
						i=0;
				
				IRdata[i]=time0;
				time0=0;
				i++;

		if(i==33)
		{
				i=0;
				IRok=1;
		}
		}
		else
		{
				time0=0;
				flag=1;
		}
}

void handle_data()
{
		uchar i;//处理四个字节
		uchar j;//处理八位
		uchar k;//处理三十三个数据
		k=1;
		for(i=0;i<4;i++)
		{
				for(j=0;j<8;j++)
				{
						if(IRdata[k]>5)
								IRcode[i]|=0x80;
						k++;
						if(j<7)
								IRcode[i]>>=1;
				}
		}
		handle_ok=1;
}

void work()
{		
		uchar j;
		j=0x01;
		switch (IRcode[2])
		{
				case 0x0c:P1=0xfe;break;//1 数字一按键停止(修改这里更改控制按键)
				case 0x18:P1=0xff;break;//2数字二按键启动
				default:break;
		}
}

void main()
{		
    InitUART();
		while(1)
		{
				P1=0;
				if(IRok)
				{
						handle_data();
						IRok=0;
				}
				if(handle_ok)//如果处理完成处理遥控器相关程序
				{		
					work();
					handle_ok=0;
				}
		}
}

遥控器相应按键的16进制代码:
在这里插入图片描述在这里插入图片描述

成品图

在这里插入图片描述

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
基于单片机的温控风扇的设计 摘 要 温控风扇在现代社会中的生产以及人们的日常生活中都有广泛的应用,如工业生产中大型机械散热系统中的风扇、现在笔记本电脑上的广泛应用的智能CPU风扇等。本文设计了基于单片机的温控风扇系统,采用单片机作为控制器,利用温度传感器DS18B20作为温度采集元件,并根据采集到的温度,通过一个达林顿反向驱动器ULN2803驱动风扇电机。根据检测到的温度与系统设定的温度的比较实现风扇电机的自动启动和停止,并能根温度的变化自动改变风扇电机的转速,同时用LED八段数码管显示检测到的温度与设定的温度。 关键词:单片机、DS18B20、温控、风扇 第一章 整体方案设计 1.1 前 言 在现代社会中,风扇被广泛的应用,发挥着举足轻重的作用,如夏天人们用的散热风扇、工业生产中大型机械中的散热风扇以及现在笔记本电脑上广泛使用的智能CPU风扇等。而随着温度控制技术的发展,为了降低风扇运转时的噪音以及节省能源等,温控风扇越来越受到重视并被广泛的应用。在现阶段,温控风扇的设计已经有了一定的成效,可以使风扇根据环境温度的变化进行自动无级调速,当温度升高到一定时能自动启动风扇,当温度降到一定时能自动停止风扇的转动,实现智能控制。 随着单片机在各个领域的广泛应用,许多用单片机作控制的温度控制系统也应运而生,如基于单片机的温控风扇系统。它使风扇根据环境温度的变化实现自动启停,使风扇转速随着环境温度的变化而变化,实现了风扇的智能控制。它的设计为现代社会人们的生活以及生产带来了诸多便利,在提高人们的生活质量、生产效率的同时还能节省风扇运转所需的能量。 本文设计了由ATMEL公司的8052系列单片机AT89C52作为控制器,采用DALLAS公司的温度传感器DS18B20作为温度采集元件,并通过一个达林顿反向驱动器ULN2803驱动风扇电机的转动。同时使系统检测到得环境温度以及系统预设的温度动态的显示在LED数码管上。根据系统检测到得环境温度与系统预设温度的比较,实现风扇电机的自动启停以及转速的自动调节。 1.2 系统整体设计 本设计的整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机AT89C52进行处理,在LED数码管上显示当前环境温度值以及预设温度值。其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。同时采用PWM脉宽调制方式来改变直流风扇电机的转速。并通过两个按键改变预设温度值,一个提高预设温度,另一个降低预设温度值。系统结构框图如下: 结 论 本次设计的系统以单片机为控制核心,以温度传感器DS18B20检测环境温度,实现了根据环境温度变化调节不同的风扇电机转速,在一定范围能能实现转速的连续调节,LED数码管能连续稳定的显示环境温度和设置温度,并能通过两个独立按键调节不同的设置温度,从而改变环境温度与设置温度的差值,进而改变电机转速。实现了基于单片机的温控风扇的设计。 本系统设计可推广到各种电动机的控制系统中,实现电动机的转速调节。在生产生活中,本系统可用于简单的日常风扇的智能控制,为生活带来便利;在工业生产中,可以改变不同的输入信号,实现对不同信号输入控制电机的转速,进而实现生产自动化,如在电力系统中可以根据不同的负荷达到不同的电压信号,再由电压信号调节不同的发电机转速,进而调节发电量,实现电力系统的自动化调节。综上所述,该系统的设计和研究在社会生产和生活中具有重要地位。 附录2:程序代码 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit DQ=P1^7; sbit key1=P1^3; sbit key2=P1^4; sbit dianji=P3^1; float ff; uint y3; uchar shi,ge,xiaoshu,sheding=20,gaonum,dinum; uchar code dispcode[]={ //段码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code tablel[]={ //带小数点的段码 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd, 0x87,0xff,0xef}; uchar dispbitcode[]={ //位选 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; uchar dispbuf[8]={0,0,0,0,0,0,0,0}; void Delay(uint num)// 延时函数 { while( --num ); } void digitalshow(uchar a4,uchar a3,uchar a2,uchar a1,uchar a0) { dispbuf[0]=a0; dispbuf[1]=a1; dispbuf[2]=a2; dispbuf[3]=a3; dispbuf[4]=a4; P2=0xff; P0=dispcode[dispbuf[0]]; P2=dispbitcode[5]; Delay(1);
本文档的主要内容详细介绍的是使用51单片机设计的遥控红外指纹锁的程序和说明。   工作过程:上电后,1602上显示Selector mode(选择开锁方式)   有三种解锁方式选择 1》:按下矩阵键盘上的A,可以用矩阵键盘来进行解锁,1602上会显示“Please Enter PIN”(请输入密码),密码输入正确后蜂鸣器会提示并且显示”Welcome to here” 2s后接着显示,Selector mode(选择开锁方式) 1—1》:按下矩阵键盘上的B,则可以进行修改密码的操作,1602上会显示“Boss passwordd”(请输入管理员密码(835),),输入密码正确后会显示set new password(请设置新密码),设置完成后按D键确认退出并且显示“successfully set”(设置成功); 1—2》:按下举证键盘上的C:会清空当前输入密码,从新输入; 注(初始密码为123) (在输入密码开锁或设置新密码时,都可以按D退出键盘操作)   2》按下红外遥控上的CH键,可以用红外遥控来进行解锁,1602上会显示Infrared(红外),输入密码正确后蜂鸣器提示并且显示“Welcome to here” 2S后接着显示Selector mode(选择开锁方式) 2—1:》: 按下红外遥控上的CH—键,会清空当前输入密码,从新输入; 注(在输入密码开锁的过程中,可以按CH+键退出遥控操作)   3》按下矩阵键盘上的*号键,稍作等待指纹模块初始化,显示Please finger(按下手指)就可以使用指纹模块进行解锁,(录入指纹的操作是通过电脑和TTL接线板来完成的),指纹符合后蜂鸣器会提示并且显示Search success (扫描成功) ID is xx(您的ID是xx); 3—1》:”长按矩阵键盘上的#号键可以退出指纹解锁,并且会显示Selector mode(选择开锁方式); 注:指纹模块需接3.3V电源供电,不可接5V
下面是一个简单的51单片机红外遥控程序,可以通过红外遥控控制风扇的开关。 ``` #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit IR = P3^2; // 红外接收管引脚定义 sbit FAN = P1^0; // 风扇引脚定义 uchar ir_code; // 红外遥控器码值 // 延时函数 void delay(uint i) { while(i--); } // 红外接收函数 void get_IR() { uint x = 0; uchar i; while(IR); delay(500); // 延时5ms if(IR) return; delay(500); // 延时5ms for(i = 0; i < 8; i++) { while(!IR); // 等待引导码高电平结束 delay(30); // 延时1.5ms x = x << 1; // 左移一位 if(IR) x++; // 如果高电平持续时间大于1.5ms,则该位为1 while(IR); // 等待引导码低电平结束 } ir_code = x; // 将接收的码值保存到全局变量中 } // 主函数 void main() { EA = 1; // 允许中断 EX0 = 1; // 外部中断0允许 IT0 = 1; // 下降沿触发外部中断0 while(1) { if(ir_code == 0x18) // 如果接收到红外码0x18,则打开风扇 { FAN = 1; } else if(ir_code == 0x08) // 如果接收到红外码0x08,则关闭风扇 { FAN = 0; } ir_code = 0; // 清空红外码值 } } // 外部中断0中断服务函数 void int0() interrupt 0 { get_IR(); // 红外接收 } ``` 以上程序中,通过外部中断0来触发红外接收函数,将接收到的红外码值保存到全局变量中。然后在主函数中判断接收到的红外码值,根据不同的码值来控制风扇的开关。当接收到红外码0x18时,打开风扇;当接收到红外码0x08时,关闭风扇

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值