Arduino创意作品入门项目:红外遥控小夜灯制作

用红外遥控点亮你的夜晚:手把手教你做一个会“听话”的Arduino小夜灯

深夜起床,总要摸黑找开关?床头灯离得太远,按一次得爬起来一趟?这事儿我可太懂了——直到我自己动手做了个能听你话的小夜灯

今天就带你从零开始,做一个真正实用又有趣的Arduino红外遥控小夜灯。不需要复杂电路、不用看厚厚的数据手册,只要几块钱的元件和一段代码,就能让你家的灯“听命令行事”。

这个项目看似简单,但麻雀虽小五脏俱全:它涵盖了信号接收、逻辑判断、状态控制、执行输出等嵌入式系统的完整流程。更重要的是——做出来那一刻你会觉得:“哇,原来智能设备也没那么神秘!”


为什么选这个项目?因为它真的适合“第一次”

如果你是刚接触单片机的新手,面对一堆开发板和模块不知道从哪下手,那我强烈推荐你把“红外遥控小夜灯”作为你的第一个正式作品。

原因很简单:

  • 元件便宜好买(加起来不到20元)
  • 接线少、风险低(不会炸板子)
  • 功能直观有反馈(按一下就有反应)
  • 扩展空间大(做完基础版还能加花活)

而且你能学到的东西远比想象中多:
怎么读一个传感器?如何解析外部指令?怎样让程序记住当前状态?这些都将在实践中自然掌握。

别急着写代码,咱们先看看背后是怎么运作的。


红外遥控是怎么“听懂”按键的?

你有没有想过,当你按下遥控器上的“电源”键时,电视是怎么知道你要开机而不是调音量的?

其实每按一个键,遥控器都会发出一串独一无二的红外编码脉冲。就像摩尔斯电码一样,只不过速度更快、结构更复杂。

我们常用的红外接收头(比如 VS1838B),长这样👇

┌──────┐ │ ███ │ ← 接收窗口 └──────┘ | | | GND VCC OUT

别看它只有三个引脚,内部可聪明了:

  • 自带38kHz带通滤波器,只对遥控器发出的调制信号敏感;
  • 能自动解调光信号,输出干净的数字电平;
  • 日常灯光干扰基本不影响工作。

也就是说,它已经帮你把“看不见的光”翻译成了“看得见的高低电平”,剩下的事交给 Arduino 就行。

常见协议:NEC 编码了解一下

市面上大多数通用遥控器使用的是NEC 协议,它的特点很清晰:

  • 每次发送32位数据:
  • 16位用户地址(区分设备)
  • 8位命令码(对应具体按键)
  • 8位反码(用于校验)

举个例子:你按“电源”键,可能收到0xFFA25D这个值;再按一次“音量+”,可能是0xFF629D。每个按键都有唯一ID。

所以我们写的程序其实就是在“监听”这些码值,一旦匹配成功,就执行相应动作。


核心组件一览:清单+接线图

🧰 所需材料

名称数量备注
Arduino Uno 或兼容板1块推荐国产Nano降低成本
红外接收模块(VS1838B)1个三脚直插,常见黑色封装
LED 发光二极管1颗颜色自选,建议白色或暖白
限流电阻1个220Ω~330Ω,保护LED
面包板1块无需焊接,快速搭建
杜邦线若干若干公对公,红黑黄搭配更清晰

💡 小贴士:可以用遥控器直接测试是否正常——手机摄像头对着红外发射头按下按键,能看到闪烁蓝光,说明在工作!

🔌 接线方式(超简单)

模块Arduino 引脚
红外接收模块 VCC5V
红外接收模块 GNDGND
红外接收模块 OUT数字引脚 11
LED 阳极(长脚)数字引脚 13(内置LED也可省略)
LED 阴极 + 电阻GND

✅ 特别提醒:一定要加限流电阻!否则容易烧坏LED甚至IO口。计算公式也很简单:

$$
R = \frac{V_{CC} - V_F}{I_F}
$$

以白光LED为例:VF ≈ 3.2V,IF = 20mA → R = (5 - 3.2)/0.02 = 90Ω → 实际选用100Ω 或 220Ω均可。


写代码前必须知道的事:库怎么用?中断是什么?

Arduino 能这么火,一个重要原因是生态成熟。处理红外信号这种“麻烦事”,早有人封装好了现成的库——IRremote.h

你需要做的只是两步:

  1. 在 Arduino IDE 中安装IRremote库(菜单:工具 → 管理库 → 搜索 IRremote)
  2. 把下面这段核心代码复制进去
#include <IRremote.h> const int RECV_PIN = 11; // 红外接收连接到D11 IRrecv irrecv(RECV_PIN); // 创建接收对象 decode_results results; // 存储解码结果 bool ledState = false; // 记录灯当前状态 void setup() { Serial.begin(9600); irrecv.enableIRIn(); // 启动接收功能 pinMode(LED_BUILTIN, OUTPUT); // 设置板载LED为输出 } void loop() { if (irrecv.decode(&results)) { // 收到信号? Serial.print("Received code: "); Serial.println(results.value, HEX); // 打印十六进制码 // 判断是不是电源键(根据实际测量填写) if (results.value == 0xFFA25D) { // 示例码值 ledState = !ledState; // 翻转状态 digitalWrite(LED_BUILTIN, ledState ? HIGH : LOW); Serial.println(ledState ? "Light ON" : "Light OFF"); } irrecv.resume(); // 清空缓冲区,准备下一次接收 } }

关键点解析:

  • enableIRIn():开启红外接收,底层用了定时器中断机制,能实时捕获信号;
  • decode():尝试读取一帧完整的数据包;
  • results.value:就是我们关心的那个“按键ID”;
  • resume():必须调用!否则只能接收一次;
  • Serial.println(..., HEX):通过串口监视器查看真实按键码,方便调试。

📌重要提示:不同品牌遥控器的码值不一样!建议先把所有按键都按一遍,记下你需要的功能键对应的HEX值,再修改代码中的判断条件。


如何避免“一按连闪”?按键去抖实战技巧

新手最容易遇到的问题之一:按一下,灯闪好几次

这是因为红外信号本身带有重复帧机制——长按遥控器会持续发送“重复码”(通常为0xFFFFFFFF)。如果不加处理,程序就会误判为多次点击。

解决办法有两个层次:

方法一:软件过滤重复码

if (results.value != 0xFFFFFFFF) { // 忽略重复帧 if (results.value == 0xFFA25D) { ledState = !ledState; digitalWrite(LED_BUILTIN, ledState); } }

方法二:加入时间去抖(推荐)

引入一个小延时,防止短时间内重复触发:

unsigned long lastTime = 0; const int DEBOUNCE_DELAY = 300; // 300ms防抖 void loop() { if (irrecv.decode(&results)) { unsigned long currentTime = millis(); if (currentTime - lastTime > DEBOUNCE_DELAY) { if (results.value == 0xFFA25D) { ledState = !ledState; digitalWrite(LED_BUILTIN, ledState); Serial.println(ledState ? "ON" : "OFF"); } lastTime = currentTime; } irrecv.resume(); } }

这样一来,哪怕你连按两下,系统也只会响应一次,体验更接近真正的家电控制。


可以怎么玩得更高级?几个扩展思路任你挑

做好基础版之后,你会发现:这才哪到哪啊!

这个项目最大的魅力在于——它是通往智能家居的大门。接下来随便加点东西,立马升级成“智能小夜灯Pro Max”。

✅ 加个光敏电阻:天黑自动开灯

白天不希望灯亮?加个光敏电阻检测环境亮度:

int lightLevel = analogRead(A0); if (lightLevel < 200 && receivedPowerKey) { // 暗且按了键 digitalWrite(LED_PIN, HIGH); }

从此实现“夜间遥控唤醒 + 白天锁定关闭”。

✅ 存储状态到EEPROM:断电不忘记忆

换电池后灯又灭了?可以用 Arduino 内置的 EEPROM 记住最后状态:

#include <EEPROM.h> #define STATE_ADDR 0 // 断电前保存 EEPROM.write(STATE_ADDR, ledState); // 开机读取 ledState = EEPROM.read(STATE_ADDR); digitalWrite(LED_BUILTIN, ledState);

下次上电直接恢复上次状态,用户体验拉满。

✅ 加蜂鸣器提示音:操作有反馈

想确认是否成功控制?接个小蜂鸣器“嘀”一声:

tone(8, 1000, 200); // D8接有源蜂鸣器,响200ms

视觉+听觉双重反馈,老人小孩都能轻松上手。

✅ 换成继电器:遥控家里台灯

想控制220V台灯?没问题,换成光耦隔离继电器模块即可:

⚠️ 注意安全!高压部分务必做好绝缘,不要裸露导线,最好装进塑料盒。

此时你就拥有了一个真正的“非接触式智能开关”。


实战经验分享:那些没人告诉你却很重要细节

我在做这个项目时踩过不少坑,现在把这些血泪教训总结给你:

🔋 供电问题最致命

  • USB供电能力有限,多个模块同时工作可能导致Arduino重启;
  • 建议外接5V/1A以上适配器,尤其是驱动多个LED或继电器时;
  • 如果用电池,注意电压下降会影响红外接收灵敏度。

🎯 接收角度别忽视

  • VS1838B有效接收角约±45°,歪得太厉害会失灵;
  • 固定位置时尽量朝向常用遥控方向(比如床头、沙发);
  • 可用热熔胶或L型支架固定,避免松动。

🧹 布线整洁提升成功率

  • 红线接VCC,黑线接GND,养成习惯;
  • 信号线尽量短,远离电源线减少干扰;
  • 使用不同颜色区分功能,后期排查快十倍。

🐞 调试技巧:先看串口再改逻辑

  • 第一步永远是打开串口监视器(9600波特率),观察收到的码值;
  • 确认遥控器能被识别后再写控制逻辑;
  • 遇到问题优先检查接线和供电。

它不只是个小灯,而是你进入智能世界的起点

当我第一次用旧空调遥控器打开卧室的小灯时,那种感觉真的很奇妙——仿佛突然明白了“物联网”到底是怎么回事。

这个项目教会我的不仅是技术,更是一种思维方式:

任何设备都可以被重新定义,只要你愿意动手。

从这里出发,你可以继续探索:

  • 用蓝牙模块实现手机控制
  • 接入WiFi接入Home Assistant
  • 加人体红外传感器实现自动感应
  • 做一个多路控制器,管理整个床头设备

而这一切的起点,就是这样一个小小的、会“听话”的灯。


结尾彩蛋:试试这些常见遥控器按键码

以下是一些常见遥控器的典型按键码(NEC协议),供参考:

按键HEX码值
POWER0xFFA25D
VOL+0xFF629D
VOL-0xFFE21D
CH+0xFF22DD
CH-0xFF02FD
PLAY0xFFC23D
MENU0xFF12ED

👉 提示:你的遥控器可能不同,请务必先通过串口打印确认真实码值!


如果你已经准备好材料,那就赶紧动手吧!
做完以后欢迎回来留言告诉我:你是用什么遥控器控制的?有没有加上自己的创意功能?

毕竟,最好的学习方式不是看教程,而是亲手做出属于你自己的那一盏灯。💡

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

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

相关文章

OpenCode深度定制指南:打造属于你的智能编程伙伴

OpenCode深度定制指南&#xff1a;打造属于你的智能编程伙伴 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手&#xff0c;模型灵活可选&#xff0c;可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 还在为AI编程工具不够个性化…

OpenCode实战部署全攻略:从零搭建智能编程助手

OpenCode实战部署全攻略&#xff1a;从零搭建智能编程助手 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手&#xff0c;模型灵活可选&#xff0c;可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 想要快速上手OpenCode部署&am…

为什么选1.5B参数?DeepSeek-R1模型选型实战分析

为什么选1.5B参数&#xff1f;DeepSeek-R1模型选型实战分析 1. 背景与问题定义 在当前大模型快速发展的背景下&#xff0c;越来越多开发者和企业希望将高性能语言模型部署到本地环境&#xff0c;以满足数据隐私、低延迟响应和离线可用等实际需求。然而&#xff0c;主流的大模…

5分钟快速上手:Mermaid Live Editor在线图表制作完全指南

5分钟快速上手&#xff1a;Mermaid Live Editor在线图表制作完全指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-edi…

Qwen Code技能系统完整指南:从零开始掌握AI编程助手扩展能力

Qwen Code技能系统完整指南&#xff1a;从零开始掌握AI编程助手扩展能力 【免费下载链接】qwen-code Qwen Code is a coding agent that lives in the digital world. 项目地址: https://gitcode.com/gh_mirrors/qw/qwen-code 在当今快速发展的AI编程领域&#xff0c;Qw…

树莓派安装拼音输入法操作指南:环境变量配置方法

树莓派装拼音输入法&#xff0c;为什么总失败&#xff1f;关键在环境变量配置&#xff01;你有没有遇到过这种情况&#xff1a;在树莓派上兴冲冲地安装了中文输入法&#xff0c;sudo apt install fcitx fcitx-libpinyin一顿操作猛如虎&#xff0c;重启之后却发现——按CtrlSpac…

解锁老款Mac的隐藏潜力:OpenCore Legacy Patcher深度探索

解锁老款Mac的隐藏潜力&#xff1a;OpenCore Legacy Patcher深度探索 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 您是否曾好奇&#xff0c;那些被苹果官方"淘汰&…

EhViewer终极指南:从零开始掌握这款强大的Android漫画阅读器

EhViewer终极指南&#xff1a;从零开始掌握这款强大的Android漫画阅读器 【免费下载链接】EhViewer 项目地址: https://gitcode.com/GitHub_Trending/ehvi/EhViewer EhViewer是一款专为Android平台设计的开源漫画阅读应用&#xff0c;提供了完整的E-Hentai网站浏览体验…

Mindustry终极攻略:掌握星际塔防的制胜法则

Mindustry终极攻略&#xff1a;掌握星际塔防的制胜法则 【免费下载链接】Mindustry The automation tower defense RTS 项目地址: https://gitcode.com/GitHub_Trending/min/Mindustry Mindustry作为一款融合塔防防御、自动化生产与实时战略的开源游戏&#xff0c;为玩家…

Qwen All-in-One避坑指南:情感计算与对话系统部署常见问题

Qwen All-in-One避坑指南&#xff1a;情感计算与对话系统部署常见问题 1. 引言 在边缘计算和资源受限场景下&#xff0c;如何高效部署具备多任务能力的AI服务成为开发者关注的核心问题。传统的“多模型堆叠”架构虽然功能完整&#xff0c;但往往带来显存压力大、依赖冲突频繁…

Mindustry终极指南:快速掌握自动化塔防策略

Mindustry终极指南&#xff1a;快速掌握自动化塔防策略 【免费下载链接】Mindustry The automation tower defense RTS 项目地址: https://gitcode.com/GitHub_Trending/min/Mindustry Mindustry是一款融合塔防、自动化和实时战略元素的独特开源游戏&#xff0c;为玩家提…

三步破解Mac系统限制:让老旧设备重获新生的完整方案

三步破解Mac系统限制&#xff1a;让老旧设备重获新生的完整方案 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 您的Mac设备是否因为硬件限制无法升级到最新macOS系统&…

OpenCode终极指南:10分钟掌握终端AI编程神器

OpenCode终极指南&#xff1a;10分钟掌握终端AI编程神器 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手&#xff0c;模型灵活可选&#xff0c;可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode OpenCode是一个专为终端环境打造…

AI视频生成新姿势:预配置镜像的终极指南

AI视频生成新姿势&#xff1a;预配置镜像的终极指南 你是不是也和我一样&#xff0c;看到别人用AI生成一段段酷炫的短视频&#xff0c;心里痒痒的&#xff0c;特别想自己动手试试&#xff1f;但一打开GitHub项目、翻到README文档&#xff0c;密密麻麻的依赖安装命令、CUDA版本…

Qwen2.5多轮对话实现:messages结构构建详细教程

Qwen2.5多轮对话实现&#xff1a;messages结构构建详细教程 1. 引言 1.1 业务场景描述 在当前大模型应用快速发展的背景下&#xff0c;构建具备上下文理解能力的多轮对话系统已成为智能客服、虚拟助手和自动化交互产品中的核心需求。通义千问系列作为阿里云推出的高性能语言…

Qwen3-Reranker-4B快速实战:云端部署3步完成,2块钱开玩

Qwen3-Reranker-4B快速实战&#xff1a;云端部署3步完成&#xff0c;2块钱开玩 你是不是也遇到过这样的情况&#xff1f;作为设计师&#xff0c;作品集越积越多&#xff0c;客户想找某个特定风格的作品时&#xff0c;你却要在几十个文件夹里翻来覆去地找&#xff0c;效率低得让…

告别无声时代:HunyuanVideo-Foley云端体验报告,10元玩转AI音视频合成

告别无声时代&#xff1a;HunyuanVideo-Foley云端体验报告&#xff0c;10元玩转AI音视频合成 你有没有遇到过这样的尴尬&#xff1f;辛辛苦苦用AI生成了一段精彩的视频&#xff0c;画面流畅、构图精美&#xff0c;结果一播放——静音&#xff01;没有背景音乐&#xff0c;没有…

NotaGen技术解析:音乐生成的序列建模方法

NotaGen技术解析&#xff1a;音乐生成的序列建模方法 1. 引言 近年来&#xff0c;随着大语言模型&#xff08;LLM&#xff09;在自然语言处理领域的突破性进展&#xff0c;其范式也被广泛迁移至其他序列生成任务中。音乐作为一种高度结构化的时序艺术形式&#xff0c;天然适合…

Qwen3-4B-Instruct-2507数学能力实测:复杂公式推导验证

Qwen3-4B-Instruct-2507数学能力实测&#xff1a;复杂公式推导验证 1. 引言 随着大模型在科学计算与数学推理领域的应用不断深化&#xff0c;对语言模型数学能力的系统性评估变得愈发重要。Qwen3-4B-Instruct-2507作为通义千问系列中最新发布的非思考模式轻量级模型&#xff…

Qwen3-VL 2D空间基础构建:平面布局理解部署教程

Qwen3-VL 2D空间基础构建&#xff1a;平面布局理解部署教程 1. 引言 随着多模态大模型的快速发展&#xff0c;视觉-语言理解能力已成为智能系统实现真实世界交互的核心。Qwen3-VL 系列作为阿里云推出的最新一代视觉语言模型&#xff0c;在文本生成、图像理解、空间推理和视频…