Arduino Nano 自制 USB 供电 LED 风扇时钟:电路图、代码与时间校准全攻略
Arduino Nano 驱动 USB LED 扇叶时钟——电路图、源码与时间设置功能
见过迷你 USB LED 风扇时钟的视频吗?本项目教你用 Arduino Nano、霍尔传感器、电阻、电池、直流电机与 LED 复刻同款:LED 随扇叶旋转形成视觉暂留(POV)模拟指针时钟,显示时/分/秒三针及圆形表盘。亮点是可通过 USB 上传代码修改时分秒初始值,无需外部按键。

元器件清单(BOM)
- Arduino Nano ×1
- 霍尔传感器 W130 ×1
- 电阻:R1–R16 = 330Ω,R17 = 2.2kΩ,R18 = 10kΩ
- LED:红光 LED1–LED11 ×11,绿光 LED12–LED16 ×5,蓝光 LED17 ×1
- 电池:3.7V 240mAh 锂电(大扭矩电机可用 9–12V)
- 拨码开关(单极单投)×1
- 辅材:PCB 板、玩具直流电机、导线、烙铁等
电路原理图与 PCB 布局

制作流程
- 按电路尺寸裁剪 PCB 小板;
- 绿色 LED(LED12–16 对应 A5–A1)长脚朝左插入,焊盘侧弯脚固定;
- 红色 LED(LED1–11 对应 D2–D12)同法插装;
- 蓝色 LED17 插在绿 LED 上方(经 R17 接 A7,阴极与其他 LED 共阴,阳极经 R17 接 Arduino 5V);
- 所有 LED 阴极并联接地,修剪多余引脚;
- 电阻同法插装焊接;
- 按原理图焊接所有元件;
- 焊接 Arduino Nano 排针座;
- LED 共阴线接 Arduino GND;
- 电阻另一端按下表接 Arduino 数字/模拟口:
| 电阻 | Arduino 引脚 |
|---|---|
| R1–R11 | D2–D12 |
| R12–R16 | A1–A5 |
霍尔传感器接线:输出脚 → A0,VCC → 5V,GND → GND。
收尾:接电池与拨码开关(正极串联开关),整体固定在芯板上配合玩具电机旋转(高速电机改用 9–12V 供电),上传代码,拨动开关,POV 时钟即刻呈现。
核心源码(含时间设置逻辑)
代码来源:hobbyprojects
int LED1=2, LED2=3, LED3=4, LED4=5, LED5=6, LED6=7, LED7=8, LED8=9, LED9=10, LED10=11, LED11=12;
int LED12=A1, LED13=A2, LED14=A3, LED15=A4, LED16=A5;
int sensorPin=A0, minuteSensor=A7, hourSensor=A6;
unsigned int n, ADCvalue, propeller_posn;
unsigned long previousTime=0;
byte hours=12, minutes=15, seconds=0; // 初始时间在此修改
int val;
void setup() {
for(int i=2;i<=12;i++) pinMode(i,OUTPUT);
for(int i=A1;i<=A5;i++) pinMode(i,OUTPUT);
pinMode(sensorPin,INPUT_PULLUP);
if(hours==12) hours=0;
/* 串口调试红外传感器阈值
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+=1000;
if(++seconds==60){seconds=0; if(++minutes==60){minutes=0; 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%5==0) drawHourMarker();
if(propeller_posn%15==0) drawQuarterMarker();
if(propeller_posn==hours*5 || (propeller_posn==0 && hours==0)) drawHoursHand();
if(propeller_posn==minutes) drawMinutesHand();
if(propeller_posn==seconds) drawSecondsHand();
delayMicroseconds(100); // 像素宽度,随电机转速调整
displayClear();
drawInner_Circle();
delayMicroseconds(450); // 像素间隙,随电机转速调整
n++; propeller_posn++; if(propeller_posn==60) propeller_posn=0;
}
val=digitalRead(sensorPin);
while(val==HIGH) val=digitalRead(sensorPin); // 等待下一转霍尔信号
}
// ===== 绘图子程序 =====
void displayClear(){ for(int i=2;i<=12;i++) digitalWrite(i,LOW); for(int i=A1;i<=A5;i++) digitalWrite(i,LOW); }
void drawMinuteMarker(){ digitalWrite(LED16,HIGH); }
void drawHourMarker(){ digitalWrite(LED15,HIGH); digitalWrite(LED14,HIGH); }
void drawQuarterMarker(){ digitalWrite(LED13,HIGH); digitalWrite(LED12,HIGH); }
void drawHoursHand(){ for(int i=1;i<=7;i++) digitalWrite(i+1,HIGH); } // LED1-7
void drawMinutesHand(){ for(int i=1;i<=9;i++) digitalWrite(i+1,HIGH); } // LED1-9
void drawSecondsHand(){ for(int i=1;i<=11;i++) digitalWrite(i+1,HIGH); } // LED1-11
void drawInner_Circle(){ digitalWrite(LED1,HIGH); delayMicroseconds(30); digitalWrite(LED1,LOW); }
红外遥控校时功能扩展(可选)
接收端增补元件:R19=R20=10kΩ,两只 IR 接收管(分别置于 LED13 附近对应分针、LED16 附近对应时针)。公共端接地,上拉电阻接 5V,信号线分别接 A7、A6。

发射端(简易遥控器):9V 电池 + IR 发射管 + 1kΩ 电阻 + 轻触开关串联。
校时逻辑(已集成在主循环中):
ADCvalue = analogRead(minuteSensor);
if(ADCvalue < 500) { minutes = propeller_posn; seconds = 0; }
ADCvalue = analogRead(hourSensor);
if(ADCvalue < 500) { hours = propeller_posn/5; seconds = 0; }
操作:对准分针标记按遥控器 → 设定分钟;对准时针标记按遥控器 → 设定小时。串口监视器观察 ADC 阈值(环境光 >500,IR 照射 <500),可按实测调整判断阈值。
视频演示:[视频链接]
资源:成品购买链接、套件元件包、Arduino Nano 选购
工业技术
- Arduino POV 时钟:自制视觉暂留 LED 显示器
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
- 从零构建智能 Arduino 四足机器人:完整指南
- 使用 SparkFun 7 段数码管构建可靠的 Arduino 倒计时器
- Arduino 8×8 LED 矩阵翻页时钟 - DIY 实时时钟项目
- 自制 Arduino 遥控保时捷赛车:从改装底盘到手机 App 控制全攻略
- DIY Arduino USB 触控板 —— 将废旧笔记本触控板改造为现代输入设备
- Arduino Nano 与 TCS3200 传感器实现物体颜色检测
- Arduino 实时时钟 LED 时钟:六位数码管精准计时制作指南
- 构建LED定序器:555定时器与4017计数器——分频与去抖动
- 专业LED夜灯电路图:230V/50Hz或110V/60Hz市电直驱设计