Строим простые часы на лампах Ніксі с Arduino — пошаговое руководство
Компоненты и материалы
| Arduino UNO | × | 1 |
| Лампы Ніксі (IN-12 или аналоги) — 6 шт. | × | 6 |
| Оптопара TLP627 (или аналогичная, 4 канала) | × | 1 |
| DC-DC преобразователь 12V → 390V (для анодов Ніксі) | × | 1 |
| Макетная плата (breadboard) | × | 1 |
| RTC-модуль DS3231 (с батарейкой) | × | 1 |
| Перемычки, резисторы, провода | × | 1 набор |
О проекте
После долгих экспериментов получилось собрать работающие часы на лампах Ніксі с Arduino и опторазвязкой — без специализированных драйверов К155ИД1, которые трудно найти.

Шаг 1. Принцип схемы
Управление 6 лампами (по 10 катодов каждая = 60 выводов) реализовано матрицей 10×6 через оптопары TLP627. Arduino выдаёт 5В логику, оптопары коммутируют высокое напряжение (~150В) на катодах. Используется 16 выводов Arduino (10 для цифр + 6 для разрядов).
Модуль DS3231 по I2C хранит точное время (даже при отключении питания). Arduino считывает время и динамически индицирует цифры на лампах с высокой частотой — глаз видит стабильную картинку.
Шаг 2. Код прошивки
// Youtube channel: engineer2you
#include <Wire.h>
#include "DS3231.h"
RTClib RTC;
DS3231 Clock;
int hour, minute, 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; // A0
const int row_4 = 15; const int row_5 = 16; const int row_6 = 17; // A1..A3
const int time_on = 2; // мс на разряд
void setup() {
for (int p = 2; p <= 11; p++) pinMode(p, OUTPUT); // катоды 0-9
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); // НЕЛЬЗЯ использовать Serial — задействует D0/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() {
for (int r = 0; r <= 1; r++) digitalWrite(r, LOW);
for (int r = 14; r <= 17; r++) digitalWrite(r, LOW);
for (int c = 2; c <= 11; c++) digitalWrite(c, LOW);
delayMicroseconds(400); // защита от "призраков"
}
Шаг 3. Сборка на макетке





Всё собрано на макетке, заработало с первого раза. Следующий этап — корпус из МДФ с красивым оформлением для домашнего использования.
Код
Полный скетч доступен выше. Библиотеки: Wire.h, DS3231.h, RTClib.h.
Ссылки на комплектующие
- Arduino UNO: Amazon
- Лампы Ніксі (6 шт.): Amazon
- DC-DC 12V→390V: Amazon
- Макетная плата: Amazon
- DS3231: Amazon
- Электронные компоненты: UTSOURCE
Производственный процесс
- Arduino POV-часы: сборка дисплея на эффекте сохранения образа
- Ретро-часы на индикаторах Numitron с Arduino: просто, надёжно, экономно
- Оптимизация проектирования жгутов в E3.series
- Слово-часы (Word Clock) на Arduino — DIY-часы с текстовой индикацией времени
- Часы реального времени на Arduino с расчётом времени намаза
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Умная копилка: управление монетоприёмником на Arduino Nano
- Монитор температуры и реальные часы на Arduino Due с TFT-дисплеем 3.2"
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код