USB螺旋桨LED风扇时钟-电路图和项目代码
使用 Arduino NANO 的 USB LED 灯风扇模拟时钟 - 具有时间设置功能的项目代码和电路图
如果您看过著名的Mini USB LED灯风扇时钟的视频,请做好准备,我们将基于Arduino NANO设计相同的LED灯模拟时钟,霍尔传感器、电阻器、电池、直流电机和 LED。
LED 将以圆周运动旋转,并在螺旋桨显示屏中显示一个模拟时钟,所有三个指针分别表示时、分和秒以及圆形(圆形)形状,如一个普通的手腕或挂钟。
这个项目最好的一点是,您可以通过USB线将源代码上传到Arduino NANO来更改分钟和秒的时间设置。让我们看看怎么做。
检查LED灯风扇时钟的小工具
必需组件:
- Arduino 纳米
- 霍尔传感器 W130
- R1 至 R16 =330Ω
- R17 =2.2kΩ
- R18 =10kΩ
- LED 1 到 LED 11 =红灯
- LED 12 到 LED 16 =绿灯
- LED 17 =蓝光
- 电池 =3.7V, 240mAh(9V 至 12V 用于高速运行的强力电机)
- 开关 =ON / OFF 单刀(滑动切换)
- 其他组件:PCB板、玩具直流电机、电线电缆、烙铁等。
接线和电路图
下面是给定的USB螺旋桨LED风扇模拟时钟电路图。如果您想制作具有时间设置功能的相同项目,请查看本文底部给出的第二个电路图。
程序:
- 根据电路剪一小块PCB板。
- 将绿色 LED 插入孔中,长腿位于左侧。现在从铜一侧,将其腿弯曲到一侧(绿色 LED,即 LED 12 – LED 16,分别通过 R12 到 R16 和 A5 到 A1)。
- 以同样的方式,插入剩余的红色 LED(LED 1 – LED 11 分别通过 R1 到 R11 和 D2 到 D12)。
- 将蓝色 LED 插入绿色 LED 上方,如图所示(蓝色 LED 17 通过 R17 和 A7)。将 R17 连接为 2.2kΩ,并将此 LED 的阴极连接到其他 LED 的阴极。现在,将此 LED 的正极连接到电阻器 R17 的一端,将另一端连接到 Arduino +5V 引脚。
- LED 的所有阴极连接都连接在一起。如果需要,切断多余的引线。
- 现在插入电阻并弯曲其引线,就像您对 LED 所做的那样。相应地减少额外的潜在客户。
- 现在根据电路图焊接元件。
- 现在,将连接器焊接到 Arduino NANO。
- 将一根导线从 LED 共阴极连接到 Arduino GND 引脚。
将电阻从电阻连接到Arduino数字引脚“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
按如下方式连接霍尔传感器:
- Arduino A0 引脚的输出引脚。
- VCC 引脚转 Arduino +5V 引脚。
- 将传感器接地引脚连接到 Arduino GND 引脚。
最后一点:
- 根据电路连接 3.7V、240mAh 电池,不要忘记在正极引线上添加单极拨动滑动开关,用于电路的 ON 和 OFF 操作。
- 现在,借助玩具直流电机将整个项目安装到刨花板上。请记住,如果您使用大功率电机进行高速行驶,则可以改用 9V 至 12V 电池。
- 最后,上传项目代码(如下所示)viva USB 电缆并打开电路。风扇在螺旋桨运动时以 LED 灯显示时钟。
项目代码
您可以对以下USB Led风扇时钟源代码进行必要的更改,并根据需要通过USB线上传到Arduino NANO。
代码来自: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; // set hours
byte minutes = 15; // set minutes
byte seconds = 00; // set seconds
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;
//****************************************
// Uncomment these lines for IR sensor testing
/*
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); // for LED pixel width (change the value according to motor speed. Increase for low speed, decrease for high speed motor)
displayClear();
drawInner_Circle();
delayMicroseconds(450); // for the gap between LED pixels/minutes markers (change the value according to motor speed. Increase for low speed, decrease for high speed motor)
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 用于小时设置)
只需将 R19 连接到第一个 IR LED(靠近 LED#13 用于分钟设置)和 R20 连接到第二个 IR(靠近 LED#16 用于小时设置)。将 IR LED 和两个电阻的公共端分别连接到 Arduino NANO 的 GND 和 5V 引脚。最后,将 A7 引脚的跳线连接到 R19 和第二个 IR 之间。对 R20 和第一个 IR 的 A6 引脚执行相同操作。
对于基本红外遥控器 发射器
所需组件:
- 9V 电池
- 电池卡扣连接器
- IR LED(红外线 LED)
- 1kΩ 电阻
- 轻触开关
- PCB 板
要制作一个简单的红外遥控发射器来设置和控制USB LED风扇时钟的时间设置功能,只需串联所有组件(即9V电池,红外LED , 1k 欧姆电阻和正极端子上的轻触开关)。此发射器将用于放置和面对 LED#13 和 LED#16 以调整时间。
以下代码用于更改和调整模拟USB LED风扇时钟的时针和分针(普通挂钟和模拟手表的分针和时针)。
使用 Arduino 串行监视器检查红外探测器电路的输出。例如,普通室内灯读数> 500,红外灯读数<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 遥控器指向时标并按下遥控器按钮。
观看视频:
资源:
LED灯风扇时钟小工具
此项目的套件和组件
本项目的 Arduino NANO
工业技术