아다프루트 60-LED 네오픽셀 링 4개로 스타일리시 벽시계 만들기
부품 및 소모품
| 아다프루트 네오픽셀 1/4 60 링 |
4개 (총 240 LED) |
| eDOTcore 보드 (내장 RTC) |
1개 |
| 아두이노 우노 / 나노 / 마이크로 (택1) |
1개 |
앱 및 온라인 서비스
프로젝트 소개
eDOTcore: 내장 RTC를 갖춘 다용도 아두이노 보드
4개의 60-LED 네오픽셀 1/4 링을 원형으로 배열해 아날로그 시계처럼 시/분/초를 표시합니다. eDOTcore 보드는 DS1307 RTC를 내장해 별도 RTC 모듈 없이 정확한 시간 유지가 가능합니다.
코드
심플 네오픽셀 링 시계
#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define PIXEL 60
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL, PIN, NEO_GRB + NEO_KHZ800);
RTC_DS1307 RTC;
DateTime Clock;
byte hourval, minuteval, secondval;
void setup() {
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (!RTC.isrunning()) {
// RTC가 멈춰 있으면 컴파일 시간으로 설정
// RTC.adjust(DateTime(__DATE__, __TIME__));
}
strip.begin();
strip.show();
strip.setBrightness(20); // 눈부심 방지용 낮은 밝기
}
void loop() {
Clock = RTC.now();
secondval = Clock.second();
minuteval = Clock.minute();
hourval = Clock.hour();
if (hourval > 11) hourval -= 12; // 12시간제로 변환
// 시침: 12시간을 60 LED에 매핑 (5분 단위 = 1 LED)
// 시침 위치 = (시 * 60 + 분) / 12
hourval = (hourval * 60 + minuteval) / 12;
// 시침 (청록색) + 양옆 그라데이션
strip.setPixelColor(hourval, 0x008080);
strip.setPixelColor(hourval - 1, 0x004040);
strip.setPixelColor(hourval + 1, 0x004040);
strip.setPixelColor(hourval + 2, 0x001010);
// 분침 (자홍색)
strip.setPixelColor(minuteval, 0x800080);
strip.setPixelColor(minuteval + 1, 0x200020);
// 초침 (노란색)
strip.setPixelColor(secondval, 0x808000);
strip.setPixelColor(secondval + 1, 0x002F00);
strip.show();
// 이전 위치 지우기 (잔상 방지)
strip.setPixelColor(hourval, 0); strip.setPixelColor(hourval - 1, 0); strip.setPixelColor(hourval + 1, 0); strip.setPixelColor(hourval + 2, 0);
strip.setPixelColor(minuteval, 0); strip.setPixelColor(minuteval + 1, 0);
strip.setPixelColor(secondval, 0); strip.setPixelColor(secondval + 1, 0);
delay(25);
}
3D 프린트 파트
네오픽셀 링 4개를 원형으로 고정하고 확산판 역할을 하는 파트: Thingiverse에서 다운로드
작동 원리
- 60개 LED 링 4개를 직렬 연결 (총 240 LED, 하지만 코드상으로는 60개만 주소 지정 → 4개 링이 동일 패턴 표시)
- 시침은 12시간을 60분 해상도로 매핑해 부드럽게 이동
- 분침/초침은 각각 분/초에 해당하는 LED 점등
- 밝기 20/255로 설정해 실내용으로 적절