news 2026/4/24 17:54:25

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

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


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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 18:50:27

5分钟部署UI-TARS-desktop:Qwen3-4B模型让AI助手快速上手

5分钟部署UI-TARS-desktop&#xff1a;Qwen3-4B模型让AI助手快速上手 1. 背景与目标 在当前AI应用快速发展的背景下&#xff0c;如何高效部署一个具备多模态能力的本地化AI助手成为开发者和生产力用户的共同需求。UI-TARS-desktop 正是为此而生——它是一个基于视觉语言模型&…

作者头像 李华
网站建设 2026/4/21 15:44:06

3D古风抽奖系统全流程实战指南

3D古风抽奖系统全流程实战指南 【免费下载链接】log-lottery &#x1f388;&#x1f388;&#x1f388;&#x1f388;年会抽奖程序&#xff0c;threejsvue3 3D球体动态抽奖应用。 项目地址: https://gitcode.com/gh_mirrors/lo/log-lottery 在大明嘉靖四十年御前会议的背…

作者头像 李华
网站建设 2026/4/23 16:41:44

HsMod终极指南:60项隐藏功能解锁你的炉石传说新体验

HsMod终极指南&#xff1a;60项隐藏功能解锁你的炉石传说新体验 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 还在为炉石传说中那些烦人的动画和限制感到困扰吗&#xff1f;HsMod插件正是为你量…

作者头像 李华
网站建设 2026/4/23 17:30:04

零基础上位机开发:从环境搭建到运行实战案例

从零开始打造你的第一套上位机系统&#xff1a;实战驱动的完整开发路径你有没有遇到过这样的场景&#xff1f;手里的STM32板子已经能稳定采集温湿度数据&#xff0c;串口也能正常输出&#xff0c;但你想把多个节点的数据集中监控、画成趋势图、还能自动报警——这时候才发现&am…

作者头像 李华
网站建设 2026/4/23 15:59:48

Umi-OCR完全指南:免费离线文字识别工具深度解析

Umi-OCR完全指南&#xff1a;免费离线文字识别工具深度解析 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_Tre…

作者头像 李华
网站建设 2026/4/22 4:03:57

YOLO-v8.3模型加载:yolov8n.pt本地与远程调用方式

YOLO-v8.3模型加载&#xff1a;yolov8n.pt本地与远程调用方式 YOLO&#xff08;You Only Look Once&#xff09;是一种流行的物体检测和图像分割模型&#xff0c;由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出&#xff0c;因其高速和高精度而广受欢迎…

作者头像 李华