|
|
第5行: |
第5行: |
| | | |
| ==规格参数 == | | ==规格参数 == |
− | # CR2025环保纽扣电池,容量160mah
| + | ===红外发射模块=== |
− | # 发射距离:8m以上(具体和周围环境、接收端的灵敏度等因素有关)
| + | * 供电电压:5V |
− | # 有效角度:60度
| + | * 工作环境:-25~+85℃ |
− | # 面贴材料:0.125mmPET,有效寿命2万次。
| + | * 储存温度:-30~+100 ℃ |
− | # 品质稳定,性价比高
| + | * 波长:940nm |
− | # 静态电流3-5uA,动态电流3-5mA。
| + | * 模块尺寸:13.7mm×27.8mm |
− | | + | * 模块重量:1g |
| + | * 信号类型:数字信号 |
| + | * 红外中心波长:约850nm-940nm |
| + | * 红外发射角:约20度 |
| + | * 红外发射距离:约1.3米 (5V 38Khz) |
| + | ===红外接收模块=== |
| + | ==规格参数== |
| + | * 供电电压: 5V |
| + | * 工作环境: -25~+85℃ |
| + | * 储存温度: -30~+100 ℃ |
| + | * 接收频率: 38KHz |
| + | * 模块尺寸: 13.7mm×27.8mm |
| + | * 模块重量: 2g |
| ==产品清单== | | ==产品清单== |
− | # 红外发射模块*1个
| + | * 红外发射模块*1个 |
− | # 红外接收模块*1个
| + | * 红外接收模块*1个 |
− | # 3P传感器连接线*2个
| + | * 3P传感器连接线*2个 |
− | | + | ==相应产品资料== |
− | ==使用方法== | + | ===红外发射模块=== |
− | * 什么是红外接收头?
| + | [http://www.alsrobot.cn/wiki/index.php?title=(SKU:RB-03T004)%E7%BA%A2%E5%A4%96%E5%8F%91%E5%B0%84%E6%A8%A1%E5%9D%97 红外发射模块相关资料及使用方法介绍]<br/> |
− | 红外遥控器发出的信号是一连串的二进制脉冲码 为了使其在无线传输过程中免受其他红外信号的干扰,通常都是先将其调制在特定的载波频率上,然后再经红外发射二极管发射出去,而红外线接收装置则要滤除其他杂波,只接收该特定频率的信号并将其还原成二进制脉冲码,也就是解调.
| + | ===红外接收模块=== |
− | * 工作原理
| + | [http://www.alsrobot.com.cn/wiki/index.php?title=(SKU:RB-03T005)%E7%BA%A2%E5%A4%96%E6%8E%A5%E6%94%B6%E6%A8%A1%E5%9D%97#.E4.BA.A7.E5.93.81.E7.9B.B8.E5.85.B3.E6.8E.A8.E8.8D.90 红外接收模块相关资料及使用方法介绍]<br/> |
− | 内置接收管将红外发射管发射出来的光信号转换为微弱的电信号,此信号经由IC内部放大器进行放大,然后通过自动增益控制、带通滤波、解调变、波形整形后还原为遥控器发射出的原始编码,经由接收头的信号输出脚输入到电器上的编码识别电路。
| + | ==产品相关推荐== |
− | * 红外接收头的引脚与连线
| + | [[文件:erweima.png|230px|无框|右]] |
− | D为数据输出
| + | ===产品购买地址=== |
− | GND为电源地
| + | [http://www.alsrobot.cn/goods-151.html 红外发射接收套件]<br/> |
− | VCC为电源正
| + | ===周边产品推荐=== |
− | ==红外遥控接收传感器的测试 == | + | [http://www.alsrobot.cn/goods-151.html 红外接收遥控套装]<br/> |
− | 我们使用 Arduino 控制器来做个测试,要用到硬件设备如下:
| + | ===相关问题解答=== |
− | # Arduino 控制器×1
| + | [http://www.makerspace.cn/forum.php?mod=viewthread&tid=2617&fromuid=10780 红外接收发射套装的编码解码技术问题]<br/> |
− | # Arduino LCD1602 字符液晶扩展板×1
| + | ===相关学习资料=== |
− | # 红外遥控接收传感器模块×1
| + | [http://v.youku.com/v_show/id_XODc4NDc4MTQw.html?from=y1.7-2 视频: 红外无线发射接收之颜色识别系统]<br/> |
− | # 蜂鸣器发声模块×1
| + | [http://v.youku.com/v_show/id_XODc4NDg2NDYw.html?from=y1.7-2 视频: 红外无线传输之旋转电位计控制LED灯]<br/> |
− | # 超薄红外遥控器×1
| + | [http://www.makerspace.cn/portal.php 奥松机器人技术论坛]<br/> |
− | # 通用 3P 传感器连接线×2
| + | |
− | # USB 数据通信线×1
| + | |
− | ==红外遥控实验==
| + | |
− | # 实验器件 红外遥控器 1个 IR Receiver Module 1个 数字传感器连接线 1根
| + | |
− | # 实验原理 要想对某一遥控器进行解码必须要了解该遥控器的编码方式,这就叫知己知彼,百战不殆 。本产品使用的遥控器的编码方式为:NEC协议。下面就介绍一下NEC协议:
| + | |
− | •NEC协议介绍:
| + | |
− | 特点:
| + | |
− | (1)8位地址位,8位命令位<br/>
| + | |
− | (2)为了可靠性地址位和命令位被传输两次<br/>
| + | |
− | (3)脉冲位置调制<br/>
| + | |
− | (4)载波频率38khz<br/>
| + | |
− | (5)每一位的时间为1.125ms或2.25ms <br/>
| + | |
− | •逻辑0和1的定义如下图:
| + | |
− | [[文件:hongwai1.jpg|500px|有框|居中]]
| + | |
− | 协议如下:<br/>
| + | |
− | •按键按下立刻松开的发射脉冲:
| + | |
− | [[文件:hongwai2.jpg|500px|有框|居中]] | + | |
− | 上面的图片显示了NEC的协议典型的脉冲序列。注意:这是首先发送LSB(最低位)的协议。在上面的脉冲传输的地址为0x59命令为0x16。一个消息是由一个9ms的高电平开始,随后有一个4.5ms的低电平, (这两段电平组成引导码)然后由地址码和命令码。地址和命令传输两次。第二次所有位都取反,可用于对所收到的消息中的确认使用。总传输时间是恒定的,因为每一点与它取反长度重复。如果你不感兴趣, 你可以忽略这个可靠性取反,也可以扩大地址和命令,以每16位!<br/>
| + | |
− | •按键按下一段时间才松开的发射脉冲:<br/>
| + | |
− | [[文件:hongwai3.jpg|500px|有框|居中]]
| + | |
− | 一个命令发送一次,即使在遥控器上的按键仍然按下。当按键一直按下时,第一个110ms的脉冲与上图一样,之后每110ms重复代码传输一次。这个重复代码是由一个9ms的高电平脉冲和一个2.25ms低电平和560μs的高电平组成。<br/>
| + | |
− | •重复脉冲<br/>
| + | |
− | [[文件:hongwai4.jpg|500px|有框|居中]] | + | |
− | 注意:脉冲波形进入一体化接收头以后,因为一体化接收头里要进行解码、信号放大和整形,故要注意在没有红外信号时,其输出端为高电平,有信号时为低电平,故其输出信号电平正好和发射端相反。接收端脉冲大家可以通过示波器看到,结合看到的波形理解程序。<br/>
| + | |
− | •本实验编程思想<br/>
| + | |
− | 根据NEC编码的特点和接收端的波形,本实验将接收端的波形分成四部分:引导码(9ms和4.5ms的脉冲)、地址码16位(包括8位的地址位和8位的地址的取反)、命令码16位(包括8位命令位和8位命令位的取反)、重复码(9ms、2.25ms、560us脉冲组成)。 利用定时器对接收到的波形的高电平段和低电平段进行测量,根据测量到的时间来区分:逻辑“0”、逻辑“1”、引导脉冲、重复脉冲。引导码和地址码只要判断是正确的脉冲即可,不用存储,但是命令码必须存储,因为每个按键的命令码都不同, 根据命令码来执行相应的动作。设置遥控器上的几个按键VOL+:控制LED灯亮的;VOL-:作为控制蜂鸣器响;
| + | |
− | ==实验代码== | + | |
− | 程序功能:对遥控器发射出来的编码脉冲进行解码,根据解码结果执行相应的动作。按下前进键红灯亮,松开红灯灭停止;按下后退键蜂鸣器响,松开蜂鸣器停止响;这样大家就可以用遥控器遥控你的器件了,让它听你的指挥。其它按键的译码方式与这几个键一样,只要大家用示波器测出它们各自的波形,了解各自的命令码,在执行译码结果的函数中写上对应的命令码和要执行的动作即可。
| + | |
− | <pre style='color:blue'>
| + | |
− | #define BUZZER 10//蜂鸣器
| + | |
− | #define LED_RED 11//红灯
| + | |
− | #define IR_IN 8 //红外接收
| + | |
− | int Pulse_Width=0;//存储脉宽
| + | |
− | int ir_code=0x00;//命令值
| + | |
− | void timer1_init(void)//定时器初始化函数
| + | |
− | {
| + | |
− | TCCR1A = 0X00;
| + | |
− | TCCR1B = 0X05;//给定时器时钟源
| + | |
− | TCCR1C = 0X00; TCNT1 = 0X00;
| + | |
− | TIMSK1 = 0X00; //禁止定时器溢出中断
| + | |
− | }
| + | |
− | void remote_deal(void)//执行译码结果函数
| + | |
− | {
| + | |
− | switch(ir_code)
| + | |
− | {
| + | |
− | case 0xff00://停止
| + | |
− | digitalWrite(LED_RED,LOW);//红灯不亮
| + | |
− | digitalWrite(BUZZER,LOW);//蜂鸣器不响
| + | |
− | break; case 0xfe01://VOL+
| + | |
− | digitalWrite(LED_RED,HIGH);//红灯亮
| + | |
− | break; case 0xf609://VOL-
| + | |
− | digitalWrite(BUZZER,HIGH);//蜂鸣器响
| + | |
− | break;
| + | |
− | }
| + | |
− | }
| + | |
− | char logic_value()//判断逻辑值“0”和“1”子函数
| + | |
− | {
| + | |
− | while(!(digitalRead(8))); //低等待
| + | |
− | Pulse_Width=TCNT1;
| + | |
− | TCNT1=0;
| + | |
− | if(Pulse_Width>=7&&Pulse_Width<=10)//低电平560us
| + | |
− | {
| + | |
− | while(digitalRead(8));//是高就等待
| + | |
− | Pulse_Width=TCNT1;
| + | |
− | TCNT1=0;
| + | |
− | if(Pulse_Width>=7&&Pulse_Width<=10)//接着高电平560us
| + | |
− | return 0;
| + | |
− | else if(Pulse_Width>=25&&Pulse_Width<=27) //接着高电平1.7ms
| + | |
− | return 1;
| + | |
− | }
| + | |
− | return -1;
| + | |
− | }
| + | |
− | void pulse_deal()//接收地址码和命令码脉冲函数
| + | |
− | {
| + | |
− | int i; //执行8个0 for(i=0; i<8; i++)
| + | |
− | {
| + | |
− | if(logic_value() != 0) //不是0
| + | |
− | return;
| + | |
− | }
| + | |
− | //执行6个1 for(i=0; i<6; i++)
| + | |
− | {
| + | |
− | if(logic_value()!= 1) //不是1
| + | |
− | return;
| + | |
− | }
| + | |
− | //执行1个0
| + | |
− | if(logic_value()!= 0) //不是0
| + | |
− | return;
| + | |
− | //执行1个1
| + | |
− | if(logic_value()!= 1) //不是1
| + | |
− | return;
| + | |
− | //解析遥控器编码中的command指令
| + | |
− | ir_code=0x00;//清零
| + | |
− | for(i=0; i<16;i++ )
| + | |
− | {
| + | |
− | if(logic_value() == 1)
| + | |
− | {
| + | |
− | ir_code |=(1<<i);
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | void remote_decode(void)//译码函数
| + | |
− | {
| + | |
− | TCNT1=0X00;
| + | |
− | while(digitalRead(8))//是高就等待
| + | |
− | {
| + | |
− | if(TCNT1>=1563) //当高电平持续时间超过100ms,表明此时没有按键按下
| + | |
− | {
| + | |
− | ir_code = 0xff00;
| + | |
− | return;
| + | |
− | }
| + | |
− | }
| + | |
− | //如果高电平持续时间不超过100ms
| + | |
− | TCNT1=0X00;
| + | |
− | while(!(digitalRead(8))); //低等待
| + | |
− | Pulse_Width=TCNT1;
| + | |
− | TCNT1=0;
| + | |
− | if(Pulse_Width>=140&&Pulse_Width<=141)//9ms
| + | |
− | {
| + | |
− | while(digitalRead(8));//是高就等待
| + | |
− | Pulse_Width=TCNT1;
| + | |
− | TCNT1=0;
| + | |
− | if(Pulse_Width>=68&&Pulse_Width<=72)//4.5ms
| + | |
− | {
| + | |
− | pulse_deal();
| + | |
− | return;
| + | |
− | }
| + | |
− | else if(Pulse_Width>=34&&Pulse_Width<=36)//2.25ms
| + | |
− | {
| + | |
− | while(!(digitalRead(8)));//低等待
| + | |
− | Pulse_Width=TCNT1;
| + | |
− | TCNT1=0;
| + | |
− | if(Pulse_Width>=7&&Pulse_Width<=10)//560us
| + | |
− | {
| + | |
− | return;
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | }
| + | |
− | void setup()
| + | |
− | {
| + | |
− | unsigned char i;
| + | |
− | pinMode(LED_RED,OUTPUT);//设置与红灯连接的引脚为输出模式
| + | |
− | pinMode(BUZZER,OUTPUT);//设置与蜂鸣器连接的引脚为输出模式
| + | |
− | pinMode(IR_IN,INPUT);//设置红外接收引脚为输入
| + | |
− | }
| + | |
− | void loop()
| + | |
− | {
| + | |
− | timer1_init();//定时器初始化
| + | |
− | while(1)
| + | |
− | {
| + | |
− | remote_decode(); //译码
| + | |
− | remote_deal(); //执行译码结果
| + | |
− | }
| + | |
− | }</pre>
| + | |
− | | + | |
− | 遥控器键值附表
| + | |
− | [[文件:QQ20150623151737.png|500px|有框|居中]]
| + | |
− | | + | |
− | ==相关链接==
| + | |
− | 论坛地址:[http://www.makerspace.cn/portal.php 奥松机器人技术论坛]<br/>
| + | |
− | 购买地址:[http://www.alsrobot.cn/goods-151.html 红外发射接收套件]
| + | |
Arduino 红外无线遥控套件由Mini超薄红外遥控器和38KHz红外接收模块组成,Mini超薄红外遥控器具有20个功能键,发射距离最远可达8米,非常适合在室内操控各种设备。红外接收模块可接收标准38KHz调制的遥控器信号,通过对Arduino进行编程,即可实现对遥控器信号的解码操作,从而可制作各种遥控机器人以及互动作品。