Construye un Reloj Nixie Simple con Arduino – Guía Paso a Paso
Componentes y materiales
| Arduino UNO | × | 1 |
| UTSOURCE Componentes Electrónicos | × | 1 |
Sobre este proyecto
Tras largas jornadas, logré hacer un reloj Nixie con Arduino y chip optoaislador, sin necesidad de driver Nixie (difícil de conseguir)
Mira el video para instrucciones completas:
Lista de materiales:
- Arduino UNO enlace
- Tubos Nixie (6 uds) enlace
- Chip optoaislador TLP627
- Módulo elevador DC 12V a 390V enlace
- Protoboard enlace
- Módulo RTC DS3231 enlace
- Componentes en utsource.net
Paso 1. Diseño del circuito

El circuito usa chip optoaislador para controlar tubos Nixie (150 VDC) desde Arduino (5 VDC). Mediante conexión en matriz, solo se necesitan 16 salidas de Arduino para controlar 60 segmentos de 6 tubos. El módulo RTC DS3231 mantiene la hora (incluso sin alimentación) y se comunica por I2C. Arduino lee la hora y enciende/apaga los segmentos en alta frecuencia para que el ojo vea 6 dígitos fijos.
Paso 2. Código Arduino
// Canal YouTube: engineer2you
#include <Wire.h>
#include "DS3231.h"
RTClib RTC;
DS3231 Clock;
int hour, minute, second;
const int nixie_0 = 2, nixie_1 = 3, nixie_2 = 4, nixie_3 = 5;
const int nixie_4 = 6, nixie_5 = 7, nixie_6 = 8, nixie_7 = 9;
const int nixie_8 = 10, nixie_9 = 11;
const int row_1 = 0, row_2 = 1, row_3 = 14, row_4 = 15;
const int row_5 = 16, row_6 = 17;
const int time_on = 2;
void setup() {
pinMode(nixie_0, OUTPUT); pinMode(nixie_1, OUTPUT); pinMode(nixie_2, OUTPUT);
pinMode(nixie_3, OUTPUT); pinMode(nixie_4, OUTPUT); pinMode(nixie_5, OUTPUT);
pinMode(nixie_6, OUTPUT); pinMode(nixie_7, OUTPUT); pinMode(nixie_8, OUTPUT);
pinMode(nixie_9, OUTPUT); pinMode(row_1, OUTPUT); pinMode(row_2, OUTPUT);
pinMode(row_3, OUTPUT); pinMode(row_4, OUTPUT); pinMode(row_5, OUTPUT);
pinMode(row_6, OUTPUT);
// Serial.begin(9600); // NO usar Serial.println, afecta pines D0 y D1
Wire.begin();
}
void loop() {
DateTime now = RTC.now();
hour = now.hour(); minute = now.minute(); second = now.second();
int j = second / 10, k = second % 10;
off_all(); on_number(0, k+2); delay(time_on);
off_all(); on_number(1, j+2); delay(time_on);
j = minute / 10; k = minute % 10;
off_all(); on_number(14, k+2); delay(time_on);
off_all(); on_number(15, j+2); delay(time_on);
j = hour / 10; k = hour % 10;
off_all(); on_number(16, k+2); delay(time_on);
off_all(); on_number(17, j+2); delay(time_on);
}
void on_number(int row, int nixie) {
digitalWrite(row, HIGH); digitalWrite(nixie, HIGH);
}
void off_all() {
digitalWrite(row_1, LOW); digitalWrite(row_2, LOW); digitalWrite(row_3, LOW);
digitalWrite(row_4, LOW); digitalWrite(row_5, LOW); digitalWrite(row_6, LOW);
digitalWrite(nixie_0, LOW); digitalWrite(nixie_1, LOW); digitalWrite(nixie_2, LOW);
digitalWrite(nixie_3, LOW); digitalWrite(nixie_4, LOW); digitalWrite(nixie_5, LOW);
digitalWrite(nixie_6, LOW); digitalWrite(nixie_7, LOW); digitalWrite(nixie_8, LOW);
digitalWrite(nixie_9, LOW);
delayMicroseconds(400); // evita efecto "fantasma" en otros tubos
}
El código obtiene la hora del DS3231 y la muestra en los 6 tubos Nixie mediante multiplexado y optoaisladores.
Paso 3. Montaje del circuito





Todo montado en protoboard para pruebas. Funcionó a la primera. Próximo paso: caja de MDF con acabado decorativo para colocar en casa.
Código
Fragmento de código #1 (Texto plano)
//Youtube channel: engineer2you #include <Wire.h> #include "DS3231.h" RTClib RTC; DS3231 Clock; int hour; int minute; int second; const int nixie_0 = 2; const int nixie_1 = 3; const int nixie_2 = 4; const int nixie_3 = 5; const int nixie_4 = 6; const int nixie_5 = 7; const int nixie_6 = 8; const int nixie_7 = 9; const int nixie_8 = 10; const int nixie_9 = 11; const int row_1 = 0; const int row_2 = 1; const int row_3 = 14; const int row_4 = 15; const int row_5 = 16; const int row_6 = 17; const int time_on = 2; void setup() { pinMode(nixie_0, OUTPUT); pinMode(nixie_1, OUTPUT); pinMode(nixie_2, OUTPUT); pinMode(nixie_3, OUTPUT); pinMode(nixie_4, OUTPUT); pinMode(nixie_5, OUTPUT); pinMode(nixie_6, OUTPUT); pinMode(nixie_7, OUTPUT); pinMode(nixie_8, OUTPUT); pinMode(nixie_9, OUTPUT); pinMode(row_1, OUTPUT); pinMode(row_2, OUTPUT); pinMode(row_3, OUTPUT); pinMode(row_4, OUTPUT); pinMode(row_5, OUTPUT); pinMode(row_6, OUTPUT); //Serial.begin(9600); //should NOT use seiral println, it will effect to output pin D0 & D1 Wire.begin(); } void loop() { //-------------------get clock value--------------------------- DateTime now = RTC.now(); hour = now.hour(); minute = now.minute(); second = now.second(); //-------------------show clock number ---------------------- int j; //second number from right int k; //first number from right j = second/10; k = second%10; //-----------show first number of second off_all(); on_number(0,k+2); delay(time_on); //-----------show second number of second off_all(); on_number(1,j+2); delay(time_on); j = minute/10; k = minute%10; //-----------show first number of minute off_all(); on_number(14,k+2); delay(time_on); //-----------show second number of minute off_all(); on_number(15,j+2); delay(time_on); j = hour/10; k = hour%10; //-----------show first number of hour off_all(); on_number(16,k+2); delay(time_on); //-----------show second number of hour off_all(); on_number(17,j+2); delay(time_on); } void on_number(int row, int nixie){ digitalWrite(row, HIGH); digitalWrite(nixie, HIGH); } void off_all(){ digitalWrite(row_1, LOW); digitalWrite(row_2, LOW); digitalWrite(row_3, LOW); digitalWrite(row_4, LOW); digitalWrite(row_5, LOW); digitalWrite(row_6, LOW); digitalWrite(nixie_0, LOW); digitalWrite(nixie_1, LOW); digitalWrite(nixie_2, LOW); digitalWrite(nixie_3, LOW); digitalWrite(nixie_4, LOW); digitalWrite(nixie_5, LOW); digitalWrite(nixie_6, LOW); digitalWrite(nixie_7, LOW); digitalWrite(nixie_8, LOW); digitalWrite(nixie_9, LOW); delayMicroseconds(400); //to prevent "ghost" effect to other tube }
Proceso de manufactura
- Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
- Construye un reloj Numitron retro con Arduino: Simple, fiable y eficiente energéticamente
- Reloj de Palabras DIY con Arduino: Construye una Pantalla Elegante en Tiempo Real
- Construye un reloj en tiempo real con Arduino para horarios de oración islámica
- Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Construye un Elegante Reloj de Tubos Nixie en Caja de Madera MDF Personalizada con Arduino
- Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO
- Agilice el diseño de haces eléctricos con E3.series