Открытый проект KeyForge3D позволяет преобразовать фотографию ключа в файл для 3D-печати. Приложение выделяет контур ключа, добавляет ему толщину и сохраняет результат в STL для дальнейшей печати. Система работает локально без нейросетей и подписок — внутри обычный OpenCV.
Школьница Светлана под руководством двух инженеров - меня и ее отца - освоила концепции трех технологий проектирования схем и теперь демонстрирует их на этом видео:
1. Сборка цифровых схем на макетной плате с микросхемами малой степени интеграции. Этот метод старинный, изобретен еще в 1968 году, но и сейчас годен для обучения школьников начиная с детсада (мы вчера видели как 6-летний понял функциональность логического элемента XOR). Светлана показывает на видео схему с ALU которую она собрала.
2. Синтез схем из кода на языке описания аппаратуры SystemVerilog с реализацией в микросхемах реконфигурируемой логики FPGA. Этот способ широко применяется для прототипирования, специальных приложений (например в космических ракетах SpaceX и Blue Origin) и обучения студентов (см. напр. курс MIT 6.111).
3. Синтез для микросхем ASIC. Этот способ применяется последние 35 лет для всех массовых устройств. Смартфон который вы держите в руках - это несколько ASIC-ов и окружающая их периферия.
Светлана будет присутствовать на Zoom-звонке на русской части лекций, которые будет читать наш коллега из Грузии Леваном Чагелишвили, где мы покажем плату TinyTapeout в действии. Вы можете подключиться по линку
Недавно мне понадобилось достать данные из QR-кода на кассовом чеке. Чек был в плохом состоянии: слегка затёрт + характерные полоски термопечати. Все обычные сканеры и приложения дружно отказывались его читать. Первая идея — открыть фото в редакторе и вручную перерисовать модули — очень быстро показала свою несостоятельность. Несколько сотен точек, глаза начинают плыть уже через 10–15 минут. Дальше начались размышления, как это можно сделать разумнее. Полностью отдавать задачу нейросети я не хотел. На грязных данных с полосками и неравномерной засветкой модель легко начинает «додумывать» модули. А мне нужна была не красивая картинка, а гарантированно читаемый код. Поэтому я решил пойти по гибридному пути: максимально автоматизировать рутину, а финальное решение в сомнительных местах оставить человеку. Что получилось в итоге Инструмент работает полностью в браузере. Фото никуда не отправляется. Основной сценарий (самый частый): Загружаешь фото. Обрезаешь, поворачиваешь, подкручиваешь экспозицию, контраст, гамму, резкость, шумоподавление и т.д. После любого изменения программа сразу пытается прочитать QR. Если код прочитался — сразу получаешь: чистый QR (можно сохранить); сами данные (можно скопировать). На этом можно остановиться. Дальше идти не нужно. Если автоматического чтения не произошло — включается более глубокий режим: Автоматический поиск области кода и определение размера модуля (через поиск finder-паттернов 1:1:3:1:1). Построение сетки. Коррекция перспективы и кривизны бумаги через сетку контрольных точек (кусочно-билинейная деформация). Построчная проверка модулей: программа предлагает цвет, человек только подтверждает или инвертирует. Ручная проверка каждого модуля — это крайний случай, когда даже после всех обработок фото код всё равно не читается. Технические детали Бинаризация через Otsu. Определение шага модуля по характерным сериям 1:1:3:1:1. Адаптивный порог цвета модуля относительно соседей 3×3. Живое декодирование на каждом этапе изменения изображения. Возможность вручную править геометрию через контрольные точки. Инструмент доступен здесь: https://zoommax.space/ Буду рад обратной связи, особенно по сложным случаям (сильные повреждения, сильный ракурс, очень грязная печать).
На плате JZ-F407VET6 питание предусмотренно только от +5В или USB, при этом никаких защит в виде предохранителей и супрессоров не реализовано. От 5В запитанны CAN-трансиверы, а через линейный стабилизатор на 3,3В вся остальная часть схемы. Общее потребление платы с экраном составляет примерно 150мА.
Модуль SEPIC
Изначально хотел запитать монитор от выхода ЭБУ на датчик тока, он как раз расчитан на 5В, но в случае неисправности напряжение могло вырастать до 12В, значит напрямую подключать нельзя. При использовании понижающего преобразователя напряжения, на входе надо было бы подавать не меньше 7В. А вот если использовать SEPIC модуль, то входное напряжение может составлять 4...35В. К сожалению оказалось, что датчик тока потребляет 20мА, а выход ЭБУ долговременно не способен отдавать более 50мА.
Выходит питание устройства надо заводить отдельным разъёмом.
Пользователь установил своему хомяку систему, которая считывает пробежки в клетке по беговому колесу и загружает эти данные в соцсеть для спортсменов Strava. На колесе установлен магнит и специальный датчик, который считает количество оборотов колеса. Микроконтроллер фиксирует время, скорость и дистанцию питомца, а потом эти данные загружается в спортивную соцсеть. Средний ночной пробег хомяка Молли составляет 10 км, а его личный рекорд — более 11 километров за ночь.
Когда у тебя есть 3D-принтер, кучка серв и микрокомпьютер
Хотелось бы начать серию статей о моих злоключениях при адапртации одной модели робота под более мощные сервоприводы, но не уверен, что это кому то нужно
Разбор кода исходного проекта и мат-модель робота
Перенос кода на Linux
Создание контролера сервоприводов.
Адаптация цепей питания сервоприводов
Адаптация модели для 3D-печати
P.S.:
Не нашел как в "посте" создать опрос, а на статью это не тянет.
Прошу писать в коментариях, интересно ли это.
Спасибо.
Исходную модель укажу в коментарии(не я автор, и считаю нужным указать источник модели и кода).
Продолжаю делиться небольшими решениями для умного дома, которые спасают не столько время, сколько технику и нервы.
Левое верхнее фото – датчик. Правое нижнее – умная розетка. Скриншот слева: автоматизация с оповещением, что мало воды. Скриншот справа: отключение насоса при минимуме воды (у меня на 10% от ёмкости для безопасности).
В доме у меня стоит накопитель для воды. Вода сначала поступает в него, а уже потом распределяется по системе. Это помогает пережить отключения: даже если подачу временно перекрыли, в запасе остаётся некоторый объём.
После накопителя установлена насосная система, которая поддерживает нормальное давление в доме.
Я столкнулся с проблемой: если воды долго нет, запас в накопителе постепенно заканчивается. Насос при этом продолжает гонять воздух и работать всухую. Соответственно, возникает риск: насос перегревается и в какой-то момент может просто напросто сгореть.
Чтобы не следить за уровнем воды вручную, я поставил на накопитель датчик. А насос подключил через умную розетку.
Получился довольно простой сценарий:
– датчик следит за уровнем воды; – когда вода опускается ниже минимальной отметки, система получает сигнал; – умная розетка отключает насос; – когда вода возвращается, насос можно снова включить.
Правда, без небольшого креатива не обошлось.. Закрепить датчик прямо на накопителе не получилось, потому что крышка была неровной. В итоге установил его на кусок ламината и уже эту конструкцию разместил сверху.
Выглядит, конечно, не как заводское решение, но зато работает)
Больше интересных постов можно найти в моём телеграм-канале. Там я пишу про управление знаниями и делюсь разными ИИ-находками для дома и не только. Подписывайтесь, чтобы не пропустить новые тексты.
Всё, что оно делает - показывает текст текущей песни в верхней панели. Тексты песен извлекаются с помощью lrclib.net. Также есть небольшое меню настроечек, текст можно переместить в левый или правый угол панели. Тестировал его на Fedora 44 Workstation, GNOME 50. Вроде работает. Публиковать его я не хочу, мне лень этим заниматься. Но если кто-то хочет потестить - оно валяется на github
Сказал Алисе выключить свет – пришлось бежать на улицу к щитку
Продолжаю делиться цифровыми находками для дома.
На вводе электропитания в дом у меня установлен умный автомат. Выглядит он как обычный модуль в электрощитке, только с небольшим цифровым экраном и возможностью управлять им удалённо.
После подключения система почему-то определила его как осветительный прибор. Я не придал этому особого значения. Устройство добавилось, сценарии выполняются, значит, всё работает. А когда сказал «Алиса, выключи свет», Алиса послушно выключила всё, что считала светом. И сама отключилась следом, словно диверсант.
Слева: как отображается в Алисе (спойлер: правильного выбора нет). Справа: как отображается в SmartLife (в результате там и делал основные настройки).
В итоге пришлось бежать за дом, открывать щиток и включать электричество обратно вручную. Так выяснилось, что при настройке умного дома мало проверить, видит ли система новое устройство, важно ещё посмотреть, чем именно она его считает.
У устройств есть разные типы: лампочка, выключатель, розетка, датчик и так далее. И от выбранного типа зависит, как Алиса будет реагировать на общие команды.
Если устройство обозначено как лампочка, оно может выключиться после фразы «выключи свет». Даже если на самом деле это автомат, который отвечает за электричество во всём доме.
Поэтому теперь после подключения нового устройства я проверяю:
– какой тип ему присвоила система; – в какую комнату оно добавлено; – реагирует ли оно на общие команды; – не попало ли случайно в ненужную группу или сценарий.
Особенно это важно, когда умный дом собран из нескольких экосистем. У меня примерно 80% устройств работают через Алису, но часть подключена через Smart Life и другие приложения. Всё потому что ещё нет устройств, которые бы работали напрямую в экосистеме умного дома Алисы.
В итоге при передаче устройств из одной системы в другую их типы и названия не всегда определяются так, как ожидаешь. Так что сначала рекомендую убедиться, что ваша лампочка действительно лампочка, а потом уже давать команды).
Больше интересных постов можно найти в моём телеграм-канале. Там я пишу про управление знаниями и делюсь разными ИИ-находками для дома и не только. Подписывайтесь, чтобы не пропустить новые тексты.
Дополнение к статье про "Самодельный Linux-планшет" и идея для DIY проектов
Когда я прочёл статью, то сразу вспомнил этого автора и его DIY проекты.
Пример проекта
По-моему, это настоящее искусство, не для ежедневного использования, но выглядит красиво. Отличная идея для конструктора :) У автора есть много разных гаджетов в похожем дизайне. Есть сайт со схемами, ссылками на детали и видео того как он это собирает.
Начал собирать настольную роболампу, вдохновившись лампой из заставки Pixar и мультфильмом про Luxo jr.
Хочется сделать не просто светильник, а небольшого настольного робота с выразительными движениями и собственным характером, возможно даже не самым лучшим :)
За эти движения отвечают приводы RobStride. Выбирал я их довольно долго: главная авантюрная цель проекта - научить лампу прыгать (и может быть раздавить букву I), поэтому моторы взял с большим запасом по моменту и скорости. На видео они работают примерно на 1/14 от своей максимальной скорости.
Я старался найти самые доступные и дешевые приводы, которые при этом справятся с предполагаемой нагрузкой. RobStride подошли лучше всего. Правда, пару моторов я уже успел сломать во время отладки: из-за ошибок в управлении лампа начинала конвульсивно биться об стол. К сожалению не сделал видео неудачных попыток, но грузом один раз оставило нормальную такую вмятину в стене - он оторвался от сустава во время самопроизвольного кручения))
Для управления я параллельно разрабатываю собственный редактор анимаций под эту лампу.
Его прототип уже работает: движения задаются на таймлайне через положение каждого привода (с установкой целевых Kd, Kp, угла и усилия), а затем воспроизводятся на лампе.
Дальше хочу добавить полноценную 3D-визуализацию, улучшить работу с ключевыми кадрами, прямую и обратную кинематику, интерполяцию и сборку отдельных движений в готовые сценарии.
Механику предстоит еще доработать, улучшить корпус и сделать движения более плавными и выразительными. Ну и разобраться с кабель-менеджментом — сейчас он выглядит так, будто его проектировал пьяный электрик за пять минут до сдачи объекта.
Пока вижу два основных направления развития:
Практичная подвижная лампа, которая следит за руками, направляет свет на рабочую область и может снимать процесс на камеру - например, при пайке, сборке электроники, рисовании или рукоделии.
Настольный аниматроник с камерой глубины, который замечает людей, реагирует на происходящее и выражает своё «настроение» движениями.
Как проект будет в состоянии "аль денте", планирую выложить все ПО и 3д модели для печати в открытый доступ.
Кому интересно - первые движения и технические детали также обсуждали на Reddit в сообществе r/robotics
А какую полезную функциональность вы бы добавили такой лампе?
Или ей достаточно просто быть живой, следить за происходящим и иногда устраивать танцы на столе? :)
Робот Физтеха попытается установить мировой рекорд по сборке мегаминкса
15 июля в Физтехе пройдет официальная попытка установить мировой рекорд по сборке головоломки мегаминкс роботом. Команда лаборатории интеллектуальных технологий робототехники МФТИ готовится к финальной стадии проекта, о котором я писал в начале весны.
Робот-солвер МФТИ для сборки мегаминкса
Инженеры физтеха сконструировали робота, способного собирать одну из самых сложных механических головоломок в мире. Пространство состояний додекаэдра под названием "мегаминкс" оценивается примерно в 10⁶⁸, что на порядки превышает сложность классического кубика Рубика. Проект прошел путь от инженерного прототипа до полноценной системы, объединяющей робототехнику и продвинутые алгоритмы поиска на графах состояний.
Что известно о рекорде
По данным разработчиков, текущая версия системы показывает результаты, которые:
в 68 раз превосходят предыдущий мировой результат среди роботов, который был установлен роботом Megaminxer Дэвида Гилдея 15 лет назад и составляет 8 минут 4 секунды;
примерно вдвое быстрее лучшего результата человека (текущий рекорд принадлежит спидкуберу из Китая Ziyu Wu и составляет 21.04 секунды).
За счет чего достигается скорость
Рекордные показатели планируется обеспечить не только быстрым манипулятором, но и глубокой алгоритмической работой:
Оптимизация планирования движений. Робот выполняет вращения независимых граней параллельно, что критично на коротких дистанциях.
Сокращение длины решения. Вокруг проекта сформировалось сообщество энтузиастов, которые через open-source проект CayleyPy и соревнования на Kaggle работают над поиском кратчайших путей в графах Кэли. Участники применяют Pattern Databases, алгоритм Корфа, Beam Search и другие методы. За последние недели среднюю длину решений на тестовых выборках удалось уменьшить на 15–20% до ~90 ходов. Лучшие решения сейчас дают порядка 70 ходов (правда считаются долго).
Место встречи
Установление рекорда запланировано на 15 июля, 17:30–21:30 в Физтех.Клубе МФТИ в Долгопрудном.
Кроме того, разработчики расскажут о своих инженерных решениях: кинематика, захват, конструкция манипулятора. А также раскроют алгоритмическую часть: как графы Кэли и методы поиска помогают роботу «думать».
Нашёл робопалец и теперь включаю рабочий компьютер удалённо
Делюсь находкой, которая закрыла мою маленькую, но довольно надоедливую проблему.
Иногда мне нужно подключаться к рабочему компьютеру удалённо. И всё бы хорошо, но дистанционный доступ бесполезен, если устройство выключено. Технология Wake-on-LAN (удалённое «пробуждение» по сети) тоже не спасает: после отключения электричества компьютер полностью обесточивается.
Раньше решение этой задачи превращалось в отдельный квест: попросить кого-то зайти в офис, объяснить, где стоит системник, какую именно кнопку нажать, дождаться неуверенного «вроде нажал». Но я нашёл вариант проще.
Есть маленький умный толкатель кнопок: пластиковый кубик примерно 4×4 см, внутри один рычажок, который ездит вверх-вниз и физически нажимает на то, к чему его приклеили. Ставишь такой кубик у кнопки питания и дальше включаешь компьютер голосом. Команда – и рычажок жмёт за тебя. Только важно не забыть про шлюз – небольшой хаб, который связывает кубик с интернетом. Настраивается быстро и один раз.
Подключать Алису не обязательно – можно управлять напрямую через приложение SmartLife. Но, если хочется поговорить, можно и управление голосом через Алису добавить :)
Что нравится: ничего не надо перенастраивать, вскрывать или паять. Просто приклеил, настроил и пользуешься. И главное – это универсальное решение для кнопок, которые иначе никак не автоматизировать. Рычажку всё равно, на что давить: старый выключатель, техника без Wi-Fi или любая другая кнопка, до которой неудобно добираться.
Если вам тоже регулярно приходится включать/выключать какие-то устройства, – скорее всего, вы можете отдать эту задачу рычажку. Так что забирайте идею – работает)
Больше интересных постов можно найти в моём телеграм-канале. Там я пишу про управление знаниями и делюсь разными ИИ-находками для дома и не только. Подписывайтесь, чтобы не пропустить новые тексты.
Как записывать "кружочки" в мессенджере "BITCORD".
Пишу крутой облачный мессенджер (мини-соцсеть) под пилотным названием BITCORD. Недавно для него реализовал новую функцию отправки видеосообщений в формате других популярых мессенджеров. Теперь любой пользователь может отправить своему собеседнику модное селфи без каких-либо специальных настроек. Это дополняет общение дополнительными крутыми фишками.
Чтобы отправить такое видео, достаточно открыть чат и выбрать в верхнем выпадающем меню пункт "Селфи видео". Далее откроется небольшое диалоговое окошко, где необходимо нажать и удерживать кнопку "Hold" - после этого начнется процесс записи видео с фронтальной камеры смартфона.
Длительность записи ограничена по времени, чтобы не перегружать смартфон ресурсоемким процессом. После истечения лимита или как только пользователь отпустит кнопку, видео отправится на бэкенд для дальнейшей обработки.
Особенности видеосообщений:
Лимит времени: Максимальная длительность одного ролика составляет 10 секунд.
Формат: Видео автоматически обрезается в форме круга и записывается на фронтальную камеру.
Воспроизведение: В чате такие ролики проигрываются один раз при нажатии "Play".
Способ 1
Бэкенд приводит видео к "квадратному" формату с соотношением сторон 1:1 и возвращает ссылку на него обратно в чат собеседникам.
Ниже пример выполнения преобразования видео в "квадратный" формат с помощью "ffmpeg":
Чтобы отобразить "квадратное" видео в виде круга на Java, я создаю шаблон (ViewOutlineProvider). Он принудительно задает графическому элементу (View) форму идеального круга фиксированного размера:
private static final ViewOutlineProvider CIRCLE_PROVIDER = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
int sizeInPx = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 270, view.getResources().getDisplayMetrics()
);
outline.setOval(0, 0, sizeInPx, sizeInPx);
}
};
Затем в холдере применяю описанный выше шаблон к TextureView и ImageView:
В результате выполнения этого кода видео примет "круглый" вид.
Способ 2
Как показала практика, кодирование видео в "квадратный" формат на бэкенде невыгодно, так как оно занимает время и нагружает сервер. Без хорошей видеокарты, которая на бэкенде часто отсутствует, работать с видео накладно. Поэтому я пошел другим путём.
Так как камера смартфона снимает видео не в "квадратном" формате, я воспользовался матрицей преобразования, центрировал кадр и обрезал лишние стороны.
//фиксированный размер видео с камеры смартфона: 480x640
float scaleY = h / (w * 480 / 640);
Matrix matrix = new Matrix();
matrix.setScale(1.0f, scaleY, w / 2f, h / 2f);
CircleVideoViewHolder vch = (CircleVideoViewHolder) holder;
vch.texture.setTransform(matrix);
При таком подходе вся работа выполняется на стороне графического процессора (GPU) самого смартфона с максимальной скоростью. Это полностью избавляет от необходимости обрабатывать видео на бэкенде.
В результате получилась вот такая красота:
селфи видео в круглом формате
Итог:
Перенос графических вычислений на сторону клиента (в данном случае на GPU смартфона) позволил решить сразу две важные задачи. Во-первых, это полностью разгружает бэкенд-сервер от тяжелых операций перекодирования видео. Во-вторых, обеспечивает пользователя мгновенным откликом интерфейса и быстроту отправки сообщения, так как обработка кадра происходит "на лету" прямо во время записи.
Спасибо за вашу поддержку. Это придает стимул писать дальше.
Очень пятничное изобретение: оказывается, если отрезать у двух аквафоровских картриджей типа А5 верх и низ, то из-за рёбер жёсткости они вместе образуют офигенный корпус, легко продуваемый насквозь небольшим кулером (и даже есть к чему его внутри прикрутить, потому что есть промежуточная решётка). Единственный недостаток — вср экзотическая форма.
Рёбра тут не только рёбра, но и хитрая штука, позволяющая небольшим поворотом расклинить одну половинку в другой так, что держит ничуть не хуже резьбы.
…только кринжового жеста «большой палец вверх» в конце не хватает…
Вставляем так, чтобы рёбра были подальше друг от друга, потом поворачиваем так, чтобы стали поближе друг к другу — всё, корпус собран. Кажется, чипудипу пора мутить бизнес по переработке \s
Инженер‑энтузиаст создал лазерную ИИ‑установку для борьбы с комарами Система с помощью компьютерного зрения вычисляет насекомых и бьёт по ним с помощью мини‑«Гатлинга», не задевая людей и предметы. Камеры фиксируют движения комара, алгоритмы мгновенно распознают его по характерному силуэту и повадкам, а дальше уже дело за лазером. Система снабжена мерами безопасности — если в поле зрения попадает человек или горючие материалы, лазер блокируется. Недавно автор изобретения, Стивен Ченг, усовершенствовал устройство, добавив ему инфракрасное зрение и колёсную платформу для перемещения. Теперь антимоскитный «Гатлинг» способен работать в темноте и даже на открытом воздухе.
Поставлю на автопубликацию на пятницу, для любителей всякого ретро-железа.
Интересно, если DVI-D видеокарта получит по EDID информацию о том, что монитор имеет разрешение 3200×600×75Hz (и если мы её туда вообще сумеем запихать), каковы шансы, что она это нормально переварит? В сумме частоты вроде должны в Dual-link укладываться, по горизонтали перебор, но по вертикали запас сильно больше…
Просто есть идея (как всегда, просто идея, без шансов на реализацию мной) — эдакий полу-пассивный переходник с DVI-D на четыре ретро-монитора VGA 800×600. Запоминает одну строчку (много памяти это не требует) и раздаёт её части всей четвёрке одновременно. Смыть, повторить.
Прошлую суперпятницу я профилонил и ничего не набредил, попробую сейчас подкинуть темку: делает ли кто-то ещё контроллеры на ядре 80188? Взять этот вот концепт и довести до полной упоротости, угарности, а если прямо вот по-взрослому повезёт, то и до трудноуловимой «балдёжности»: 80188, «640 Кб хватит любому» (для ридера .TXT и .FB2 уж небось хватит!), ну и как-нибудь реализовать (может, даже софтово а-ля «Поиск») там крайне близкий идеологически к e-ink видеоадаптер, а именно — «Геркулес».
Да, это уже будет не гаджет для ретрогейминга. Золотой век — это VGA и DOS4GW, как минимум 80486 и хотя бы метра четыре памяти. Это будет почти чисто книжка (да и та довольно минималистичная, хотя, честно говоря, ни разу не видел, чтобы кто-то пользовался всерьёз на книжке чем-то сверх ридера .TXT и .FB2), но с небольшими опциями «ненормального ретро-программирования», ну, и запуска особо археологического софта, понимающего этого кота-геркула.
Да, это всё можно заэмулировать на микроконтроллере от вейпа. Но эмуляция… «балдёжности» в ней нет :( С Геркулом ещё можно смириться — «Поиск» является оправдывающим прецедентом, а вот ядро… ядро должно быть настоящее. Иначе исчезает красота. А ведь все подобные девайсы — это, по сути, явление более художественное, нежели прикладное…