Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

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

Это вторая моя попытка сделать наручные часы. Первые мои часы имели корпус высотой порядка 30 мм, из-за чего были очень неудобны для использования. А вот этот экземпляр гораздо тоньше – менее 12 мм, что уже вполне приемлемо.


Всё началось с того, что Валерий (Wall-ery ) предложил идею использовать в часах графический OLED-индикатор, имеющий разрешение 128х32 пикселя и диагональ 0,91”. Эти индикаторы имеют малые габариты, особенно по толщине. Кроме того, на графическом индикаторе можно сделать гораздо более интересные часы, чем на сегментном.

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

Наручные часы “ARSENICUM” с OLED-индикатором

В часах удалось реализовать следующие функции (а потом память микроконтроллера ATmega328PA закончилась, хотя у меня было ещё несколько идей):
  1. Отображение текущего времени в виде цифровых часов, стрелочных часов (3 варианта), двоичных (бинарных) часов.
  2. Отображение даты (календарь до 2099 года, с учётом високосных годов и автоматическим расчётом дня недели).
  3. Отображение уровня заряда аккумулятора.
  4. Просмотр полного календаря с 2000 по 2099 годы (“вперёд” и “назад” от текущей даты).
  5. Выбор от 1 до 6 шрифтов цифр (0–9) для цифровых часов.
  6. Выбор до 6 визуальных эффектов смены цифр для цифровых часов.
  7. Настройка яркости индикатора.
  8. Возможность поворота изображения на индикаторе на 180°, а также инверсия изображения.
  9. Коррекция точности хода часов в пределах ±23,4 с/сутки с шагом около 0,1 с/сутки.
  10. Микропотребление в ждущем режиме (при выключенном индикаторе).

Наручные часы “ARSENICUM” с OLED-индикатором

Далее была придумана конструкция корпуса и создана 3D-модель:

Наручные часы “ARSENICUM” с OLED-индикатором

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

Наручные часы “ARSENICUM” с OLED-индикатором

Затем изготовил необходимую оснастку, собрал детали в пакеты и прошлифовал все торцы пластин, чтобы убрать следы от лазера и получить ровную поверхность.

Наручные часы “ARSENICUM” с OLED-индикатором

Разобрал пакеты после шлифовки и залудил детали в требуемых местах для последующей пайки.

Наручные часы “ARSENICUM” с OLED-индикатором

Снова собрал пакет, но теперь уже из всех деталей сразу и в том порядке, в котором они будут в итоге.

Наручные часы “ARSENICUM” с OLED-индикатором

Заложил припой и припаял переднюю панель корпуса.

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Далее на фрезерном станке с ЧПУ изготовил кондуктор и сделал с его помощью необходимые выборки в боковых крышках корпуса.

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

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

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

После окончательной шлифовки корпус приобрёл такой вид:

Наручные часы “ARSENICUM” с OLED-индикатором

Поскольку припой не растёкся равномерно в местах стыков передней панели с пластинами пакета, образовались некрасивые щели. Их я решил устранить, профрезеровав пазы V-образной фрезой и заполнив их эпоксидным клеем, смешанным с тонером для лазерного принтера (для придания чёрного цвета).

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Далее вклеил в корпус стекло при помощи УФ-отверждаемого клея.

Наручные часы “ARSENICUM” с OLED-индикатором

Установил в корпус плату часов и аккумулятор. Плату зафиксировал клеем.

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Выточил из нержавеющей стали толкатель кнопки.

Наручные часы “ARSENICUM” с OLED-индикатором

Установил боковые крышки.

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

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

Наручные часы “ARSENICUM” с OLED-индикатором

В результате часы обрели название – ARSENICUM, а спереди и сзади была сделана гравировка.

Наручные часы “ARSENICUM” с OLED-индикатором

Далее – финальные фотографии:

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Все шесть шрифтов, предусмотренных в часах:

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Наручные часы “ARSENICUM” с OLED-индикатором

Отображение даты, дня недели и заряда аккумулятора:

Наручные часы “ARSENICUM” с OLED-индикатором

Видео работы часов:

20 комментариев

avatar
Оригинальный хронометр вышел однако :) Тут и сказать нечего, просто любуемся.
Плюсищи и туть и на ютубах +
avatar
Благодарю!
avatar
Красивые и оригинальные :)
avatar
Спасибо!
avatar
На ЯПе тоже посмотрено :)
avatar
Ага, я заметил. :)
avatar
Великолепный уровень исполнения, и внутри и снаружи! +

По-поводу памяти МК, есть полезный нюанс, (на случай если вы уже это не сделали) можно много сэкономить на статичных текстах выводя из прямо из флеша, не копируя в оперативку.
пример: strcpy_P(txt_buffer, PSTR("[ Статистика ]")); займет меньше места чем strcpy(txt_buffer, "[ Статистика ]");
avatar
Спасибо! Приятно слышать такое от того, кто сам специализируется на наручных часах и близким к ним устройствам!

PSTR() я уже и так использую, конечно.
if(vars.first_question){
    draw_string_P(PSTR("Восстановить"), false, 28, 8);
    draw_string_P(PSTR("настройки по"), false, 28, 16);
    draw_string_P(PSTR("умолчанию?"), false, 28, 24);
  }
  else{
    draw_string_P(PSTR("Операция необ-"), false, 28, 8);
    draw_string_P(PSTR("ратима. Вы"), false, 28, 16);
    draw_string_P(PSTR("уверены?"), false, 28, 24);
  }


Это, скорее, позволяет экономить RAM. Строки-то так или иначе будут храниться во flash-памяти. Разве что будет экономия на отсутствии кода для их копирования в RAM.

Я в процессе оптимизации дошёл до того, что делал выбор между локальной или глобальной переменной в зависимости от того, где получается меньше размер прошивки. Много памяти занимают шрифты, иконки и прочая графика. Тут мог бы помочь какой-нибудь алгоритм сжатия, но тогда могут начаться трудности, связанные со скоростью распаковки сжатой графики.

Поэтому я просто решил, что пора остановиться с добавлением всяких функций часам, и так уже много чего наворочено. :)
avatar
Согласен, тут важно вовремя остановиться. А то можно дойти до переноса части текстов в eeprom и выкидывания лишних букв из шрифтов :)
Кстати сам до сих пор люблю 328е меги использовать, для таких задач идеально, и нагрузочная способность ног, и широкий диапазон питания, и picopower — все приятности, которых нет у стм-ок и аналогичных. И бОльшая частота новых МК это не компенсирует, не нужно столько для таких проектов.
avatar
Я так понял, шрифты, собственно, только на цифры распространяются, а текст выводится неизменным шрифтом? Тогда вполне можно сжимать шрифты и распаковывать их на лету сразу на дисплей, без промежуточного буфера в ОЗУ.
[offtopic]Интересно, чем нужно заслужить право плюсовать материалы?[/offtopic]
avatar
Да, речь именно о шрифтах для больших цифр, которыми отображается время.

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

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

Лучше, мне кажется, распаковывать весь шрифт сразу в отдельный буфер в ОЗУ однократно при выборе нового шрифта. Оперативной памяти должно хватить — её тут 4 кБ, под буфер кадра выделено 512 байт, а все 20 цифр (по два варианта каждой — для часов/минут и секунд) шрифта занимают не более 880 байт. Остаётся ещё достаточно места под переменные и стек.

Чтобы плюсовать, нужен рейтинг не менее 1,1. Поставил Вам плюс в профиле — попробуйте теперь что-нибудь оценить.
Последний раз редактировалось
avatar
Уважаю такие конструкции и подход.
Работа и мозгами и станками и руками.
Не думали вместо обычного названия какую нибудь загадочную аббревиатуру
типа — 49DZ-2Q-HL9 (возможно это пароль, но где-то маленькая ошибка))?
Или просто, например, ARSENICUM-8
avatar
Нет, такая мысль пока не приходила.

А почему именно ARSENICUM-8? Всё-таки, число в названии должно иметь какой-то смысл (если это не просто набор случайных символов, конечно).
avatar
Смысл вполне можно придумать)
Я руководствовался своим восприятием. Цифра 8 по своему начертанию наиболее подходит к такому аккуратному названию.
Корпус грубее, чем название и дополнительный индекс разрешает это противоречие.
avatar
Шикарно!!! Удачи в дальнейшем творчестве! Плюс!
С праздником!!!
avatar
Красиво и функционально! +
avatar
Действительно «тонкая работа». Дизайн чем-то культовую электронику — 1 красный Пульсар напоминает.
avatar
Отличное изделие =) Большой ПЛЮС.
avatar
матом же нельзя?! тогда просто нет слов!!! +
avatar
Плюс!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.