Arduino与红外遥控握手
1.0 简介
-
红外遥控器:是一种通过红外线及时通讯的控制器,适用于那些需要机器设备状态调整的控制系统。在车载MP3、灯光设备、单片机开发板和遥控车等短距离控制场合中已经得到了普遍应用。本篇通过官方《IRremote》驱动库读出按键码值和实现LED灯的亮灭。
-
外形结构:主要是由遥控器由红外接收及发射电路、信号调理电路、中央控制器8031.程序及数据存储器、键盘及状态指示电路组成。
-
工作原理:
遥控器由红外接收及发射电路、信号调理电路、中央控制器程序及数据存储器、键盘及状态指示电路组成。
遥控器有两种状态:学习状态和控制状态。当遥控器处于学习状态时,使用者每按一个控制键,红外线接收电路就开始接收外来红外信号,同时将其转换成电信号,然后经过检波、整形、放大,再由CPU定时对其采样,将每个采样点的二进制数据以8位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用。当遥控器处于控制状态时,使用者每按下一个控制键,CPU从指定的存储单元中读取一系列的二进制数据,串行输出(位和位之间的时间间隔等于采样时的时间间隔)给信号保持电路,同时由调制电路进行信号调制,将调制信号经放大后,由红外线发射二极管进行发射,从而实现对该键对应设备功能的控制。(本次学习重点控制状态🤣🤣🤣)
- 红外遥控器相关参数见下:
红外遥控距离: 接收范围8米左右
发射管红外波长:940nm
晶振频率:455KHZ
载波频率:38KHZ
编码:编码格式为NEC
尺寸:86406mm
电源:CR2025/1600mAH
2.0 实验材料
- Arduino Uno R3开发板
- USB数据线
- 三根公母线
- SG90舵机
- 一台安装Arduino开发环境的电脑
3.0 实验步骤
3.1 根据原理图搭建电路
-
在使用前一定要记得给红外遥控器上电池,还有红外遥控器要结合红外接收模块使用,它负责将接收红外遥控器发射过来的信息并将其解码成十六进制码,这样才能实现既定的通信。(可以使用手机判断红外遥控器是否有电)
-
将红外接收模块与Arduino正确连接,其中S连接D3,VCC接+5V,GND接GND,并将其固定好;
实验原理图分别对应两个实验:
实验接线图:
3.2 库文件调用:
需要IRremote库文件。操作起来:点击Arduino IDE工具选择管理库 ,搜索IRremote选择IRRemoteControl安装,如果这个不行,删除后试试其他的
3.3 新建sketch,拷贝如下代码并进行保存编译上传
代码1:
#include <IRremote.h>
int RECV_PIN = 11;//定义红外接收器的引脚为11
IRrecv irrecv(RECV_PIN);
decode_results results;//注意这个数据类型
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 初始化红外接收器
}
void loop() {
if (irrecv.decode(&results)) { //注意这里取解码结果的方法,传递的是变量指针。
Serial.println(results.value,HEX); //以16进制换行输出接收代码。注意取值方法【results.value】。
irrecv.resume(); // 给红外传送指令,让其继续接收下一个值。同315M无线接收一个道理。
}
}
代码2:
#include <IRremote.h>
long ir_item;
IRrecv irrecv_3(3);
decode_results results_3;
void setup(){
Serial.begin(9600);
pinMode(4, OUTPUT);
irrecv_3.enableIRIn();
}
void loop(){
if (irrecv_3.decode(&results_3)) {
ir_item=results_3.value;
String type="UNKNOWN";
String typelist[14]={"UNKNOWN", "NEC", "SONY", "RC5", "RC6", "DISH", "SHARP", "PANASONIC", "JVC", "SANYO", "MITSUBISHI", "SAMSUNG", "LG", "WHYNTER"};
if(results_3.decode_type>=1&&results_3.decode_type<=13){
type=typelist[results_3.decode_type];
}
Serial.print("IR TYPE:"+type+" ");
delay(150);
Serial.print("Receive: ");
Serial.println(ir_item);
if (ir_item == 0xE318261B) {
digitalWrite(4,HIGH);
Serial.println("Light turn on");
}
if (ir_item == 0xEE886D7F) {
digitalWrite(4,LOW);
Serial.println("Light turn off");
}
irrecv_3.resume();
} else {
}
}
MIxly代码
3.3 实验现象
- 代码1:
依次按下按钮并记录如下,需要重复实验确定码值!!!
两种遥控器分别对应的码值有所区别
-代码2:
点击CH-使小灯点亮,点击CH+使小灯熄灭,实现短距离即时通讯的效果
红外遥控与Arduino实现小灯控制
4.0 总结
- 用红外遥控器与Arduino 通讯,代码1是直接利用Arduino 第三方IRRemoteControl库解码,得到十六进制数,然后重复实验得到码值;代码2是红外遥控器与Arduino 通讯,点击CH-使小灯点亮,点击CH+使小灯熄灭,实现短距离即时通讯的效果。
- 在以后的博文中我们将学会用arduino常用传感器和执行器,从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。