Привет. Я Александр Бурага, разработчик команды Яндекса по робототехнике и беспилотным автомобилям.
Но сегодня мы поговорим не о них, а о моем личном проекте, над которым я работаю дома.
Трудно найти радиолюбителя, который не занимается монтажом печатных плат. Еще сложнее приходится тем, кто задумывается об удобном хранении деталей, прежде чем найти среди расходных материалов то, что нужно, превращается в кошмар.
Инструменты для управления проектами, кодирования и контроля версий развивались очень быстро за последние десятилетия.
Программное обеспечение, упрощающее установку, тоже обновляется, хотя и не так быстро.
А вот системы хранения электронных компонентов практически не изменились с 90-х годов: помните кассетные коробки, сделанные из спичечных коробков?
Мне часто приходится вооружаться паяльником - например, чтобы доработать или смонтировать отдельные радиоэлектронные блоки - но я столкнулся и с проблемой бессистемного хранения.
Ниже под катом вы найдете рассказ о том, как я пытаюсь решить ее с помощью «умного» органайзера, понимающего речь и запоминающего ее содержание.
Что мне не понравилось в существующих решениях
Чем сложнее радиоэлектронные блоки, тем больше компонентов требуется для их сборки.Использование органайзеров с маркированными ячейками помогает уменьшить хаос при размещении деталей на рабочем месте.
Однако поиск нужного компонента по названию или параметрам среди сотен похожих требует времени, а десятки секунд или минут, посвященные этому неблагодарному делу, складываются в часы потерянного времени.
Не меньше усилий придется потратить на составление и обновление базы данных: какие компоненты были использованы, сколько осталось, что доделано.
Скрупулезно вести такой учет, чтобы описание запасов соответствовало их реальному состоянию, достаточно сложно и безнадежно.
Поиск по «складским остаткам» — неизбежное зло, но не единственное.
Любой, кто часами проводил за монтажным столом, вероятно, знаком с желанием иметь дополнительную пару рук.
Невозможно одновременно работать всеми необходимыми инструментами, такими как паяльник или термофен, пинцеты разного калибра, лупа или USB-микроскоп для оптического контроля.
Также нужно как-то перелистывать страницы конструкторской документации (сборочный чертеж и перечень компонентов, установленных на печатной плате), или переключать режимы работы программного обеспечения, помогающего при пайке.
Использование педалей для поиска компонентов, безусловно, новаторская идея, но ее сложно реализовать на практике.
Нейронные интерфейсы для «чтения мыслей» странные, капризные и медленные.
Остаются только голосовые команды: они освобождают руки, снижают вероятность опечатки, а список оставшихся деталей можно редактировать, не отрываясь от пайки.
И издав крик отчаяния при поиске очередной детали, приятно услышать в ответ не звенящую тишину, а где найти то, что ищешь.
А если добавить освещение.
Удивительно, но проекты «умных» органайзеров с голосовым интерфейсом можно пересчитать по пальцам.
Между «продвинутыми» кассетниками из спичечных коробков, известными радиолюбителям прошлого века, и современными оперативными системами хранения данных существует пропасть.
Профессиональное оборудование может многое, но вряд ли подойдет радиолюбителю: оно настолько же дорого, насколько и технологично.
Доступные решения существуют, но они не лишены недостатков.
Делюсь самым интересным:
- Чипсизи — проект на Кикстартере.
Склад состоит из нескольких поддонов, каждый из которых разделен на прямоугольные ячейки.
«Умное» хранение компонентов реализовано за счет матричной адресации ячеек.
плюсы Вы можете отслеживать компоненты, создавая и редактируя списки доступных элементов, а также быстро оценивать количество оставшихся деталей.
Предусмотрено голосовое управление и есть подсветка.
Хранилище компактное – не занимает много места на рабочем столе и при необходимости его можно легко переместить.
Минусы Проект не собрал необходимую для производства сумму и не обновлялся последние пару лет.
- FindyBot3000 - репозиторий от радиолюбителей.
Упрощает поиск запчастей в оптовых складах.
Использует сервис Google Assistant и калькулятор Particle Photon для взаимодействия с облаком.
плюсы Помогает отслеживать компоненты.
Голосовое управление.
Детали, которые вы ищете, подсвечиваются светодиодными лентами на WS2812B. Минусы Хранилище громоздкое: для длительного хранения это не проблема, но для сортировки необходимых для работы компонентов может быть неудобно.
Система не является модульной; масштабировать его в соответствии с вашими потребностями будет сложно.
- База данных компонентов со светодиодными индикаторами взаимодействует с базой данных, расположенной в облаке, с помощью SQL-запросов через Raspberry Pi и трансивер на базе ESP8266. Взаимодействие с внешними устройствами осуществляется с помощью библиотеки aREST и запросов MySQL. плюсы
Удобная система учета компонентов: картотека с возможностью добавления фотографий.
Может освещать несколько ячеек одновременно с помощью одних и тех же светодиодных лент на WS2812B. Минусы Текущая версия не поддерживает голосовое управление.
Также больше подходит для длительного хранения и плохо масштабируется.
Но тщетно.
Что бы вы хотели улучшить?
Я не отказался от проверенной временем механической конструкции.Модульные органайзеры в виде каркаса со съемными лотками и ячейками недороги и практичны.
Управляемая подсветка, указывающая результаты поиска, удобна.
Если в каждый лоток добавить ассоциативную память, в которой будет храниться описание содержимого, текущее количество комплектующих и другая необходимая для работы информация, учет станет намного проще.
Чтобы создать базу данных всех компонентов с нуля (например, на устройстве, где нет информации о компонентах вашего хранилища), достаточно опросить все доступные лотки.
Чтобы обновить базу данных, действуйте таким же образом.
Кассеты, доступные на рынке электронных компонентов
В рамках первых тестов я всё же решил использовать прогрессивный NoSQL-подход. В моей реализации это следует понимать буквально: не «Не только SQL», а «вообще никакого SQL».
Информация обо всех электронных компонентах, счастливым обладателем которых я являюсь, хранилась в виде старых добрых таблиц — это исторический подход. Но помимо базы данных при монтаже радиоэлектронного блока необходима спецификация (перечень элементов, используемых в проекте).
Практически все современные САПР для проектирования печатных плат «из коробки» позволяют создать список в удобном формате .
csv. В качестве уникального ключа в системах хранения радиодеталей обычно используется его артикул (PartNo).
Чаще всего это набор букв и цифр, который сложно запомнить и воспроизвести, поэтому лучше дополнительно хранить подробное описание в базе данных.
Удобный вариант — текст с основными параметрами компонента: например, размером, сопротивлением и точностью, если это резистор.
Лотки памяти должны быть взаимозаменяемыми, т.е.
их перестановка внутри органайзера не нарушит целостность базы данных.
Перемещение лотка между органайзерами (например, со «склада длительного хранения» на «оперативный склад» комплектующих для работы здесь и сейчас) также не должно ничего сломать.
Для этого системе контроля необходимо следить за снятием или установкой лотков: проверять фактическое наличие лотков в органайзере.
Для реализации голосового интерфейса я решил использовать команды строго определенного формата.
Минимальный функционал управления можно организовать с помощью следующего набора:
- Находить — найти компонент по его описанию.
Например, Найти конденсатор 0603 на напряжение 10 мкФ напряжением 50 В диэлектрик X7R .
- Клетка — выделить лоток по его индексу.
Например, Ячейка X1A1 , где Х — значение кода органайзера, — индекс ячейки на пересечении ее в столбце и столбце.
- Где — подсветить лоток согласно его позиционному обозначению на печатной плате.
Например, Где находится С1 .
- Содержание — перечислить содержимое лотка по его индексу с помощью звука.
Например, Содержание X1A1 .
- Разместить/взять/добавить/очистить — редактировать информацию о количестве компонентов в трее по его индексу: установить, уменьшить, увеличить или очистить.
Например, Очистить X1A1 .
- Бесплатное место — индикация лотков, не занятых в данный момент радиоэлектронными компонентами.
Например, команда типа Где находится Р1 (по которому ищется компонент в органайзере) быстрее произнести, чем набрать, но произнести Добавьте в ячейку X1A2 10 штук RC0603FR-7W100RL — резистор 100 Ом типоразмера 0603, точность 1 процент, мощность 0,2 Вт. Это будет гораздо медленнее, чем скопировать описание товара из электронного каталога, найти его по номеру товара или считать штрих/QR-код с упаковки.
Кроме того, использование набора команд жесткого формата — далеко не лучший вариант на практике.
Редко используемые команды легко забыть, а поиск синонимов отнимет время и расстроит вас замечаниями голосового помощника, уведомляющими о том, что команда не распознана.
Как это реализовано
Аппаратные блоки, использованные при реализации органайзера: 1 – ячейка памяти (мемселл), 2 – объединительная плата коммутации электрических сигналов, 3 - контроллер-органайзер (orgController), реализующий определение наличия ячеек, управление отображением, взаимодействие с памятью и сервисами более высокого уровня.
1) Механика и электроника
Аппаратное хранилище состоит из следующих модулей: 1. «Ячейка памяти» — терминальное устройство с памятью I2C M24512-RMN6TP и светодиодными индикаторами.Основной «куб», на основе которого построен органайзер.
Электрическое подключение осуществляется с помощью пары разъемов PLD/PBD с шагом 2,54 мм.
Два светодиода (зеленый и красный) обеспечивают двоичную индикацию запросов в используемой системе команд. Например, при поиске по содержимому те лотки, которые содержат нужный элемент, будут выделены зеленым цветом, а те, которые его не содержат, — красным.
Даже если один из светодиодов перегорит, вы сможете четко выбрать нужную ячейку.
Печатная плата ячейки памяти фиксируется в лотке горячим клеем.
Для правильного механического сопряжения с кассетным плеером разъем должен выходить за пределы лотка: пришлось фрезеровать окно подходящего размера.
Внешний вид аппаратных блоков органайзера 2. «Щит» — элемент, электрически соединяющий линии питания, линии управления светодиодной индикацией, линию определения наличия лотка и интерфейс I2C с контроллером органайзера.
С помощью объединительных плат также реализована адресация микросхем памяти.
На задней стороне кассетного бокса объединительные платы закреплены винтовыми соединениями.
Адресация объединительной платы — единственный сложный момент привязки устройства к позиции.
В настоящее время хранение предполагает матричную адресацию каждого лотка, т.е.
«адрес» лотка задается пересечением столбца (кодируемого буквой латинского алфавита, т.е.
A, B, C, D,.
) и ряд (кодируется номером 1, 2, 3, 4, .
).
Буквенно-цифровое значение однозначно определяет положение ячейки памяти и лотка в массиве.
Но так как каждый лоток имеет свою память, то в виде ответа на запрос хранилище подсветит именно то, которое вы искали, даже если вы предварительно поменяли его местами с соседним.
Схема адресации ячеек памяти на объединительной плате 3. «Контроллер органайзера» .
Контролирует удаление или добавление лотков в кассету, реализует управление дисплеем, а также обеспечивает обмен информацией с облачными инструментами через модуль WROOM Wi-Fi по протоколу MQTT. Объединительные платы подключаются к контроллеру с помощью проводов МГТФ, обжатых в штыревые разъемы.
Готовый «умный» органайзер
К сожалению, качество изготовления бюджетных кассетных коробок для радиолюбительской техники далеко от точности, и это не позволяло обеспечить полную взаимозаменяемость лотков.
Однако некоторые из них все же можно переместить без дополнительных усилий.
Возможно, технически дешевле было бы заказать уже запаянный вариант, но об оптимизации затрат речи не шло, да и сам процесс мне нравится.
Готовое устройство питается от лабораторного источника напряжением 12 В.
Средний ток потребления всей установки при включенной индикации не превышал 0,4 А.
2) Обмен информацией
После подготовки оборудования возникает следующая цепочка задач: передать голосовой запрос с пользовательского устройства (смартфона, планшета или органайзера), распознать его (STT — Speach-to-text), проверить соответствие необходимому шаблону, проанализировать поля запроса, отправлять команды управления терминальным устройствам (действия с ячейками памяти), оповещать результат запроса светодиодами и голосовым сообщением.Я реализовал переадресацию голосовых команд на конечные устройства с помощью сервисов Яндекс.
Облака.
Для распознавания речи можно было использовать любой другой SDK, но Яндекс.
Облако уже содержит все необходимые компоненты, поэтому велосипед я не стал создавать.
Схема обмена информацией выглядит следующим образом:
Схема обмена информацией, используемая при работе с органайзером
- Фронтенд голосового интерфейса разработан на основе навыков голосового помощника Яндекса — Алисы.
Можно было бы использовать альтернативные решения или автономные библиотеки для распознавания голоса, но связь «навыков» с бэкендом в виде Cloud Functions осуществлялась на удивление просто — выбором функции, соответствующей навыку.
Используя бессерверный подход вместо более привычных веб-подходов, я сэкономил много времени на настройке и администрировании.
- Data Gatherer — Python-скрипт, управляющий обменом информацией между голосовым интерфейсом и конечными устройствами: он знает состав всей базы данных компонентов и карты сети, а также имеет все необходимое (адреса, пароли/корневые сертификаты) для передачи и получения органайзера.
данные по протоколу MQTT. Data Gatherer фильтрует сообщения STT, проверяет соответствие голосовых команд формату, рефакторит запросы и ищет необходимые компоненты в локальной базе данных, формирует команды управления для индикации или модификации.
На данный момент рефакторинг самый простой: удаление лишних пробелов и знаков препинания.
Для исправления распространённых ошибок распознавания планируется использовать что-то более умное: например, заменить компенсатор на конденсатор, использовать встроенный словарь сложных слов.
В настоящее время DG запускается с ноутбука, но вы можете запустить его из облака или любого выделенного сервиса.
- Органайзеры — электронные устройства, имеющие доступ к MQTT-брокеру — отображают результат запроса с помощью светодиодной индикации.
Также они хранят информацию о своем содержимом: текстовые описания компонентов и данные об их количестве.
Он не предназначен для управления базами данных, но настолько прост, гибок и удобен, что доработка его под необходимый функционал не представляет особых сложностей.
Протокол реализует концепцию «pub/sub», поддерживает передачу сообщений в текстовом и бинарном виде, а также имеет удобную и расширяемую систему адресации с использованием тематического механизма.
Функционал MQTT-брокера реализован с помощью Yandex IoT Core. Для корректной работы информация (ключи шифрования или пароли для аутентификации) о каждом устройстве должна быть добавлена через веб-консоль или утилиту CLI. Стоит отметить использование понятий «реестр» и «устройство» при реализации MQTT в IoT Core, для организации сети (несколько устройств могут быть связаны с одним реестром) для передачи одиночных и широковещательных сообщений при использовании тем форма '$устройства/ /конфигурация' (для отправки данных на одно устройство), '$реестр/ /события' (отправка данных устройством в тему реестра), '$реестр/ /конфигурация' (широковещательная отправка данных на все устройства, подписанные на тему реестра).
Для установки/получения параметров или идентификации событий, которые связаны с комплектующими устройствами (в нашем случае лотками), удобно использовать подтемы (в виде расширения исходной темы путем добавления из нее дополнительной информации через косую черту).
Направо).
Например, содержимое определенного лотка можно указать с помощью подтемы типа '$устройства/ /конфигурация/ /Описание' .
Или уведомить соответствующий реестр о добавлении/удалении лотка из органайзера при использовании подтемы типа '$реестр/ /события/ /Обратная связь' .
В целях безопасности авторизацию устройства необходимо выполнять с использованием сертификатов x509 или пароля.
Можно создать привязку к имени устройства, чтобы изменить имя типа «are9f7p0igla52rp88k7» на что-то более читабельное.
Для взаимодействия с MQTT-брокером с помощью Python-скриптов использовалась библиотека PAHO MQTT. Позволяет авторизоваться, если для подключения к брокеру указан пароль.
Адаптер Wi-Fi на базе ESP8266 реализует клиент MQTT, используя клиентскую библиотеку MQTT от Adafruit. При реализации голосового интерфейса посредством навыков Алисы следует учитывать следующие нюансы:
- голосовые сообщения воспроизводятся только в ответ на запрос (т.е.
невозможно реализовать голосовое уведомление в произвольный момент времени),
- Управляющий скрипт должен вернуть сообщение, которое нужно произнести, до истечения таймаута, то есть за 3-5 секунд, иначе связь с Алисой будет потеряна.
В частности, запрос STT разделяется на кодовые слова (такие как «включено», «напряжение», «диэлектрик»).
В полях, отвечающих за названия компонента, русскоязычные сочетания, обозначающие буквы, заменяются англоязычными (например, Джей = Джей , кей = К , К = К ).
Еще одна неочевидная проблема, которую решает скрипт – это восприятие цифровых символов и их перевод в числа.
Система распознавания не понимает контекст сказанного, и количество 125 (сто двадцать пять) иногда можно признать 100, 20, 5 - в виде отдельных цифр вместо одного многозначного числа.
Дробные числа (например, 55,89 в форме пятьдесят пять И восемьдесят девять распознаются по индивидуальным номерам.
Если голосовая команда не соответствует указанному формату, голосовой помощник ответит Неверный формат запроса .
Ожидание против реальности
Мне удалось реализовать голосовой интерфейс для поиска нужных мне компонентов без помощи рук.Вы можете использовать его на любом устройстве с Алисой (смартфоне, планшете, ноутбуке, настольном компьютере, умной колонке).
Реализация поиска компонентов по описанию на практике не впечатлила.
Время, потраченное на произнесение голосовой команды Найти конденсатор 0603 на Напряжение 4,7 мкФ 50В диэлектрик X7R сравнимо с вводом той же фразы в текст. А вот скорость системы с уведомлением в режиме Где Х достаточно для удобной работы - задержки системы не раздражают. Поиск компонентов, когда ячейки, в которых они находятся, выделены, происходит быстрее, чем поиск текста.
Кстати, недавно для И.
Гланд Я показал функционал органайзера жить .
Чтобы приблизить поделку своими руками к полезному в повседневной жизни устройству, я планирую некоторые улучшения:
- Установите в каждое конечное устройство бюджетный микроконтроллер (предположительно семейств STM32L0 или STM32G0), что избавит от необходимости пробрасывать строки индикации и идентифицировать наличие лотка, а его Flash-ресурса при циклической перезаписи хватит надолго, что исключит необходимость использования внешней микросхемы памяти.
- Замените два отдельных дискретных светодиода на один многоцветный, что при использовании микроконтроллера в каждой ячейке памяти сделает индикацию более гибкой.
Можно будет регулировать яркость и цвета светодиодов, чтобы реагировать на события.
- Значительно упростить кабельную сеть внутри устройства (на данный момент для каждой ячейки памяти требуется 3 выделенные линии для светодиодных индикаторов и обнаружения ее присутствия, а также 2 линии питания и 2 линии для интерфейса I2C).
- Упростите систему адресации устройств, например, за счет использования сдвиговых регистров и счетчика импульсов вместо выделенных адресных линий (которые позволяют адресовать не более 2^N устройств по N линиям).
- Замените промежуточный модуль Wi-Fi на дискретный, установленный на печатной плате контроллера органайзера.
Если есть возможность, откажитесь от интерфейса UART для передачи данных в пользу чего-то более мощного (например, SDIO), что позволит прокачивать большие объемы данных и уменьшить задержки.
- Оптимизируйте систему голосовых команд для работы с органайзером.
Можно разграничить использование команд для разных режимов: «логистика» — перемещение ячеек, изменение количества элементов в них, добавление новых компонентов в базу данных; «пайка» — поиск компонентов по обозначению позиции; «поиск» — поиск компонентов с необходимыми параметрами).
- Перенесите скрипт управления Python в Cloud Functions, ведите базу данных компонентов с помощью сервисов Яндекс.
Облака.
Это может упростить инфраструктуру.
- Используйте библиотеки NLP (Natural Language Processing) для обработки STT-запросов и упрощения обработки неверных голосовых команд, так как если запрос произносится быстро или нечетко, голосовой помощник может неправильно распознать команду или параметр (например, «конденсатор — компенсатор» , «резистор – регистр»).
Структурная схема органайзера версии 2.0, компенсирующая основные аппаратные недостатки Эксперимент с использованием голосового помощника для поиска радиоэлектронных компонентов буду считать успешным.
Система выполняет основной функционал (поиск компонентов по позиционным обозначениям или кодовым словам в описании), работает дисплей, проверяет наличие ячеек в кассетном держателе.
Чтобы сделать органайзер еще более удобным, все его подсистемы необходимо будет существенно усовершенствовать: усовершенствовать систему голосовых команд, интерфейс голосового поиска дополнить графическим, усовершенствовать аппаратную часть, получившуюся систему настойчиво проверяется на практических задачах.
Спасибо, что дочитали до конца.
Буду рад ответить на все вопросы в комментариях.
Или в нашем чате сообщества в телеграмме , где мы обсуждаем подобные проекты.
Теги: #Производство и разработка электроники #Компьютерное железо #Сделай сам или Сделай сам #Яндекс #mqtt #печатные платы #контроллеры #Умения Алисы
-
Обзор Разработки Веб-Приложений.
19 Oct, 24 -
Chaos Constructions Antique `2007 Будет?
19 Oct, 24 -
Это Паранойя?
19 Oct, 24 -
Xbox 360 Получит Управление В Стиле Wii
19 Oct, 24 -
Ctrl Или Альт
19 Oct, 24