Створення годинника, який ніколи не потребує налаштування: від простої ідеї до складних викликів

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

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

Годинник, що перевищує людський розум

Завантажувач образу RPi допоміг мені почати, і я зміг увійти до свого Pi Zero. Подумавши трохи, я звузив свої програмні вимоги до списку:

  • Хост годинника має бути доступний лише в локальній мережі й не мати доступу з Інтернету
  • Хост годинника має отримувати оновлення з локального дзеркала apt
  • Хост годинника має синхронізуватися з NTP з локального сервера NTP
  • Служба годинника має бути службою systemd, що працює з непривілейованим доступом у контексті спеціального облікового запису служби
  • Служба годинника має використовувати системний час, щоб операційна система хоста обробляла NTP і підтримувала синхронізацію з літнім/зимовим часом, незалежно від того, чи він є, чи ні
  • Служба годинника має мати можливість вмикати та вимикати дисплей за розкладом, щоб він був вимкнений більшу частину дня, коли мене немає в спальні
  • Служба годинника також має мати можливість вмикати/вимикати яскравість дисплея за розкладом
  • Служба годинника має мати спосіб керування через CLI для термінальних з’єднань
  • Дисплей має керуватися через HomeKit, тому що я живу в екосистемі iOS
  • Служба годинника та її залежності мають встановлюватися за допомогою одного скрипта
  • Після встановлення все має бути розгортається, щоб я міг надсилати оновлення за потреби, а не входити та перевстановлювати

Багато з цих пунктів були легкими та цілком відповідали моїм типовим операційним навичкам. Я покладався на старі добрі таймери та служби systemd для значної частини завдань — мені насправді починає подобатися systemd, хай допоможе мені Бог. Локальні джерела NTP та дзеркала apt вже існували (знаю, знаю, мені слід було б використовувати apt-cacher-ng). Конвеєр розгортання використовував би Gitea actions і був би більш-менш таким самим, як той, що я вже налаштував для іншого проєкту, тому я скопіював його з минулого «Лі». Інтеграція з HomeKit виглядала як просте додавання завдяки HAP-python.

Але я почав хвилюватися, коли шукав приклади того, як спілкуватися з дисплеєм годинника через I2C. Мої сильно атрофовані м’язи Python вже напружувалися, і я абсолютно не міг впоратися з цим викликом. Саме в цей момент проєкт перестав приносити задоволення і став здаватися неймовірно складним.

Тому я доручив кодування великій мовній моделі (LLM).

«Ти навчив мене мови; і мій зиск від цього: я знаю, як кодувати»

Звернення за допомогою до LLM, коли ви не можете перевірити результати, може бути ризикованим, але, на щастя, я пам’ятаю достатньо Python, щоб заплутано пройтися результатами, за допомогою коментарів у коді. Claude Code виявився більш ніж достатньо здатним для цього проєкту — спочатку з Opus 4.8, а потім пізніше з новою вишуканою моделлю Fable, чиї сили, що змінюють світ, я приборкав і використав для того, що, ймовірно, насправді є проєктом кодування рівня стажера.

Це було схоже на вивільнення повної потужності «Зірки Смерті» на комара, але це точно спрацювало. Результатом стала акуратна колекція файлів Python і гарний маленький тестовий набір. LLM зробила настільки хорошу роботу, що я також доручив їй інтеграцію з HomeKit, процедуру встановлення, деякі специфічні моменти навколо конвеєра розгортання та більшу частину документації репозиторію.

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

Створення годинника, який ніколи не потребує налаштування: від простої ідеї до складних викликів 4 Робоче середовище проєкту. Це трохи інша версія, ніж публічний репозиторій GitHub, з деякимиDefaults, специфічними для Лі, і Gitea action. Джерело: Lee Hutchinson

Сторона програми — це повноцінна служба systemd, яка слухає команди від HomeKit; вона також може керуватися локально через Unix-сокет, якщо ви хочете, щоб дисплей виконував дії з термінальної сесії. Служба працює під не привілейованим обліковим записом служби. Розгортання відбувається через Gitea action, де я надсилаю тег до свого локального репозиторію 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 Створення годинника, який ніколи не потребує налаштування: від простої ідеї до складних викликів 11 …і після! Джерело: 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 Lee Hutchinson Старший редактор технологій

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

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

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