找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12583|回复: 3
打印 上一主题 下一主题
收起左侧

Arduino红外遥控(发射篇)

[复制链接]
跳转到指定楼层
楼主
      此篇用arduino软件模拟发出38K的载波信号配合红外发射头,发出带有载波信号的38K红外光,使arduino变成红外遥控器,配合红外接收就用此可以遥控各家电。
例程1:红外发射模块(取缔红外遥控器)配合arduino制作成红外遥控器,用串口输入一个数字,遥控器发射出一段编码,一边用红外接收模块,显示出接收到的编码。

101325uuivbsvbh9x9zbfh.jpg (42.35 KB, 下载次数: 151)

接线图

接线图

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:353207 发表于 2018-6-17 13:19 | 只看该作者
#define ADD 0x00
int IR_S =  8;     //接arduino 8号引脚
void setup()
{
  pinMode(IR_S, OUTPUT);
  Serial.begin(9600); // 9600 波特率
}
void loop()
{
  uint8_t dat,temp;
  if ( Serial.available()) {
    temp = Serial.read();//?
     
    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;
     } 
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:353207 发表于 2018-6-17 13:20 | 只看该作者
打开串口,随意发送一个数字,红外发射头会发出带编码的38K红外波, 另一方面用一个红外接收头就可以接收到此码,将其解码就会知道遥控器是按的哪个按键。
接收方面,arduino+红外接收模块进行解码
回复

使用道具 举报

地板
ID:353207 发表于 2018-6-17 13:21 | 只看该作者
例程2:arduino模拟SONY遥控器,用arduino串口发送一个字符便可以遥控SONY家电的开关。

/*********红外发射头接arduino的3号数字口**************************/

#include <IRremote.h>
 
IRsend irsend;
 
void setup()
{
  Serial.begin(9600);
}
 
void loop() {
  if (Serial.read() != -1) {
    for (int i = 0; i < 3; i++) {
      irsend.sendSony(0xa90, 12); // Sony TV power code
      delay(100);
    }
  }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表