互联网连接红外复制器
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
前段时间,为了通过WIFI控制空调,我开始对红外AC遥控器进行解码。
一路上我学到了很多东西,我想与你们所有人分享这些知识,以防它可以在未来的项目中帮助你们(未来的我:我也在看着你们)。我使用了粒子光子,但您可以选择使用不同的 MCU,因为该项目中使用的 IRremote Arduino 库(来自 Ken Shirriff)支持许多其他 MCU。这也是它的官方页面。
有很多 关于该页面上的信息,请务必阅读其中的一些以深入了解 IR 信号的工作原理,但我将在下一节中重现一些要点。
IR 代码的一些背景
以下是作者原帖的抄录:
红外遥控器的工作原理是按特定模式打开和关闭 LED。但是,为了防止来自太阳光或灯光等 IR 源的干扰,LED 不会稳定打开,而是以调制频率(通常为 36、38 或 40KHz)打开和关闭。发送调制信号的时间称为标记,LED 熄灭的时间称为空格。
遥控器上的每个键都有一个与之关联的特定代码(通常为 12 到 32 位),并在按下该键时广播此代码。如果按键被按住,遥控器通常会重复广播键码。对于 NEC 遥控器,按住键时会发送一个特殊的重复代码,而不是重复发送代码。对于飞利浦 RC5 或 RC6 遥控器,每次按下一个键时都会切换代码中的一个位;接收器使用此切换位来确定第二次按下某个键的时间。
在接收端,红外检测器对该信号进行解调,并输出一个逻辑电平信号,指示它是否正在接收信号。当 IR 检测器的频率与发送者的频率相匹配时,其工作效果最佳,但实际上这并不重要。
您现在已准备好进行下一步...
搭建红外接收电路
为了解码红外信号,您需要一个红外接收二极管:
然后按照库中的说明构建接收器电路:
这是引脚分配:
我的面包板最终看起来像这样:
现在,专注于连接接收器二极管(黑色的)而忘记发送器(透明的) - 我们稍后会处理它。
解码一些红外信号
由于项目将通过串行线转储接收到的代码,我们需要将其连接到计算机。使用 USB 电缆为 Photon 供电并将其连接到计算机的 USB 端口。现在是刷固件的好时机。
打开控制台或终端,使用 Particle CLI 监控 USB 端口。
注意: 如果您没有安装 Particle CLI,请按照此处的文档进行安装。
在 Ubuntu Linux 中,这是我必须键入的内容才能监视 Photon 的串行端口:
$ sudo chmod 666 /dev/ttyACM0 $ 粒子串口监视器
根据您的计算机和操作系统,端口可能具有不同的名称和/或可能不需要执行 chmod。
注意: 您可以使用任何其他软件来接收计算机 USB 串口上的数据。
完成后,您可以将要解码的遥控器指向 IR 接收器二极管(类似 LED 的黑色组件)开始点击其上的按钮并检查控制台中打印的内容。
如果一切顺利,你会得到这样的结果:
<代码> 1FEA05F29168950,8500,4050,500,1500,550,500,550,450,550,500,500,1550,500,500,550,500,500,500,550,500,500,500,550,450,550,500,550,1500,500,500,550,500,500,500,550,500,500,550,500,1500,550,1500,550,450,550,1500,550,500,500,1500,550,500,550,450,550,500,500,500,550,END 3,3,2,0 ,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0 ,0,0,0,0,0,0,END
- 第一行 (1FEA05F) 和第三行:暂时忘记它们
- 第二行:打印远程发送的IR命令
我们第一个解码的 IR 命令
说一下收到的IR命令:
<代码> 29168950,8500,4050,500,1500,550,500,550,450,550,500,500,1550,500,500,550,500,500,500,550,500,500,500,550,450,550,500,550,1500,500,500,550,500,500,500,550,500,500,550,500,1500,550,1500,550,450,550,1500,550,500,500,1500,550,500,550,450,550,500,500,500,550,END 代码>
我们可以丢弃第一个值,在本例中为 29168950,因为 IR 库声明如下:“接收缓冲区从第一个标记之前的间隙空间的持续时间开始 "。我们不关心那个持续时间,因为这是我们两次测试之间经过的时间,或者是您按下遥控器按钮所花费的时间。
因此,从接收到的输出来看,这才是真正有趣的东西,也是 IR 命令的形状:
<代码> 8500,4050,500,1500,550,500,550,450,550,500,500,1550,500,500,550,500,500,500,550,500,500,500,550,450,550,500,550,1500,500,500,550,500,500,500,550,500,500,550,500,1500,550,1500,550,450,550,1500,550,500,500,1500,550,500,550,450,550,500,500,500,550,END 代码>
这些数字代表红外脉冲的持续时间(以微秒为单位)。如果需要,我们可以使用以下代码发送此命令:
函数sendIt(){无符号整型ircommand [59] ={8550,4000,550,1500,550,450,550,500,500,550,500,1550,500,500,500,500,550,500,500,500,550,500,500,500,550,500,500,1500,550,500,500,500,550,500,500,500,550,450,550,1500,550,1500,550,500,500,1500,550,500,550,1500 ,500,500,550,500,500,500,550,450,550}; irsend.sendRaw(ircommand,59,38); }
但为此,我们需要构建发射器电路。让我们接下来做。
搭建红外发射电路
最简单的电路是这样的:
然而,这个电路只能给你不到一米的范围。
如果可以,请连接如下电路以扩大范围(约 10 米):
这是我电路的发射端:
测试红外发射器电路
我在固件中添加了几个功能来控制三星电视的音量。这样您就可以在有三星电视的情况下测试您的发射器电路是否正常工作。
只需将发射器 LED 指向电视,然后点击函数 sendSamsungVolumeUp() 和 sendSamsungVolumeDown()。
注意: 请记住,您可以使用手机摄像头检查 IR LED 是否正在传输,因为 IR 显示在那里:
使 IR 命令更具可读性
如果我们将 500 左右的值标识为 0,将 1500 标识为 1,这种选择是任意的,也将 3 分配给超过 5000 的值,将 2 分配给大约 4000 的值,我们最终得到以下表示:
3,3,2,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1, 0,0,0,1,0,0,0,0,0,0,0,0,0,END
现在请记住,在这种完全任意的编码中:
- 3 表示 8500 微秒的脉冲
- 2 表示 4000 微秒的脉冲
- 1 表示 1500 微秒的脉冲
- 0 表示 500 微秒的脉冲
你可能会问,为什么用数字编码?
我希望它有助于可视化和比较命令。这样,比较不同命令之间变化或保持相同的脉冲变得更容易。
示例:您想比较在交流遥控器的情况下将温度设置为 18 度和 19 度的命令之间的变化?当你有 1 和 0 时更容易。
我也喜欢这种在固件代码中存储 IR 命令的格式。请记住在传输之前将它们转换为脉冲(通过调用固件中的函数 convertToPulseDuration())。
阅读资源
我阅读了一堆网站以了解该主题。以下是其中一些的列表:
- 对空调红外遥控协议进行逆向工程
- 在 arduino IRremote 库中使用任意遥控器
- 粒子社区中的此主题
- 了解空调遥控器的红外协议
- 这个关于 adafruit 的博客
结论
通过一些工作、一个 MCU 和几个组件,您将能够解码和复制您家中的许多遥控器。有一些限制,这可以让你从你的手机、平板电脑、笔记本电脑、电脑控制所有这些设备,甚至为它们创建一些简单的自动化。很酷吧?
现在你可以考虑添加 Blynk,在 Ionic 框架中创建一个应用程序,用 Google Now 或 Alexa 与之交谈,或者用 Porter 控制它。
我计划应用这些知识来控制房子周围的一些设备,我希望将来能写出更多的文章。敬请期待!
2018 年 2 月 5 日更新:
这是该项目的一个实现:通过互联网控制的红外壁炉。
需要帮助吗?
如果您的项目需要专业帮助,请随时通过 [email protected] 给我写一封关于您的需求的电话。谢谢!
代码
红外线复制器
源码https://github.com/gusgonnet/infraredReplicator示意图
制造工艺