Ещё не сделал свой секундомер?

Ох зря... Сейчас расскажу, зачем это потребовалось мне

Балдёж
Балдёж

У нас уже 2026 год на дворе, представляете? У тебя в кармане лежит тончайший, но такой огромный смартфон со всеми самыми современными благами цивилизации: гигабитный интернет, 16K камера, мессенджер, который ловит везде, и даже моднейший дизайн в стиле глассморфизма. И при всём этом в нём есть часы и секундомер. Но так ли тебе приятно ими пользоваться? А ведь они ревнуют тебя к остальному содержимому комбайна и могут обидеться...

Давайте музычку подставим, тема магазина с PS Vita подойдёт?

И вот я представляю тебе своё решение этой проблемы: свой физический секундомер! Работает надёжно, как часы! И ведь в нём есть всё, что нужно тебе: сочный OLED разрешением 128x64 (причём дешевле твоей жизни)! Две физические тактовые кнопки для импакта! И даже модуль часов реального времени! И всё это работает на базе мощнейшего микроконтроллера ESP32-C3 (за свои ~150 рублей) от наших друзей-китайцев, который даже можно назвать игровым (при условии, что игры — с геймбоя)!

Итак, как я докатился до этого

Прикиньте, не многие знают, но есть такая вещь, как образование. И я, как добропорядочный студент, с целью получения диплома вынужден закрывать дисциплины (сколько канцеляризмов!). Одна из них носит название — «Микроэлектроника и схемотехника ЭВМ», при этом курсовик по ней засчитывали как за «Организацию и архитектуру ЭВМ и вычислительных систем». Короче, я — будущий наносек.

И вот, выбор темы. Естественно, зная некоторую кривизну своих рук, я выбрал кое-что попроще: секундомер (при этом я как-то умудрился сделать картонную модель Metal Gear Rex в детстве, сантиметров 20 высотой). Секундомер — это просто, секундомер — это престижно, секундомер — это эстетично. Столько разных форм-факторов можно напридумать, столько разных реализаций, да и с часами они роднятся.

От механики до электроники, столько идей придумывают люди.

При всём этом даже корпус нам было не обязательно делать, но мы же не ищем лёгких путей, так ведь? И вот, о предварительном проектировании.

Раздутые бюджеты

Ответьте на один вопрос: секундомер — это простое устройство? Вот. Мне бы не потребовалось ничего, кроме (максимум!) ПРОСТЫХ контроллера, экрана и двух кнопок. Но самое лучшее — детям. Вот я и решил делать на базе ESP32. Пришёл я к этому не сразу, далеко не сразу. Перед этим я перетыкал три разные Arduino, одну из них даже убив (отставим драматизм, она просто была бракованная).

Микроконтроллер

Чтобы вам было самую кроху понятней, почему ESP32, вот вам небольшое сравнение процессоров:

Arduino Uno, Голиаф
Arduino Uno, Голиаф

ATmega328P (которая используется в самых дешёвых Arduino типа Uno и Nano, такие вы наверняка видели и даже пробовали помигать диодиком): 8-битный процессор, 16 МГц, 2 КБ RAM.

ESP32-C3, Давид
ESP32-C3, Давид

- ESP32-C3: 32-битный RISC-V (фанаты ARM должны ликовать на этом месте), 160 МГц, 400 КБ RAM, Wi-Fi, Bluetooth.

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

Экран

Выбор продвинутого OLED основывался на том, что... Я просто не смог нормально припаять I2C к ЖК из комплекта. Но OLED выгоден и тем, что у нас более шибкое использование пространства, более цельного, да и разрешение с яркостью всё равно выше (прямо пропорционально потреблению энергии, хотя можно просто выводить минимум инфы для экономии).

Вот таких малышей пару штук заказал + ещё один 128 на 32
Вот таких малышей пару штук заказал + ещё один 128 на 32

Такой экран по стоимости примерно как половина контроллера, но мы же не деньги пришли сюда считать?

Остальное

Кнопки - комплектные, красные. Модуль часов тоже комплектный. Отдельно ещё провода дозаказывал и макетные платы для пайки разных размеров.

В добавок ко всему, пришлось потратиться на всякий мелкий инструментарий.

Ещё не сделал свой секундомер?

Почему его я покупал в магазине, а не заказал? А всё из-за распределительных коробочек — жемчужин (ракушек) данного устройства. Советую: если у вас нет возможности распечатать собственный корпус на 3D-принтере, то попробуйте походить по хозяйственным или строительным, пощупайте руками, какой кейсик будет лучше и удобнее сидеть. А потом можете его обработать.

Обработка корпуса

Задача была в том, чтобы выпилить: отверстие под экран, два под кнопки по бокам и вывод под порт Type-C (это вам не хухры-мухры).

Вдохновляясь палитрой GameBoy, похоже?
Вдохновляясь палитрой GameBoy, похоже?

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

Предварительная компоновка, чисто прикинуть, стоило ли оно того
Предварительная компоновка, чисто прикинуть, стоило ли оно того

И небольшое предостережение из-за сумбурной структуры текста: перед дизайном корпуса предварительно убедитесь, что всё изделие само по себе рабочее. Семь раз отрежь — один отмерь.

Вот принципиальная схема устройства (не ГОСТ, я не шарю):

Ещё не сделал свой секундомер?

Погромирование

Если бы я из будущего мог отправить себе сообщение в прошлое, то я бы написал: «Не используй Arduino IDE». Проблема в том, что, несмотря на простоту, она постоянно перед загрузкой перекомпилирует ВСЮ программу. Допустим, даже если у вас есть код строк на 250, к ней две библиотеки, то вы будете КРАЙНЕ недовольны каждый раз ждать перекомпиляции не то что при изменённой строчке, а при отсутствии изменений вовсе. Может, конечно, я глупенький и не нашёл, как это отключить, но тем не менее вина как минимум в неинтуитивном моменте программы.

Полный код тут: https://pastebin.com/ws9snx2R
Полный код тут: https://pastebin.com/ws9snx2R

Код пишется на Си-плас-плас (или Си-подобном языке, но разницы я не заметил). А ещё помните про такое малозаметное явление, как вайб-кодинг? Ну вот, это я применял. Си'шку я знаю, си'шку люблю, но халтурненько делать всегда приятно. При этом не похоже, что код может убить меня, да и ломаться в таком устройстве особо нечему. Поэтому доверились модельке (вроде тогда это был Gemini) — и вперёд! Всё это было в Perplexity, инфу он ищет качественно в интернете, а я ещё и методичку Гугла по промпт-инжирингу читал, поэтому назовусь «экспертом».

О самой программе

Устройство работает в трёх режимах: секундомер, часы и... внимание... СВОЙ 3D-ДВИЖОК! В стиле известной среди дедов игры Elite.

Elite 1984 года, я даже пробовал играть в неё
Elite 1984 года, я даже пробовал играть в неё

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

Музыка на фоне: Кофе - Ломанные Пляски

Да, это просто скринсейвер, но зато какой! Каркасная графика, математические расчёты по аж ЧЕТЫРЁМ формулам! И ведь это не предел, в теории можно на ESP32 портировать весь ELITE.

Демонстрация трёх режимов

Процесс сборки

Осталось просто всё собрать в единое. Для этого паяем ножки к контроллеру, провода к ножкам, провода к проводам, не жалеем олова! Проматываем всё для надёжности изолентой и заталкиваем в корпус.

Безупречный кабель-менеджмент
Безупречный кабель-менеджмент

Дополнительно вырезаем из картонок фиксаторы, чтобы контроллер при подключении провода Type-C не проваливался внутрь. Сажаем всё на двухсторонний скотч, ещё добавляем изоленты и вуаля!

Изолента - тоже элемент дизайна!
Изолента - тоже элемент дизайна!

Всё, пользуйтесь на здоровье!

Заключение

Так нафига это всё? Смотрите, в процессе разработки этого аппарата вы сразу столько скиллов приобретаете: проектирование, поиск информации, программирование, пайка, разные подвиды дизайна! Ещё и возможностей для модернизации куча. Хотите — сделайте простенький сервер с сайтом-одностраничником. Хотите — сделайте консольку с эмуляторами.

Лично у меня в планах доработать эту штуку так: присобачим джойстик, модуль карты памяти и напишем нормальную прошивку, чтобы сделать свой Playdate. С блютузом можно добавить кооп. А сколько вдохновения можно ещё найти в подреддите Cyberdeck!

На этом всё, код программы оставлю тут (мой гитхаб пока слишком грязный):

Спасибо за чтение!

21
16
11
3
1
30 комментариев