Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Часы из дисплея покупателя (VFD) v2

Хочу представить вам следующий этап развития идеи построения часов на базе вакуумно-люминесцентного дисплея (Дисплея покупателя).

Автором данного варианта устройства является devICEproвся информация в статье публикуется с его согласия и при непосредственном участии. 

Итак, кратко предыстория. Все начиналось с этой статьи (Часы на ардуино из дисплея покупателя (VFD)). Часы получились довольно интересными, но не лишенными недостатков, главным из которых было то, что возможность создавать и использовать свои символы есть не во всех дисплеях и, соответственно, далеко не все из них подходили для этого проекта. В том варианте реализации управление колбой осуществлялось посредством родного процессора, установленного на плате, который использовал встроенный стандартный знакогенератор, а Arduino только передавала ему данные и команды по UART. Для решения проблемы логичным шагом будет переход к прямому управлению колбой самим микроконтроллером непосредственно. На тот момент в сети уже были некоторые наработки по поводу прямого управления колбой вакуумно-люминесцентного индикатора на сайте http://www.mantrid.ru/, однако описанное там устройство было сугубо узкоспециализированным и малоприменимым в контексте работы с платформой ардуино, в связи с чем решено было заняться разработкой собственной прошивки. Свой вариант реализации я изложил предыдущей статье (Теория и практика управления вакуумно-люминесцентными дисплеями), где описано, как для этих целей можно использовать МК ESP32. Выложенная там прошивка представляет собой инструмент для дальнейших разработок, позволяющий выводить любую информацию на эти дисплеи.

Автор же данной реализации пошел по другому пути, и в этой статье речь пойдет уже о функциональном законченном устройстве, а именно о часах с различными дополнительными функциями, такими как таймер, отображение температуры (в помещении и наружной), влажности, атмосферного давления. А также с возможностью настраивать интерфейс устройства: устанавливать различные шрифты, настраивать анимацию для отображения информации, регулировать яркость экрана в зависимости от внешней освещенности.

Основой устройства будет служить микроконтроллер ATmega328, а именно Arduino Nano V.3 Устройство способно работать с самыми распространенными типами дисплеев для кассовых аппаратов, а именно DN2029D202MD20GINK (его аналоги CIG40-2003N, CIG40-2004N) и 202MD25GINK. Колба Futaba 202MD25GINK хоть и поддерживается программно, однако к использованию не рекомендуется, т.к. у нее очень большое расстояние между строчками и большие цифры (т.к. они состоят из нескольких знакомест) выглядят не очень хорошо на этом экране. Внешне отличить такую колбу можно по отсутствию сегментов, отображающих курсор и точки с запятыми.

Определение типа подключенного дисплея происходит автоматически и не требует каких-либо изменений в коде прошивки. В случае если тип дисплея определить не удалось, система оповестит об этом звуковым сигналом. Также в автоматическом режиме происходит определение подключенных датчиков.

Итак, рассмотрим подробно интерфейс устройства. В рабочем режиме на экране отображается текущее время и дополнительная информация: дата, температура давление и влажность. Конкретный набор параметров зависит от подключенных датчиков. Возможны шесть вариантов отображения с разными шрифтами и их комбинациями.

В вариантах с крупными цифрами попеременно отображается дата и температура/влажность слева и справа от цифр времени. Сделано это, во-первых, для того чтобы удобно разместить всю информацию на экране, а, во-вторых, для продления срока службы колбы, т.к. длительное свечение одних и тех же пикселей приводит к деградации люминофора и уменьшению яркости:

На плате предусмотрен датчик положения (ртутный замыкатель). При повороте часов вертикально меняется стиль отображения и выводимая информация, а именно появляется анимация песочных часов, активизируется режим таймера и градусника.

Для управления настройками устройства предусмотрено три кнопки "+", "меню" и "-", также управление возможно с использованием энкодера, логика работы следующая: кнопка энкодера аналогична кнопке "меню", поворот лево/право - кнопки "+"/"-", зажатый поворот энкодера - нажатие и удержание кнопок "+"/"-" соответственно. Также есть возможность использования аналоговой клавиатуры из трех кнопок, подключенной к А2 (см. схему). Для переключения режима отображения информации на главном экране необходимо зажать и удерживать кнопку "+" или "-", нажатие и удержание кнопки "меню" открывает, собственно, меню настроек. Однократные нажатия клавиш "+"/"-" в основном режиме работы игнорируются, для того чтобы избежать случайного изменения настроек, однократное нажатие "меню" включает на 5 сек. отображение температуры с внешнего термодатчика (DS18B20):

Рассмотри меню настроек, чтобы в него попасть необходимо зажать кнопку "меню" либо кнопку энкодера. 

Меню имеет следующую структуру:

  • Настройки анимации
  • Дата/время
  • Настройки сигнала
  • Настройки яркости
  • Корректировка температуры
  • Выход

Теперь по порядку пройдемся по пунктам. 

Настройки анимации.

Собственно анимация представляет из себя прокрутку символов или строк при обновлении информации на дисплее, здесь два пункта, "символ" позволяет настроить скорость прокрутки при смене отдельных символов (секунд), "экран" - скорость сдвига при обновлении всего экрана. Так же на нижней строке в реальном времени можно увидеть, как выглядят эти эффекты. 0 - эффект отключен, 5 - скорость прокрутки максимальна.

Дата/время.

Тут, думаю, все понятно, собственно - настройка даты и времени.

Настройки сигнала.

Пункт отвечает за включение и время работы часового сигнала (один короткий "пик" каждый час). Устанавливается время начала подачи сигнала и время окончания.

Настройки яркости.

На часах установлен фотодатчик и, соответственно, есть возможность менять яркость дисплея в зависимости от внешней освещенности. На экране отображается текущий уровень яркости, настройка пороговых значений и уровень яркости, на который следует переключиться, когда внешняя освещенность упадет ниже установленной величины. Пороговых значений два, с минимальной разницей в пять единиц, это создает некоторый гистерезис и позволяет избежать спонтанных переключений. 

Корректировка температуры.

Здесь можно задать смещение в плюс или в минус температуры, поступающей с датчиков, если есть сомнения в достоверности данных. Особенно это может быть полезно если датчик BME280 установлен внутри корпуса устройства и нагревается от дисплея. Так же в меню видно, с какого именно датчика берется температура: c BME280 или с модуля часов DS3231 при отсутствии первого.

Выход.

Собственно, выход из меню настроек.

И про вертикальный режим. Кнопки "+" и "-" при удержании здесь меняют отображение секунд (большие или маленькие). При зажатии "меню" активируется таймер обратного отсчета, управление интуитивно понятно, "+", "-" - установка, "меню" - запуск/стоп, по окончании отсчёта 5 звуковых сигналов. А при подключенном датчике DS18B20, при нажатии на кнопку "меню" часы превращаются в градусник с аналоговой шкалой, отображающий температуру с этого датчика.

Теперь о прошивке. Как уже было описано в начале, прошивка разработана для Arduino Nano V.3. Так как для работы программы из-за достаточно объемных знакогенераторов (шрифтов) требуется много памяти (а точнее - фактически вся, что есть в МК). Автором была проведена работа по оптимизации, поэтому помимо всего прочего используются минимальные версии библиотек. Все необходимые библиотеки будут приложены в архиве со скетчем, рекомендуется использовать именно их, т.к. при использовании актуальных версий с учетом их обновлений, может просто не хватить памяти. Таким образом при использовании комплектных библиотек, прошивка компилируется и никаких изменений и корректировок не требуется. 

В зависимости от подключенных датчиков возможны четыре варианта запуска программы:

  1. Lite”. Только DS3231. Только с него и температура.
  2. “Lite Plus”. DS3232 + DS18B20. Температура в помещении и за бортом.
  3. Full”. DS3231 + BME280. Температура, влажность и давление с BME280.
  4. Full Plus”. DS3231 + BME280 + DS18B20. Температура, влажность и давление с BME280 + температура с DS18B20.

Как видно, для успешного запуска минимально необходимый набор - это, собственно, сам дисплей и модуль часов DS3231. После запуска программа пытается определить тип подключенного дисплея до тех пор, пока это не закончится успехом, поэтому без дисплея, или если он неисправен/не поддерживается, будут слышны одиночные сигналы с периодом примерно около секунды. В ситуации, когда дисплей определился, а модуль часов отсутствует, сообщение об этой ошибке уже будет отображено на экране. В случае успешного запуска, устройство подает три коротких звуковых сигнала и на экране отображается текущее время и пр. данные.

Схема.

Теперь коснемся схемотехники. Питается устройство от напряжения от 9 до 30 вольт. На плате имеются два импульсных преобразователя понижающий LM2596S и повышающий XL6009. Первый понижает входное напряжение до 6,8 вольт, от которых питается накал и плата ардуино, потом это напряжение понижается линейным стабилизатором до 5 вольт, которые используются для питания периферии, датчиков и логики дисплея. Второй преобразователь повышает входное напряжение до 38 вольт, это анодное напряжение для дисплея. Подачей питания высокого напряжения на дисплей управляют два транзистора, таким образом, чтобы оно подавалось только после того, как будет запитана логика (+5в), это очень важное общее требование, согласно документации, для таких дисплеев. Питание нитей накала, как уже было указано, осуществляется от 6.8 вольт сразу после понижающего преобразователя, однако питать накал постоянным током нежелательно. Для создания на накальной обмотке переменного напряжения используется мостовой драйвер MAX17602 и таймер NE555 для подачи управляющих импульсов. В итоге на накале меандр 2 кГц:

Печатная плата.

Печатная плата универсальна, позволяет устанавливать любые поддерживаемые дисплеи. Так как для питания используются решения на базе стандартных распространенных модулей DC-DC преобразователей, разводка сделана так, что можно установить модули преобразователей в сборе, либо запаять в виде набора отдельных компонентов. То же самое касается и часов на DS3231. При установке готовых модулей преобразователей рекомендуется заменить подстроечные резисторы на пары постоянных. Для LM2596 номиналы резисторов делителя 4,3кОм и 1кОм, для XL6009 30кОм и 1кОм соответственно. Ещё на модуле XL6009 желательно заменить диод на более высоковольтный. Там установлен SS34, на 3 ампера 40 вольт максимум, это близко к пределу напряжения, а запас по току для наших целей избыточен, поэтому рекомендуется заменить его на какой-нибудь более высоковольтный, вольт на 60, например, SK26 или что-то сходное по характеристикам. На плате разведены посадочные места под различные варианты кнопок, также есть выводы для подключения энкодера. Для подключения датчиков разведены штырьковые разъемы, для DS18B20 также есть возможность использования гнезда под jack 3.5 мм. На плате имеются места для компонентов, не используемых в текущей реализации (EEPROM, IR-приемник), но возможно они будут использоваться в будущем, потому что проект развивается и постоянно дорабатывается.

Сборку лучше начинать с монтажа компонентов или модулей DC-DC преобразователей, после их запуска и проверки всех напряжений уже можно запаивать дисплей, и плату Arduino (лучше установить в панельку). Датчик света необходимо располагать таким образом, чтобы на него не попадал свет экрана. Во время работы колба экрана нагревается, поэтому датчик BME280 лучше всего располагать на шлейфе либо снаружи корпуса устройства, либо где-нибудь внизу подальше от платы, напротив вентиляционного отверстия, чтобы минимизировать влияние нагрева экрана на показания температуры. Если же этого не удалось избежать на 100 процентов, то можно вручную скорректировать показания температуры в меню настроек.

Пару слов о прошивке и о логике работы программы. В архиве будет как сама прошивка, так и необходимые библиотеки. Если какие-то из используемых библиотек уже установлены, рекомендуется удалить их и установить версии из архива. Прошивка разбита на пять файлов: три файла — это знакогенераторы для различных шрифтов (CharGen.h, CharGen_bold.h, CharGen_v.h, VFD.h), один с функциями управления колбами (VFD.h), и, собственно, главная логика программы (VFD_Clock_6Font.ino).  

После запуска первым делом программа пытается определить тип подключенного дисплея (путем определения количества разрядов регистра дисплея) функция Disp_detect(). В случае если дисплей не определен, программа мигает встроенным светодиодом и пищит однократно зуммером, и так до тех пор, пока дисплей не будет идентифицирован. После того, как дисплей обнаружен, происходит настройка прерывания (для работы функции output_DDRAM(), которая выводит данные из массива экранной памяти DDRAM на дисплей). Это позволяет поддерживать фиксированную частоту обновления экрана (100Гц). После определяется наличие модуля часов DS3231, как необходимого элемента для запуска с минимумом функций. Если он не обнаружен, на дисплей выводится сообщение "ОШИБКА СВЯЗИ С МОДУЛЕМ RTC DS3231". Далее, если это первый запуск, в EEPROM записываются дефолтные значения параметров (шрифты, яркость и т.д.), если не первый - они оттуда просто считываются. После чего происходит преднастройка АЦП, определение наличия датчиков BME280 и DS18B20, и, в случае их обнаружения, получение с них данных. В конце первоначальной настройки программа выдает три сигнала зуммера и переходит к выполнению основного кода.

Еще один нюанс, для тех, кто захочет поэкспериментировать самостоятельно с подключением. Колба DN2029D имеет большее количество выводов, так как регистр анодов и сеток там разведены отдельно. Т.е. помимо стандартного набора управляющих пинов CLK, LAT, BLK, SI, SO есть еще выводы регистра сеток, которые маркируются также только с добавлением G (Grid) GCLK, GLAT, GBLK, GSI, GSO. Выводы CLK, LAT, BLK всегда соединяются попарно с соответствующими выводами регистра сеток, т.е.: CLK- GCLK, LAT - GLAT, BLK - GBLK. А входы и выходы регистров (SI, SO, GSI, GSO) можно подключить последовательно двумя способами:

  1. D8 ->SI, SO->GSI, GSO->D12
  2. D8 ->GSI, GSO->SI, SO->D12

Т.е. в первом варианте первым включен регистр анодов, а за ним регистр сеток, а во втором - наоборот. В текущей версии печатной платы реализован первый вариант по умолчанию и в прошивке ничего менять не требуется, однако поддерживается также и второй вариант подключения, для его использования необходимо в строке:

#define DN2029D_wiring 1 // 0 - данные на GSI, GSO соединён с SI, SO выход. 1 - данные на SI, SO соединён с GSI, GSO выход.

Заменить "1" на "0", как написано в комментарии.

На этом все, для желающих глубже вникнуть в логику работы программы, исходный код структурирован и очень подробно прокомментирован. 

Для получения печатных плат обращаться к devICEpro.

Еще немного фото вариантов оформления собранного готового устройства:

Программа для генерации кодов символов (Coder_ZG): kackaqep

Вариант в дереве и металле: Владислав Касперович.

Шрифт Полужирный а-ля "Aliexpress": Владимир Коваленко.

Схемотехника, прошивка, печатная плата:  devICEpro.

Прикрепленные файлы:

Теги:

Опубликована: 0 4
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (46) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+2
devICEpro #
Огромная благодарность AMatroskin за подробное освещение этого проекта, а также всем, кто принимал участие и вносил свою лепту. Думаю что многим это будет интересно.
Отредактирован 10.12.2022 12:52
Ответить
+1
111284 #
Классные часики получились
Ответить
0
shuichik #
max17602 крайне недоставабельна...
Отредактирован 12.12.2022 11:18
Ответить
0
devICEpro #
https://www.chipdip.ru/product0/8432829242 А другие там не работают. UCC27325 сразу нагревается. Так что альтернатива пока не найдена
Ответить
0

[Автор]
AMatroskin #
Да не самая распространенная микруха, но вариантов не то что бы много, может подскажите если знаете что то более распространенное и подходящее?
Ответить
0
marges #
А в железяках Б/У не встречается?
Ответить
+1
_abk_ #
Хорошая работа проделана. А оформление просто блеск! Заодно проект демонстрирует наглядно, что, как ни выворачивайся, дисплей будет нормально отображать только две строки стандартных символов. Читабельность всего остального посредственная. Как ни крути.
Ответить
0

[Автор]
AMatroskin #
Спасибо! Большие цифры часов считываюся замечательно, а остальное скорей как дополнение к основному функционалу, ведь это просто часы.
Ответить
+1
Sergey #
Подскажите в каких устройствах применяется такой дисплей?
Ответить
0

[Автор]
AMatroskin #
Можно найти по словосочетанию "Дисплей покупателя", стоит почти в любом продуктовом магазине на кассе.
Ответить
+1
Sergey #
У меня есть дисплеи, но они совсем другие. Поэтому и спросил где брать именно такие и в каких "Дисплеях покупателей" они стоят. А если курочить все подряд в магазинах, то могут не понять
Ответить
0
devICEpro #
Firich VF2029, Kraftway/Puritron ICD2002, POSLAB PL-200, GIGATECH DSP850-855. Да ещё много каких. Posiflex, Posua. Смотреть фото надо. Не подходят Samsung и Datecs,это точно.
Ответить
+1
devICEpro #
Ещё вариант оформления. Безрамочный дизайн, 3D печать. Доступно к заказу
Отредактирован 23.12.2022 21:32
Прикрепленный файл: photo_2022-12-07_20-49-02 (2).jpg
Прикрепленный файл: photo_2022-12-07_20-49-02.jpg
Прикрепленный файл: photo_2022-12-23_22-24-28.jpg
Ответить
0
Олег #
Добрый день. А файл платы доступен или только в продаже готовая плата?
Ответить
0
devICEpro #
Платы заводского изготовления, по одной никто делать не будет. Для технологии ЛУТ слишком трудоёмко. Партия плат в пути, скоро можно будет купить. Файл платы пока не выкладываю, на то есть причины.
Ответить
0
Sergey #
Как можно зарезервирорвать платку?
Ответить
0
Sergey #
Я бы попробовал сделать по ЛУТ технологии!
Ответить
0
devICEpro #
Сделать можно, вся проблема в куче проходных отверстий с металлизацией. В домашних условиях проблематично. За готовыми платами в личку.
Прикрепленный файл: photo_2023-01-15_22-20-45.jpg
Ответить
0
devICEpro #
Можно вообще с изготовлением платы не заморачиваться, а использовать родную плату дисплея, с его родной схемой питания. Только изолировать сигнальные выводы колбы от контроллера, и припаять 5 проводов к ардуино. Здесь всё индивидуально, дисплеев превеликая куча разных вариантов. Если кого интересует такой вариант, пишите в форум, помогу разобраться что куда паять
Ответить
0
Krohovich #
У меня такой дисплей имеется: M202MD15FA. С HD44780 интерфейсом. Можно ли такой приспособить ?
Ответить
0

[Автор]
AMatroskin #
Боюсь что нет, у вас совсем другой дисплей, без внутренней логики, а в статье речь идёт о дисплеях с таковой на борту (технология chip on glass COG), вашим дисплеем логичнее всего управлять стандартным способом через hd44780.
Ответить
0
Krohovich #
Понятно, такой возможно достать, но это кажись тоже не то.
Прикрепленный файл: 20x2.jpg
Ответить
0
Krohovich #
У него как у 202MD25GINK стекляшка.
Ответить
+1
Krohovich #
Ай, короче вот такие они.
Только что прислали весь вид ни них.
Прикрепленный файл: 1.jpg
Прикрепленный файл: 2.jpg
Ответить
0

[Автор]
AMatroskin #
Это другое дело, похоже на колбу dn2029d точно можно посмотреть на задней с стороне колбы, обычно маркировка там находится.
Ответить
0

[Автор]
AMatroskin #
Да, скорей всего это dn2029d
Ответить
0
Krohovich #
Вот вид поближе на выводы индикатора.
Прикрепленный файл: 2029.jpg
Ответить
0

[Автор]
AMatroskin #
Да, скорей всего он и есть, если есть сомнения, можно проверить использую материалы вот этой статьи, нужен только ESP32, паяльник и немного энтузиазма
Ответить
0
devICEpro #
Точно он, без сомнений.
А ещё попался необычный DN2029D, без геттера снизу колбы.
Отредактирован 25.01.2023 17:08
Прикрепленный файл: DISPLAYS.jpg
Прикрепленный файл: DN2029-1.jpg
Ответить
0
Krohovich #
И такой.
Какой лучше ?
Прикрепленный файл: 2029-1.jpg
Ответить
0

[Автор]
AMatroskin #
Без разницы, колбы одинаковые. Если есть возможность запустить то можно просто посмотреть какая ярче и меньше изношена.
Ответить
+1
devICEpro #
Последние доработки схемы и платы на форуме
Ответить
0
Krohovich #
Спасибо !
Ответить
0
Krohovich #
Пришёл дисплей.
Размерчик огого.
Прикрепленный файл: 2029.jpg
Ответить
0
Krohovich #
Скажите, какой BME280 испрользовался ?
Никак не могу понять что купить.
https://www.dfrobot.com/product-1606.html
Такой вот есть в наличии.
Ответить
0
devICEpro #
У нас всё проще: BME280 5V
Ответить
+1
Roman #
Вариант корпуса...
Прикрепленный файл: IMG_20230212_210154231.jpg
Прикрепленный файл: IMG_20230212_210206869.jpg
Прикрепленный файл: IMG_20230212_212902057.jpg
Прикрепленный файл: IMG_20230212_212950205.jpg
Ответить
0
Krohovich #
Красота!
Жаль негде такое сделать
Ответить
+1
Антон #
Подскажите, с какой целью стоят транзистор BC847 и MMBT5401 в цепи высокого напряжения? База BC847 напрямую подключена к +5 в.
Ответить
0

[Автор]
AMatroskin #
Согласно документации на эти дисплеи высокое напряжение должно подаваться только после того как будет запитана логика колбы (+5в) а сниматься соответственно до отключения питания логики. Вот как раз эту задачу и выполняет эта пара транзисторов.
Ответить
0
Лев #
Что делать, если выдает ошибку компиляции??
Прикрепленный файл: photo_2023-12-31_12-43-37.jpg
Ответить
0
devICEpro #
Скачать комплект библиотек, выложено на форуме. Использовать именно эти версии, это важно
Ответить
0

[Автор]
AMatroskin #
Проблемы с библиотекой. В данной реализации аналоговая клавиатура не используется, можно просто отключить библиотеку Analog key и все что с ней связано.
Ответить
0
Александр #
Есть вот такой дисплей futaba m202ld12a на нем возможно реализовать данный проект?
Ответить
0
devICEpro #
Такой дисплей программно и аппаратно несовместим. Использовать в данном проекте не получится.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Набор для сборки - УНЧ 2х60 Вт на TDA7294 Печатная плата для усилителя "LM3886 + AD825"
вверх