极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 254381|回复: 92

Arduino红外遥控系列教程2013——发射与接收

  [复制链接]
发表于 2013-2-20 20:10:41 | 显示全部楼层 |阅读模式
本帖最后由 幻生幻灭 于 2013-7-14 17:12 编辑

关于Arduino红外发射与接收的教程,论坛已经有很多了,但作为IRremote应用系列教程的铺垫。在此整理重新发布一下

更新 2013.03.12
本系列教程已经告一段落,陆陆续续发布了6篇教程,4部视频和1个wiki语法手册。以后的精力要回归BOXZ啦。
1. Arduino红外遥控系列教程2013——发射与接收[链接]
2. Arduino红外遥控系列教程2013——红外转码[链接]
3. Arduino红外遥控系列教程2013——红外转码扩展应用1[链接]
4. Arduino红外遥控系列教程2013——红外协议之NEC[译文][链接]
5. Arduino红外遥控系列教程2013——IRremote多协议红外遥控扩展库[译文][链接]
6. Arduino红外遥控系列教程2013——IRremote库进阶与调试[链接]

Arduino IRremote Wiki 语法手册中文版[链接]


教程一:红外接收教程
本教程共四步操作,将教大家如何收集电视红外遥控器的编码



视频链接:http://v.youku.com/v_show/id_XNTE2NjQ5NTcy.html



第一步:电路连接,非常简单[本图摘自IRremote作者BLOG]



这里额外说两点,其一红外发射二极管的型号无所谓,常见的是3MM和5MM。但接收管不是全部好用的
部分已知红外接收型号如下:
HS0038B(4.5V-5.5V)
PC838(2.5v-5.5v)
IRM_3638

其二,有的红外接收集成了三极管,所以并不需要为了增加功率额外再接一个三极管。详见Datesheet


第二步:安装IRremote库
请直接参考 Arduino入门教程--第二十课--红外遥控器介绍[链接]

第三步:复制代码并下载程序
[pre lang="arduino" line="1" file="Step1_IR_Rev.ino"]//本例来自于红外接收模块的IRremote自带范例
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/

#include <IRremote.h>

int RECV_PIN = 11;//定义红外接收器的引脚为11
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // 初始化红外接收器
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);//以16进制换行输出接收代码
    Serial.println();//为了便于观看输出结果增加一个空行
    irrecv.resume(); // 接收下一个值
  }
}
[/code]

第四步:记录红外编码
打开AccessPort串口助手软件并启用监控,手持电视遥控器,依序按键,记录红外编码



教程二:红外发射教程
教程二的操作请参考教程一中的视频,电路图也在教程一已示。本教程就不做过多描述,只说几点注意
1. 安全起见,限流电阻是必须要用的!
2. 红外光是不可见的,需要用手机摄像模式才能看到,详见视频。

第一步:修改代码并下载
根据教程一所记录的红外编码任选其一,例如本例选择频道增加按键
大家根据自己的情况修改程序中红外编码的部分

[pre lang="arduino" line="1" file="Step2_IR_Send_ChannelUP.ino"]/*
* 发射红外线信号
* 注意! 红外线发射器(IR LED)必须接到 pin 3, 不能接其它脚位

Hisense 机顶盒 SD-16127 tested
*/

//By Leo 2013.02.19
//http://weibo.com/leolite
//Update: Pin 3 IR LED test function


#include <IRremote.h>                  // 引用 IRRemote 函式库


IRsend irsend;                          // 定义 IRsend 物件来发射红外线讯号

void setup()
{
  pinMode(3, OUTPUT);   
  digitalWrite(3, HIGH);   // 点亮LED测试(需通过手机摄像模式观察)
  delay(3000);             // 等待3秒
  digitalWrite(3, LOW);    // 结束测试
}

void loop()
{
  Serial.print("SendIR: ");
  irsend.sendNEC(0x807F18E7, 32);   // 记得换成你遥控器的红外线编码
  delay(3000);             // 等待3秒
}



[/code]


下一篇
Arduino红外遥控系列教程2013——红外转码[链接]


参考资料
TOM的系列教程
Arduino 红外遥控接收篇之一[链接]
红外发射实验之一红外发射模块自制[链接]
红外遥控接收之二发光二极管闪烁[链接]
红外遥控接收之三红外遥控接收LED与蜂鸣器[链接]

扩展阅读
【扫盲贴】浅谈38K红外发射接受编码[链接]
Randy版大写的,详细讲解了些红外有关知识,推荐下!

[IRremote库官方BLOG]A Multi-Protocol Infrared Remote Library for the Arduino[链接]
详细介绍了库的使用,原理及注意事项。非常推荐通读的文章。

[Github]Arduino-IRremote[链接]
库版本管理,最新版请到此下载

[IBM developerWorks]构建基于 Arduino 的激光游戏[链接]
非常好的系列教程,还包括实用的算法,推荐!

Cooper Maa的红外系列教程[链接]
非常好的红外系列教程,需要一些技术手段才能阅读。作者还有很多精彩的系列教程

Updated 2013.07.14
关于空调遥控,可能接收数据为乱码。需要修改库参数。详情参考
解决问题系列(3)——红外发射,控制美的空调开[作者 @瘦网虫]
http://www.geek-workshop.com/thread-5001-1-1.html
红外线 遥控 空调  测试成功[作者 @blueleafxp]
http://www.geek-workshop.com/thread-5146-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-2-21 09:03:44 | 显示全部楼层
支持一下Leo,很有价值的教程,感谢分享。

BTW:经常看到你用亚克力板,我一直很好奇,你是怎么切割它的呢,我家也有亚克力,我尝试过用锯子和美工刀,切面惨不忍睹。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-21 09:47:11 | 显示全部楼层
大连好人 发表于 2013-2-21 09:03
支持一下Leo,很有价值的教程,感谢分享。

BTW:经常看到你用亚克力板,我一直很好奇,你是怎么切割它的 ...

外面找的加工厂,激光切割

简单的形状,可以用勾刀和电转
回复 支持 反对

使用道具 举报

发表于 2013-2-21 10:14:01 | 显示全部楼层
幻生幻灭 发表于 2013-2-21 09:47
外面找的加工厂,激光切割

简单的形状,可以用勾刀和电转

找工厂,激光切割,奢侈啊。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-2-21 10:55:47 | 显示全部楼层
幻生幻灭 发表于 2013-2-21 09:47
外面找的加工厂,激光切割

简单的形状,可以用勾刀和电转

激光切割。。。最少多少钱给做啊?感兴趣~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-21 11:07:46 | 显示全部楼层
ewx_boy 发表于 2013-2-21 10:55
激光切割。。。最少多少钱给做啊?感兴趣~

加工量太少,费用好几百不说,还得看人家机器是否有活。时间不保证{:3_60:}
回复 支持 反对

使用道具 举报

发表于 2013-2-22 16:09:44 | 显示全部楼层
视频做的很精细!
回复 支持 反对

使用道具 举报

发表于 2013-3-4 23:12:14 | 显示全部楼层
求教一个问题,我用IRremote库自带的IRecvDump例子,获得到格力空调遥控器的开机键的红外编码,如下所示:
Decoded NEC: 3010040A (32 bits)
Raw (74): 764 8950 -4350 750 -500 700 -500 700 -1550 700 -1550 700 -550 700 -450 750 -450 700 -500 700 -500 700 -500 700 -500 700 -1550 700 -500 700 -500 700 -500 700 -500 700 -500 700 -450 750 -500 700 -450 750 -450 700 -1600 700 -500 700 -500 700 -450 800 -450 650 -500 750 -450 700 -1600 700 -500 700 -1550 700 -500 700 -500 700 -1550 700 -500 700 ,
然后我再写irsend.sendNEC(0x3010040A, 35);无论如何都是不能控制空调打开,这是为什么啊?用同样的方法我已经控制机顶盒成功了,就是不能控制家里的格力空调,求助!
回复 支持 反对

使用道具 举报

发表于 2013-4-25 00:24:32 | 显示全部楼层
非常好的红外系列教程,需要一些技术手段才能阅读。作者还有很多精彩的系列教程
====
看到。。。。。。。。。这里,
回复 支持 反对

使用道具 举报

发表于 2013-6-6 16:22:45 | 显示全部楼层
星逝々 发表于 2013-3-4 23:12
求教一个问题,我用IRremote库自带的IRecvDump例子,获得到格力空调遥控器的开机键的红外编码,如下所示:
...

我也遇到了同样问题。。。。。。。 有人说要用 sendRaw 发送原始数据,我也试了 同样失败。。。。。回去试试电视机 貌似电视机好操作多了。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-6-19 14:26:51 | 显示全部楼层
好像我的MP4遥控器解出来都是6位的
FF6897

FF28D7

FF00FF

FF40BF

FFA05F

FF10EF

FF50AF

FFB04F

FF08F7

FF48B7

FF28D7

FF6897
前面两位用FF补上?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-19 19:46:24 | 显示全部楼层
葱头同学 发表于 2013-6-19 14:26
好像我的MP4遥控器解出来都是6位的
FF6897

不同的厂家协议不同。 国内有些厂家使用的自定义协议。发射测试看看效果吧
回复 支持 反对

使用道具 举报

发表于 2013-7-17 00:14:38 | 显示全部楼层
星逝々 发表于 2013-3-4 23:12
求教一个问题,我用IRremote库自带的IRecvDump例子,获得到格力空调遥控器的开机键的红外编码,如下所示:
...

35 改成 32 试试
回复 支持 反对

使用道具 举报

发表于 2013-7-17 18:41:13 | 显示全部楼层
楼主问一下你接收的是106708F7为什么你的代码是0x807F18E7,而且32是什么意思?
irsend.sendNEC(0x807F18E7, 32); // 记得换成你遥控器的红外线编码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-17 21:17:25 | 显示全部楼层
我叫什么 发表于 2013-7-17 18:41
楼主问一下你接收的是106708F7为什么你的代码是0x807F18E7,而且32是什么意思?
irsend.sendNEC(0x807F18E ...

0x 表示数据格式是16位
32是啥你自己看协议介绍吧。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 16:35 , Processed in 0.057749 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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