중급⏱ 예상 시간: 40분📝 6단계

OLED 디지털 시계

OLED 디스플레이에 시간, 분, 초를 표시하는 디지털 시계를 만듭니다. millis() 함수로 시간을 관리합니다.

🧩 필요한 모듈

Arduino Uno
브레드보드
택트 스위치 (버튼)
점퍼 와이어
OLED 디스플레이 (0.96인치 I2C)
저항 (220Ω / 10kΩ)

📖 단계별 설명서

📝

1단계준비물 확인

다음 부품들을 준비해주세요:

  • Arduino Uno 1개
  • 브레드보드 1개
  • 점퍼 와이어 6개
  • OLED 디스플레이 (0.96인치 I2C) 1개
  • 택트 스위치 2개 (시간/분 설정용)
  • 10kΩ 저항 2개
📝

2단계회로 연결하기

  1. OLED의 SDA를 A4에, SCL을 A5에 연결합니다.
  2. OLED의 VCC를 5V, GND를 GND에 연결합니다.
  3. 시간 설정 버튼을 D2에 연결합니다 (풀다운 저항 연결).
  4. 분 설정 버튼을 D3에 연결합니다 (풀다운 저항 연결).

📐 회로도

회로도 이미지

/images/projects/oled-clock-circuit.png

📝

3단계라이브러리 설치

아두이노 IDE에서 스케치 > 라이브러리 관리로 이동하여:

  • Adafruit SSD1306 라이브러리를 설치합니다.
  • Adafruit GFX Library도 함께 설치합니다.
📝

4단계코드 작성하기

code.ino
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int BTN_HOUR = 2;
const int BTN_MIN = 3;

int hours = 12;
int minutes = 0;
int seconds = 0;
unsigned long prevMillis = 0;

void setup() {
  pinMode(BTN_HOUR, INPUT);
  pinMode(BTN_MIN, INPUT);

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
}

void loop() {
  unsigned long now = millis();

  // 1초마다 시간 업데이트
  if (now - prevMillis >= 1000) {
    prevMillis = now;
    seconds++;
    if (seconds >= 60) { seconds = 0; minutes++; }
    if (minutes >= 60) { minutes = 0; hours++; }
    if (hours >= 24) { hours = 0; }
  }

  // 버튼으로 시간 설정
  if (digitalRead(BTN_HOUR) == HIGH) {
    hours = (hours + 1) % 24;
    delay(300);
  }
  if (digitalRead(BTN_MIN) == HIGH) {
    minutes = (minutes + 1) % 60;
    seconds = 0;
    delay(300);
  }

  // OLED에 시간 표시
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(35, 10);
  display.print("Digital Clock");

  display.setTextSize(3);
  display.setCursor(10, 30);
  if (hours < 10) display.print("0");
  display.print(hours);
  display.print(":");
  if (minutes < 10) display.print("0");
  display.print(minutes);

  display.setTextSize(1);
  display.setCursor(110, 40);
  if (seconds < 10) display.print("0");
  display.print(seconds);

  display.display();
  delay(50);
}
+52 줄 더 보기
📝

5단계업로드 및 테스트

  1. 코드를 업로드합니다.
  2. OLED에 시간이 표시되고 초가 증가하는지 확인합니다.
  3. 시간 버튼과 분 버튼을 눌러 시간을 설정해봅니다.

💡 팁: millis()는 아두이노가 켜진 시점부터의 경과 시간을 밀리초로 반환합니다. delay()와 달리 다른 작업을 막지 않습니다.

📝

6단계심화 — 알람 기능 추가

부저를 추가하면 특정 시간에 알람이 울리는 기능을 구현할 수 있습니다.

🎉

축하합니다!

"OLED 디지털 시계" 프로젝트를 완성했습니다!