- PVSM.RU - https://www.pvsm.ru -
Привет. Я Александр Бурага, разработчик из команды роботов и беспилотных автомобилей Яндекса. Но сегодня речь пойдёт не о них, а о моём личном проекте, над которым тружусь дома.
Сложно найти радиолюбителя, который не занимался бы монтажом печатных плат. Ещё сложнее — того, кто задумывается об удобном хранении деталей прежде, чем поиск чего-то нужного среди запасов превращается в сущий кошмар. Инструменты для ведения проектов, написания кода и контроля версий в последние десятилетия развиваются очень быстро. ПО, упрощающее монтаж, тоже обновляется, хотя и не так стремительно. А вот системы хранения электронных компонентов практически не изменились с 90-х: помните кассетницы из спичечных коробков?
Мне часто случается вооружаться паяльником — например, дорабатывать или монтировать отдельные радиоэлектронные блоки — с проблемой бессистемного хранения столкнулся и я. Под катом вас ждёт рассказ о том, как я пытаюсь решить её с помощью «умного» органайзера, который понимает речь и запоминает своё содержимое.
Чем сложнее радиоэлектронные блоки, тем больше компонентов требуется для их сборки. Уменьшить хаос в размещении деталей на рабочем месте помогает использование органайзеров с подписанными ячейками. Однако поиск необходимого компонента по наименованию или параметрам среди сотен похожих требует времени, а десятки секунд или минут, посвящённые этому неблагодарному занятию, складываются в часы впустую потраченного времени. Не меньше усилий придётся потратить на составление и актуализацию базы данных: какие компоненты были использованы, сколько осталось, что закончилось. Скрупулёзно вести такой учёт, чтобы описание запасов соответствовало их реальному состоянию, довольно тяжело и безрадостно.
Поиск по «складским остаткам» — зло неизбежное, но не единственное. Тем, кто проводил за монтажным столом несколько часов подряд, наверняка знакомо желание обзавестись дополнительной парой рук. Одновременно оперировать всеми необходимыми инструментами, такими как паяльник или термофен, пинцеты разного калибра, увеличительное стекло или USB-микроскоп для оптической инспекции — невозможно. А ещё надо как-то переворачивать страницы конструкторской документации (сборочного чертежа и перечня устанавливаемых на печатную плату компонентов), либо переключать режимы работы программного обеспечения, помогающего в пайке.
Использование педалей для поиска компонентов — идея безусловно новаторская, но на практике сложно реализуемая. Нейроинтерфейсы для «чтения мыслей» — штука диковинная, капризная и медленная. Остаются голосовые команды: освобождают руки, уменьшают шансы опечататься, редактировать перечень оставшихся деталей можно не отрываясь от пайки. Да и испустив крик отчаянья при поиске очередной детали, приятно услышать в ответ не звенящую тишину, а где найти искомое. А если добавить подсветку…
Удивительно, но проекты «умных» органайзеров с голосовым интерфейсом можно пересчитать по пальцам. Между «продвинутыми» кассетницами из спичечных коробков, которые известны радиолюбителям прошлого века, и современными системами оперативного хранения — пропасть. Профессиональное оборудование умеет многое, но вряд ли подойдёт радиолюбителю: настолько же дорогое, насколько технологичное.
Доступные решения существуют, но не лишены недостатков. Делюсь наиболее интересными:
Плюсы
Можно вести учёт компонентов путем создания и редактирования списков доступных позиций, а также оперативно оценивать количество оставшихся деталей. Предусмотрено голосовое управление, есть подсветка. Хранилище компактно — оно не займёт много места на рабочем столе и при необходимости его можно легко переместить.
Минусы
Проект не собрал необходимой для производства суммы, последние пару лет не обновляется.
Плюсы
Помогает вести учёт компонентов. Управляется голосом. Искомые детали подсвечиваются светодиодными лентами на WS2812B.
Минусы
Хранилище громоздкое: для долговременного хранения это не проблема, но для сортировки компонентов, нужных в работе, может быть неудобным. Система не модульная масштабировать её под свои нужды будет сложно.
Плюсы
Удобная система учёта компонентов: картотека с возможностью добавлять фотографии. Умеет подсвечивать несколько ячеек одновременно теми же светодиодными лентами на WS2812B.
Минусы
В текущей версии управление голосом не реализовано. Также больше подходит для долговременного хранения и плохо масштабируется.
Думаю, вы обратили внимание: ни одно из этих решений не защищено от неправильной установки лотков в органайзеры, а сами ячейки понятия не имеют о своём содержимом. А зря.
Отказываться от проверенной временем механический конструкции я не стал. Модульные органайзеры в виде каркаса с извлекаемыми лотками-ячейками — недорогие и практичные. Управляемая подсветка, индицирующая результаты поиска — удобная. Если добавить в каждый лоток ассоциативную память, которая будет хранить описание содержимого, текущее количество компонентов и прочую необходимую для работы информацию — осуществление учёта станет намного проще. Для создания базы данных всех компонентов с нуля (например, на устройстве, где никакой информации о компонентах вашего хранилища нет), достаточно опросить все доступные лотки. Чтобы обновить базу — действовать аналогично.
Доступные на рынке кассетницы для радиоэлектронных компонентов
В рамках первых тестов я всё-таки решил применить прогрессивный подход NoSQL. В моей реализации его следует понимать буквально: не «Not only SQL», а «совсем никакого SQL». Информация обо всех радиоэлектронных компонентах, счастливым владельцем которых я являюсь, хранилась в виде старых добрых электронных таблиц — это исторически сложившийся подход. Но кроме базы данных во время монтажа радиоэлектронного блока нужен BOM (перечень используемых в проекте элементов). Почти все современные САПР для разработки печатных плат «из коробки» позволяют сформировать перечень в удобном формате .csv.
В качестве уникального ключа в системах хранения радиодеталей обычно используется его номенклатурный номер (PartNo). Чаще всего это набор букв и цифр, который сложно запомнить и воспроизвести, поэтому в базе данных лучше дополнительно хранить развернутое описание. Удобный вариант — текст с основными параметрами компонента: например, типоразмер, сопротивление и точность, если это резистор.
Лотки с памятью должны быть взаимозаменяемы, т.е. их перестановка внутри органайзера не нарушит целостность базы данных. Переселение лотка между органайзерами (например, из «склада долговременного хранения» в «оперативное хранилище» компонентов для работы здесь и сейчас) тоже не должно ничего ломать. Для этого управляющей системе необходимо отслеживать извлечение или установку лотков: проверять фактическое наличие лотков в органайзере.
Чтобы реализовать голосовой интерфейс, я принял решение использовать команды с жёстко заданным форматом. Минимальная функциональность управления может быть организована при помощи следующего набора:
К сожалению, приведенная выше система команд не лишена минусов. Например, команду вида Где R1 (по которой компонент ищется в органайзере) быстрее произнести, чем набрать текстом, а вот выговорить Добавить в ячейку X1A2 10 штук RC0603FR-7W100RL — резистор на 100 Ом типоразмер 0603 точность 1 процент, мощность 0,2 Вт получится существенно медленнее, чем скопировать описание элемента из электронного каталога, отыскав его по номенклатурному номеру или считав штрих/QR-код с упаковки.
Кроме того, использование набора команд с жестким форматом — вариант далеко не лучший на практике. Редко используемые команды легко забыть, а перебор синонимов будет отнимать время и огорчать репликами голосового ассистента, извещающего вас о том, что команда не распознана.
Аппаратные блоки, использующиеся в реализации органайзера:
1 — ячейка памяти (memcell),
2 — кросс-плата (backplane) для коммутации электрических сигналов,
3 — контроллер органайзера (orgController), реализующий определение наличия ячеек, управление индикацией, взаимодействие с памятью и вышестоящими сервисами
Аппаратное хранилище состоит из следующих модулей:
1. «Ячейка памяти» — оконечное устройство с I2C памятью M24512-RMN6TP и светодиодными индикаторами. Главный «кубик», на основе которого строится органайзер. Электрическое сопряжение производится при помощи пары разъёмов PLD/PBD с шагом 2,54 мм.
Два светодиода (зеленый и красный) обеспечивают бинарную индикацию запросов в рамках используемой системы команд. Например, при поиске по содержимому те лотки, в которых находится искомый элемент, подсветятся зелёным, а где его нет — красным. Даже если один из светодиодов перегорит, вы сможете однозначно выбрать нужную ячейку.
Печатная плата ячейки памяти фиксируется в лотке термоклеем. Для корректного механического сопряжения с кассетницей разъём должен выходить за пределы лотка: пришлось выфрезерововать окно соответствующего размера.
Внешний вид аппаратных блоков органайзера
2. «Кросс-плата» — элемент, который электрически коммутирует линии питания, управления светодиодной индикацией, линию определения наличия лотка и I2C-интерфейс с контроллером органайзера. С помощью кросс-плат также реализуется адресация микросхем памяти. На тыльной стороне кассетницы кросс-платы зафиксированы винтовым соединением.
Адресация кросс-платы — единственная жёсткая точка привязки устройства к положению. В настоящее время хранилище предполагает матричную адресацию каждого лотка, т. е. «адрес» лотка задаётся пересечением колонки (кодируемой буквой латинского алфавита, т. е. A, B, C, D, ...) и строки (кодируемой цифрой 1, 2, 3, 4, ...). Цифро-буквенное значение однозначно определяет положение ячейки памяти и лотка в массиве. Но поскольку память у каждого лотка своя, в виде ответа на запрос хранилище подсветит именно тот, который вы искали, даже если ранее вы поменяли его местами с соседним.
Схема адресации ячеек памяти в кросс-плате
3. «Контроллер органайзера». Отслеживает извлечение или добавление лотков в кассетницу, реализует управление индикацией, а также обеспечивает информационный обмен с облачными средствами через Wi-Fi-модуль WROOM по протоколу MQTT. Кросс-платы сопряжены с контроллером проводами МГТФ, обжатыми под штыревые разъемы.
Готовый «умный» органайзер
К сожалению, качество изготовления бюджетных кассетниц для радиолюбительских мелочей далеко от прецизионного, и это не позволило добиться полной взаимозаменяемости лотков. Однако некоторые из них всё-таки можно перемещать без дополнительных усилий. Возможно, технически было бы дешевле заказать уже спаянную версию, но вопрос оптимизации по цене не стоял, да и сам процесс мне нравится.
Готовое устройство питается от лабораторного источника при напряжении 12 В. Среднее потребление по току всей установки при включенной индикации не превышало 0,4 А.
После подготовки аппаратного обеспечения, возникает следующая цепочка задач: передать голосовой запрос с пользовательского устройства (смартфон, планшет или органайзер), распознать его (STT — Speach-to-text), проверить на соответствие необходимому шаблону, распарсить поля запроса, передать управляющие команды на оконечные устройства (действия с ячейками памяти), оповестить о результате запроса светодиодами и голосовым сообщением.
Проброс голосовой команды до оконечных устройств я реализовал с помощью сервисов Yandex.Cloud. Можно было использовать любой другой SDK для распознавания речи, но Yandex.Cloud уже содержит все необходимые компоненты, поэтому создавать велосипед я не стал.
Схема информационного обмена выглядит так:
Схема информационного обмена, применяемая в работе с органайзером
Data Gatherer фильтрует STT-сообщения, проверяет, соответствуют ли голосовые команды формату, рефакторит запросы и ищет необходимые компоненты в локальной базе данных, формирует управляющие команды для индикации или модификации.
Пока рефакторинг самый простой: удаление лишних пробелов и знаков препинания. В планах использовать что-то более интеллектуальное, чтобы исправлять частые ошибки распознавания: например, заменять компенсатор на конденсатор, с помощью встраиваемого словаря сложных слов.
В настоящее время DG выполняется с ноутбука, но можно запускать его из облака или на любом выделенном сервисе.
В качестве основного протокола информационного обмена я выбрал MQTT, который часто используется для управления «умными» устройствами. Он не заточен для управления базами данных, но настолько простой, гибкий и удобный, что доработка его под нужный функционал не представляет особых сложностей. Протокол реализует концепцию «публикация/подписка» (pub/sub), поддерживает передачу сообщений в текстовом и бинарном виде, а также имеет удобную и расширяемую систему адресации при помощи механизма топиков.
Функционал MQTT-брокера реализован с помощью Yandex IoT Core. Для корректной работы информацию (ключи шифрования или пароли для аутентификации) о каждом устройстве необходимо добавить через web-консоль или CLI-утилиту.
Стоит отметить использование концепций «реестра» и «устройства» в реализации MQTT в IoT Сore, для организации сети (с одним реестром могут быть связаны несколько устройств) передачи одиночных и широковещательных сообщений при использовании топиков вида '$devices/<ID устройства>/config' (для отправки данных одному устройству), '$registries/<ID реестра>/events' (отправка данных устройством в топик реестра), '$registries/<ID реестра>/config' (широковещательная отправка данных всем устройствам, подписанным на топик реестра).
Для установки/получения параметров или идентификации событий, которые связаны с составными частями устройства (в нашем случае — лотками), удобно использовать сабтопики (в виде расширения исходного топика путем добавления дополнительной информации от него через слэш справа). Например, содержимое конкретного лотка может быть прописано при использовании сабтопика вида '$devices/<ID устройства>/config/<Cell name>/Descr'. Или уведомлять соответствующий реестр о добавлении/извлечении лотка из органайзера при использовании сабтопика вида '$registries/<ID реестра>/events/<Cell name>/Feedback'.
В целях безопасности авторизация устройств должна выполняться при помощи использования сертификатов x509 или пароля. Есть возможность создать бинд для имени устройства, чтобы сменить имя вида «are9f7p0igla52rp88k7» на что-то более читабельное.
Для взаимодействия с брокером MQTT с помощью скриптов Python использовалась библиотека PAHO MQTT. Она позволяет авторизироваться, если для подключения к брокеру задан пароль. Wi-Fi-адаптер на базе ESP8266 реализует MQTT-клиент при помощи библиотеки MQTT client от Adafruit.
При реализации голосового интерфейса через навыки Алисы стоит учитывать следующие нюансы:
Помимо функций передачи сообщений и взаимодействия с импровизированной базой данных компонентов, скрипт управления обеспечивает парсинг и простейшую фильтрацию STT-запроса, а также проверку соответствия формата запроса требуемому синтаксису. В частности, STT-запрос разбивается по кодовым словам (таким как „на“, „напряжение“, „диэлектрик“). В полях, отвечающих за наименования компонента, русскоязычные сочетания, обозначающие буквы, заменяются на англоязычные (например, джей = J, кей = K, кью = Q).
Ещё одна неочевидная проблема, которую решает скрипт — восприятие цифровых обозначений и перевод их в числа. Система распознавания не понимает контекст произнесенного, и число 125 (сто двадцать пять) иногда может распознаваться как 100, 20, 5 — в виде отдельных чисел вместо одного многоразрядного. Дробные числа (например, 55,89 в форме пятьдесят пять и восемьдесят девять распознаются отдельными числами.
В случае несоответствия голосовой команды заданному формату голосовой ассистент даст отклик Неверный формат запроса.
Мне удалось реализовать голосовой интерфейс, чтобы искать нужные компоненты без помощи рук. Использовать его можно на любом устройстве с Алисой (смартфон, планшет, ноутбук, стационарный компьютер, умная колонка).
Реализация поиска компонентов по описанию на практике не впечатлила. Время, которое тратится на произнесение голосовой команды Найти конденсатор 0603 на 4.7 микрофарад напряжение 50В диэлектрик X7R соизмеримо с набором той же фразы текстом.
А вот скорости работы системы с оповещением в режиме Где X хватает для удобной работы — задержки системы не раздражают. Искать компоненты, когда ячейки, в которых они располагаются, подсвечиваются — быстрее, чем текстом.
Кстати, недавно для Я.Железа [4] я показал функциональность органайзера в прямом эфире [5].
Чтобы приблизить DIY-поделку к устройству, полезному в быту, планирую некоторые доработки:
Блок-схема органайзера версии 2.0, компенсирующего основные аппаратные недоработки
Эксперимент с использованием голосового ассистента для поиска радиоэлектронных компонентов буду считать удачным. С базовым функционалом (поиском компонентов по позиционным обозначениям или кодовым словам в описании) система выполняет, индикация работает, наличие ячеек в кассетнице проверяет.
Чтобы сделать органайзер ещё удобнее, предстоит существенно доработать все его подсистемы: усовершенствовать систему голосовых команд, голосовой интерфейс поиска дополнить графическим, улучшить аппаратное обеспечение и упорно тестировать получившуюся систему на практических задачах.
Спасибо, что дочитали до конца. С удовольствием отвечу на все вопросы в комментариях. Или в чате нашего сообщества в телеграме [6], где мы обсуждаем подобные проекты.
Автор: Александр Бурага
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/yandeks/360852
Ссылки в тексте:
[1] Chipseasy: https://www.kickstarter.com/projects/3dfacture/chipseasy-smart-electronic-component-organizer/description
[2] FindyBot3000: https://www.instructables.com/FindyBot3000-a-Voice-Controlled-Organizer/
[3] Component database with LED indicators: https://www.stupid-projects.com/component-database-with-led-indicators/
[4] Я.Железа: https://t.me/yahardware
[5] в прямом эфире: https://www.youtube.com/watch?v=Rw387fFkJYM&list=PLQC2_0cDcSKAq6wgyiAo3-r0h8L1QqAl2&index=5&t=582
[6] в телеграме: https://t.me/yahardwarechat
[7] Источник: https://habr.com/ru/post/538078/?utm_source=habrahabr&utm_medium=rss&utm_campaign=538078
Нажмите здесь для печати.