亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 Arduino 移位寄存器创建绚丽灯光序列

项目概述

本项目演示如何使用 Arduino UNO 和 74HC595 移位寄存器控制 8 个 LED,并通过 LCD 显示屏和按钮实现动画的编辑、播放、速度调节及循环次数设置。无需修改代码即可通过菜单交互创建自定义灯光动画,适合初学者学习移位寄存器、数组操作及人机交互界面设计。

核心功能

硬件清单

组件数量备注
Arduino UNO1主控板
74HC595 移位寄存器1扩展 8 路输出
LED(通用)8配合 220Ω 电阻
电阻 220Ω9LED 限流 + 按钮上拉
电阻 10kΩ4按钮下拉电阻
按钮4菜单导航与数值修改
旋转电位器1LCD 对比度调节
16×2 LCD 显示屏1HD44780 兼容
面包板 ×2、跳线若干-搭建电路

电路连接要点

74HC595 引脚映射

LCD 接线(4 位模式)

按钮矩阵(内部上拉)

软件架构

关键数据结构

#define ARR_SIZE 16  // 总帧数,可修改
#define LIGHTS   8   // LED 数量

bool ArrOne[ARR_SIZE][LIGHTS] = {false};  // 帧缓冲:每帧 8 位状态
byte lightArrOne[ARR_SIZE] = {0xFF};      // 移位寄存器字节缓存
int animSpeed = 50;   // 帧间延时 ms
int loopCount = 5;    // 循环次数

核心流程

  1. setup():初始化引脚、LCD、移位寄存器锁存脚,显示主菜单
  2. loop():轮询 4 个按钮,分发至对应功能:
    • Btn1 → Play() 播放动画
    • Btn2 → Create() 编辑动画
    • Btn3 → SetSpeed() 设置速度
    • Btn4 → SetLoop() 设置循环次数
  3. Create():双层循环遍历帧与位,实时刷新 LCD 显示光标与二进制预览
  4. IntToHexToByte() + BoolArrayToByte():将二维布尔数组转为字节数组供 shiftOut() 发送
  5. Play():按循环次数逐帧锁存输出,帧间延时 animSpeed

代码亮点与改进建议

现有代码特点

可优化方向

扩展玩法

常见问题排查

现象可能原因解决方法
LED 全亮/全灭移位寄存器锁存脚接线错误检查 ST_CP (Pin 11) 连接,确保 digitalWrite(latchPin, HIGH) 后再延时
动画乱序数据/时钟引脚反接对照原理图核对 DS/SH_CP 接线
LCD 显示乱码对比度未调节或数据线接触不良调节电位器;重插 D4-D7 跳线
按钮无响应未启用内部上拉或引脚冲突确认 pinMode(btn, INPUT_PULLUP) 且引脚未被占用

总结

本项目以「移位寄存器 + 菜单交互」为核心,展示了如何用极简硬件实现功能完整的灯光动画编辑器。代码结构清晰,极易扩展为多动画播放器、音乐频谱显示或节日装饰灯控制器。建议初学者从修改 ARR_SIZE、调整 animSpeed 入手,逐步理解数组与移位寄存器的配合原理。

制造工艺

  1. 基于 Edge Impulse 的 TinyML 语言检测器:Arduino Nano 33 BLE Sense 实战
  2. Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
  3. Arduino 数字骰子:LCD 显示随机点数的电子骰子
  4. 用 Arduino Nano 自制 37 灯珠轮盘赌游戏机
  5. ATtiny85 迷你街机:贪吃蛇 — 打造掌上 OLED 游戏机
  6. 便携测距仪 DIY 套件:Arduino Nano + HC-SR04 + 18650 电池 + 3D 打印外壳
  7. 声控氛围灯:Arduino Nano + 麦克风模块 + WS2812B 灯珠
  8. Arduino Nano + OpenCV 人脸追踪自主机器人小车
  9. 铜电镀智能系统:基于 Arduino UNO 的可控电解装置
  10. Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
  11. Arduino MKR1000 WiFi 拣选指灯系统(二):UDP 通信与序列号防错
  12. 智能插座:基于 Arduino 与 RTC 的 120V 定时开关插座