Звісно, можливо, ваш годинник має резервну батарею, але мій має конвеєр розгортання!
Швидке прототипування! Джерело: Lee Hutchinson
Я хотів годинник, якого, на жаль, здавалося, не існувало.
З дитинства моїми настільними годинниками були серії червоних, простих світлодіодних годинників-радіо з семисегментними дисплеями з Walmart або Target. Вони завжди були дешевими, простими і довговічними — але вимагали ручного втручання на початку та в кінці переходу на літній час, а також щоразу, коли відбувалися збої живлення. Після нещодавнього збою живлення, коли я стояв біля тумбочки, натискаючи “TIME” і “HOUR”, роздратування вилилося, і я подумав: “Ми чверть 21-го століття. Має бути кращий спосіб!”
Мій ідеальний годинник мав би самостійно налаштовуватися. Він пропонував би автоматичне налаштування літнього/зимового часу (або ні, залежно від того, як пройде цей законопроєкт!). Він би керував відхиленням і завжди показував точний час до субсекунди. Він би показував цей час на червоному семисегментному дисплеї — не синьому, не зеленому, не жовтому, і абсолютно не білому. І мені не довелося б встановлювати жодних додатків, що знищують конфіденційність, щоб він працював.
Просто? Ні. Хоча багато настільних годинників відповідають одній або, можливо, двом із цих вимог, я не міг знайти нічого, що відповідало б усім. Самоналагоджувані “атомні” годинники з резервним живленням, які отримують оновлення через космічний ефір, існують роками і майже досягають мети, але, чорт забирай, я не міг знайти жодного з червоним семисегментним дисплеєм, який мені сподобався б (можливо, чийсь інший пошуковий кунг-фу кращий за мій?).
Деякий час панував відчай. Але коли я закривав десятки вкладок браузера з марними пошуками та сторінками продуктів “майже те, але не зовсім”, я подумав: “Зачекайте хвилину. У мене є 3D-принтер. Я, типу, розумний і все таке. Чому б не купити семисегментний дисплей і не зробити свій власний годинник?”
І ось, стоячи на плечах гігантів, що стояли так високо, що я майже міг торкнутися Місяця, я це зробив.

О, чудовий новий світ, де є такі годинники
Для тих, хто не зацікавлений у кількох тисячах нескінченних слів про процес, ось готовий репозиторій. Він містить список матеріалів із цінами та місцями покупки, програмне забезпечення та файли для 3D-друку.
Існувало два потенційні шляхи, якими міг би піти цей смішно переобтяжений вихідними проєкт, що маскується під годинник. Один, обраний шлях, почався з Arduino або мікроконтролера, подібного до Arduino. Інший почався з Raspberry Pi або комп’ютера-подібної штуки. Я вибрав Pi, використовуючи як Raspberry Pi Zero W, так і Zero 2 W.
Моїм обґрунтуванням було те, що Pi надавав мені “ковдру безпеки” операційної системи на базі Debian, з Wi-Fi та NTP для вимоги “годинник встановлює та оновлює себе”, а також звичайного віддаленого керування Linux, яке я вже знав.
Вибір семисегментного дисплея був простим: Adafruit виготовляє чудові дисплеї у стилі циферблата з цифрами заввишки 1,2 дюйма, і продає комплект, який поєднує бажаний дисплей з платою “рюкзак” із контролером HT16K33, необхідним для керування світлодіодами. Я замовив три і врешті-решт використав усі для тестування, збирання та вивчення паяння.

Ах, так, паяння. Я ніколи раніше цього не робив, але семисегментний дисплей довелося припаяти до плати-рюкзака, тому я взяв набір “паяльник для початківців” з Amazon і моток припою 60/40. (Я також купив настільну лупу, бо, як виявилося, коли я заглянув туди, ці старі очі вже не могли так добре фокусуватися зблизька, як раніше.)
Відклавши питання корпусу годинника — я був упевнений, що хтось інший уже розробив 3D-друкований корпус, сумісний з дисплеєм Adafruit, і я мав рацію — я сів зі своїм новим Pi Zero і почав вивчати програмне забезпечення, яке йому доведеться запускати, щоб “розмовляти” годинником. Я швидко усвідомив, що це занадто складно для мене. Як я так часто казав на цих сторінках, “ops” в “devops” — це я… хтось інший має забезпечити “dev”.
Годинник, що перевищує можливості людини
Завантажувач образу RPi дав мені старт, і я зміг увійти в мій Pi Zero. Подумавши трохи, я звузив свої програмні вимоги до списку:
- Хост годинника має бути доступним лише в локальній мережі та не доступним з Інтернету.
- Хост годинника має отримувати оновлення з дзеркала apt у локальній мережі.
- Хост годинника має отримувати синхронізацію NTP з сервера NTP у локальній мережі.
- Служба годинника має бути службою systemd, що працює без привілеїв під контекстом виділеного облікового запису служби.
- Служба годинника має використовувати системний час, тому операційна система хоста керує NTP і підтримує синхронізацію незалежно від літнього/зимового часу.
- Служба годинника має мати можливість вмикати та вимикати дисплей за розкладом, щоб він був вимкнений більшу частину дня, коли мене немає в спальні.
- Служба годинника також має можливість регулювати яскравість дисплея за розкладом.
- Служба годинника має мати можливість керуватися через CLI для термінальних з’єднань.
- Дисплей має керуватися через HomeKit, оскільки я живу в екосистемі iOS.
- Служба годинника та її залежності мають встановлюватися за допомогою одного скрипта.
- Після встановлення все має бути розгорнуто, щоб я міг надсилати оновлення за потреби, а не входити й перевстановлювати.
Багато з цих пунктів були легкими і повністю входили в мою типову сферу експлуатації. Я повернувся до старих добрих таймерів і служб systemd для значної частини речей — мені насправді починає подобатися systemd, хай мені Бог допоможе. Джерела NTP і дзеркала apt у локальній мережі вже існували (я знаю, я знаю, мені слід використовувати apt-cacher-ng замість цього). Конвеєр розгортання використовував би дії Gitea і був би більш-менш точно таким самим, як той, що я вже налаштував для іншого проєкту, тому я взяв з “Минулого Лі”. Інтеграція HomeKit виглядала як доповнення завдяки HAP-python.
Але я почав хвилюватися, коли почав шукати приклади того, як спілкуватися з дисплеєм годинника через I2C. Мої значно атрофовані навички Python вже напружувалися, і я абсолютно не зміг би впоратися з цим викликом. Саме в цей момент проєкт перестав здаватися веселим і почав здаватися неймовірно складним.
Тому я передав завдання кодування LLM.
«Ти навчив мене мови; і мій прибуток від неї: я знаю, як кодувати»
Пошук допомоги LLM, коли неможливо перевірити результати, може бути небезпечним, але, на щастя, я пам’ятаю достатньо Python, щоб пройти через результати, з допомогою коментарів у коді. Claude Code виявився більш ніж достатньо здатним впоратися з цим проєктом — спочатку з Opus 4.8, а потім з новою моделлю Fable, чиї світозавершуючі сили я використовував для проєкту, який, ймовірно, насправді є проєктом кодування рівня стажера.
Це було схоже на вивільнення повної потужності “Зірки смерті” на комара, але це точно спрацювало. Результатом стала акуратна колекція файлів Python та невелика тестова програма. LLM зробила настільки добру роботу, що я також попросив її зробити інтеграцію HomeKit, процедуру встановлення, деякі специфічні моменти навколо конвеєра розгортання та більшу частину документації репозиторію.
Я знаю, що це зізнання може бути анафемою для багатьох серед коментаторів Ars, але це як є — без LLM я б не закінчив проєкт. Я б роздратувався, розлютився або просто втомився від нескінченного читання постів на StackOverflow, що критикують те, що я намагаюся зробити, як дурне та неправильне.

Сторона програми є належною службою systemd, і вона прослуховує команди з HomeKit; її також можна контролювати локально через Unix-сокет, якщо ви хочете, щоб дисплей робив щось із термінальної сесії. Служба працює під обліковим записом служби без привілеїв. Розгортання відбувається через дію Gitea, за допомогою якої я надсилаю тег до свого локального репозиторію Gitea, і runner створює артефакт випуску та передає його на Pi через окремий локальний обліковий запис служби, який може виконувати лише завдання, пов’язані з розгортанням. (Робочий процес розгортання включено до репозиторію проєкту GitHub як адаптований шаблон, на випадок, якщо хтось із вас має точно таку ж конфігурацію, як і я, і захоче її використати.)
П’ять фатомів, що лежать в Autodesk
З фізичного боку, я дійсно знайшов 3D-друкований корпус з ліцензією Creative Commons, розроблений навколо того ж дисплея Adafruit, який я використовував, але він був не зовсім правильним.
Модифікація моделі означала битву з абсурдно ворожим до користувача кошмаром, яким є Autodesk Fusion, тому я спорядився і занурився — і натрапив на ще одну стіну. Параметричне моделювання, особливо обтяжене десятиліттями дурних UI/UX рішень AutoCAD, було навіть складнішим, ніж програмування.

Але Fusion тепер поставляється з MCP сервером, тому я потенційно міг би дозволити LLM дистанційно керувати програмою і зробити модифікації за мене. Невже це може бути так просто?

Відповідь виявилася як “так”, так і “не зовсім”. Спочатку я спробував свої модифікації з квантованою версією Qwen 3.6-35B (саме цією), що працює локально на Acer Veriton GN100 на базі GB10, про який я пишу довгостроковий огляд для Ars. Qwen 3.6 майже впорався, зробивши одну з моїх змін, але проваливши іншу; я повернувся до Claude Code і Fable, щоб впоратися з більшістю модифікацій моделі. Тим не менш, локальна модель була інтригуючою, і я повернуся до неї в майбутній статті.
З чого роблять прототипи
Як тільки програмне забезпечення почало формуватися, а посилки з компонентами були доставлені, настав час починати прототипування. Я зайняв кухонний стіл, налаштував свій новий паяльник і спробував зібрати свій перший дисплей Adafruit і рюкзак, не знищивши їх обох — і мені це майже вдалося!

Натхненний тим, що не надто зіпсував паяння, і маючи тепер живий дисплей для роботи, я продовжив. Наступне, що потрібно було вирішити, це те, що хоча дисплей Adafruit можна затемнювати, навіть при мінімальному затемненні він все одно виявився занадто яскравим для темної спальні. Це означало, що мені знадобиться щось перед ним, щоб блокувати світло.

B&H Photo прийшла на допомогу, оскільки там продаються рулони матеріалу для нейтрального фільтру за відносно низькою ціною. Однак, це виявилося крихким і дуже схильним до збору відбитків пальців, тому я поєднав NDF з темним акрилом, що означало пошук постачальника, який би продав мені невеликі кількості акрилу, вирізаного за розміром. (Я насправді знайшов двох — це місце та це.)
Один шматок акрилу плюс одна смужка 12-відсоткового NDF зменшили яскравість дисплея приблизно до ідеального рівня, порівнянного з моїм існуючим дешевим настільним годинником.
Наступною проблемою було ітерування всіх модифікацій моделі, необхідних для інтеграції акрилу та NDF в корпус годинника. Я (за допомогою магії LLM MCP) розділив існуючий дизайн на кілька окремих частин і вирізав кишеню для акрилової передньої панелі; я також попросив LLM додати направляючі штифти та отвори для кожної частини. Це все було можливо зробити без створення будь-яких нависань, тому вся конструкція все ще друкується без необхідності опор.

Я пройшов через щонайменше три основні ревізії всього, і я дуже задоволений кінцевим результатом. Остаточна версія здебільшого тримається разом, хоча передня панель потребує або трохи ізоляційної стрічки, або кількох крапель суперклею, щоб залишатися прикріпленою. Я міг би виправити це, змінивши направляючі штифти так, щоб вони защіпалися, а не просто стояли там, але стрічка мені цілком підходить.
Настав час
Кінцевий результат точно відповідав моїм очікуванням — найкращий критерій успіху, який я можу собі уявити. Оскільки LLM надавала важку роботу з кодування та CAD, я думаю, я витратив більше часу на очікування доставки матеріалів, ніж на щось інше — це можна пояснити моїм браком планування та легкістю доставки наступного дня.
Ось готовий пристрій, спочатку по частинах, а потім зібраний:
Годинник до збирання… Джерело: Lee Hutchinson
…і після!
І, дивіться! Підтримка HomeKit!

І він розгортається!

Для тих, хто може подумати про те, щоб піти моїми слідами і створити власне 3D-друковане втілення безвідповідального нестримного годинникового надмірства — можливо, тому, що поруч немає дорослих, які б сказали вам цього не робити — існує багато різних способів підійти до завдання. Використання коду LLM — це, очевидно, вибір, і ви можете зробити інший. Пристрої Raspberry Pi будь-якого типу зараз надзвичайно дефіцитні, тому хтось із кращими навичками кодування або з надмірним почуттям пригод може спробувати це з мікроконтролером ESP32 замість Pi Zero. Насправді, ESP32, ймовірно, є розумнішим вибором для керування дисплеєм Adafruit, і він постачається з підтримкою Wi-Fi та I2C без необхідності тягнути за собою Debian.
В будь-якому випадку, це був чудовий хобі-проєкт. Мені довелося паяти, що було одночасно складніше і простіше, ніж я очікував. Я використав кілометри філаменту, друкуючи та перевидаючи різні ітерації корпусу. І я багато чому навчився.
Я витратив… ну, набагато більше грошей, ніж мав намір, між кількома помилковими спробами, паяльником і комплектом, а також додатковими витратними матеріалами для резервування та повторних спроб. І я міг би піти на компроміс і придбати звичайний годинник, який робить більшість того, що я хочу. Але досвід був веселим, а радість від того, що є саме те, що ти хочеш, безцінна.
Для тих, хто хоче побачити, як працює код, або адаптувати будь-що з нього для власних потреб, ось репозиторій. Насолоджуйтесь! Я буду тут, займаючись CI/CD зі своїм настінним годинником, що є абсолютно нормальним і прийнятним для звичайних людей!
Лі Хатчінсон
Старший редактор з технологій
Лі — старший редактор з технологій, який курує розробку матеріалів для розділів гаджетів, культури, ІТ та відео Ars Technica. Багаторічний член Ars OpenForum з великим досвідом у сфері корпоративних сховищ даних та безпеки, він живе в Х’юстоні.
Дізнатися більше на: arstechnica.com
