切换到宽版
爱科技/爱创意/爱折腾/爱极致;技术知识分享平台,点击进入新版数码之家网站
  • 10931阅读
  • 6回复

[其他]菜鸟DIY红外反射开关全过程....=_= [复制链接]

上一主题 下一主题
离线水之心
 

发帖
445
M币
66
专家
5
粉丝
39
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2010-09-05
前些天看到有坛友 火包 做了一个红外反射式开关,觉得挻好玩的,于是盘算我也做一个出来玩玩。但这几天都在搞其他玩意,没太多时间,只好用拖字决了,一拖就拖到昨天…
但是做也得有个方案..去看看人家是怎么做的吧..
http://bbs.mydigit.cn/read.php?tid=194872&keyword=%BA%EC%CD%E2
原来他用的是杜洋的电路和程序,我再跑到杜洋那里瞧瞧,挖到了一张电路图..
图片一

原图片地址:http://www.doyoung.net/works/FR_TOUCH/index.html
可是问题来了,手上只有一块STC89C52能用了,STC19C52好像不带AD的,而且就算带AD,编写这样一个抗干扰的程序对我这只大菜鸟来说是一个很大的挑战,额~~望面却步…
可是就这样放弃吗?我才不会呢,但要怎么做才行??
不用AD只好走另一条路了,想起我以前做的红外遥控风扇,对哦!!如果加上载波的话就没那么容易干扰了,轻松地去掉了强光和其他红外线的干扰,只要在程序中去除红外遥控的干扰就OK了,有想法就好了,立刻动手!!!
我直接就选用了电视(是电视用的吗?)红外接收头PC838(我只买了这种接收头=_=!)…
图片二

网上的资料说需要38khz的载波它才能接收到,哦~反正要用单片机了,就用单片机的定时器做一个38khz频率发生器,很好,再在有了载波了。单片机的输出电流太小,加了一个S8050放大电流再接个红外LED,红外LED要串上一个电阻(200R左右)才行,不然很可能会烧了红外LED的。但现在问题来了,红外接收头非常灵敏,遥控器即使不正面对着接收头也能达到遥控的效果,怎么办??我们先来写好程序做个试验再来讨论~~~
先做两个简单的小模块,方便接线和试验..
图片三

下图是成功驱动红外LED成功了,顺便晒晒我做的最小系统(算最小系统吗?)…
程序
#include <REG52.H>
sbit LED = P1^7;
#define uchar unsigned char //定义unsigned char用uchar表示
#define uint unsigned int  //定义unsigned int用uint表示
void Timer0_Init(void);    //定时器初始化
void delay_ms (uint iii)    //延时子程序,每加1增加0.5ms
{      
for(;iii>0;iii--)  
{
   uchar jjj=244;    
while(--jjj);  
}
}

//主函数
void main(void)
{
Timer0_Init();  //定时器初始化
while(1);
}
//定时器的初始化
void Timer0_Init(void)
{
TH0 = 0xFF;
TL0 = 0xFA; //7us
TMOD = 0x01; //工作方式
ET0 = 1;  //开中断
TR0 =1;  //开计数器
EA = 1;
}
///定时器中断
void Timer0(void) interrupt 1
{
TH0 = 0xFF;
TL0 = 0xFA;  
LED2=~LED2;
}  
图片四

程序的实测效果非常不理想,并不是我的红外接收头坏了,而是红外LED的频率与38khz相差太远了。我没有示波器,无法测得LED的频率,程序经过多次修改,情况还是不理想~~虽是如些,但是我也得出了丝启发,红外接收管的灵敏度与红外LED的频率有关,越是接近38khz,接收头越是灵敏。(高手不要笑,编程 是自学的,这实在找不出问题出在哪)
话说运气还是与我挻有缘嘀,用单片机发生频率效果不理想,那么我就用NE555来做一个频率发生器来代替。竟然不多不少,接收头的灵敏度居然还不错~~刚好能做红外反射…
下面是电路图++实物图~~
图片五

图片六
  

19k和8k 的电阻我没有,用了两个电阻串联代替,这东西一共做了两个,第二个效果不好,回收再利用了…
现在载波问题OK了,那么现在有必要做一个红外反射头的模块了,再顺便晒晒我的继电器模块,各位大虾请过目….
图片七

图片八

好,现在万理具备,组装各模块!!!GO~~~
图片九


仔细检查线路,看有没有接错,嗯~~很乱对吧??  =_=
即然是电视用的红外接收头,肯定会受电视遥控的干扰,这个只能在程序中消除干扰了,程序原理也很简单的…
这要先来研究一下电视遥控发送的红外信号….原来电视遥控发射的红外信号时会有在开始时会有9ms的同步信号(有的是4.5ms..还有的就不知道了),后面的信号时间都比9ms小,那么我们只要检测一下红外信号的如果超过15ms就不是干扰了…嗯~~很好,有思路就动手写程序吧….哈哈~程序还满简单的….
#include <REG52.H>
sbit open1 = P1^1;
sbit open2 = P1^2;
sbit open3 = P1^3;
sbit key= P1^0;
sbit LED2 = P1^7;
#define uchar unsigned char  //定义unsigned char用uchar表示
#define uint unsigned int  //定义unsigned int用uint表示
uchar a,k=0;
void key_(void) ;
void Timer0_Init(void);    //定时器初始化
void delay_ms (uint iii)    //延时子程序,每加1增加0.5ms
{      //iii65535
for(;iii>0;iii--)  
  {
   uchar jjj=244;
   while(--jjj);  
  }
}
//主函数
void main(void)
{
Timer0_Init();  //定时器初始化
open1=0;
open2=0;
open3=0;
while(1)
{
  if (key==0)
   while(!key)
   {
    a++;
    delay_ms (10);
   }
   if (a>2) k++;
   a=0;
  key_();
}
  
}
void key_(void)
{
  switch(k)
  {
  case 1:
   open1=1;
   open2=0;
   open3=0;
   //delay_ms(100);
   break;
  case 2:
   open1=0;
   open2=1;
   open3=0;
   //delay_ms(100);
   break;
  case 3:
   open1=0;
   open2=0;
   open3=1;
   //delay_ms(100);
   break;
  default:
   open3=0;
   k=0;
   //delay_ms(100);
   break;
  }
}
//定时器的初始化
void Timer0_Init(void)
{
TH0 = 0xFF;
TL0 = 0xFA; //7us
TMOD = 0x01; //工作方式
ET0 = 1;  //开中断
TR0 =1;  //开计数器
EA = 1;
}
///定时器中断
void Timer0(void) interrupt 1
{
TH0 = 0xFF;
TL0 = 0xFA;  
LED2=~LED2;
}  

最后:编译程序-->成功编译-->下载-->下载成功,兴奋的时刻到了,加电试验,心跳加速啊,手一滑过红外LED上面,第一个继电器吸合成功,再滑过,转到第二个继电器,再滑过就到第三个,再滑一下,全部关掉,哈哈~~成功了..就一个字..爽~~
演示视频: flash: http://player.youku.com/player.php/sid/XMjA0MDA5MTQ0/v.swf



好多费话哦..呵呵..
顺便问个问题.....到底如何用STC89C52精确输出38K的方波??

本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共6条打赏
离线laice

发帖
2263
M币
454
专家
13
粉丝
53
只看该作者 1楼 发表于: 2010-09-05
请登录后查看
离线zhaoyu3517
发帖
578
M币
1382
专家
2
粉丝
25
只看该作者 2楼 发表于: 2010-09-05
请登录后查看
离线肉感大熊

发帖
413
M币
8
专家
4
粉丝
30
只看该作者 3楼 发表于: 2010-09-05
请登录后查看
离线yoya0303

发帖
1480
M币
2036
专家
12
粉丝
86
只看该作者 4楼 发表于: 2010-09-05
请登录后查看
离线水之心

发帖
445
M币
66
专家
5
粉丝
39
只看该作者 5楼 发表于: 2010-09-05
请登录后查看
离线肉感大熊

发帖
413
M币
8
专家
4
粉丝
30
只看该作者 6楼 发表于: 2010-09-08
回 5楼(水之心) 的帖子
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个