아두이노 + RTC 모듈로 디지털 시계 만들기 – DS3231 연결부터 LCD 출력까지 완벽 정리
매일 아침 스마트폰 대신 아두이노로 만든 시계가 시간을 알려준다면 어떨까요?
RTC(Real Time Clock) 모듈을 활용하면, 아두이노가 전원이 꺼졌다 켜져도 시간을 기억하게 할 수 있습니다.
이번 글에서는 DS3231 RTC 모듈을 사용하여 디지털 시계를 만드는 방법을 회로 연결부터 LCD 출력까지 상세하게 소개합니다.
1. RTC 모듈이란?
RTC는 Real Time Clock, 즉 실시간 시계 모듈입니다.
아두이노 자체는 시간이 흐르는 것을 기억하지 못하기 때문에, 전원이 꺼지면 현재 시간이 초기화됩니다.
하지만 RTC 모듈을 사용하면, 내장된 배터리 덕분에 전원이 꺼져도 시간을 계속 기억할 수 있어요.
그중에서도 DS3231은 다음과 같은 장점을 갖고 있습니다:
- I2C 방식 통신 (SDA, SCL 2핀만 사용)
- 온도 보정 기능으로 정확도 높음
- CR2032 배터리로 수년간 시간 유지 가능
2. 준비물
아두이노 UNO/Nano | 메인 보드 |
DS3231 RTC 모듈 | 실시간 시계 기능 |
I2C LCD (16x2) | 시간 출력용 |
브레드보드 & 점퍼선 | 연결용 |
💡 참고: LCD 없이도 시리얼 모니터로 확인 가능하지만, LCD를 활용하면 시계 느낌을 제대로 낼 수 있습니다.
3. 회로 연결
DS3231 ↔ 아두이노
VCC | 5V |
GND | GND |
SDA | A4 (UNO 기준) |
SCL | A5 (UNO 기준) |
LCD ↔ 아두이노 (I2C 방식)
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
💡 DS3231과 LCD 모두 I2C 방식을 사용하므로 병렬 연결이 가능합니다.
4. 라이브러리 설치
아두이노 IDE에서 아래 라이브러리를 설치하세요:
- RTClib (Adafruit)
- LiquidCrystal_I2C
설치 경로:
메뉴 > 스케치 > 라이브러리 포함하기 > 라이브러리 관리
검색창에 RTClib, LiquidCrystal_I2C 입력 후 설치
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD 주소는 0x27 또는 0x3F일 수 있음
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
lcd.begin();
lcd.backlight();
if (rtc.lostPower()) {
Serial.println("RTC 전원 초기화: 시간 설정 필요");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // 컴파일된 시간으로 설정
}
lcd.setCursor(0, 0);
lcd.print("RTC Clock Start");
delay(2000);
}
void loop() {
DateTime now = rtc.now();
char timeStr[20];
sprintf(timeStr, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time:");
lcd.setCursor(6, 0);
lcd.print(timeStr);
Serial.print("현재 시각: ");
Serial.println(timeStr);
delay(1000);
}
6. 출력 방식 응용
✅ OLED 출력
- 0.96" I2C OLED 사용
- Adafruit_SSD1306 및 Adafruit_GFX 라이브러리 필요
✅ 블루투스로 시간 전송
- SoftwareSerial로 HC-06 모듈과 연결
- 스마트폰 앱으로 시간 수신 가능
✅ 부저로 알람 기능 추가
- 특정 시간 조건에서 tone() 함수로 알림음 재생 가능
7. 실전 활용 아이디어
- 시계 겸 온습도 모니터링 (DHT11 추가)
- 알람 시계 만들기 (버튼 + 부저 활용)
- SD카드와 연결하여 시간별 데이터 기록
- 재실 감지 + 시간대별 자동 조명 제어
8. 문제 해결 팁
LCD에 아무것도 안 나옴 | I2C 주소가 다를 수 있음 → I2C Scanner 사용 |
시간 설정이 안 됨 | rtc.lostPower() 조건 확인 필요 |
시리얼엔 나오는데 LCD만 안 됨 | lcd.begin() 또는 lcd.backlight() 누락 여부 확인 |
9. 마무리
DS3231 RTC 모듈을 이용한 디지털 시계 만들기는 아두이노 입문자에게 아주 훌륭한 프로젝트입니다.
단순히 시간을 출력하는 것에 그치지 않고, 다양한 모듈과 연계하여 시계 이상의 기능을 구현할 수 있다는 점이 큰 매력입니다.
이제 단순한 시간 표시를 넘어서, 여러분만의 스마트 시계를 만들어보세요.
다음 글에서는 SD카드 로그 기록과 웹에 시간 표시하기 기능도 이어서 다룰 예정입니다. 기대해주세요!