亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 工业技术

USB螺旋桨LED风扇时钟-电路图和项目代码

使用 Arduino NANO 的 USB LED 灯风扇模拟时钟 - 具有时间设置功能的项目代码和电路图

如果您看过著名的Mini USB LED灯风扇时钟的视频,请做好准备,我们将基于Arduino NANO设计相同的LED灯模拟时钟,霍尔传感器、电阻器、电池、直流电机和 LED。

LED 将以圆周运动旋转,并在螺旋桨显示屏中显示一个模拟时钟,所有三个指针分别表示时、分和秒以及圆形(圆形)形状,如一个普通的手腕或挂钟。

这个项目最好的一点是,您可以通过USB线将源代码上传到Arduino NANO来更改分钟和秒的时间设置。让我们看看怎么做。

检查LED灯风扇时钟的小工具

必需组件:

接线和电路图

下面是给定的USB螺旋桨LED风扇模拟时钟电路图。如果您想制作具有时间设置功能的相同项目,请查看本文底部给出的第二个电路图。

程序:

  1. 根据电路剪一小块PCB板。
  2. 将绿色 LED 插入孔中,长腿位于左侧。现在从铜一侧,将其腿弯曲到一侧(绿色 LED,即 LED 12 – LED 16,分别通过 R12 到 R16 和 A5 到 A1)。
  3. 以同样的方式,插入剩余的红色 LED(LED 1 – LED 11 分别通过 R1 到 R11 和 D2 到 D12)。
  4. 将蓝色 LED 插入绿色 LED 上方,如图所示(蓝色 LED 17 通过 R17 和 A7)。将 R17 连接为 2.2kΩ,并将此 LED 的阴极连接到其他 LED 的阴极。现在,将此 LED 的正极连接到电阻器 R17 的一端,将另一端连接到 Arduino +5V 引脚。
  5. LED 的所有阴极连接都连接在一起。如果需要,切断多余的引线。
  6. 现在插入电阻并弯曲其引线,就像您对 LED 所做的那样。相应地减少额外的潜在客户。
  7. 现在根据电路图焊接元件。
  8. 现在,将连接器焊接到 Arduino NANO。
  9. 将一根导线从 LED 共阴极连接到 Arduino GND 引脚。

将电阻从电阻连接到Arduino数字引脚“D”和模拟引脚“A”,如下所示:

按如下方式连接霍尔传感器:

最后一点:

  1. 根据电路连接 3.7V、240mAh 电池,不要忘记在正极引线上添加单极拨动滑动开关,用于电路的 ON 和 OFF 操作。
  2. 现在,借助玩具直流电机将整个项目安装到刨花板上。请记住,如果您使用大功率电机进行高速行驶,则可以改用 9V 至 12V 电池。
  3. 最后,上传项目代码(如下所示)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 连接到第一个 IR LED(靠近 LED#13 用于分钟设置)和 R20 连接到第二个 IR(靠近 LED#16 用于小时设置)。将 IR LED 和两个电阻的公共端分别连接到 Arduino NANO 的 GND 和 5V 引脚。最后,将 A7 引脚的跳线连接到 R19 和第二个 IR 之间。对 R20 和第一个 IR 的 A6 引脚执行相同操作。

对于基本红外遥控器 发射器

所需组件:

要制作一个简单的红外遥控发射器来设置和控制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


工业技术

  1. LED 定序器
  2. Arduino pov 视觉时钟
  3. 主时钟
  4. Tech-TicTacToe
  5. Arduino Quadruped
  6. Arduino 倒数计时器
  7. 单 LED 矩阵 Arduino 翻转时钟
  8. 遥控保时捷汽车(Arduino 项目)
  9. Arduino 控制的 USB 触控板
  10. Arduino 颜色检测
  11. Arduino RTC LED 时钟
  12. 230 V 50Hz AC(或110V 60Hz)主操作LED大功率小夜灯电路图。