所有教程由网友发布,仅供参考,请谨慎采纳。科创不对教程的科学性、准确性、可靠性负责。
转帖:Arduino教程(提高篇)——红外遥控(发射篇)
kc20382013/09/06电子技术 IP:广西
Arduino教程(提高篇)——红外遥控(发射篇)

XXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXml
上一篇提到了红外编码的原理,此篇用arduino软件模拟发出38K的载波信号配合红外发射头,发出带有载波信号的38K红外光,使arduino变成红外遥控器,配合红外接收就用此可以遥控各家电。

例程1:红外发射模块(取缔红外遥控器)配合arduino制作成红外遥控器,用串口输入一个数字,遥控器发射出一段编码,一边用红外接收模块,显示出接收到的编码(红外接收参照
XXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXml
此贴)

连线示意图:

001.jpg



#define ADD 0x00
int IR_S =  8;     //arduino 8号引脚
void setup()
{
  pinMode(IR_S, OUTPUT);
  XXXXXXXXXgin(9600); // 9600 波特率
}
void loop()
{
  uint8_t dat,temp;
  if ( Serial.available()) {
    temp = XXXXXXXXXad();//?
    
    IR_Send38KHZ(280,1);//发送9ms的起始码
    IR_Send38KHZ(140,0);//发送4.5ms的结果码
    
    IR_Sendcode(ADD);//用户识别码
    dat=~ADD;
    IR_Sendcode(dat);//用户识别码反吗
    
    IR_Sendcode(temp);//操作码
    dat=~temp;
    IR_Sendcode(dat);//操作码反码
    
    IR_Send38KHZ(21,1);//发送结束码
  }
  delay(200);
}
void IR_Send38KHZ(int x,int y) //产生38KHZ红外脉冲
{
for(int i=0;i<x;i++)//15=386US
{
           if(y==1)
           {
     digitalWrite(IR_S,1);
            delayMicroseconds(9);
     digitalWrite(IR_S,0);
            delayMicroseconds(9);
           }
           else
           {
     digitalWrite(IR_S,0);
            delayMicroseconds(20);
           }            
}
}
void IR_Sendcode(uint8_t x) //
{
    for(int i=0;i<8;i++)
     {
       if((x&0x01)==0x01)
        {
           IR_Send38KHZ(23,1);
           IR_Send38KHZ(64,0);            
        }
        else
         {
            IR_Send38KHZ(23,1);
            IR_Send38KHZ(21,0);  
         }
       x=x>>1;
     }  
}

打开串口,随意发送一个数字,红外发射头会发出带编码的38K红外波, 另一方面用一个红外接收头就可以接收到此码,将其解码就会知道遥控器是按的哪个按键。

接收方面,arduino+红外接收模块进行解码

红外遥控函数库:

attachment icon 红外遥控函数库.zip 23.84KB ZIP 24次下载
(23.84 KB)


#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  XXXXXXXXXgin(9600);
  irrecv.enableIRIn(); //初始化红外遥控
  pinMode(12,1);
}

void loop() {
  if (XXXXXXXXXcode(&results)) {
if(XXXXXXXXXXlue==16753245)      //确认接收到的第一排按键1的编码,此码是预先读出来的按键编码。
  {
  digitalWrite(12,1);                //点亮LED
   XXXXXXXXXintln("turn on LED"); //串口显示开灯
  }
  else if(XXXXXXXXXXlue==16736925)   //确认接收到的第一排按键2的编码
  {
   digitalWrite(12,0);            //熄灭LED
    XXXXXXXXXintln("turn off LED");    //串口显示关灯
  }
    XXXXXXXXXsume(); // 接收下一个值
  }
}

例程2arduino模拟SONY遥控器,用arduino串口发送一个字符便可以遥控SONY家电的开关。


/*********红外发射头接arduino3号数字口**************************/


#include <IRremote.h>

IRsend irsend;

void setup()
{
  XXXXXXXXXgin(9600);
}

void loop() {
  if (XXXXXXXXXad() != -1) {
    for (int i = 0; i < 3; i++) {
      XXXXXXXXXndSony(0xa90, 12); // Sony TV power code
      delay(100);
    }
  }
}


红外控制库发布地址:
XXXXXXXXXXXXXXXXXX/shirriff/Arduino-IRremote
来自:电子信息 / 电子技术严肃内容:教程/课程
0
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
kc2038
学者 机友 笔友
文章
37
回复
268
学术分
1
2009/01/06注册,6年4个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}