Reloj analógico por persistencia de visión (POV) con Arduino Nano – Proyecto DIY
Componentes y materiales
- 1 × Arduino Nano R3
- 17 × LEDs genéricos (grupos de colores distintos para horas, minutos, segundos, marcadores)
- 17 × Resistencias 100 Ω (una por LED)
- 1 × Sensor Hall (efecto Hall)
- 1 × Motor DC genérico
- 1 × Convertidor step-up (boost) fijo (para batería Li-ion)
- Batería Li-ion (ej. 18650)
Herramientas
- Soldador y estaño
Aplicaciones y servicios
- Arduino IDE
Sobre el proyecto
Un display Persistencia de Visión (POV) muestra imágenes al encender LEDs en posiciones angulares precisas mientras giran. El cerebro integra los destellos en una imagen continua. Este reloj muestra una esfera analógica con manecillas de horas, minutos y segundos, marcadores de minutos/horas/cuartos y un círculo interior.
Mecánica
El mayor reto fue la estabilidad mecánica. Inicialmente la batería descentrada causaba vibraciones a alta velocidad. La solución: colocar la batería en el centro de rotación. El motor DC de 12V se alimenta de una fuente variable para ajustar RPM. El sensor Hall detecta una vuelta completa (imán fijo en la base) y sincroniza el refresco.
Electrónica
- 16 LEDs en pines digitales 2–11 y analógicos A1–A5 (configurados como digitales).
- LED 17 (círculo interior) en pin 2 (compartido con manecillas).
- Sensor Hall en A0 con pull-up interno.
- Alimentación: batería Li-ion → step-up 5V → Arduino y LEDs.
Software
El bucle principal espera flanco descendente del sensor Hall (inicio de vuelta). Luego, en 60 pasos angulares (6° cada uno), enciende los LEDs correspondientes a marcadores y manecillas durante delayMicroseconds(140) (ancho de píxel), apaga (delayMicroseconds(600) entre píxeles). Los valores de delayMicroseconds deben ajustarse según la velocidad real del motor. El reloj interno (hora/min/seg) se actualiza cada 1000 ms con millis().
Código
// Reloj POV analógico - Arduino Nano
// Autor: hobbyprojects
int LED[16] = {2,3,4,5,6,7,8,9,10,11,12,A1,A2,A3,A4,A5}; // 16 LEDs
int sensorPin = A0;
unsigned long previousTime = 0;
byte hours = 12, minutes = 15, seconds = 0;
int propeller_posn, n, val;
void setup() {
for (int i = 0; i < 16; i++) pinMode(LED[i], OUTPUT);
pinMode(sensorPin, INPUT_PULLUP);
if (hours == 12) hours = 0;
}
void loop() {
// Espera flanco descendente (inicio de vuelta)
val = digitalRead(sensorPin);
while (val == LOW) val = digitalRead(sensorPin);
// Actualiza reloj cada segundo
if (millis() >= previousTime) {
previousTime += 1000;
if (++seconds == 60) { seconds = 0; if (++minutes == 60) { minutes = 0; if (++hours == 12) hours = 0; } }
}
// Barrido angular: 60 posiciones
propeller_posn = 30; // offset inicial
n = 0;
while (n < 60) {
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(140); // ancho píxel (ajustar a RPM)
displayClear();
drawInnerCircle();
delayMicroseconds(600); // gap entre píxeles (ajustar a RPM)
n++;
propeller_posn++;
if (propeller_posn == 60) propeller_posn = 0;
}
// Espera flanco ascendente (fin de vuelta)
val = digitalRead(sensorPin);
while (val == HIGH) val = digitalRead(sensorPin);
}
void displayClear() {
for (int i = 0; i < 16; i++) digitalWrite(LED[i], LOW);
}
void drawMinuteMarker() { digitalWrite(LED[15], HIGH); }
void drawHourMarker() { digitalWrite(LED[14], HIGH); digitalWrite(LED[13], HIGH); }
void drawQuarterMarker(){ digitalWrite(LED[12], HIGH); digitalWrite(LED[11], HIGH); }
void drawHoursHand() {
for (int i = 0; i < 7; i++) digitalWrite(LED[i], HIGH);
}
void drawMinutesHand() {
for (int i = 0; i < 9; i++) digitalWrite(LED[i], HIGH);
}
void drawSecondsHand() {
for (int i = 0; i < 11; i++) digitalWrite(LED[i], HIGH);
}
void drawInnerCircle() {
digitalWrite(LED[0], HIGH);
delayMicroseconds(30);
digitalWrite(LED[0], LOW);
}
Esquema
Proceso de manufactura
- Reloj de cuco: historia, artesanía y evolución moderna
- Construya su propio LUMAZOID: Visualizador de música DIY con Arduino
- Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
- Dispositivo de Medición de Presión y Flujo de Aire de Precisión con Sensor Analógico
- Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
- Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
- Reloj 3D RGB Arduclock – Bluetooth, LED NeoPixel y RTC
- Rueda de Trimado Compacta para FlightGear con Arduino Nano: Control Analógico DIY
- Pantalla LED Matricial Interactiva en Puerta con Sensor PIR - Saludo Navideño Arduino
- Controlar un LED de Arduino con Cortana vía Bluetooth en Windows 10
- Construye un Secuenciador LED con Temporizador 555 y Contador 4017 – División de Frecuencia y Antirrebote