Arduino 与 NeoPixel 光耦:单引脚高效控制多路继电器
核心创意
利用 WS2812B (NeoPixel) 可寻址 LED 与光敏电阻 (LDR) 组合成**DIY 光耦**,将单个 Arduino 数字输出引脚扩展为多路隔离控制通道。每个 NeoPixel 对应一个 LDR,LDR 串联 27 kΩ 电阻驱动 5V 继电器模块。一条 5m/300 灯珠灯带理论上可控制 300 路继电器,仅占用 1 个 MCU 引脚。
硬件清单
| 组件 | 数量 | 备注 |
|---|---|---|
| WS2812B 灯带 (5V, 60 LED/m, 5m/卷) | 1 段 (取 10 灯) | 本项目仅使用前 4 灯 |
| 光敏电阻 (LDR/光变电阻) | 4 | 与 NeoPixel 一一对应 |
| 27 kΩ 电阻 | 4 | LDR 分压限流 |
| 5V 4 路继电器模块 | 1 | 含光耦隔离、飞轮二极管 |
| Arduino UNO / NodeMCU ESP32 | 1 | 演示用 ESP32,UNO 同理 |
| 5V 电源 (USB 适配器/移动电源) | 1 | 同时供电 MCU、灯带、继电器 |
| 深灰泡沫板 + 黑色胶带 | 适量 | 制作光学隔离腔,防串光 |
DIY 光耦制作步骤
- 从灯带剪下 10 颗 LED 短段,保留焊盘
- 在泡沫板上按 LED 间距打孔,插入 LDR,使每个 LDR 正对一颗 LED
- 用黑色胶带封装,确保无环境光干扰、无相邻 LED 串扰
- 将 LDR 引脚焊接到排针/面包板,串联 27 kΩ 电阻接 5V,中点接继电器模块输入
- NeoPixel 供电 5V,数据线接 MCU GPIO (演示为 ESP32 GPIO21)
关键点:软件将 LED 亮度设为极低 (RGB=15,15,15),仅够触发 LDR,避免串扰与功耗。
电路原理图
Fritzing 源文件 (.fzz) 与导出图片见附件。核心连接:
- MCU GPIO → NeoPixel DIN
- 5V 并联供电 NeoPixel VCC、继电器模块 JD-VCC
- 每路:NeoPixel → 对准 LDR → 27kΩ → 5V,LDR 中点 → 继电器 IN
软件实现
核心控制函数
void ControlRelais(int RelaisNo, bool RelaisState) {
// RelaisNo 对应 NeoPixel 索引 (1-4)
// 亮度 15/255 ≈ 6%,足以触发 LDR 且无串扰
strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15);
strip.show();
Serial.print(" RelaisNo "); Serial.print(RelaisNo);
Serial.print(" = "); Serial.println(RelaisState);
}
演示逻辑 (loop)
- 顺序点亮 1→4,再熄灭
- 逆序 4→1
- 交叉组合模式
完整草图见项目代码区,基于 Adafruit_NeoPixel 库,兼容 UNO/ESP32/ESP8266 等。
应用场景与扩展
- 引脚受限的单片机扩展输出 (如 ATtiny85 仅 5/6 IO)
- 高压/强电环境下的安全隔离控制
- 替代昂贵的移位寄存器 (74HC595) 或 IO 扩展芯片 (MCP23017)
- 可驱动任意 5V 逻辑负载:固态继电器、MOSFET、指示灯、蜂鸣器等
局限与改进
- 光学隔离需物理遮光良好,批量生产建议定制 PCB 集成光腔
- 响应速度受限于 LDR 恢复时间 (ms 级),不适合高频 PWM
- 功耗:每路约 1-2mA (LED 低亮) + LDR 分压电流,300 路需 ~1A 5V 电源
- 可改用光电三极管/光电二极管替代 LDR,提升速度与一致性
视频演示
项目附带视频展示 4 路继电器随灯带模式动作,灯泡交替点亮。
制造工艺
- Satellite CCRMA 套件:构建传感器驱动的音频效果器
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- Arduino 飞行模拟器 2020 实体开关面板
- 互动陀螺仪 LED 显示:NeoPixel Ring + Arduino Pro Mini
- 智能窗帘:基于Arduino与太阳能的自动光控系统
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- Arduino + Android 蓝牙控制 Roomba Create 2 扫地机器人完整指南
- 从零构建智能 Arduino 四足机器人:完整指南
- Arduino + MPU6050 姿态控制舵机:SG90 与 MG996R 精准跟随实战
- Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
- Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示