红外遥控风扇——arduino

news2024/9/20 9:25:54

红外遥控风扇——arduino

  • 本节课任务
  • 红外遥控
  • 红外遥控通信过程
  • 红外遥控套件
  • 红外遥控接线
  • 实现风扇的多种换挡方式
  • 用本节课所学的红外遥控,控制RGB彩灯变换颜色,至少配置4种

本节课任务

1、了解红外遥控技术在生活中的运用。
2、学会编程测试红外遥控器的键值。
3、制作多种换挡方式的换挡风扇。

红外遥控

组成:红外遥控器+红外接收器
基本原理:红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号。
红外遥控是目前使用最广泛的一种通信和遥控手段。具有体积小、功耗低、功能强、成本低等特点。

红外遥控通信过程

在这里插入图片描述

红外遥控套件

红外接受器
在这里插入图片描述
接收器引脚定义:
在这里插入图片描述

红外遥控器
在这里插入图片描述

红外遥控接线

在这里插入图片描述

实现风扇的多种换挡方式

在红外遥控换挡风扇的基础上,再增加一种按键换挡方式,实现
即可红外遥控换挡,也可以按键换挡。

// 包含必要的红外遥控接收头库 IRremote.h
#include <IRremote.h>

// 定义三个布尔型变量anjian0, anjian1, anjian2用于存储输入端口的状态
volatile boolean anjian0 = LOW; // 3号引脚状态
volatile boolean anjian1 = LOW; // 4号引脚状态
volatile boolean anjian2 = LOW; // 5号引脚状态

// 初始化红外接收模块,接收数据连接到串口2,并启用接收功能
IRrecv irrecv_2(2); // 对应硬件的红外接收模块通道
decode_results results_2; // 存储解码结果

// 设置程序的初始化函数
void setup() {
  // 将输入引脚3、4、5设置为输入模式
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  
  // 开启红外接收模块的工作
  irrecv_2.enableIRIn();
}

// 主循环函数,持续监听并处理红外信号
void loop() {
  // 更新anjian0、anjian1、anjian2的状态
  anjian0 = digitalRead(3);
  anjian1 = digitalRead(4);
  anjian2 = digitalRead(5);
  
  // 当检测到红外信号时,解码并获取数据值
  if (irrecv_2.decode(&results_2)) {
    // 获取解码后的值并将其转换成字符串,然后识别其对应类型的名称
    ir_item = results_2.value;
    String type = "UNKNOWN";
    String typelist[] = {"UNKNOWN", "NEC", "SONY", "RC5", "RC6", "DISH", "SHARP", "PANASONIC", "JVC", "SANYO", "MITSUBISHI", "SAMSUNG", "LG", "WHYNTER"};
    if (results_2.decode_type >= 1 && results_2.decode_type <= 13) {
      type = typelist[results_2.decode_type];
    }
    
    // 打印接收到的红外类型及相应的动作,如调整模拟输出的亮度
    Serial.println("IR TYPE: " + type + "  ");

    // 根据特定的红外编码值,控制模拟输出9的电压(0-127或0-VCC)
    if (ir_item == "0xFF9867") {
      analogWrite(9, 0);
    }
    if (ir_item == "0xFFA25D") {
      analogWrite(9, 127);
    }
    if (ir_item == "0xFF629D") {
      analogWrite(9, 255);
    }

    // 恢复接收,继续监听新的红外指令
    irrecv_2.resume();
  } else {
    // 如果未接收到红外信号,则根据anjian0, anjian1, anjian2的状态调整模拟输出
    if (anjian0 == HIGH) {
      analogWrite(9, 0);
    }
    if (anjian1 == HIGH) {
      analogWrite(9, 127);
    }
    if (anjian2 == HIGH) {
      analogWrite(9, 255);
    }
  }
}

用本节课所学的红外遥控,控制RGB彩灯变换颜色,至少配置4种

颜色。

```c++
// 包含IRremote库,用于红外信号处理
#include <IRremote.h>

// 定义一个长整型变量,存储接收到的红外码值
long ir_item;

// 创建IR接收模块实例,连接到第2个串口(通常GPIO 2)
IRrecv irrecv_2(2);
decode_results results_2; 

// 函数setup() 初始化 IR 接收模块,开启接收模式
void setup() {
  irrecv_2.enableIRIn(); // 启动IR接收,并等待数据
}

// 主循环函数loop()
void loop() {
  // 检查是否有新的红外信号解码成功
  if (irrecv_2.decode(&results_2)) {
    // 获取并保存解码后的红外码值
    ir_item = results_2.value;
    
    // 将接收到的红外码对应的类型转换为字符串,存储在变量type中
    String type = "UNKNOWN"; 
    String typelist[] = {"UNKNOWN", "NEC", "SONY", "RC5", "RC6", "DISH", "SHARP", "PANASONIC", "JVC", "SANYO", "MITSUBISHI", "SAMSUNG", "LG", "WHYNTER"};
    if (results_2.decode_type >= 1 && results_2.decode_type <= 13) { // 检查是否在预定义的类型列表内
      type = typelist[results_2.decode_type]; // 如果在,则赋值对应类型名
    }
    // 打印接收到的红外类型和值
    Serial.print("IR TYPE: " + type + "  ");

    // 根据特定的红外码值控制LED状态,这里仅示例四个条件
    if (ir_item == "0xFF9867") {
      analogWrite(9, 255); // LED9亮起
      analogWrite(10, 0);   // LED10关闭
      analogWrite(11, 0);   // LED11关闭

    }
    if (ir_item == "0xFFA25D") {
      analogWrite(9, 0);   // LED9关闭
      analogWrite(10, 255); // LED10亮起
      analogWrite(11, 0);   // LED11关闭

    }
    if (ir_item == "0xFF629D") {
      analogWrite(9, 0);   // LED9关闭
      analogWrite(10, 0);   // LED10关闭
      analogWrite(11, 255); // LED11亮起

    }
    if (ir_item == "0xFFE21D") {
      analogWrite(9, 255); // LED9亮起
      analogWrite(10, 255); // LED10亮起
      analogWrite(11, 0);   // LED11关闭

    }
    // 继续监听红外信号
    irrecv_2.resume();
  } else {
    // 如果没有新信号,暂停接收
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nuclei-快速漏洞扫描器【安装使用详解】

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、nuclei介绍 Nuclei是一款基于YAML语法模板的开发的定…

软件包管理|npm【前端工具链】

项目中的依赖 依赖是指可能由他人编写的第三方软件&#xff0c;理想情况下能够为你解决单一的问题。 一个 Web 项目可以有任意数量的依赖&#xff0c;从无到多&#xff0c;并且你的依赖里可以包含了你没有明确安装的子依赖&#xff08;依赖的依赖&#xff09;。 项目依赖可以…

Ubuntu 22.04 Docker安装笔记

1、准备一台虚机 可以根据《VMware Workstation安装Ubuntu 22.04笔记》来准备虚拟机。完成后&#xff0c;根据需求安装必要的软件&#xff0c;并设置root权限进行登录。 sudo apt update sudo apt install iputils-ping -y sudo apt install vim -y允许root ssh登录&#xff1…

LVS集群的nat模式详解(负载均衡)

目录 一、LVS集群的介绍 1、LVS 相关术语&#xff1a; 2、lvs工作原理 3、相关名词概念 4、lvs集群的类型 二、lvs的nat模式 1、介绍&#xff1a; 2、数据逻辑&#xff1a; 3、nat实验部署 环境搭建&#xff1a; 1、lvs中要去打开内核路由功能&#xff0c;实现网络互联…

完整指南:卡片设计入门及实用技巧解析

UI卡片是对响应设计的终极回应。无论是响应布局还是自适应布局&#xff0c;卡片UI设计都可以为适应做出贡献&#xff0c;其灵活可控的容器结构可以根据总宽度灵活调整布局结构。虽然UI卡片在加载速度和屏幕适应性上有天然的优势&#xff0c;但由于卡片的意识&#xff0c;每个部…

Windows安装MySQL8.0.X版本归档包(zip包)最新教程

文章目录 1.安装包下载1.1 Windows版本下载2.MySQL8.0.X安装2.1 解压压缩包到指定位置2.2 初始化2.3 安装服务2.4 修改默认密码总结参考资料1.安装包下载 你可以下载 msi 文件一键安装,也可以下载解压版 zip 文件(Archive)进行命令行初始化安装,也是个人推荐的方式。 MyS…

温湿度阈值联网控制

温湿度阈值联网控制 引言 目的: 我们不管使用哪种协议, 哪种解决方案, 我们就目前的情况来看, 我们刚开始是使用 手动修改temp_th和 humi_th的方式, 来实现温湿度阈值的控制.但是对于投入到实际使用的话, 我们还需要使用更方便的联网控制, 所以我们首先利用Onenet的解决方案.…

Kickstart

一&#xff1a;实验前提&#xff1a; 1.RHEl7主机 2.开启图形 init5开图形 3.配置网络可用 4.关闭vmware dhcp功能 5.关闭火墙 二&#xff1a;下载kickstart [roottao ~]# yum install system-config-kickstart 三&#xff1a;启动kickstart并完成相关配置&#xff1a;…

JVM 加载阶段 Class对象加载位置是在 堆中还是方法区?

在JVM&#xff08;Java虚拟机&#xff09;的类加载过程中&#xff0c;Class对象的加载位置涉及到堆&#xff08;Heap&#xff09;和方法区&#xff08;Method Area&#xff09;两个关键区域。具体来说&#xff0c;类的加载阶段涉及到将类的.class文件中的二进制数据读入到内存中…

linux搭建redis超详细

1、下载redis包 链接: https://download.redis.io/releases/ 我以7.0.11为例 2、上传解压 mkdir /usr/local/redis tar -zxvf redis-7.0.11.tar.gz3、进入redis-7.0.11&#xff0c;依次执行 makemake install4、修改配置文件redis.conf vim redis.conf为了能够远程连接redis…

PHP高校教材管理系统-计算机毕业设计源码29810

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3系统开发的目标意义 1.4论文结构与章节安排 2 高校教材管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功…

Pyside6实战教程专栏目录

Pyside6实战教程&#x1f680; 专栏目录介绍 本专栏将详细地向Python开发者展示如何利用PySide6框架创建功能丰富的桌面应用程序。无论你是刚刚接触GUI编程的新手&#xff0c;还是希望快速提升自己技能水平的进阶用户&#xff0c;本文都将为你提供一系列简单易懂的教程&#xf…

Apache漏洞复现CVE-2021-41773

Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录 <Directory/>Require all granted</Directory>允许被访问的的情况下&#xff08;默认开启&#xff09;&#xff0c;攻击者可利用该路径穿越…

混合现实技术在虚拟培训、销售展示及教育科研等领域的应用方向

混合现实技术是虚拟现实技术的进一步发展方向&#xff0c;与传统的沉浸式虚拟现实技术相比混合现实技术能够为用户提供更多元化的观看场景。通过将虚拟物体与现实世界融合的全新形式为&#xff0c;包括虚拟训练、产品销售、教育科研等领域赋能。 混合现实技术中最为重要的是显示…

什么是爬虫软件?这两个爬虫神器你必须要试试

爬虫软件概述 爬虫&#xff0c;又称为网络爬虫或网页爬虫&#xff0c;是一种自动浏览互联网的程序&#xff0c;它按照一定的算法顺序访问网页&#xff0c;并从中提取有用信息。爬虫软件通常由以下几部分组成&#xff1a; 用户代理&#xff08;User-Agent&#xff09;&#xf…

08.FreeRTOS任务调度与任务切换

文章目录 08. FreeRTOS任务调度与任务切换1. FreeRTOS任务调度2. SVC中断服务函数源码调试结果分析3. FreeRTOS任务切换3.1 PendSV异常3.2 PendSV中断服务函数3.3 PendSV中断服务函数源码调试分析3.4 确定下一个要执行的任务 08. FreeRTOS任务调度与任务切换 1. FreeRTOS任务调…

MIMO技术入门(通俗易懂)

MIMO技术的思路 形象地形容就是&#xff0c;从原来的一个人在搬砖&#xff0c;转变成多个人在搬砖。 MIMO/SIMO/MISO示意图 MIMO用专业一点的词形容&#xff0c;就是发射端和接收端都有多个天线&#xff0c;这里的多天线并不是指有多个天线板&#xff0c;对于基站来说&#…

Ubuntu distro环境搭建

0 Preface/Foreword 1 环境搭建 1.1 安装make工具 sudo apt install make 1.1.1 查看make版本 1.1.2 查看make使用方法 2 搭建交叉编译工具链 2.1 解压交叉工具链到指定路径 命令解释如下&#xff1a; sudo&#xff0c; 表示使用administrative privilegetar&#xff0c;…

Unity补完计划 之 Mask SortingGroup

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.Mask 遮罩故名思意就是起到遮挡作用的罩子:精灵遮罩 - Unity 手册 如果我想让sprite与遮罩发生交互&#xff0c;那么我…

宇哥18讲需要同步搭配他的1000题吗?

张宇老师本来就以“偏难怪”著称&#xff0c;无独有偶&#xff0c;24考研真题也是“偏难怪”&#xff01; 所以&#xff0c;24考研结束之后&#xff0c;大家欧鼓吹张宇「封神」 先不说张宇老师是不是真的符合考研的趋势&#xff0c;但是跟张宇老师的同学确实比跟其他老师的同…