Універсальний годинник: від простої ідеї до складних розробок

Звісно, ​​можливо, ваш годинник має резервну батарею, а мій — конвеєр розгортання!

Універсальний годинник: від простої ідеї до складних розробок 1 Швидке прототипування! Фото: Lee Hutchinson

Я хотів годинник, якого, на диво, нібито не існувало.

З дитинства моїми приліжковими годинниками були серії дешевих, простих і довговічних червоних семисегментних світлодіодних годинників-радіо з Walmart чи Target. Вони незмінно вимагають ручного втручання на початку та в кінці переходу на літній час, а також щоразу, коли вимикається живлення. Після нещодавнього збою живлення, коли я стояв біля тумбочки, утримуючи кнопку “TIME” і натискаючи “HOUR”, моє терпіння вичерпалося, і я подумав: “Ми вже чверть 21-го століття. Має бути кращий спосіб!”

Мій ідеальний годинник мав би сам встановлювати час. Він би автоматично регулював літній/зимовий час (або ні, залежно від того, як пройде цей законопроєкт!). Він би керував відхиленням і завжди показував точний час із субсекундною точністю. Він би відображав цей час на червоному семисегментному дисплеї — не синьому, не зеленому, не жовтому і, звісно, ​​не білому. І мені не довелося б встановлювати жодних додатків, що руйнують приватність, щоб він працював.

Просто? Ні. Хоча багато приліжкових годинників відповідають одній або, можливо, двом із цих вимог, я не зміг знайти нічого, що відповідало б усім. Годинники з резервним живленням, що самоналаштовуються, “атомні”, які отримують оновлення через космічний ефір, існують уже багато років і наближають мене до мети, але, чорт забирай, я не зміг знайти жодного з червоним семисегментним дисплеєм, який би мені сподобався (можливо, хтось інший має кращі навички пошуку?).

Деякий час панувало розчарування. Але закриваючи десятки вкладок браузера з безрезультатними пошуками та майже ідеальними, але не зовсім тим, сторінками продуктів, я подумав: “Зачекайте хвилину. У мене є 3D-принтер. Я, начебто, розумний і все таке. Чому б не купити семисегментний дисплей і не зробити власний годинник?”

І ось, стоячи на плечах гігантів, настільки високо, що я майже міг доторкнутися до Місяця, я це зробив.

Універсальний годинник: від простої ідеї до складних розробок 2 Це годинник, що робить годинникові речі. Фото: Lee Hutchinson

О прекрасний новий світ, де є такі годинники

Для тих, хто не зацікавлений у кількох тисячах слів про процес, ось готовий репозиторій. Він містить список компонентів із цінами та місцями придбання, програмне забезпечення та файли для 3D-друку.

Було два можливі шляхи, якими міг би піти цей сміховинно переобтяжений вихідними проєкт, що маскується під годинник. Один, яким не пішли, починався з Arduino або мікроконтролера, подібного до Arduino. Інший почався з Raspberry Pi або комп’ютерної штуки, подібної до Pi. Я вибрав Pi, використовуючи як Raspberry Pi Zero W, так і Zero 2 W.

Моїм обґрунтуванням було те, що Pi надає мені “заспокійливу ковдру” операційної системи на базі Debian, з Wi-Fi та NTP для вимоги “годинник сам встановлюється та оновлюється”, разом зі звичайним маршрутом віддаленого керування Linux, який я вже знаю.

Вибір семисегментного дисплея був простим: Adafruit виготовляє чудові світлодіодні дисплеї в стилі циферблата з цифрами висотою 1,2 дюйма, і продає набір, який об’єднує потрібний мені дисплей із платою-«рюкзаком», що містить контролер HT16K33, необхідний для керування світлодіодами. Я замовив три і зрештою використав усі для тестування, збирання та вивчення технік паяння.

Універсальний годинник: від простої ідеї до складних розробок 3 Дисплей зі сторінки продукту Adafruit. Фото: Adafruit

Ах, так, паяння. Я ніколи раніше цього не робив, але семисегментний дисплей довелося припаяти до його плати-рюкзака, тому я взяв набір для початківців-паяльників із 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, які критикують те, що я намагаюся зробити, як дурне і неправильне.

Універсальний годинник: від простої ідеї до складних розробок 4 Робочий простір проєкту. Це дещо відмінна версія від загальнодоступного репозиторію GitHub, з деякими defaults, специфічними для Лі, та дією Gitea. Фото: Lee Hutchinson

Сторона програми — це повноцінна служба systemd, яка прослуховує команди з HomeKit; вона також може керуватися локально через Unix-сокет, якщо ви захочете змусити дисплей робити щось із термінальної сесії. Служба працює під обліковим записом служби без привілеїв. Розгортання відбувається через дію Gitea, де я надсилаю тег до свого локального репозиторію Gitea, а runner створює артефакт випуску та передає його на Pi через окремий локальний обліковий запис служби, який може виконувати лише завдання, пов’язані з розгортанням. (Робочий процес розгортання включено до репозиторію проєкту GitHub як адаптований шаблон, якщо хтось із вас матиме точно таку ж конфігурацію, як у мене, і захоче скористатися цим).

Повною глибиною п’ять Autodesk лежить

З фізичного боку я справді знайшов 3D-друкований корпус з ліцензією Creative Commons, розроблений навколо того самого дисплея Adafruit, який я використовував, але він був не зовсім правильним.

Модифікація моделі означала битву з абсурдно недружнім до користувача кошмаром, яким є Autodesk Fusion, тому я зібрався з духом і занурився — і натрапив на ще одну стіну. Параметричне моделювання, особливо обтяжене десятиліттями дурних виборів UI/UX AutoCAD, було ще складнішим, ніж програмування.

Універсальний годинник: від простої ідеї до складних розробок 5 Autodesk Fusion, ми знову зустрічаємося. (Дякую Boosted за початковий дизайн.) Фото: Lee Hutchinson

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

Універсальний годинник: від простої ідеї до складних розробок 6 Локально розміщений Qwen3.6-35B-A3B-NVFP4 керує Fusion через OpenCode та MCP-сервер Fusion. Це майже спрацювало! Фото: Lee Hutchinson

Відповідь виявилася водночас “так” і “не зовсім”. Спочатку я спробував внести зміни з квантованою версією Qwen 3.6-35B (саме цією), що працювала локально на Acer Veriton GN100 з GB10, про який я пишу довгостроковий огляд для Ars.

Qwen 3.6 майже впорався із завданням, зробивши одну з моїх змін, але проваливши іншу; я знову звернувся до Claude Code і Fable, щоб вони зробили більшість коригувань моделі. Проте локальна модель була інтригуючою, і я повернуся до неї в майбутній статті.

З чого роблять прототипи

Щойно програмне забезпечення почало набувати форми, а посилки були доставлені, настав час почати прототипування. Я зайняв кухонний стіл, налаштував свій новий паяльник і спробував зібрати свій перший дисплей Adafruit і рюкзак, не знищивши їх обох — і мені переважно вдалося!

Універсальний годинник: від простої ідеї до складних розробок 7 Не судіть про мій робочий простір. (І під “робочим простором” я маю на увазі “кухонний стіл”.) Фото: Lee Hutchinson

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

Універсальний годинник: від простої ідеї до складних розробок 8 Навіть при мінімальній яскравості дисплей Adafruit дуже яскравий вночі. Це я експериментував з комбінаціями димного акрилу та матеріалу NDF. Фото: Lee Hutchinson

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

Один акриловий шматок плюс одна смужка 12-відсоткового NDF зменшили яскравість дисплея приблизно до ідеального рівня, порівнянного з моїм існуючим дешевим приліжковим годинником.

Наступною проблемою було пройти через усі необхідні зміни моделі, щоб включити акрил і NDF у корпус годинника. Зрештою, за допомогою магії LLM MCP, я розділив існуючий дизайн на кілька окремих частин і вирізав кишеню для акрилової панелі; я також попросив LLM додати направляючі штифти та отвори для кожної частини. Це все можна було зробити без створення будь-яких нависань, тому вся конструкція друкується без необхідності підтримок.

Універсальний годинник: від простої ідеї до складних розробок 9 Весь корпус, нарізаний і готовий до друку. Фото: Lee Hutchinson

Я пройшов щонайменше три основні ревізії всього, і я дуже задоволений кінцевим результатом. Остаточна версія в основному тримається разом, хоча передня панель вимагає або трохи електричної стрічки, або пару крапель суперклею, щоб залишатися прикріпленою. Я міг би виправити це, змінивши направляючі штифти так, щоб вони застібалися, а не просто сиділи там, але стрічка для мене працює достатньо добре.

Настав час

Кінцевий результат точно відповідав моїм очікуванням — найкращий критерій успіху, який я можу собі уявити. Оскільки LLM надала основну роботу з кодування та CAD-роботу, я думаю, що я витратив більше часу на очікування поставок, ніж на будь-що інше — це можна пояснити моєю відсутністю планування та легкістю доставки наступного дня.

Ось готовий пристрій, спочатку по частинах, а потім зібраний:

Універсальний годинник: від простої ідеї до складних розробок 10 Годинник до збирання… Фото: Lee Hutchinson Годинник до збирання… Фото: Lee Hutchinson Універсальний годинник: від простої ідеї до складних розробок 11 …і після! Фото: Lee Hutchinson …і після! Фото: Lee Hutchinson Годинник до збирання… Фото: Lee Hutchinson …і після! Фото: Lee Hutchinson

І, дивіться! Підтримка HomeKit!

Універсальний годинник: від простої ідеї до складних розробок 12 Відстеження журналу служби systemd годинника під час переміщення повзунка яскравості в програмі iOS Home. 16 рівнів яскравості семисегментного дисплея автоматично відображаються на шкалі 0–100% повзунка. Відгук дисплея майже миттєвий. Фото: Lee Hutchinson

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

Універсальний годинник: від простої ідеї до складних розробок 13 Я використовую Gitea сервер лише в локальній мережі, тому що це весело, і тому, що розгортання речей за допомогою Gitea Actions змушує мене почуватися справжнім системним адміністратором. Фото: Lee Hutchinson

Для тих, хто може подумати про те, щоб піти моїми стопами і створити власний 3D-друкований приліжковий втілення нестримного надмірного годинникового споживання — можливо, тому, що поруч немає дорослих, які б сказали вам цього не робити — існує багато різних способів підійти до цього завдання. Використання коду LLM — це, очевидно, вибір, і ви можете зробити інший. Пристрої Raspberry Pi будь-якої моделі зараз надзвичайно дефіцитні, тому хтось із кращими навичками програмування або з більш перебільшеним почуттям пригоди може спробувати це з мікроконтролером ESP32 замість Pi Zero. Насправді, ESP32, ймовірно, є кращим вибором для керування дисплеєм Adafruit, і він поставляється з підтримкою Wi-Fi та I2C без необхідності тягнути за собою Debian.

У будь-якому випадку, це був чудовий хобі-проєкт. Мені довелося паяти, що було і складніше, і легше, ніж я очікував. Я використав кілометри філаменту, друкуючи та передруковуючи різні ітерації корпусу. І я багато чому навчився.

Я витратив… ну, набагато більше грошей, ніж планував, між кількома помилковими початками, паяльником і набором, а також додатковими матеріалами для резервування та виправлень. І я міг би піти на компроміс і придбати звичайний годинник, який робить більшу частину того, що я хочу. Але досвід був веселим, а радість від того, що маєш саме те, що хочеш, безцінна.

Для тих, хто хоче побачити, як працює код, або адаптувати будь-що з нього для власних потреб, ось репозиторій. Насолоджуйтесь! Я просто буду тут, займаючись CI/CD зі своїм приліжковим годинником, що є абсолютно нормальним і нормальним заняттям, яким займаються нормальні люди!

Універсальний годинник: від простої ідеї до складних розробок 14 Лі Хатчінсон Старший редактор технічного відділу Лі Хатчінсон Старший редактор технічного відділу Лі — старший редактор технічного відділу, який відповідає за розробку історій для розділів гаджетів, культури, ІТ та відео Ars Technica. Давній член Ars OpenForum із великим досвідом у сфері корпоративних сховищ даних та безпеки, він живе в Х’юстоні.

Подробиці можна знайти на сайті: arstechnica.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *