为电视、空调、风扇、DVD、DTH等管理不同的遥控器(平均数字)是相当困难的。如果我们只有一个遥控器,可以在任何时间为任何设备充当专用遥控器,那会怎么样?
图1:基于Arduino和TSOP1738的通用红外遥控接收机原型
图2:基于Arduino的通用红外遥控概述
的电子电器遥控器使用红外通信技术。根据标准协议,为遥控器的每个键分配特定的代码。
有各种各样的协议由制造商设计,如NEC,索尼SIRC,飞利浦RC5,飞利浦RC6;每个都携带不同的编码方案。例如,在基于NEC协议的远程中,传输的是32位代码,而在索尼中,传输的是12位代码。
基本上,这些代码只是两个级别的脉冲,即高和低。每个脉冲的持续时间以毫秒为单位,这是由制造商决定的。
信号调制的频率标准化为38千赫。为防止太阳光或灯光等红外光源的干扰领导不是稳定地打开,而是以调制频率(通常是36或38KHz)打开和关闭。因此,每个接收器必须能够有效地接收38khz信号。一种非常简单和可靠的红外信号接收设备是TSOP17XX,其中XX表示它响应的频率。TSOP1738常用于红外接收器的应用。
TSOP 1738
TSOP是一种用于红外遥控系统的小型接收机。销二极管引线框架上安装前置放大器和前置放大器,环氧封装设计为红外滤波器。解调后的输出信号可由微处理器直接解码。TSOP是标准的红外遥控接收机系列,支持所有主要的传输码。它的输出是活跃低。
图3:TSOP1738红外接收机引脚图
如何解码遥控器?
要知道当按下遥控器上的键时传输的是什么信号,我们需要解码它。这可以在示波器的帮助下完成。虽然看起来相当困难,但在家里找一个示波器是不可能的。Arduino Library是解决这个问题的一个经济可行的方法。" IRremote "库提供了一个现成的代码来解码IR远程并在串行监视器上显示它。
在Arduino IDE 1.0.5及更高版本中,该库是预加载的,而对于较老版本,您可以从Arduino的官方网站获得该库。
' IRrecvDemo '是一个解码红外信号的程序。获取Arduino并连接TSOP1738,如下所示:
图4:基于Arduino的红外远程接收机电路图
现在将代码' IRrecvDemo '上传到板上。
在完成上传之后,打开串行监视器窗口,并将您想要解码的远程指向TSOP传感器。
按任意键,一个代码(十六进制)将出现在窗口。请记下代码以供进一步参考。
如果您不知道您的远程协议的类型,请使用示例中的程序' IRrecord '。上传程序并重复上述过程。在串行监视器上,您将找到协议类型以及十六进制代码
.
类似地,记录您想要复制为一个的所有键和远程的代码。这些HEX代码将被插入到通用遥控器的程序中。
制作万能遥控器
在遥控器上,我们做了6个键,即频道向上;通道;体积;音量;电源开关和静音。
这6个键连接在一个2×3矩阵中,它很容易与Arduino接口。
另外,为了选择要操作的设备,(因为设备有不同的协议)我们提供了select按钮。选择按钮的数量取决于要复制的远程的数量。
为了简单起见,我们采用了3个选择按钮,分别用于电视、DVD和DTH(您可以根据您的需求选择任何设备)。
因此,遥控器总共有9个键(3个选择键和6个操作键)
的红外LEDArduino的数字引脚3与Ground通过330E电阻连接。
选择开关连接到数字引脚9、10和11,而操作键以2×3矩阵的形式与数字引脚4、5、6、7和8连接。
图5:图像显示基于Arduino的通用红外遥控接收机的不同电路部分
操作
遥控器的操作相当简单直接。选择按钮帮助决定由遥控器控制哪个设备。例如,如果按下Switch1,则applance1(这里是tv)将被控制。现在,只要按下操作键,相应的代码就会传输。
按下操作后,所有的工作都由遥控器的心脏Arduino完成,最后IR LED就像蛋糕上的樱桃。
图6:图像显示基于Arduino的通用红外远程接收器正在工作
项目源代码
# # ##include //包含IR远程库 IRsend IRsend;#define select1 //选择按钮#define select2 #define select3 #define row1 4 //操作键盘矩阵(2x3) #define row2 5 #define col1 6 #define col2 7 #define col3 8 void setup() {pinMode(row1,OUTPUT);pinMode (row2、输出);pinMode (col1、输入);pinMode (col2、输入);pinMode (col3、输入);pinMode (select1、输入);pinMode (select2、输入);pinMode (select3、输入);} void loop() {if(digitalRead(select1)==HIGH) // Remote 1 (TV) {digitalWrite(row1,HIGH); digitalWrite(row2,LOW); if(digitalRead(col1)==HIGH) // key1 pressed { irsend.sendNEC(0x1CE338C7,32); //power } else if(digitalRead(col2)==HIGH) // key2 pressed { irsend.sendNEC(0x1CE3A857,32); //mute } else if(digitalRead(col3)==HIGH) // key3 pressed { irsend.sendNEC(0x1CE36897,32); //Channel Up } else { digitalWrite(3,LOW); } delay(10); digitalWrite(row2,HIGH); digitalWrite(row1,LOW); if(digitalRead(col1)==HIGH) // key4 pressed { irsend.sendNEC(0x1CE3E817,32); //Channel Down } else if(digitalRead(col2)==HIGH) // key5 pressed { irsend.sendNEC(0x1CE330CF,32); //Volume Up } else if(digitalRead(col3)==HIGH) // key6 pressed { irsend.sendNEC(0x1CE3B04F,32); //Volume Down } else { digitalWrite(3,LOW); } delay(10); } else if (digitalRead(select2)==HIGH) // --> Remote 2 (DVD/DTH/etc) { // Similar to 'if(){}' block above; copy your own remote codes; } else if (digitalRead(select2)==HIGH) // --> Remote 3 (other appliances like AC) { // Similar to 'if(){}' block above; copy your own remote codes; } else { // if multiple select switches ON simultaneously --> NO operation } } ###
与本文相关的问题?
询问和讨论EDAboard.com而且Electro-Tech-Online.com论坛。
告诉我们你的想法!!
你一定是登录发表评论。