Arduino教程14--红外遥控灯「DFR0100 」
2014-06-0510万
AI 快速预览详细
本篇Arduino教程介绍了如何使用红外接收管和遥控器控制LED灯的开关。首先,我们需要准备红外接收管、LED灯等元件,并按照提供的硬件连接图进行连接。然后,通过安装IRremote库2.6.0版本,编写代码来实现对LED灯的控制。通过串口监视器,我们可以看到遥控器发出的16进制代码,从而控制LED灯的开关。这个项目适合零基础的新手,特别适用于STEM教育和编程启蒙。
|
【本篇课程内容于 2024年11月14日更新】 >本系教程配套硬件套件:【新版】Arduino入门套件 DFR0100 这节我们会接触一个新的元件——红外接收管。所谓红外接收管,也就是接收红外光的电子器件。红外接收管,看着离我们很遥远的感觉!其实不然,它就在我们身边。比如我们的电视机,空调这些家电,其实它们都需要用到红外接收管。我们都知道遥控器发射出来的都是红外光,电视机上势必要有红外接收管,才能接收到遥控器发过来的红外信号。 我们这次就用红外接收管做个遥控灯,通过遥控器的红色电源键来控制LED的开关。在开始遥控灯之前,我们先来个预热实验,通过串口来了解下如何使用红外接收管和遥控器。 元件清单 ![]() 硬件连接 红外接收模块只需要连接三根线就可以了,注意一下正负就可以了(图中表明部分)。红外接收管Vout输出接到数字引脚11。在这个基础上,加一个LED和电阻,LED使用的是数字引脚10。红外接收管仍然接的是数字引脚11(LED灯在该项目的后半部分会用上)。 ![]() 图 1 红外遥控接收器连线图 代码示例 对于遥控红外模块,我们提供现成的IRremote库,直接在Arduino IDE中安装IRremote库(需使用该库的2.6.0版本,如图2),输入样例代码1运行即可。如果还是不是很明白如何加载库,可以回看一下项目【炫彩LED】课后作业部分,对如何加载库做了详细说明。 ![]() 图2 样例代码1: 下载完成后,打开Arduino IDE的串口监视器(Serial Monitor),设置波特率为9600,与代码中Serial.begin(9600)相匹配。 ![]() ![]() 设置完后,用Mini遥控器的按钮对着红外接收管的方向,任意按个按钮,我们都能在串口监视器上看到相对应的代码。如下图所示,按数字“0”,接收到对应16进制的代码是“FD30CF”。每个按钮都有一个特定的16进制的代码。 ![]() 如果长按一个键不放就会出现“FFFFFFFF”。 ![]() 在串口中,正确接收的话,应该收到以FD-开头的六位数。如果遥控器没有对准红外接收管的话,可能会接收到错误的代码。如下图所示: ![]() 上面这段代码我们没有像以前一样一步一步做详细说明,原因就是由于红外解码较为复杂,所幸的是,高手把这些难的工作已经做好了,提供给我们这个IRremote库,我们只需要会用就可以了,先不需要弄明白函数内部如何工作的。要用的时候,把代码原样搬过来就好了。照猫画虎,先用起来再说~ 预热完之后,我们言归正传,开始制作遥控灯。 这里不建议一步一步输入代码,可以在原有的代码上进行修改,观察下相对样例代码1增加了哪些内容。 样例代码2: 代码回顾 程序一开始还是对红外接收管的一些常规定义,按原样搬过来就可以了。 在这里,我们多定义了一个变量ledState,通过名字应该就可以看出来含义了,用来存储LED的状态的,由于LED状态就两种(1或者0),所以我们使用boolean变量类型,(可回看项目三中,表3-1列举出的数据类型)。 setup()函数中,对使用串口,启动红外解码,数字引脚模式进行设置。 到了主函数loop(),一开始还是先判断是否接收到红外码,并把接收到的数据存储在变量results中。 if (irrecv.decode(&results)) 一旦接收到数据后,程序就要做两件事。第一件事,判断是否接收到了电源键的红外码。 if(results.value == 0xFD00FF) 第二件事,就是让LED改变状态。 ledState = !ledState; //取反 digitalWrite(ledPin,ledState); //改变LED相应状态 这里可能对“!”比较陌生,“!”是一个逻辑非的符号,“取反”的意思。我们知道“!=”代表的是不等于的意思,也就是相反。这里可以类推为,!ledState是ledState相反的一个状态。“!”只能用于只有两种状态的变量中,也就是boolean型变量。 最后,继续等待下一组信号。 irrecv.resume(); 课后练习 1、通过这个遥控项目,再结合项目【自制风扇】的风扇,能不能再给遥控器增加一个功能,既可控灯,还可控风扇。 2、DIY一个你的遥控作品吧!比如简单的会动的小人,结合我们前面的舵机,通过遥控器上不同的按键,让舵机转动不同的角度,感觉随你的控制转动,发挥你的想象做出更多Arduino作品吧! |













sos
我库加载进去了,但是它就一直在报错,改了许久都改不出来
这一行报错:
exit status 1
invalid types 'long int[int]' for array subscript
咋整呢?
后面是我是在windows解压后用filezila传输到树莓派上的,可能有些麻烦,如果使用树莓派的同学遇到相同的情况可以参照。关键词:ssh, ifconfig, sftp, filezila
赞一下
https://mc.dfrobot.com.cn/thread-1854-1-1.html
我已经删掉库里带的robotremot还有irremotetool的相关文件,也能编译通过,但是遥控器什么的木有反应,用手碰一碰会打印一些数字,遥控器不好使。
是不是传感器的问题?还是需要换遥控器?
把遥控器里的塑料纸抽出来就好了~
然而过程中仍存在疑问:在将IRremote库加载后,编译虽然成功,但是出现了这样的告警字样:
IRremote.h" 对应多个库
已使用: /Users/diaosiji/Documents/Arduino.app/Contents/Java/libraries/IRremote
未使用:/Users/diaosiji/Documents/Arduino.app/Contents/Java/libraries/RobotIRremote
请问这个问题是为什么,如何消除?