Arduino 第十三章:红外接收

Arduino 第十三章:红外接收

一、红外接收概述

红外接收在日常生活和电子制作中十分常见,像电视、空调等家电的遥控器就是利用红外信号来实现远程控制的。在 Arduino 项目里,借助红外接收模块能够让设备接收红外信号,进而实现诸如远程控制、数据传输等功能。红外接收的核心在于将接收到的红外光信号转化为电信号,再对其进行解码以获取其中的信息。

二、红外接收原理

(一)红外信号特性

红外信号本质上是一种不可见光,其波长范围通常在 760nm 至 1mm 之间。在红外通信里,常采用 38kHz 的载波信号对要传输的信息进行调制,这么做是为了增强信号的抗干扰能力。调制后的信号由一系列脉冲组成,这些脉冲的宽度和间隔包含了具体的信息。

(二)红外接收头工作原理

红外接收头一般由红外光电二极管、放大器、滤波器和解调器等部分构成。当接收到 38kHz 调制的红外信号时,红外光电二极管会将光信号转换为微弱的电信号,接着放大器对该电信号进行放大,滤波器滤除其他频率的干扰信号,最后解调器将 38kHz 的载波信号去除,还原出原始的编码信号。

(三)常见编码协议

不同的红外设备可能采用不同的编码协议,常见的有 NEC 协议、索尼 SIRC 协议等。以 NEC 协议为例,它是一种广泛应用的红外编码协议,一个完整的 NEC 信号包含引导码、用户码、用户反码、数据码和数据反码。引导码用于告知接收端一个新的信号开始传输,用户码用于区分不同的设备,数据码则是具体的控制信息,反码用于校验数据的准确性。

三、硬件连接

(一)所需材料

  • Arduino 开发板(例如 Arduino Uno)
  • 红外接收头(常见型号有 VS1838B 等)
  • 杜邦线若干

(二)引脚说明

红外接收头通常有三个引脚:

  • VCC:电源正极,一般接 5V。
  • GND:电源负极,接地。
  • OUT:信号输出引脚,连接到 Arduino 的数字引脚。

(三)连接方式

把红外接收头的 VCC 引脚连接到 Arduino 的 5V 引脚,GND 引脚连接到 Arduino 的 GND 引脚,OUT 引脚连接到 Arduino 的一个数字引脚,这里选用数字引脚 11。

(四)连接图

在这里插入图片描述

四、代码实现

(一)使用 IRremote 库

Arduino 有一个非常实用的 IRremote 库,它能帮助我们方便地实现红外信号的接收和解码。以下是一个简单的示例代码:

#include <IRremote.h>

// 定义红外接收引脚
const int RECV_PIN = 11;
// 创建红外接收对象
IRrecv irrecv(RECV_PIN);
// 用于存储解码结果的变量
decode_results results;

void setup() {
  // 初始化串口通信,设置波特率为 9600
  Serial.begin(9600);
  // 启用红外接收功能
  irrecv.enableIRIn();
}

void loop() {
  // 检查是否接收到有效的红外信号
  if (irrecv.decode(&results)) {
    // 将解码结果以十六进制形式输出到串口监视器
    Serial.println(results.value, HEX);
    // 继续接收下一个红外信号
    irrecv.resume();
  }
  // 短暂延迟,避免过于频繁地检查
  delay(100);
}

(二)代码解释

  1. 库的引入
    • #include <IRremote.h>:引入 IRremote 库,该库提供了红外接收和解码所需的函数和类。
  2. 变量和对象定义
    • const int RECV_PIN = 11;:定义红外接收引脚为数字引脚 11。
    • IRrecv irrecv(RECV_PIN);:创建一个 IRrecv 对象 irrecv,并将其与指定的接收引脚关联起来。
    • decode_results results;:定义一个 decode_results 类型的变量 results,用于存储解码后的红外信号结果。
  3. setup() 函数
    • Serial.begin(9600);:初始化串口通信,设置波特率为 9600,以便将解码结果输出到串口监视器。
    • irrecv.enableIRIn();:启用红外接收功能,让红外接收头开始工作。
  4. loop() 函数
    • if (irrecv.decode(&results)):检查是否接收到有效的红外信号并成功解码。如果解码成功,执行大括号内的代码。
    • Serial.println(results.value, HEX);:将解码结果以十六进制形式输出到串口监视器。
    • irrecv.resume();:继续接收下一个红外信号,准备处理新的信号。
    • delay(100);:短暂延迟 100 毫秒,避免过于频繁地检查是否有新的红外信号,减少资源消耗。

五、注意事项

(一)环境干扰

周围环境中的红外线(如太阳光、白炽灯等)可能会对红外接收产生干扰,导致解码错误或无法接收到信号。在实际应用中,可以采取以下措施来减少干扰:

  • 避免红外接收头直接暴露在强光下,可使用遮光罩或将其安装在合适的位置。
  • 选用抗干扰能力强的红外接收头。

(二)引脚连接

在连接红外接收头时,要确保引脚连接正确,特别是 VCC 和 GND 引脚不能接反,否则可能会损坏接收头。

(三)协议匹配

不同的红外设备可能采用不同的编码协议,在使用时要确保 IRremote 库支持所使用的协议,或者根据具体协议进行自定义解码。

六、应用拓展

(一)家电控制

可以结合红外发射模块,通过 Arduino 接收红外遥控器的信号,学习这些信号后再模拟发射,实现对家电的控制,打造一个万能遥控器。

(二)智能安防

利用红外接收模块检测人体发出的红外信号,当检测到异常信号时触发报警装置,实现简单的安防功能。

(三)数据传输

在一些简单的应用场景中,可以通过红外信号进行数据传输,例如在两个 Arduino 设备之间传输简单的指令或传感器数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967778.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

朝天椒USB服务器:解决加密狗远程连接

本文探讨朝天椒USB服务器用Usb Over Network技术&#xff0c;解决加密狗在虚拟机、云主机甚至异地的远程连接问题。 在企业数字化转型的浪潮中&#xff0c;加密狗作为防止软件盗版的重要手段&#xff0c;广泛应用于各类软件授权场景。然而&#xff0c;随着企业超融合进程不断加…

第二篇:电压与电流的“锡安之战”——电路定律在800V高压平台中的应用

——基尔霍夫与戴维南如何破解新能源汽车的“高压密码” 核心隐喻&#xff1a;电路定律的“数字起义” 在《黑客帝国》中&#xff0c;锡安的反抗军通过破解母体协议实现逆袭。而在新能源汽车的800V高压平台中&#xff0c; 基尔霍夫定律 和 戴维南定理 正是工程师手中的“通…

【牛客】动态规划专题一:斐波那契数列

文章目录 DP1 斐波那契数列法1&#xff1a;递归法2&#xff1a;动态规划法3&#xff1a;优化空间复杂度 2.分割连接字符串3. 给定一个字符串s和一组单词dict&#xff0c;在s中添加空格将s变成一个句子 DP1 斐波那契数列 法1&#xff1a;递归 // 递归 #include <iostream>…

innovus如何分步长func和dft时钟

在Innovus工具中&#xff0c;分步处理功能时钟&#xff08;func clock&#xff09;和DFT时钟&#xff08;如扫描测试时钟&#xff09;需要结合设计模式&#xff08;Function Mode和DFT Mode&#xff09;进行约束定义、时钟树综合&#xff08;CTS&#xff09;和时序分析。跟随分…

5-R循环

R 循环 ​ 有的时候&#xff0c;我们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多…

DeepSeek AI R1推理大模型API集成文档

DeepSeek AI R1推理大模型API集成文档 引言 随着自然语言处理技术的飞速发展&#xff0c;大语言模型在各行各业的应用日益广泛。DeepSeek R1作为一款高性能、开源的大语言模型&#xff0c;凭借其强大的文本生成能力、高效的推理性能和灵活的接口设计&#xff0c;吸引了大量开发…

知识图谱_protege的安装

目录 1.下载protege 2.安装可视化工具Graphviz 3.配置 参考【知识图谱】3.Protege下载安装-CSDN博客 1.下载protege 我在官网下载不了所以我就没有在官网下载 项目首页 - Protege-5.5.0Windows版本快速下载指南:Protege是一个广受欢迎的、强大的知识建模工具&#xff0c;用…

从BERT到ChatGPT:大模型训练中的存储系统挑战与技术发展——论文泛读

计算机研究与发展 2024 Paper 论文阅读笔记整理 问题 以ChatGPT为代表的大模型在文字生成、语义理解等任务上表现卓越&#xff0c;但大模型的参数量在3年内增长数万倍&#xff0c;且仍呈现增长的趋势。大模型训练面临存储挑战&#xff0c;存储需求大&#xff0c;且具有独特的…

船舶维保管理系统

一、项目介绍 381.基于SpringBoot的船舶维保管理系统&#xff0c;系统包含四种角色&#xff1a;管理员、船家、维保人员、维保公司,系统分为前台和后台两大模块&#xff0c;主要功能如下。 船家&#xff1a; - 个人中心&#xff1a;管理个人信息。 - 公告管理&#xff1a;查看…

【详细版】DETR系列之Deformable DETR(2021 ICLR)

论文标题Deformable DETR: Deformable Transformers for End-to-End Object Detection论文作者Xizhou Zhu, Weijie Su, Lewei Lu, Bin Li, Xiaogang Wang, Jifeng Dai发表日期2021年03月01日GB引用> Xizhou Zhu, Weijie Su, Lewei Lu, et al. Deformable DETR: Deformable T…

从云原生到 AI 原生,谈谈我经历的网关发展历程和趋势

作者&#xff1a;谢吉宝&#xff08;唐三&#xff09; 编者按&#xff1a; 云原生 API 网关系列教程即将推出&#xff0c;欢迎文末查看教程内容。本文整理自阿里云智能集团资深技术专家&#xff0c;云原生产品线中间件负责人谢吉宝&#xff08;唐三&#xff09; 在云栖大会的精…

基于机器学习时序库pmdarima实现时序预测

目录 一、Pmdarima实现单变量序列预测1.1 核心功能与特性1.2 技术优势对比1.3 python案例1.3.1 时间序列交叉验证1.3.1.1 滚动交叉验证1.3.1.2 滑窗交叉验证 时间序列相关参考文章&#xff1a; 时间序列预测算法—ARIMA 基于VARMAX模型的多变量时序数据预测 基于机器学习时序库…

【文本处理】如何在批量WORD和txt文本提取手机号码,固话号码,提取邮箱,删除中文,删除英文,提取车牌号等等一些文本提取固定格式的操作,基于WPF的解决方案

企业的应用场景 数据清洗&#xff1a;在进行数据导入或分析之前&#xff0c;往往需要对大量文本数据进行预处理&#xff0c;比如去除文本中的无关字符&#xff08;中文、英文&#xff09;&#xff0c;只保留需要的联系信息&#xff08;手机号码、固话号码、邮箱&#xff09;。…

小游戏源码开发之可跨app软件对接是如何设计和开发的

专业小游戏开发的团队往往会面临跨领域和不同平台客户需要追加同一款游戏的需求&#xff0c;所以就要设计和开发一款可任意对接不同 App 软件的小游戏&#xff0c;那么针对这类需求小游戏开发团队早已有了成熟的解决方案&#xff0c;针对设计和开发可跨平台游戏对接大概流程简单…

C# Winform 使用委托实现C++中回调函数的功能

C# Winform 使用委托实现C中回调函数的功能 在项目中遇到了使用C#调用C封装的接口&#xff0c;其中C接口有一个回调函数的参数。参考对比后&#xff0c;在C#中是使用委托(delegate)来实现类似的功能。 下面使用一个示例来介绍具体的使用方式&#xff1a; 第一步&#xff1a;…

从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

未来替代手机的产品,而非手机的本身

替代手机的产品包括以下几种&#xff1a; 可穿戴设备&#xff1a;智能手表、智能眼镜等可穿戴设备可以提供类似手机的功能&#xff0c;如通话、信息推送、浏览网页等。 虚拟现实&#xff08;VR&#xff09;技术&#xff1a;通过佩戴VR头显&#xff0c;用户可以进行语音通话、发…

QTreeView和QTableView单元格添加超链接

QTreeView和QTableView单元格添加超链接的方法类似,本文仅以QTreeView为例。 在QTableView仿Excel表头排序和筛选中已经实现了超链接的添加,但是需要借助delegate,这里介绍一种更简单的方式,无需借助delegate。 一.效果 二.实现 QHTreeView.h #ifndef QHTREEVIEW_H #def…

正则引入store中的modules文件

正则引入store中的modules文件 // index.js import { createStore } from vuex;const modulesFiles require.context(./modules, true, /\.ts|js$/); const modules modulesFiles.keys().reduce((modules1, modulePath) > {const moduleName modulePath.replace(/^\.\/(.…

如何保证Redis和MySQL数据的一致性刨析

1、常见的缓存更新策略&#xff1a; 定义&#xff1a;主要用来进行redis和mysql的数据同步更新的一些策略 内存淘汰&#xff1a;等触发淘汰机制后&#xff0c;刚好淘汰到了用户查询的数据&#xff0c;此时是null&#xff0c;会进行查询数据库并写入到缓存中&#xff0c;此时…