Топ проектов недели: компьютер внутри мышки, нейросеть на RP2350, радар на NES и охота на вибротрак

Подборка проектов за неделю с 5 по 11 сентября. Без инструкций — просто хорошие работы, на которые стоит посмотреть.
Компьютер внутри компьютерной мыши#

Galaxy S21 5G, переехавший в корпус беспроводной мыши
Автор канала Gadget Industry называет это «ПК внутри мыши» — и всё зависит от того, что считать ПК. Персональный компьютер тут действительно есть, но ничего IBM-совместимого: внутрь корпуса беспроводной мыши переехала крошечная ARM-плата, которая начинала жизнь смартфоном. Именно это делает проект интереснее, чем очередная сборка на Raspberry Pi.
Взяли Galaxy S21 5G — и не случайно: у Samsung есть штатный десктопный режим DeX, так что можно оставить сток-Android в покое, вместо того чтобы городить поверх Linux-окружение или целиком менять систему на postmarketOS. Без аккумуляторного отсека потроха телефона влезли в бывшую беспроводную мышь на удивление легко. С охлаждением, разумеется, не очень, поэтому внутри латунная пластина в роли теплорастекателя — примерно столько же теплоотвода было и у самого телефона, так что должно хватить. На видео, во всяком случае, работает.
Генеративная нейросеть, которая рисует лица на RP2350#

Диффузия в действии: слева шум, справа узнаваемые лица
Интерес к моделям, которые крутятся на своём железе, растёт — ради приватности, настраиваемости и цены. Но мало кто заходит так далеко, как Tim: он собрал диффузионную модель генерации изображений, работающую на микроконтроллере RP2350.
Возможности, понятно, скромные: разрешение 128×128, генерируются только человеческие лица, на картинку уходит около двадцати секунд — что для такого железа всё равно впечатляет. Работает на отладочной плате Waveshare RP2350, картинку можно вывести по USB или показать через плату-адаптер VGA. Модель не рисует изображение напрямую: она порождает распределение в латентном пространстве, а декодер вариационного автокодировщика превращает его в картинку. Автокодировщик обучали целиком, а потом оставили только декодер. Генеративная часть — latent flow diffusion transformer: берёт шум и итеративно предсказывает поправки, приближающие его к цели, плюс принимает класс на входе, чтобы направлять результат (например, к улыбающемуся лицу). Обучены две модели, побольше и побыстрее, веса квантованы до 8-битных целых; обе вместе с программой инференса уложились в 4 МБ флеша.
Авиарадар на картридже NES — без единой радиодетали#

Выглядит как игра 1988 года, а показывает сегодняшний трафик
Визуализаторы воздушного движения сейчас на пике моды, и вот очередь дошла до NES: проект NES Radar от k6lcm выложен на GitHub под GPL. Несмотря на название, никакой радиолокации — да и вообще радио — здесь нет. Только картридж и аккуратно собранный кабель.
Картридж самый обычный, ПЗУ с программой: ни спрятанного ESP32, ни Pico W. Вводите код ИКАО — скажем, KATL — и получаете картину трафика. Правда, для самого загруженного аэропорта мира весь трафик вы не увидите: программа ограничена восемью спрайтами. Секрет в кабеле: второй порт джойстика используется как последовательный, а данные о положении самолётов подтягивает Python-скрипт на стоящем рядом компьютере. Проект вырос из c64u-radar того же автора, где ту же роль играл LAN-порт Commodore 64 Ultimate; у NES такой роскоши нет, вот и пришлось задействовать порт геймпада.
Видеобудильник на ESP32-P4#

Waveshare-модуль на ESP32-P4 и печатная подставка
Когда-то будильник умел разбудить звонком, резким зуммером или тем, что играло по радио. К звуку на выбор мы давно привыкли — а что, если хочется просыпаться не только под звук? Bruno Keymolen собрал будильник, который проигрывает любой ролик, лишь бы тот влез в квадратный экран 720×720.
Экран — готовый модуль Waveshare на ESP32-P4, что превращает проект почти целиком в софтверный: из железа автору понадобилась только напечатанная подставка на тумбочку. Это не упрёк — наоборот, разумный выбор. У модуля есть RTC, так что время не уплывает, и картридер microSD, куда можно залить целую библиотеку клипов. Единственная придирка: файлы должны быть в контейнере AVI с MJPEG 720×720 и стереозвуком PCM 44,1 кГц, а имена — по правилам FAT: восемь символов и никаких спецсимволов.
Тамагочи, который болеет, когда вы залипаете в телефон#

Питомцу плохо, потому что хозяин снова в телефоне
Проектов, помогающих обуздать время в смартфоне, было уже много. Виртуальный питомец brenpoly действует иначе: он бьёт по эмпатии и нашей способности привязываться буквально к чему угодно.
Сам питомец — ESP32 в милом печатном корпусе. Базовое поведение тамагочи и правило «мой дружок болеет, потому что я скроллю» зашиты в прошивку, и этого, в общем, хватило бы. Но автор пошёл дальше и запустил на телефоне локальную языковую модель: агент видит не только экранное время, но и уведомления, а через Bluetooth связан с моделью Whisper и микрофоном в питомце. В результате можно услышать содержание или краткую выжимку уведомлений, не глядя на телефон, — или просто попросить малыша рассказать анекдот. Голос ему даёт локальная модель piper, и озвученная просьба отложить телефон работает заметно лучше немой мордочки. Всё выложено на GitHub.
OpenTrailPaper — велокомпьютер на E Ink и ESP32-S3#

OpenTrailPaper на LILYGO T5 E-Paper S3 Pro
Открытый проект OpenTrailPaper превращает отладочную плату LILYGO T5 E-Paper S3 Pro в полноценный велокомпьютер: прошивка на ESP-IDF плюс приложения-компаньоны для Android и iOS, отвечающие за карты, маршруты и настройки.
Умеет он немало: показывает данные заезда и офлайн-карты, ведёт по стандартным маршрутам GPX, пишет FIT-файлы (тот самый формат, что у Garmin) и подключается по Bluetooth к датчикам пульса, мощности и каденса — поддержку ANT+ обещают позже. Железо располагает: 4,7-дюймовый экран 960×540 с 16 градациями серого и ёмкостным сенсором GT911, ESP32-S3 с 8 МБ PSRAM и 16 МБ флеша, GNSS-модуль u-blox MIA-M10Q или Quectel L76K (прошивка определяет сама), LoRa на SX1262, microSD, RTC PCF8563, аккумулятор на 1500 мА·ч и контроллер заряда BQ25896 с газометром BQ27220. Автономность с этой прошивкой — чуть меньше восьми часов при выключенной подсветке. Отдельно в репозитории лежат инструменты для сборки собственных карт: через приложение, Python-скриптом в терминале или прямо в браузере.
GNU Radio Companion переехал в браузер#

Тот же GRC, только без установки
Браузер продолжает поглощать десктопный софт, и на этот раз очередь дошла до GNU Radio Companion — порог входа в SDR заметно понизился. Автор — Marc Lichtman, знакомый многим по pysdr.org.
Окно открывается привычное, если вы когда-либо работали с GRC, и сразу с набором примеров потоковых графов под самые разные задачи. Поддерживается коллекция SDR-приёмников, включая всем знакомый RTL-SDR, а если приёмника нет — можно работать со звуковой картой. Есть даже готовые записи эфира, чтобы было с чем поэкспериментировать. Единственное, чего браузерная версия не умеет, — работать с SDR по сети.
Беспроводной 3D-сканер на ESP32-S3 и вращающемся лидаре#

Дешёвый лидар на поворотном механизме плюс ESP32-S3
Ещё один способ получить облако точек без дорогого оборудования: автор взял недорогой вращающийся лидарный модуль и превратил его в беспроводной сканер пространства. Датчик крутится и снимает дальности под разными углами, так что на выходе получается форма объектов и помещения, а не плоский 2D-срез.
Роль контроллера и радиомоста играет ESP32-S3: он управляет шаговым приводом вращения, принимает данные от лидара и по Wi-Fi отдаёт их в самописное Android-приложение. Приложение обрабатывает измерения и рисует облако точек, показывая результат сканирования в реальном времени.
Охота на вибротрак: как ищут горячую воду под Мюнхеном#

Вибротрак за работой — источник управляемого мини-землетрясения
Не проект в привычном смысле, а отличный технический репортаж. Жена автора во время прогулки прислала фотографии оранжевых коробок, расставленных по всему району, — геофонов с QR-кодом на сайт проекта. Мюнхен затеял масштабную сейсморазведку, чтобы составить карту подземных вод и использовать их для геотермального тепла и электричества.
Как заглянуть на пять километров вглубь? Бить по земле, посылать ударные волны вниз и слушать отражения от границ слоёв. Геофоны расставляют с шагом около 20 м линиями через 300 м с севера на юг, а «вибротраки» ездят с запада на восток, устраивая мини-землетрясение каждые 20 метров: тысяча квадратных километров, 120 тысяч точек, 86 тысяч возбуждений. Вибротрак не бьёт одним ударом, а делает свип примерно от 6 до 96 Гц — как чирп в сонаре: разные отражения приходят с разной высотой тона, и их проще разделить. Ездят машины парами и синхронизированы по фазе, чтобы излучать как одна; внутри у них часы, дисциплинированные по GPS. А вот у геофонов GPS нет — слишком дорого: при установке их подключают к ноутбуку с GPS, который записывает координаты и выставляет часы, а при снятии снова фиксирует место и проверяет, насколько ушло время. Цель всего этого — 3D-карта недр: под Мюнхеном на глубине около 3 км лежит юрский водоносный слой с водой около 100 °C и низкой минерализацией.