ЧАСЫ НА ГРИ И ARDUINO v2

Решил я сделать максимально простой и доступный проект часов на газоразрядных индикаторах и Arduino! Односторонняя плата, выводные компоненты, никакой жести!
Платы:
- Габариты платы меньше 100х100мм, то есть заказать 10 таких плат у китайцев будет стоить $2 без учёта доставки
- Плата односторонняя, её без проблем можно сделать классическим ЛУТом!
- Все компоненты – выводные, припаяет даже новичок
- Т.е. плата народная: можно сделать её бабкиным утюгом и распаять горячим гвоздём!
- Количество компонентов сведено к минимуму!
- На данный момент в проекте есть платы под индикаторы ИН-12 и ИН-14, возможно будут сделаны и другие
- Система состоит из двух плат: нижней (вся управляющая электроника) и верхней (лампы и светодиоды подсветки)
- Нижних плат два варианта: обычная (4 оптопары, точка – светодиод) и с дополнительной оптопарой под неоновую точку (5 оптопар, точка – неонка)
- У плат ИН-14, ИН-12, ИН-12_перевертыш нижняя часть одинаковая! Части плат взаимозаменяемы. Нижняя плата отличается только у ИН-14_неон
Хардверные фишки:
- Сердце платы – полноразмерная Arduino NANO, это означает простую сборку и прошивку
- Питание всей схемы – 5 Вольт
- Генератор высокого напряжения раскачивается ШИМ каналом Arduino
- Напряжение генератора подстраивается резистором с крутилкой
- Время задаёт RTC DS3231
- 3 кнопки для настройки времени и будильника
- Пищалка для будильника
- Подсветка ламп индикаторов
- Проект основан на плате Железнякова Андрея. Спасибо! Ссылка на проект: https://goo.gl/xTVQWP
Софтверные фишки:
- “Перебор” цифр, не дающий индикаторам окисляться
- Плавное изменение яркости точки и подсветки ламп
- Настройка яркости цифр, “точки” и подсветки ламп
- Два режима яркости в зависимости от времени суток
- 6 режимов переключения индикаторов
- 3 режима подсветки ламп
- Будильника пока что нет
27.11.2019 nixieClock_2_v2.1: исправлен баг =)
30.11.2019 nixieClock_2_v2.2: сброс секунд при установке времени с кнопок
02.12.2019 nixieClock_2_v2.3: Добавлены расширенные настройки яркости и исправлены зависания при нулевых значениях некоторых настроек
02.12.2019 nixieClock_2_v2.4: Ещё исправления ошибок при нулевых настройках
17.03.2020 nixieClock_2_v2.5: Демонстрация эффекта при смене с кнопок
14.03.2019 nixieClock_2_test_v1.1 – тест индикаторов (просто крутит цифры по порядку)
15.03.2019 nixieClock_2_v1.0_BETA – бета-версия прошивки, показывает время, мигает, кнопки пока не активны
16.03.2019 nixieClock_2_v1.1_BETA – добавлены режимы переключения цифр, “глюки”, антиотравление, мелкие доработки в коде
12.05.2019 nixieClock_2_v1.3 – добавлена настройка времени кнопками
13.05.2019 nixieClock_2_v1.4 – добавлено управление эффектами с кнопок
14.05.2019 nixieClock_2_v1.5 – исправление ошибок, ещё управление с кнопок
08.06.2019 Исправлена ошибка на плате ИН-12 перевёрнутая. Где была ошибка можно читать тут
29.06.2019 Китайцы больше не делают насечку для разделения плат (бесплатно). На всех платах добавлена шелкография сверху и снизу для самостоятельного разделения частей.
27.10.2019 nixieClock_2_v1.6 – настройки антиотравления, плавность эффектов, сохранение настроек в EEPROM
27.11.2019 nixieClock_2_v2.0 (совместно с Pavel Smelov) – добавлены эффекты, поправлены баги
Версия 1.2:
– Чуть переделан блок кода, отвечающий за распиновку ламп
Версия 1.3:
– Скетч разбит на вкладки
– Добавлено управление кнопками!
– Левая кнопка – выбор, остальные “больше” и “меньше”
– Удержать “выбор” – настройка времени
– Клик по “выбору” – смена настройки часы/минуты
– Клик “больше” и “меньше” – изменение времени
– Удержать “выбор” – возврат к режиму часов
Версия 1.4:
– Ещё управление кнопками В РЕЖИМЕ ЧАСОВ:
– Удержание центральной кнопки включает и выключает “глюки”
– Клик по центральной кнопке переключает режимы подсветки ламп
– Дыхание
– Постоянное свечение
– Отключена
– Правая кнопка переключает режимы перелистывания цифр
– Без эффекта
– Плавное угасание
– Перемотка по порядку числа
– Перемотка по катодам
Версия 1.5:
– Отдельная настройка скорости каждого эффекта
– Ещё управление кнопками в режиме часов:
– Удержание центральной кнопки – вкл/выкл глюки
Версия 1.6:
– Добавлены расширенные настройки антиотравления
– Улучшена стабильность
– Добавлена плавность дыханию подсветки (гамма-коррекция яркости)
– Настройки эффектов (с кнопок) сохраняются в EEPROM памяти
Версия 2.0 (совместно с Pavel Smelov):
– Поправлены косяки с подсветкой
– Добавлены эффекты переключения “поезд” и “резинка”
– Оптимизирован код
Ссылки на магазины, с которых я закупаюсь уже не один год
Вам скорее всего пригодится:
- Arduino NANO 328p
- RTC DS3231
- DS3231 микро
- Гнёзда на плату https://www.chipdip.ru/product/pbs-40
- Рейка штыревая https://www.chipdip.ru/product/pls-40
- Конденсатор электролитический 4,7 мкФ 350V https://www.chipdip.ru/product0/33635
- Резистор подстроечный 470 кОм (можно 500 кОм) https://www.chipdip.ru/product/3362p-1-504
- Индуктивность 220 мкГн (uH) https://www.chipdip.ru/product/rlb0712-221kl
- Диод HER106 https://www.chipdip.ru/product/her106
- Мне рекомендовали поставить диод BYV26C – он быстрее
- Транзистор IRF840PBF https://www.chipdip.ru/product/irf840
- Оптопара TLP627(F) DIP-4 https://www.chipdip.ru/product/tlp627
- Дешифратор К155ИД1 https://www.chipdip.ru/product/k155id1
- Светодиоды 5 мм https://www.chipdip.ru/catalog/round-leds?x.222=s4Q&x.226=EbW
- Светодиоды 3 мм https://www.chipdip.ru/catalog/round-leds?x.222=s4Q&x.226=s4S
- Резисторы 0.25 Вт для версии ИН12/ИН14 со светодиодной точкой
- 150 Ом
- 470 Ом
- 10 кОм
- 100 Ом – 3шт
- Резисторы 0.25 Вт для версии ИН14 с неоновой точкой
- 200 кОм
- 470 Ом
- 10 кОм
- 100 Ом – 3шт
- Блок питания 5 V (зарядник от смартфона) – 500 мА минимум

- 2.0 – первоначальная версия (такая есть только у меня)
- 2.1 – убран DS18b20, куча мелких исправлений
- 2.2 – добавления:
- Добавлена поддержка микро-версии DS3231
- Добавлен конденсатор по питанию платы (необязательный)
- Добавлен конденсатор по питанию RTC (необязательный)
- Добавлен шёлк линии отлома
Скачав gerber-файлы, вы можете заказать изготовление платы у китайцев на сервисе https://jlcpcb.com/, я получил платы через 2 недели после заказа.
Раньше получалось попросить китайцев сделать надрез между платами для удобного разделения. Теперь у них изменились правила, и бесплатно разделить две разные платы они не могут. Я добавил линию разреза на слой шелкографии для каждой платы, разделить платы нужно будет вручную (читайте ниже). Никаких комментариев к заказу оставлять не нужно, V-cut теперь платная функция.
Открыв плату в EasyEda, вы можете экспортировать её как картинку (желательно PDF, иначе страдает качество) для дальнейшего изготовления ЛУТом или импорта в Altium (скрин 1). Параметры экспорта (скрин 2) позволяют настроить вывод нужного слоя и его зеркальность по горизонтали. В настройках печати обязательно ставить реальный размер (скрин 3). На 4 и 5 скринах показано, как убрать металлизацию нижней платы. Если вам это нужно.
Последовательность сборки и настройки. Подробности по каждому пункту читай ниже.
- Полностью собрать нижнюю плату (можно не паять DS3231).
- Отмыть флюс! Зубной щёткой и спиртом/калошей, или на худой конец горячей водой.
- Выставить крутилку напряжения (в самом верху на левой половине платы) в среднее положение
- Загрузить прошивку lamp_test, выбрав тип платы (читай код в самом начале)
- Должен начать работать высоковольтный генератор. Аккуратно пальцы, за низ платы не хватаем
- Измеряем напряжение на конденсаторе в верхнем левом углу платы (мультиметр ставить в режим DC, напряжение 50-300 Вольт). Крутилкой выставляем напряжение в районе 180-200 вольт
- (Опционально) на данном этапе можно проверить лампы, подключив анод (белая нога) через резистор 10 кОм на + конденсатора, и любую другую ногу на – конденсатора. Перебирая ноги (минусовым проводом) можно проверить все цифры индикатора. Если цифра горит не полностью, можно повысить напряжение и “прожечь” катод, или просто подождать. Лампы старые, могут начать нормально работать не сразу.
- Далее можно смело паять лампы на верхнюю плату.
- Обязательно отмыть флюс!
- При включенном питании верхнюю и нижнюю платы не соединять!
- На прошивке lamp_test будут последовательно перебираться цифры на лампах на максимальной яркости, в порт будет выводиться текущая цифра. Снова берём отвёртку и подстраиваем генератор на 180-200 Вольт (предыдущая настройка была нужна для первого пуска ламп, чтобы ничего не сгорело. При подключении ламп напряжение просядет, и его нужно будет выкрутить обратно).
- Есть смысл оставить часы поработать на этой прошивке пару часов, чтобы лампы пришли в себя, т.к. каждый индикатор перебирает все цифры на максимальной яркости без динамической индикации.
- Если всё нормально – прошиваем актуальную прошивку часов nixieClock_2_v2.* и наслаждаемся!
Что касается компонентов: индуктивность катушки зависит от частоты. Частота у нас фиксированная, так что будьте добры купить катушку на 220 мкГн с током насыщения не менее 240 мА, так как напряжение высоковольтной линии сильно проседает под нагрузкой. Индуктивность по ссылке вывозит нормально, крупнее – ещё лучше. Меньше – не ставьте, будет 140 Вольт и блэдные лампы. Диод быстрый (импульсный), в принципе любой этого класса. Резисторы любые по мощности и точности, я ставил 1/4 Вт самые обычные. Оптопары нужны высоковольтные! Обычные не подойдут. Если приспичило выпаять индикатор, то вам поможет паяльный фен. Также можно попытаться убрать припой с ног при помощи медной оплётки или паяльного отсоса. Фокус с иглой от шприца скорее всего не прокатит, диаметр отверстий под ноги лампы маловат.
Если вы заказывали плату на JLCPCB без прорезания V образной фрезой, разделить плату нужно будет вручную. Можно распилить ножовкой: будет лететь стеклопыль, очень мерзкая и опасная штука! Лучше прорезать по линии раздела сверху и снизу чем-нибудь острым (саморез), а затем аккуратно сломать по ней в тисках. Также рекомендую резак по оргстеклу: 2-3 царапины с двух сторон платы и можно аккуратно отломить. Умельцы делают такие резаки из старых полотен от лобзика.
Компоненты паяются на шелкографию, в том числе лампы. Дорожки остаются на нижней стороне платы. Лампы вставляем белой ногой в помеченное кружочком отверстие. Схема паяется за 20 минут обычным паяльником, все компоненты выводные, припаяет даже новичок.
- Упаси вас хосподи паять с кислотой или активным флюсом, поверьте, вам это не надо. Всё паяется обычным припоем с флюсом внутри (ПОС-61, китайский SOLDER).
- После пайки компонентов обязательно отмыть флюс (который вытечет из припоя). В идеале изопропиловым спиртом или калошей, но вполне достаточно будет потереть зубной щёткой под горячей водой.
- На неотмытую плату питание не подавать! Могут погореть компоненты.
- Перед первым запуском установить крутилку (потенциометр в верхней части платы) в среднее положение
- Бутерброд из плат при подключенном питании не собирать/разбирать! Перед снятием/установкой верхней платы обязательно отключите питание. Малейший перекос/лишний дребезг может привести к выгоранию компонентов.
Перед пайкой индикаторов на плату желательно проверить их работоспособность, потому что они из Совка и не все отлично сохранились. Нужно взять напряжение с высоковольтной линии платы – схему найдёте чуть выше. Проще всего подпаяться к конденсатору в левой верхней части платы и подать плюс на анод (белая нога лампы) через резистор на 10 кОм, а gnd – на один из катодов, катоды это собственно и есть цифры. Перебрав катоды вы узнаете, все ли цифры работают. Нерабочую цифру в некоторых случаях можно восстановить, повысив напряжение высоковольтной линии. Также для “прожига” лампы можно чуть чуть уменьшить сопротивление токозадающего резистора (10 кОм который), можно влепить подстроечник. Для более точного теста цифр используйте прошивку lamp_test
Напряжение высоковольтной линии – 140-300 Вольт, держите пальцы подальше от контактов на плате с лампами и от генератора на левой части платы (где катушка и конденсатор). Не убьёт, но тряхнёт знатно! Если держите часы – гарантированно их бросите, и нет гарантий, что они не разобьются.
По поводу напряжения: его задаёт во-первых резистор (на моей плате подстроечный, вверху в центре), и во-вторых скважность ШИМ сигнала. По умолчанию скважность стоит 180, что уменьшает просадку под нагрузкой. Резистор в оригинальной схеме стоит на 360 кОм, у меня подстроечный на 500 кОм, и я его выкрутил на максимум (170 Вольт). Также на напряжение влияют сами лампы (как нагрузка). Измерять и настраивать напряжение нужно под нагрузкой (со включенными лампами), минимальное напряжение около 130 Вольт (лампы зажигаются), максимальное не должно превышать 175-180 Вольт (это максимум для лампы). Также окисленную (отравленную) лампу можно прожарить, подав на неё бОльшее напряжение (скажем 220-250) на некоторое время. Выбор горящей лампы и цифры появится в прошивке позже. Не забывайте о том, что при питании от USB напряжение 5-ти Вольтовой линии составляет около 4.5 Вольт (часть падает на диоде по питанию Ардуино), поэтому все настройки производить только при подключенном внешнем питании 5 Вольт в соответствующие входы питания на плате (сверху, правее Ардуино).
Если отстают/спешат часы, проблема скорее всего в питании схемы. Если при смене блока питания на более качественный проблема не уходит, повесьте конденсатор по питанию RTC модуля (прям на плату на VCC и GND паять): обязательно керамический, 0.1-1 мкФ (маркировка 103 или 104, смотрите таблицу маркировок). Также можно поставить электролит (6.3V, 47-100 мкФ)
Если часы показывают 2525 или 6565, проблема в RTC модуле. Проверять пайку, мыть флюс, также мог попасться брак и придётся заменить. Пишут что среди мелких модулей часто встречаются бракованные, я с таким ни разу не сталкивался.
Как настроить скетч под другие индикаторы (даже если вы сделали под них свою плату)? Всё очень просто: за порядок цифр отвечает массив digitMask, хранящий в себе соответствие цифры и номера ячейки. Прошиваем тестовый скетч (nixieClock_2_test_v1.1) с настройкой BOARD_TYPE 3. Также пролистайте чуть ниже (ДЛЯ РАЗРАБОТЧИКОВ) до строчки
#elif (BOARD_TYPE == 3)
На следующей строчке находится ваш digitMask, который будет активен при BOARD_TYPE 3. Заполните массив цифрами от 0 до 9 в порядке возрастания. Прошейте скетч и запишите куда-нибудь порядок цифр, который покажут часы (10 цифр). Осталось только изменить свой массив digitMask согласно полученной информации. Например:Порядок 0123456789 Часы показали 7491308265 Тогда ваш digitMask будет строиться так: по порядку чисел на нижней строчке выписываем числа из верхней: 0-5, 1-3, 2-7….
Получим 5374198062, соответственно byte digitMask[] = {5, 3, 7, 4, 1, 9, 8, 0, 6, 2};
Второй важный массив это opts[], отвечающий за порядок индикаторов слева направо, зависит от платы. Если вы переделывали плату, то не составит труда провести аналогию (или методом тыка) и понять, нужен вам 0123 или 3210.
Также в основном скетче есть cathodeMask, это порядок катодов (цифр) начиная с дальнего от переднего стекла. Его можно посмотреть на картинке из документации по лампе, этот порядок нужен только для эффекта “перебор катодов”.Если что-то не работает: первым делом грешить на плохую пайку (непропай, сопли, КЗ) и неотмытый флюс. Первым делом умирают оптопары, могут сразу все 4 выгореть. Вторым слабым местом является индуктивность. В некорректном отображении цифр может быть виноват дешифратор, можно попробовать заменить. Если время отображается некорректно – возможен брак модуля часов, лучше покупайте сразу два.
4 светодиода подсветки ламп питаются напрямую от пина Ардуино через резистор, ток с пина не превышает допустимых 40 мА. Питать через транзистор я не стал в целях упрощения схемы. Светодиодная точка также питается от пина. Неоновая точка питается от высоковольтной части через оптопару (пятую, на плате NEON DOT).
Светодиоды подсветки ламп для платы с ИН-14 паяются снизу платы (длинной ногой в круглое отверстие, короткой – в квадратное) и загибаются к отверстиям под лампами. 3мм светодиод вставляется в отверстие (отверстие можно залить термоклеем для лучшего рассеивания света), 5мм светодиод между платами не вмещается, поэтому его можно вдвое укоротить кусачками и затереть напильником. Точно также прислоняется к отверстию и подсвечивает лампу снизу. Также можно использовать SMD светодиод, подпаяв его проводочками и приклеив под отверстие в плате. Светодиоды подсветки ламп ИН-12 паяются сверху платы и наклоняются примерно под 45 градусов к лампе. У лампы непрозрачный задник, подсветить снизу не получится.
Корпус для платы на ИН-12 под печать от AlexGyver
Корпус для платы на ИН-14 от AlexGyver
Корпус для платы на ИН-12 от Максима Осипова
Прошивки находятся в скачанном архиве в папке firmware:
- lamp_test – прошивка для теста ламп, перебирает цифры на лампах по очереди (сначала 0–9 на первой, потом на второй…), пауза перебора задаётся в самом начале скетча
- nixieClock_2_test_v1.1 – “минимальная” прошивка чисто для работы с лампами, на её основе можно написать свои часы. В сыром виде прошивка перебирает по очереди цифры на всех лампах одновременно
- nixieClock_2_v2.5 – основная прошивка часов, со всеми эффектами, временем и прочим прочим
В самом начале кода находятся настройки. Самая важная для вас – выбор типа платы, по умолчанию выбрана плата под ИН-12. Для ИН-14 нужно сменить цифру с нуля на на 2, получится BOARD_TYPE 2
#define BOARD_TYPE 0 // тип платы часов: // 0 - IN-12 turned (индикаторы стоят правильно) // 1 - IN-12 (индикаторы перевёрнуты) // 2 - IN-14 (обычная и neon dot) // 3 другие индикаторы

1. Если это ваше первое знакомство с Arduino, внимательно изучите гайд для новичков и установите необходимые для загрузки прошивки программы.
6. При возникновении ошибок или красного текста в логе обратитесь к 5-ому пункту гайда для новичков – “Разбор ошибок загрузки и компиляции“.
Содержимое папок в архиве
- libraries – библиотеки проекта. Заменить имеющиеся версии (в этом проекте внешних библиотек нет)
- firmware – прошивки для Arduino
- schemes – схемы и платы
Настройка времени:
- Левая кнопка – выбор, остальные “больше” и “меньше”
- Удержать левую – переход в настройку времени
- Клик по левой – смена настройки часы/минуты
- Клик средняя и правая – изменение времени
- Удержать левую – возврат к режиму отображения часов
Настройка эффектов. В режиме отображения часов:
- Центральная кнопка переключает режимы подсветки ламп
- Дыхание
- Постоянное свечение
- Отключена
- Правая кнопка переключает режимы перелистывания цифр
- Без эффекта
- Плавный переход через угасание
- Перемотка по порядку числа
- Перемотка по порядку катодов
- “Поезд”
- “Резинка”
- Удержание центральной кнопки включает/отключает “глюки“
Почему цифры слегка мерцают? Потому что принцип работы данной платы основан на динамической индикации, в один момент времени горит только один индикатор. Время цикла одного индикатора составляет около 3 миллисекунд, все 4 индикатора перебираются за 12 миллисекунд, то есть присутствует мерцание на частоте около 80 Гц. Это дань за простую схему/плату и минимальное количество компонентов
- Цифры ног на шелкографии индикаторов ИН-12 не соответствуют даташиту? Да, эти цифры не значат НИЧЕГО. Не обращайте на них внимания.
Как настроить время? В версии выше 1.3 можно настроить время кнопками:
- Левая кнопка – выбор, остальные “больше” и “меньше”
- Удержать “выбор” – настройка времени
- Клик по “выбору” – смена настройки часы/минуты
- Клик “больше” и “меньше” – изменение времени
- Удержать “выбор” – возврат к режиму часов
Есть ли отличия между ИН-12А и ИН-12Б? Для данного проекта – нет, можно ставить оба варианта индикаторов
Почему не сделать плату для ИН-12 с неоновой точкой? Плата делалась в габарит 10х10 см для заказа у китайцев, с индикаторами ИН-12 точка не вмещается на плату. Голосуем за третью версию часов =)
Есть ли принципиальная схема? Нет, сразу делалась плата.
На ИН-12 поменялись местами цифры 3 и 9
Возможно у вас другая модель индикаторов. Максим Коптелов (ниже в комментариях) решил проблему сменой ног:- В строке
#define BOARD_TYPE
ставите3
- После строки
elif (BOARD_TYPE == 3)
вставляете:
const byte digitMask[] = {7, 3, 6, 2, 1, 9, 8, 0, 5, 4}; const byte opts[] = {KEY0, KEY1, KEY2, KEY3}; const byte cathodeMask[] = {1, 6, 3, 7, 5, 0, 4, 9, 8, 2};
- В строке