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

Arduino Nano 驱动 4×64 LED 点阵时钟 v2:DS3231 RTC + 光敏自适应亮度

项目特色

硬件清单

器件数量备注
Arduino Nano (ATmega328P Old Bootloader)15V 逻辑,硬件 SPI
4 合 1 MAX7219 点阵模块 (FC16/ICSTATION)132×8 像素,右侧接口
DS3231 RTC 模块 (带纽扣电池)1I²C 地址 0x68
光敏电阻 (GL5528 等) + 10kΩ 上拉1接 A2
面包板/万用板 + 跳线若干

接线对照表

模块引脚Nano 引脚说明
VCC5V
GNDGND
DIN (DATA)D11 (MOSI)硬件 SPI
CS (LOAD)D10 (SS)
CLKD13 (SCK)
DS3231 SDAA4I²C
DS3231 SCLA5I²C
LDR 一端A2另一端接 GND,内部开启上拉

关键代码片段

3×5 数字字体定义 (内置数组)

uint8_t Font3x5[10][3] = {
  {248,136,248}, // 0
  {144,248,128}, // 1
  {200,168,184}, // 2
  {136,168,248}, // 3
  {112,72,224},  // 4
  {184,168,232}, // 5
  {248,168,232}, // 6
  {8,232,24},    // 7
  {248,168,248}, // 8
  {184,168,248}  // 9
};

亮度自适应映射

byte ledIntensitySelect(int light) {
  if (light <= 127) return 12;      // 暗环境 → 亮度 12/15
  else if (light <= 319) return 3;  // 中环境 → 亮度 3/15
  else return 0;                    // 强光 → 亮度 0/15 (最暗)
}

主循环显示逻辑 (简化)

void loop() {
  matrix.control(MD_MAX72XX::INTENSITY, ledIntensitySelect(analogRead(LDR_PIN)));
  getHour();                    // 从 RTC 读取 hh,mm,ss, 计算 dots 闪烁列
  printText(0,3,buf);           // 显示 hh:mm
  unsigned long t0 = millis();
  while (ss < 53) {             // 前 53 秒
    if (millis()-t0 >= 1000) { t0=millis(); ss++; showsec(ss); }
    blinkDots();                // 双点 2.4Hz 闪烁
  }
  scrollUp();                   // 向上滚动退出
  getDate(); printText(0,3,buf); delay(2000); // 日期
  getTemp();  printText(0,3,buf); delay(2000); // 温度
  if (Serial.available() && !timeset) adjustClock(Serial.readString());
}

库依赖与安装

  1. MD_MAX72XX:库管理器搜索 "MD_MAX72XX" 安装 (由 MajicDesigns 维护)。
  2. DS3231:使用 Rinky-Dink Electronics 版库:
    https://www.rinkydinkelectronics.com/library.php?id=73
    下载 DS3231.zip → 草图→加载库→添加 .ZIP 库。

常见问题 FAQ

点阵显示乱码/镜像/倒立?
运行库自带示例 MD_MAX72xx_HW_Mapper.ino,按提示按键切换硬件类型,直到显示正确。常见类型:FC16_HW (绿板)、ICSTATION_HW (蓝板)。在代码中修改 #define HARDWARE_TYPE 即可。
编译报警告 "ISO C++ forbids converting string constant to char*"?
v2 已将月份字符串改为二维数组 char months[12][4] 消除警告;DS3231 库内部警告可忽略。
如何改 12 小时制?
在 getHour() 中将 hh 转换:if (hh>12) hh-=12; if (hh==0) hh=12; 并调整 dots 位置计算。
串口校时格式?
Arduino IDE 串口监视器发送 25/12/2025 14:30:00 (含空格),波特率 9600,换行符 "Both NL & CR"。

扩展建议

制造工艺

  1. 自制 Arduino 伊斯兰祷告时间实时时钟
  2. Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
  3. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  4. 基于 Arduino Mega 与 Nextion 显示屏的交互式气象站
  5. 互动 LED 矩阵门显:PIR 触发节日问候 + 待机特效
  6. Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
  7. Arduino 8×8 LED 矩阵翻页时钟 - DIY 实时时钟项目
  8. Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
  9. Arduino Nano 手持盖革计数器:DIY 核辐射检测仪
  10. 高级智能电池充电器:多路复用与数字显示
  11. Arduino 实时天气时钟:OLED 显示时间、日期与温度
  12. 信用卡大小 Arduboy 克隆机:Arduino Nano + I²C OLED 复古游戏机自制