Arduino与红外遥控握手

Arduino教程传送门

Arduino与红外遥控握手

    • 1.0 简介
    • 2.0 实验材料
    • 3.0 实验步骤
        • 3.1 根据原理图搭建电路
        • 3.2 库文件调用:
        • 3.3 新建sketch,拷贝如下代码并进行保存编译上传
        • 3.3 实验现象
    • 4.0 总结

1.0 简介

  • 红外遥控器:是一种通过红外线及时通讯的控制器,适用于那些需要机器设备状态调整的控制系统。在车载MP3、灯光设备、单片机开发板和遥控车等短距离控制场合中已经得到了普遍应用。本篇通过官方《IRremote》驱动库读出按键码值和实现LED灯的亮灭。

  • 外形结构:主要是由遥控器由红外接收及发射电路、信号调理电路、中央控制器8031.程序及数据存储器、键盘及状态指示电路组成。
    Arduino与红外遥控握手_第1张图片

  • 工作原理
    遥控器由红外接收及发射电路、信号调理电路、中央控制器程序及数据存储器、键盘及状态指示电路组成。

遥控器有两种状态:学习状态和控制状态。当遥控器处于学习状态时,使用者每按一个控制键,红外线接收电路就开始接收外来红外信号,同时将其转换成电信号,然后经过检波、整形、放大,再由CPU定时对其采样,将每个采样点的二进制数据以8位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用。当遥控器处于控制状态时,使用者每按下一个控制键,CPU从指定的存储单元中读取一系列的二进制数据,串行输出(位和位之间的时间间隔等于采样时的时间间隔)给信号保持电路,同时由调制电路进行信号调制,将调制信号经放大后,由红外线发射二极管进行发射,从而实现对该键对应设备功能的控制。(本次学习重点控制状态

  • 红外遥控器相关参数见下:
    红外遥控距离: 接收范围8米左右
    发射管红外波长:940nm
    晶振频率:455KHZ
    载波频率:38KHZ
    编码:编码格式为NEC
    尺寸:86406mm
    电源:CR2025/1600mAH

2.0 实验材料

  • Arduino Uno R3开发板
  • USB数据线
  • 三根公母线
  • SG90舵机
  • 一台安装Arduino开发环境的电脑

3.0 实验步骤

3.1 根据原理图搭建电路

  • 在使用前一定要记得给红外遥控器上电池,还有红外遥控器要结合红外接收模块使用,它负责将接收红外遥控器发射过来的信息并将其解码成十六进制码,这样才能实现既定的通信。(可以使用手机判断红外遥控器是否有电)
    Arduino与红外遥控握手_第2张图片

  • 将红外接收模块与Arduino正确连接,其中S连接D3,VCC接+5V,GND接GND,并将其固定好;
    实验原理图分别对应两个实验:
    Arduino与红外遥控握手_第3张图片
    Arduino与红外遥控握手_第4张图片

实验接线图:
Arduino与红外遥控握手_第5张图片
Arduino与红外遥控握手_第6张图片

3.2 库文件调用:

需要IRremote库文件。操作起来:点击Arduino IDE工具选择管理库 ,搜索IRremote选择IRRemoteControl安装,如果这个不行,删除后试试其他的
Arduino与红外遥控握手_第7张图片

3.3 新建sketch,拷贝如下代码并进行保存编译上传

代码1:

#include 

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 

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代码
Arduino与红外遥控握手_第8张图片

3.3 实验现象

  • 代码1:
    Arduino与红外遥控握手_第9张图片
    依次按下按钮并记录如下,需要重复实验确定码值!!!
    Arduino与红外遥控握手_第10张图片
    两种遥控器分别对应的码值有所区别
    -代码2:
    点击CH-使小灯点亮,点击CH+使小灯熄灭,实现短距离即时通讯的效果

红外遥控与Arduino实现小灯控制

4.0 总结

  • 用红外遥控器与Arduino 通讯,代码1是直接利用Arduino 第三方IRRemoteControl库解码,得到十六进制数,然后重复实验得到码值;代码2是红外遥控器与Arduino 通讯,点击CH-使小灯点亮,点击CH+使小灯熄灭,实现短距离即时通讯的效果
  • 在以后的博文中我们将学会用arduino常用传感器和执行器从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力

你可能感兴趣的:(arduino学习,算法,机器学习,人工智能)