我们平常接触红外线的应用,像是电视机、冷气机的遥控器就是个红外线发射器,而电视机、冷气机上则有红外线接收器。
红外线接收器与发射器
人类可见光约为 390 到 700 nm(奈米),其中可见的红光波长约为 620 至 750 nm 左右,而波长超过 760 nm 的光,人类无法感知,称为红外光,一般我们还会听到有近红外光、远红外光等分类,这在不同领域中有不同的分类。
电视机、冷气机等一般常使用 940 nm 波长的红外光,以避免太阳光、室内光源等发出的红外光干扰,其他还有 850 nm、860 nm 等其他波长,最好能让接收器与发射器规格一致,以免造成误判。
上图左侧是红外线接收器,我手边这只三个接脚由左至右分别是讯号、GND 与电源,有的接收器 GND 与电源线会相反,使用时要确认一下。
由于生活周遭物品也会不定时地散发红外光,红外线接收器设计为只对特定频率有反应,常见使用的是 38k Hz;红外线发射器就是个 LED,可发出特定波长的红外线,在 Arduino,可以使用tone函式(是之前谈蜂呜器时有提过)指定以特定频率(像是 38k Hz)发射红外线。
使用 mBlock 测试红外线接收器
如果想要简单地体验、测试一下红外线接收器,可以如下衔接电路:
如果使用 mBlock 2.1 的话,可以如下撰写程式:
如上图撰写程式的话,在还没按上遥控器时,从红外线接收器多半就会收到一堆 1 的讯号,遥控器实际上是有特定编码地发射红外线讯号,你可以在运行程式之后,拿起家里的电视遥控器对着接收器发射,在接收器收到 0 的讯号时,猫咪会以“收到遥控器讯号”的提示文字表示。
使用 IRremote 测试红外线接收器
如果想要用红外线接收器解码遥控器的红外线指令,可以使用IRremote程式库搭配 Arduino IDE 来快速地体验一下,可以到 IRremote 的 Github 按下“Download ZIP”,会下载一个 Arduino-IRremote-master.zip 档案,解开后将其中目录更名为 Arduino-IRremote,并将整个目录置于 Arduino IDE 安装目录的 libraries 之中:
接着开启 Arduino IDE,就可以在“档案/范例”中,看到 IRremote 相关范例:
如果想测试一下电视遥控器的指令解码,可以开启“IRrecvDemo”范例,电路如先前看到的图衔接就可以了,这个范例程式会从 D11 接收红外线讯号并解码,直接将程式上传至 Arduino,并执行“工具/序列埠监控视窗”,然后按下电视遥控器的电源键,你应该可以看到对应的解码讯息出现:
使用 IRremote 测试红外线发射器
如果使用 mBlock 2.1,那么“播放脚位…”这方块,可以直接指定频率,驱动红外线发射器发出红外线:
若要能发出如遥控器的各种指令红外光,这在 mBlock 中自行以积木建构会是个大工程,在之前的 IRremote 范例中,可以看到“IRsendDemo”范例,可以使用这个范例来测试红外线发射:
按照注解来看,这个范例可以发出 Sony 电视机的电源红外线指令,至于那个Serial.read的if判断,是要看看有无从“序列埠监控视窗”收到输入,也就是你可在先前看到的“序列埠监控视窗”中输入文字然后按下“传送”,这样if条件就会成立,然后按照程式流程发出电源红外线指令,如果不想这么麻烦,就将if的部份注解掉,这样就会不断地发出电源红外线指令了。
电路的部份,只需要如下衔接就可以了,要注意的是,由于 IRremote 的限制,你只能用 D3 脚位来送出讯号:
如果需要测试一下是不是正确地发出红外线指令,你需要另一块 Arduino 板子,如先前在测试接收器的电路的方式衔接,然后上传“IRrecvDemo”范例,那么在“序列埠监控视窗”中,你就可以看到以下的解码讯息:
感谢CodeData用户:caterpillar的贡献 著作权归作者所有
整理:宁波家电物联网云平台,中科极动云