아두이노 나노로 만드는 USB 전원 LED 팬 시계 - 회로도 & 코드
USB LED 라이트 팬 아날로그 시계 - 아두이노 나노(Arduino NANO) 프로젝트 코드 & 회로도 (시간 설정 기능 포함)
미니 USB LED 라이트 팬 시계 영상을 보셨다면, 아두이노 나노(Arduino NANO), 홀 센서, 저항, 배터리, DC 모터, LED를 이용해 동일한 LED 아날로그 시계를 직접 만들어 보세요.
LED들이 원운동하며 시침, 분침, 초침 세 바늘과 일반 손목/벽시계 같은 원형 다이얼을 프로펠러 디스플레이로 보여줍니다.
이 프로젝트의 장점은 소스 코드를 아두이노 나노에 USB 케이블로 업로드해 분/초 시간 설정을 자유롭게 변경할 수 있다는 점입니다. 제작 방법을 알아보겠습니다.
LED 라이트 팬 시계 가젯 확인
필요 부품:
- 아두이노 나노 (Arduino NANO)
- 홀 센서 W130
- R1~R16 = 330Ω
- R17 = 2.2kΩ
- R18 = 10kΩ
- LED 1~11 = 적색
- LED 12~16 = 녹색
- LED 17 = 청색
- 배터리 = 3.7V, 240mAh (고속 모터용 9V~12V)
- 스위치 = ON/OFF 단극 토글(슬라이드)
- 기타: PCB 기판, 토이 DC 모터, 전선, 납땜 도구 등
배선 & 회로도
USB 프로펠러 LED 팬 아날로그 시계 회로도입니다. 시간 설정 기능이 있는 버전은 본문 하단의 두 번째 회로도를 참고하세요.

제작 절차:
- 회로에 맞게 작은 PCB 조각을 자릅니다.
- 녹색 LED를 긴 다리가 왼쪽이 되게 꽂고, 구리면에서 다리를 한쪽으로 굽힙니다 (녹색 LED 12~16 → R12~R16 → A5~A1).
- 같은 방식으로 적색 LED(LED 1~11 → R1~R11 → D2~D12)를 꽂습니다.
- 녹색 LED 위에 청색 LED를 꽂습니다 (청색 LED 17 → R17 → A7). R17은 2.2kΩ, 이 LED 캐소드를 다른 LED 캐소드들과 공통 연결합니다. 애노드는 R17 한 쪽, 다른 쪽은 아두이노 +5V 핀에 연결.
- 모든 LED 캐소드를 공통 연결하고 불필요한 리드는 자릅니다.
- 저항도 같은 방식으로 꽂고 리드를 굽혀 회로도대로 배치, 여분 리드 제거.
- 회로도대로 부품 납땜.
- 아두이노 나노용 커넥터 납땜.
- LED 공통 캐소드를 아두이노 GND 핀에 연결.
저항을 아두이노 디지털 핀 'D'와 아날로그 핀 'A'에 다음과 같이 연결:
- R1 → D2, R2 → D3, R3 → D4, R4 → D5, R5 → D6
- R6 → D7, R7 → D8, R8 → D9, R9 → D10, R10 → D11
- R11 → D12, R12 → A1, R13 → A2, R14 → A3, R15 → A4, R16 → A5
홀 센서 연결:
- 출력 핀 → 아두이노 A0
- VCC 핀 → 아두이노 +5V
- GND 핀 → 아두이노 GND
마무리:
- 회로도대로 3.7V 240mAh 배터리 연결, 양극에 단극 토글 슬라이드 스위치 장착(ON/OFF).
- 토이 DC 모터를 이용해 칩보드에 전체 프로젝트 장착. 고속 모터 사용 시 9V~12V 배터리 사용.
- 아래 프로젝트 코드를 USB 케이블로 업로드하고 스위치 ON. 프로펠러 운동 중 LED로 시계 표시.
프로젝트 코드
다음 소스 코드에서 필요한 부분(시간 설정 등)을 수정해 아두이노 나노에 USB로 업로드하세요.
코드 출처: hobbyprojects
int LED1 = 2; int LED2 = 3; int LED3 = 4; int LED4 = 5; int LED5 = 6; int LED6 = 7; int LED7 = 8; int LED8 = 9; int LED9 = 10; int LED10 = 11; int LED11 = 12; int LED12 = A1; int LED13 = A2; int LED14 = A3; int LED15 = A4; int LED16 = A5; int sensorPin = A0; int minuteSensor = A7; int hourSensor = A6; unsigned int n,ADCvalue,propeller_posn; unsigned long previousTime = 0; byte hours = 12; // 시 설정 byte minutes = 15; // 분 설정 byte seconds = 00; // 초 설정 int val; void setup() { pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); pinMode(LED8,OUTPUT); pinMode(LED9,OUTPUT); pinMode(LED10,OUTPUT); pinMode(LED11,OUTPUT); pinMode(LED12,OUTPUT); pinMode(LED13,OUTPUT); pinMode(LED14,OUTPUT); pinMode(LED15,OUTPUT); pinMode(LED16,OUTPUT); pinMode(sensorPin,INPUT_PULLUP); if(hours == 12) hours = 0; //**************************************** // IR 센서 테스트용 주석 해제 /* Serial.begin(9600); while(1) { ADCvalue = analogRead(minuteSensor); Serial.print("minuteSensor "); Serial.println(ADCvalue); ADCvalue = analogRead(hourSensor); Serial.print("hourSensor "); Serial.println(ADCvalue); Serial.println(); delay(1000); } */ //**************************************** } void loop() { val = digitalRead(sensorPin); while (val == LOW) { val = digitalRead(sensorPin); } if (millis() >= (previousTime)) { previousTime = previousTime + 1000; seconds = seconds+1; if (seconds == 60) { seconds = 0; minutes = minutes+1; } if (minutes == 60) { minutes = 0; hours = hours+1; } if (hours == 12) { hours = 0; } } propeller_posn=30; n=0; while(n < 60) { ADCvalue = analogRead(minuteSensor); if(ADCvalue < 500) { minutes = propeller_posn; seconds = 0; } ADCvalue = analogRead(hourSensor); if(ADCvalue < 500) { hours = propeller_posn/5; seconds = 0; } drawMinuteMarker(); if ((propeller_posn==0) || (propeller_posn==5) || (propeller_posn==10) || (propeller_posn==15) || (propeller_posn==20) || (propeller_posn==25) || (propeller_posn==30) || (propeller_posn==35) || (propeller_posn==40) || (propeller_posn==45) || (propeller_posn==50) || (propeller_posn==55)) drawHourMarker(); if ((propeller_posn==0) || (propeller_posn==15) || (propeller_posn==30) || (propeller_posn==45)) drawQuarterMarker(); if((propeller_posn == hours*5) || (( propeller_posn == 0 ) && (hours == 0))) drawHoursHand(); if(propeller_posn == minutes) drawMinutesHand(); if(propeller_posn == seconds) drawSecondsHand(); delayMicroseconds(100); // LED 픽셀 폭 (모터 속도에 맞춰 조절. 저속이면 증가, 고속이면 감소) displayClear(); drawInner_Circle(); delayMicroseconds(450); // LED 픽셀/분 마커 간 간격 (모터 속도에 맞춰 조절) n++; propeller_posn++; if(propeller_posn == 60) propeller_posn=0; } val = digitalRead(sensorPin); while (val == HIGH) { val = digitalRead(sensorPin); } } //========================= void displayClear() { digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED8,LOW); digitalWrite(LED9,LOW); digitalWrite(LED10,LOW); digitalWrite(LED11,LOW); digitalWrite(LED12,LOW); digitalWrite(LED13,LOW); digitalWrite(LED14,LOW); digitalWrite(LED15,LOW); digitalWrite(LED16,LOW); } void drawMinuteMarker() { digitalWrite(LED16,HIGH); } void drawHourMarker() { digitalWrite(LED15,HIGH); digitalWrite(LED14,HIGH); } void drawQuarterMarker() { digitalWrite(LED13,HIGH); digitalWrite(LED12,HIGH); } void drawHoursHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); } void drawMinutesHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); digitalWrite(LED8,HIGH); digitalWrite(LED9,HIGH); } void drawSecondsHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); digitalWrite(LED8,HIGH); digitalWrite(LED9,HIGH); digitalWrite(LED10,HIGH); digitalWrite(LED11,HIGH); } void drawInner_Circle() { digitalWrite(LED1,HIGH); delayMicroseconds(30); digitalWrite(LED1,LOW); }
LED 팬 시계 시간 설정 변경 방법
메인 회로에 기본 IR 수신기 추가 시
필요 부품:
- R19, R20 = 10kΩ
- IR 포토트랜지스터 LED (LED#13 근처 - 분 설정용)
- IR 포토트랜지스터 LED (LED#16 근처 - 시 설정용)
첫 번째 IR LED(분 설정, LED#13 근처)에 R19, 두 번째 IR LED(시 설정, LED#16 근처)에 R20 연결. 두 IR LED 공통단과 저항들을 아두이노 나노 GND와 5V에 각각 연결. 점퍼 와이어로 A7 핀을 R19-두 번째 IR 사이, A6 핀을 R20-첫 번째 IR 사이에 연결.

기본 IR 리모컨 송신기 제작
필요 부품:
- 9V 배터리
- 배터리 스냅 커넥터
- IR LED (적외선 LED)
- 1kΩ 저항
- 택트 스위치
- PCB 기판
간단한 IR 리모컨 송신기 제작: 9V 배터리, IR LED, 1kΩ 저항, 택트 스위치를 양극 측에 직렬 연결. 이 송신기를 LED#13(분 마커), LED#16(시 마커) 앞에 대고 버튼 눌러 시간 설정.
아래 코드로 USB LED 팬 시계의 아날로그 시계 바늘(시침, 분침) 위치 조정:
아두이노 시리얼 모니터로 IR 검출기 출력 확인. 예: 일반 실내 조명에서 >500, IR 빛에서 <500. 사용 센서에 맞춰 코드/값 조정.
propeller_posn=30; n=0; while(n < 60) { ADCvalue = analogRead(minuteSensor); if(ADCvalue < 500) { minutes = propeller_posn; seconds = 0; } ADCvalue = analogRead(hourSensor); if(ADCvalue < 500) { hours = propeller_posn/5; seconds = 0; }
분침 설정: IR 리모컨을 분 마커에 겨냥해 버튼 누름. 시침 설정: IR 리모컨을 시 마커에 겨냥해 버튼 누름.
동영상 보기:
자료:
LED 라이트 팬 시계 가젯
프로젝트용 키트 & 부품
프로젝트용 아두이노 나노