아두이노 나노 4×64 LED 매트릭스 시계 – 신버전 (v2)
프로젝트 개요
아두이노 나노와 4-in-1 MAX7219 LED 매트릭스(32×8), DS3231 RTC 모듈로 제작하는 탁상용 디지털 시계입니다. 멀리서도 잘 보이는 대형 디스플레이로 시/분/초 동시 표시, 날짜/온도 전환 표시, 조도 센서 자동 밝기 조절, 시리얼 모니터로 시간 설정 기능을 갖췄습니다. v2에서 코드 최적화, 소형 폰트 내장, 경고 제거, 초 표시 개선 등이 이루어졌습니다.
필요 부품
- 아두이노 나노 R3 × 1
- MAX7219 4-in-1 LED 매트릭스 모듈 (32×8) × 1
- DS3231 RTC 모듈 × 1
- 포토레지스터 (조도 센서) × 1
- 브레드보드 및 점퍼 와이어
연결 회로
LED 매트릭스 (하드웨어 SPI)
- VCC → 5V
- GND → GND
- CLK → D13 (SCK)
- DIN → D11 (MOSI)
- CS → D10 (SS)
DS3231 RTC (I2C)
- SDA → A4
- SCL → A5
- VCC → 5V, GND → GND
포토레지스터
- 한쪽 → A2 (INPUT_PULLUP), 다른 쪽 → GND
주요 기능
- 시/분/초 동시 표시: 3×5 픽셀 소형 폰트로 초 단위 표시 (v2에서 폰트 코드 내장)
- 깜빡이는 콜론: 2개 도트로 초 단위 점멸 (약 0.5초 주기)
- 자동 밝기 조절: 포토레지스터로 주변 밝기 감지해 3단계 조도 제어
- 날짜/온도 표시: 매 분 마지막 7초간 "일 월" 형식 날짜와 RTC 내부 센서 온도(°C, -1°C 보정) 표시
- 요일 표시 옵션: 코드 주석 해제로 활성화 가능 (표시 시간 조정 필요)
- 시리얼 시간 설정: 시리얼 모니터에서
DD/MM/YYYY hh:mm:ss 형식 입력으로 RTC 설정
- 스크롤 애니메이션: 화면 전환 시 위로 스크롤 효과
라이브러리 및 설정
- MD_MAX72xx 라이브러리:
MD_MAX72XX::FC16_HW 또는 ICSTATION_HW 하드웨어 타입 선택 필요 (모듈에 따라 다름). MD_MAX72xx_HW_Mapper.ino 예제로 확인 가능
- DS3231 라이브러리: Rinky-Dink Electronics 버전 권장 (링크)
- SPI 라이브러리: 아두이노 기본 내장
코드 구조 (v2)
Font3x5[10][3]: 0~9 숫자 3×5 폰트 배열 내장 (라이브러리 수정 불필요)
months[12][4]: 월 이름 배열 (포인터 방식 제거로 컴파일 경고 해결)
printText(): 유한 상태 머신으로 매트릭스 텍스트 출력
showsec(): 내장 폰트로 초 단위 표시
ledintensitySelect(): 조도 값 → 밝기 레벨(0~15) 매핑
- 메인 루프: 53초 시간 표시 → 스크롤 → 20초 날짜 → 20초 요일(옵션) → 20초 온도 → 반복
메모리 사용량
프로그램: 13,558 바이트 (44%), 변수: 372 바이트 (18%) - 나노 32KB 플래시/2KB SRAM 내에서 여유롭게 동작
문제 해결 팁
- 매트릭스 표시 이상 시:
HARDWARE_TYPE 변경 (FC16_HW ↔ ICSTATION_HW)
- DS3231 라이브러리 경고: 무시 가능 (기능 영향 없음)
- 12시간제 선호 시: 이전 버전 답변 참조
- RTC 초기 설정: 시리얼 모니터로 간편 입력
제공 파일
- 구버전 코드 (참고용)
- 신버전 v2 코드 (권장)
- 회로도: Leonardo Sposina 프로젝트 기반, CS_PIN=D10 차이점 명시