Construya un Reloj Ventilador LED USB con Arduino Nano: Diagrama y Código
Reloj Analógico Ventilador LED USB con Arduino NANO — Código y Diagrama con Ajuste de Hora
Si ha visto el video del famoso gadget ventilador LED USB con reloj, prepárese: diseñaremos el mismo reloj analógico con display de hélice basado en Arduino NANO, sensor Hall, resistencias, batería, motor DC y LEDs.
Los LEDs girarán en movimiento circular mostrando un reloj analógico en display de hélice con las tres manecillas (hora, minuto, segundo) y la forma circular como un reloj de pulsera o pared convencional.
Lo mejor: puede cambiar el ajuste de hora (minutos y segundos) subiendo el código fuente al Arduino NANO vía cable USB. Veamos cómo.
Componentes Requeridos
- Arduino NANO
- Sensor Hall W130
- R1 a R16 = 330 Ω
- R17 = 2.2 kΩ
- R18 = 10 kΩ
- LED 1 a LED 11 = Luz Roja
- LED 12 a LED 16 = Luz Verde
- LED 17 = Luz Azul
- Batería = 3.7V, 240mAh (9V-12V si usa motor potente para alta velocidad)
- Interruptor = ON/OFF Unipolar (Deslizante)
- Otros: Placa PCB, motor DC de juguete, cables, soldador, etc.
Cableado y Diagrama de Circuito
El siguiente es el diagrama de circuito para el reloj analógico LED ventilador USB. Si quiere el mismo proyecto con ajuste de hora, consulte el segundo diagrama al final.
Procedimiento de Montaje
- Corte un trozo pequeño de PCB según el circuito.
- Inserte un LED verde en los orificios con la pata larga a la izquierda. Desde el lado de cobre, doble sus patas hacia un lado (LEDs verdes 12-16 vía R12-R16 y A5-A1 respectivamente).
- Igual con los LEDs rojos restantes (LED 1-11 vía R1-R11 y D2-D12 respectivamente).
- Inserte el LED azul sobre el verde como se muestra (LED azul 17 vía R17 y A7). Conecte R17 = 2.2 kΩ y una el cátodo de este LED al cátodo de los demás. Conecte el ánodo a un extremo de R17 y el otro a pin +5V del Arduino.
- Una todas las conexiones de cátodos de los LEDs. Corte patas sobrantes si es necesario.
- Inserte las resistencias y doble sus patas igual que los LEDs. Corte el exceso.
- Suelde los componentes según el diagrama.
- Suelde conectores al Arduino NANO.
- Conecte un cable del cátodo común de los LEDs al pin GND del Arduino.
Conecte cables de resistencias a pines digitales "D" y analógicos "A" del Arduino:
- 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
Conecte el sensor Hall:
- Pin de salida → Pin A0 del Arduino
- Pin VCC → Pin +5V del Arduino
- Pin GND del sensor → Pin GND del Arduino
Toques finales:
- Conecte la batería 3.7V 240mAh según el circuito y añada interruptor deslizante unipolar en el positivo para ON/OFF.
- Monte todo en una placa con motor DC de juguete. Si usa motor potente para alta velocidad, use batería 9V-12V.
- Suba el código del proyecto (abajo) vía USB y encienda. El ventilador mostrará el reloj en luz LED durante el movimiento de hélice.
Código del Proyecto
Puede modificar el siguiente código fuente del reloj ventilador LED USB y subirlo al Arduino NANO por USB si lo necesita.
Código vía: 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; //**************************************** // Descomente para test de sensor 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); // ancho pixel LED (ajuste según velocidad motor. Aumente para baja velocidad, disminuya para alta) displayClear(); drawInner_Circle(); delayMicroseconds(450); // gap entre pixels/marcadores minutos (ajuste según velocidad 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); }
Cómo Cambiar el Ajuste de Hora en el Reloj Ventilador LED
Para Receptor IR Básico con el Circuito Principal
Componentes Requeridos:
- R19 y R20 = 10k
- Fototransistor IR (cerca del LED#13 para ajuste de minutos)
- Fototransistor IR (cerca del LED#16 para ajuste de horas)
Conecte R19 con el primer LED IR (cerca LED#13 para minutos) y R20 con el segundo IR (cerca LED#16 para horas). Conecte el común de los LEDs IR y ambas resistencias a GND y 5V del Arduino NANO respectivamente. Conecte jumper de pin A7 entre R19 y segundo IR. Igual para pin A6 a R20 y primer IR.
Para Control Remoto IR Básico Transmisor
Componentes Requeridos:
- Batería 9V
- Conector snap para batería
- LED IR (Infrarrojo)
- Resistencia 1kΩ
- Pulsador táctil
- Placa PCB
Para hacer un transmisor IR simple para ajustar la hora en el reloj ventilador LED USB, conecte todos los componentes en serie (batería 9V, LED IR, resistencia 1kΩ y pulsador en el positivo). Este transmisor se usa apuntando a LED#13 y LED#16 para ajustar la hora.
El siguiente código se usa para cambiar y ajustar el huso de minutos y horas (manecillas de minutos y horas en reloj analógico común) del reloj analógico USB LED ventilador.
Verifique la salida del circuito detector IR con el Monitor Serial de Arduino. Ejemplo: lectura con luz ambiente normal > 500 y con luz IR < 500. Cambie el código o valores según los sensores usados.
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; }
Para ajustar minutos, apunte el control IR al marcador de minutos y presione el botón. Para horas, apunte al marcador de horas y presione.
Tecnología Industrial
- Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
- Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
- Tres en raya con Arduino, matriz LED MAX7219 y carcasa de cartón
- Construye un Robot Cuadrúpedo Inteligente con Arduino: Guía Paso a Paso
- Construye un Temporizador Regresivo Fiable con Arduino y Pantalla de 7 Segmentos SparkFun
- Reloj flip Arduino con matriz LED 8×8: proyecto DIY de reloj en tiempo real
- Construye tu Propio Coche RC Porsche con Arduino: Guía Paso a Paso
- Trackpad USB DIY con Arduino: Convierte un Touchpad de Portátil Viejo en Dispositivo de Entrada Moderno
- Detección de Colores con Arduino Nano y Sensor TCS3200
- Construye un Secuenciador LED con Temporizador 555 y Contador 4017 – División de Frecuencia y Antirrebote
- Circuito Profesional Lámpara Nocturna LED - Diseño Alimentado Red 230V/50Hz o 110V/60Hz