Arduino 上使用红外遥控器

日常生活中我们会接触到各式各样的遥控器,电视机、空调、机顶盒等都有专用的遥控器,很多智能手机也在软硬件上对红外遥控做了支持,可以集中遥控绝大部分家用电器。本篇介绍红外遥控相关原理及应用,通过红外遥控器控制 Uno 板载 LED 灯。

Arduino 上使用红外遥控器

红外遥控原理

红外遥控主要由红外发射和红外接收两部分组成。

红外发射和接收的信号其实都是一连串的二进制脉冲码,高低电平按照一定的时间规律变换来传递相应的信息。为了使其在无线传输过程中免受其他信号的干扰,通常都将信号调制在特定的载波频率上(38K红外载波信号),通过红外发射二极管发射出去,而红外接收端则要将信号进行解调处理,还原成二进制脉冲码进行处理。

红外遥控器发射的38K红外载波信号由遥控器里的编码芯片对其进行编码。当按下遥控器按键时,遥控器发出红外载波信号,红外接收器接收到信号,程序对载波信号进行解码,通过数据码的不同来判断按下的是哪个键。

红外遥控库安装

Arduino 要使用红外遥控,需要 IRremote 库文件。文件可以在 Arduino IDE 的库中下载。
在IDE中点击「工具」—「管理库」,查找「IRremote」进行安装。

Arduino 上使用红外遥控器

电路连接

红外线接收模块的 + 引脚连接到 Arduino 的 5V 引脚。
红外线接收模块的 – 引脚连接到 Arduino 的 GND 引脚。
红外线接收模块的 S 引脚连接到 Arduino 的数字引脚 11。

编写代码

1.打开Arduino IDE软件。
2.创建一个新的空白项目。
3.在项目中编写以下代码:

#include <IRremote.h>
 
int RECV_PIN = 11;
int LED_PIN = 13;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // 启动红外接收器
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);
}
 
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    if (results.value == 0xFFE01F) // 开灯的红外码值
    {
      digitalWrite(LED_PIN, LOW);
    } else if (results.value == 0xFFA857) // 关灯的红外码值
    {
      digitalWrite(LED_PIN, HIGH);
    }
    irrecv.resume(); // 接收下一个红外信号
  }
  delay(100);
}

键码值表

CH-: E318261B
CH: F84D46AA
CH+: ACA633AC

PREV: 52A3D41F
NEXT: D7E84B1A
PLAY/PAUSE: 20FE4DBB

-: F076C13B
+: A3C8EDDB
EQ: F0C41643

0: FF6897
100+: FF9867
200+: F0C41643

1: FF30CF
2: 9E2DFE6C
3: 6182021B

4: 9E879628
5: 488F3CBB
6: 449E79F

7: 32C6FDF7
8: 1BC0157B
9: 3EC3FC1B

注意:不同型号的红外摇控器,按键的编码存在不一致,使用前一定要识别。
- 本文内容来自网络,如有侵权,请联系本站处理。

2024-07   阅读(40)   评论(0)
 标签: 创客 Arduino 红外摇控

涨知识
EDA

电子设计自动化(英语:Electronic design automation,缩写:EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。

评论:
相关文章
小鹏浇花套件单机版程序V1.0.0

本程序是小鹏物联网智能浇花套件的单机版程序(不连接物联网),供同学们参考。


Arduino 数据结构: ArrayList

ArrayList 类是一个 C++ 模板类,它提供了 ArrayList 的实现,以便轻松存储任何指定类型的值。它允许使用索引进行高效存储和检索,支持排序操作。


ESP32 FreeRTOS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。


理解 MSBFIRST(最高有效位)和 LSBFIRST(最低有效位)

在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。


Arduino 和 TB6612FNG 驱动直流电机

TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。


Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。


Arduino Serial 接收数字

在Arduino中,通过串行端口接收数字通常涉及使用Serial.read()、Serial.readString()、Serial.parseInt()等方法。



Arduino 随机数

要生成随机数,可以使用Arduino随机数函数random()。


Arduino 字符串用法汇总

本文收集整理在Arduino环境下字符串的相关用法,供参考。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。