company_banner

Как я собрал «умный» органайзер для электронных компонентов

    Привет. Я Александр Бурага, разработчик из команды роботов и беспилотных автомобилей Яндекса. Но сегодня речь пойдёт не о них, а о моём личном проекте, над которым тружусь дома.

    Сложно найти радиолюбителя, который не занимался бы монтажом печатных плат. Ещё сложнее — того, кто задумывается об удобном хранении деталей прежде, чем поиск чего-то нужного среди запасов превращается в сущий кошмар. Инструменты для ведения проектов, написания кода и контроля версий в последние десятилетия развиваются очень быстро. ПО, упрощающее монтаж, тоже обновляется, хотя и не так стремительно. А вот системы хранения электронных компонентов практически не изменились с 90-х: помните кассетницы из спичечных коробков?



    Мне часто случается вооружаться паяльником — например, дорабатывать или монтировать отдельные радиоэлектронные блоки — с проблемой бессистемного хранения столкнулся и я. Под катом вас ждёт рассказ о том, как я пытаюсь решить её с помощью «умного» органайзера, который понимает речь и запоминает своё содержимое.

    Чем мне не угодили существующие решения


    Чем сложнее радиоэлектронные блоки, тем больше компонентов требуется для их сборки. Уменьшить хаос в размещении деталей на рабочем месте помогает использование органайзеров с подписанными ячейками. Однако поиск необходимого компонента по наименованию или параметрам среди сотен похожих требует времени, а десятки секунд или минут, посвящённые этому неблагодарному занятию, складываются в часы впустую потраченного времени. Не меньше усилий придётся потратить на составление и актуализацию базы данных: какие компоненты были использованы, сколько осталось, что закончилось. Скрупулёзно вести такой учёт, чтобы описание запасов соответствовало их реальному состоянию, довольно тяжело и безрадостно.

    Поиск по «складским остаткам» — зло неизбежное, но не единственное. Тем, кто проводил за монтажным столом несколько часов подряд, наверняка знакомо желание обзавестись дополнительной парой рук. Одновременно оперировать всеми необходимыми инструментами, такими как паяльник или термофен, пинцеты разного калибра, увеличительное стекло или USB-микроскоп для оптической инспекции — невозможно. А ещё надо как-то переворачивать страницы конструкторской документации (сборочного чертежа и перечня устанавливаемых на печатную плату компонентов), либо переключать режимы работы программного обеспечения, помогающего в пайке.

    Использование педалей для поиска компонентов — идея безусловно новаторская, но на практике сложно реализуемая. Нейроинтерфейсы для «чтения мыслей» — штука диковинная, капризная и медленная. Остаются голосовые команды: освобождают руки, уменьшают шансы опечататься, редактировать перечень оставшихся деталей можно не отрываясь от пайки. Да и испустив крик отчаянья при поиске очередной детали, приятно услышать в ответ не звенящую тишину, а где найти искомое. А если добавить подсветку…

    Удивительно, но проекты «умных» органайзеров с голосовым интерфейсом можно пересчитать по пальцам. Между «продвинутыми» кассетницами из спичечных коробков, которые известны радиолюбителям прошлого века, и современными системами оперативного хранения — пропасть. Профессиональное оборудование умеет многое, но вряд ли подойдёт радиолюбителю: настолько же дорогое, насколько технологичное.



    Доступные решения существуют, но не лишены недостатков. Делюсь наиболее интересными:

    1. Chipseasy — проект с Kickstarter. Хранилище состоит из нескольких поддонов, каждый из которых разделён на прямоугольные ячейки. «Умное» хранение компонентов реализовано за счёт матричной адресации ячеек.

      Плюсы

      Можно вести учёт компонентов путем создания и редактирования списков доступных позиций, а также оперативно оценивать количество оставшихся деталей. Предусмотрено голосовое управление, есть подсветка. Хранилище компактно — оно не займёт много места на рабочем столе и при необходимости его можно легко переместить.

      Минусы

      Проект не собрал необходимой для производства суммы, последние пару лет не обновляется.
    2. FindyBot3000 — хранилище от энтузиастов-радиолюбителей. Упрощает поиск деталей в объёмных запасах. Использует сервис Google Assistant и вычислитель Particle Photon для взаимодействия с облаком.

      Плюсы

      Помогает вести учёт компонентов. Управляется голосом. Искомые детали подсвечиваются светодиодными лентами на WS2812B.

      Минусы

      Хранилище громоздкое: для долговременного хранения это не проблема, но для сортировки компонентов, нужных в работе, может быть неудобным. Система не модульная масштабировать её под свои нужды будет сложно.
    3. Component database with LED indicators взаимодействует с базой данных, расположенной в облаке, с помощью SQL-запросов через Raspberry Pi и приёмопередатчика на базе ESP8266. Взаимодействие с внешними устройствами осуществляется при помощи библиотеки aREST и MySQL-запросов.

      Плюсы

      Удобная система учёта компонентов: картотека с возможностью добавлять фотографии. Умеет подсвечивать несколько ячеек одновременно теми же светодиодными лентами на WS2812B.

      Минусы

      В текущей версии управление голосом не реализовано. Также больше подходит для долговременного хранения и плохо масштабируется.

    Думаю, вы обратили внимание: ни одно из этих решений не защищено от неправильной установки лотков в органайзеры, а сами ячейки понятия не имеют о своём содержимом. А зря.

    Что хотелось улучшить


    Отказываться от проверенной временем механический конструкции я не стал. Модульные органайзеры в виде каркаса с извлекаемыми лотками-ячейками — недорогие и практичные. Управляемая подсветка, индицирующая результаты поиска — удобная. Если добавить в каждый лоток ассоциативную память, которая будет хранить описание содержимого, текущее количество компонентов и прочую необходимую для работы информацию — осуществление учёта станет намного проще. Для создания базы данных всех компонентов с нуля (например, на устройстве, где никакой информации о компонентах вашего хранилища нет), достаточно опросить все доступные лотки. Чтобы обновить базу — действовать аналогично.


    Доступные на рынке кассетницы для радиоэлектронных компонентов

    В рамках первых тестов я всё-таки решил применить прогрессивный подход NoSQL. В моей реализации его следует понимать буквально: не «Not only SQL», а «совсем никакого SQL». Информация обо всех радиоэлектронных компонентах, счастливым владельцем которых я являюсь, хранилась в виде старых добрых электронных таблиц — это исторически сложившийся подход. Но кроме базы данных во время монтажа радиоэлектронного блока нужен BOM (перечень используемых в проекте элементов). Почти все современные САПР для разработки печатных плат «из коробки» позволяют сформировать перечень в удобном формате .csv.

    В качестве уникального ключа в системах хранения радиодеталей обычно используется его номенклатурный номер (PartNo). Чаще всего это набор букв и цифр, который сложно запомнить и воспроизвести, поэтому в базе данных лучше дополнительно хранить развернутое описание. Удобный вариант — текст с основными параметрами компонента: например, типоразмер, сопротивление и точность, если это резистор.

    Лотки с памятью должны быть взаимозаменяемы, т.е. их перестановка внутри органайзера не нарушит целостность базы данных. Переселение лотка между органайзерами (например, из «склада долговременного хранения» в «оперативное хранилище» компонентов для работы здесь и сейчас) тоже не должно ничего ломать. Для этого управляющей системе необходимо отслеживать извлечение или установку лотков: проверять фактическое наличие лотков в органайзере.

    Чтобы реализовать голосовой интерфейс, я принял решение использовать команды с жёстко заданным форматом. Минимальная функциональность управления может быть организована при помощи следующего набора:

    • Найти — отыскать компонент по его описанию. Например, Найти конденсатор 0603 на 10 микрофарад напряжение 50 В диэлектрик X7R.
    • Ячейка — подсветить лоток по его индексу. Например, Ячейка X1A1, где X<n> — кодовое значение органайзера, <COL><ROW> — индекс ячейки по пересечению её в колонке и столбце.
    • Где — подсветить лоток по его позиционному обозначению на печатной плате. Например, Где C1.
    • Содержимое — перечислить звуком содержимое лотка по его индексу. Например, Содержимое X1A1.
    • Поместить/Взять/Добавить/Очистить — отредактировать информацию о количестве компонентов в лотке по его индексу: задать, уменьшить, увеличить или очистить. Например, Очистить X1A1.
    • Свободное место — индикация лотков, которые в настоящее время не заняты радиоэлектронными компонентами.

    К сожалению, приведенная выше система команд не лишена минусов. Например, команду вида Где R1 (по которой компонент ищется в органайзере) быстрее произнести, чем набрать текстом, а вот выговорить Добавить в ячейку X1A2 10 штук RC0603FR-7W100RL — резистор на 100 Ом типоразмер 0603 точность 1 процент, мощность 0,2 Вт получится существенно медленнее, чем скопировать описание элемента из электронного каталога, отыскав его по номенклатурному номеру или считав штрих/QR-код с упаковки.

    Кроме того, использование набора команд с жестким форматом — вариант далеко не лучший на практике. Редко используемые команды легко забыть, а перебор синонимов будет отнимать время и огорчать репликами голосового ассистента, извещающего вас о том, что команда не распознана.

    Как это реализовано



    Аппаратные блоки, использующиеся в реализации органайзера:
    1 — ячейка памяти (memcell),
    2 — кросс-плата (backplane) для коммутации электрических сигналов,
    3 — контроллер органайзера (orgController), реализующий определение наличия ячеек, управление индикацией, взаимодействие с памятью и вышестоящими сервисами


    1) Механика и электроника


    Аппаратное хранилище состоит из следующих модулей:

    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 А.

    2) Информационный обмен


    После подготовки аппаратного обеспечения, возникает следующая цепочка задач: передать голосовой запрос с пользовательского устройства (смартфон, планшет или органайзер), распознать его (STT — Speach-to-text), проверить на соответствие необходимому шаблону, распарсить поля запроса, передать управляющие команды на оконечные устройства (действия с ячейками памяти), оповестить о результате запроса светодиодами и голосовым сообщением.

    Проброс голосовой команды до оконечных устройств я реализовал с помощью сервисов Yandex.Cloud. Можно было использовать любой другой SDK для распознавания речи, но Yandex.Cloud уже содержит все необходимые компоненты, поэтому создавать велосипед я не стал.

    Схема информационного обмена выглядит так:


    Схема информационного обмена, применяемая в работе с органайзером

    1. Фронтенд голосового интерфейса разработан на базе навыков голосового помощника Яндекса — Алисы. Можно было бы использовать альтернативные решения или stand-alone библиотеки для распознавания голоса, но связь «навыков» с бэкендом в виде Cloud Functions осуществлялась на удивление просто — путём выбора соответствующей навыку функции. Используя serverless подход, вместо более привычных для web, я сэкономил немало времени на настройке и администрировании.
    2. Data Gatherer — скрипт на Python, который контролирует информационный обмен между голосовым интерфейсом и оконечными устройствами: знает состав всей базы данных компонентов и карту сети, владеет всем необходимым (адреса, пароли/корневые сертификаты) для передачи и приёма данных органайзеров по протоколу MQTT.

      Data Gatherer фильтрует STT-сообщения, проверяет, соответствуют ли голосовые команды формату, рефакторит запросы и ищет необходимые компоненты в локальной базе данных, формирует управляющие команды для индикации или модификации.

      Пока рефакторинг самый простой: удаление лишних пробелов и знаков препинания. В планах использовать что-то более интеллектуальное, чтобы исправлять частые ошибки распознавания: например, заменять компенсатор на конденсатор, с помощью встраиваемого словаря сложных слов.

      В настоящее время DG выполняется с ноутбука, но можно запускать его из облака или на любом выделенном сервисе.
    3. Органайзеры — электронные устройства, имеющие доступ к MQTT-брокеру — отображают результат запроса при помощи светодиодной индикации. Также они хранят информацию о своем содержимом: текстовые описания компонентов и данные об их количестве.

    В качестве основного протокола информационного обмена я выбрал 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.

    При реализации голосового интерфейса через навыки Алисы стоит учитывать следующие нюансы:

    • голосовые сообщения воспроизводятся только в ответ на запрос (т. е. невозможно реализовать голосовое оповещение в произвольный момент времени),
    • скрипт управления должен вернуть сообщение для озвучивания до таймаута, то есть за 3-5 секунд, иначе соединение с Алисой будет потеряно.

    Помимо функций передачи сообщений и взаимодействия с импровизированной базой данных компонентов, скрипт управления обеспечивает парсинг и простейшую фильтрацию STT-запроса, а также проверку соответствия формата запроса требуемому синтаксису. В частности, STT-запрос разбивается по кодовым словам (таким как „на“, „напряжение“, „диэлектрик“). В полях, отвечающих за наименования компонента, русскоязычные сочетания, обозначающие буквы, заменяются на англоязычные (например, джей = J, кей = K, кью = Q).

    Ещё одна неочевидная проблема, которую решает скрипт — восприятие цифровых обозначений и перевод их в числа. Система распознавания не понимает контекст произнесенного, и число 125 (сто двадцать пять) иногда может распознаваться как 100, 20, 5 — в виде отдельных чисел вместо одного многоразрядного. Дробные числа (например, 55,89 в форме пятьдесят пять и восемьдесят девять распознаются отдельными числами.

    В случае несоответствия голосовой команды заданному формату голосовой ассистент даст отклик Неверный формат запроса.



    Ожидание vs реальность


    Мне удалось реализовать голосовой интерфейс, чтобы искать нужные компоненты без помощи рук. Использовать его можно на любом устройстве с Алисой (смартфон, планшет, ноутбук, стационарный компьютер, умная колонка).

    Реализация поиска компонентов по описанию на практике не впечатлила. Время, которое тратится на произнесение голосовой команды Найти конденсатор 0603 на 4.7 микрофарад напряжение 50В диэлектрик X7R соизмеримо с набором той же фразы текстом.

    А вот скорости работы системы с оповещением в режиме Где X хватает для удобной работы — задержки системы не раздражают. Искать компоненты, когда ячейки, в которых они располагаются, подсвечиваются — быстрее, чем текстом.

    Кстати, недавно для Я.Железа я показал функциональность органайзера в прямом эфире.

    Чтобы приблизить DIY-поделку к устройству, полезному в быту, планирую некоторые доработки:

    • Установить в каждое оконечное устройство бюджетный микроконтроллер (предположительно семейств STM32L0 или STM32G0), который позволит отказаться от проброса линий индикации и идентификации наличия лотка, а ресурса его Flash при циклической перезаписи хватит надолго, что избавит от необходимости использования внешней микросхемы памяти.
    • Заменить два отдельных дискретных светодиода одним многоцветным, что при использовании микроконтроллера в каждой ячейке памяти позволит сделать индикацию более гибкой. Можно будет настраивать яркость и цвета свечения светодиодов для реакции на события.
    • Существенно упростить кабельную сеть внутри устройства (сейчас каждая ячейка памяти требует 3 выделенных линии для светодиодных индикаторов и детекции ее наличия, а также 2 линии питания и 2 линии под интерфейс I2C).
    • Упростить систему адресации устройств, например, используя сдвиговые регистры и счет импульсов вместо выделенных адресных линий (которые позволяют адресовать не более 2^N устройств при использовании N линий).
    • Заменить промежуточный Wi-Fi-модуль на дискретный, установленный на печатную плату контроллера органайзера. По возможности отказаться от интерфейса UART для передачи данных в пользу чего-то более могучего (например, SDIO), что позволит прокачать большие объемы данных и сокращать задержки.
    • Оптимизировать систему голосовых команд для работы с органайзером. Возможно, разграничить использование команд для различных режимов: «логистика» — перемещение ячеек, изменение количества элементов в них, добавление новых компонентов в базу; «пайка» — поиск компонентов по позиционному обозначению; «поиск» — нахождение компонентов с необходимыми параметрами).
    • Перенести управляющий скрипт Python в Cloud Functions, вести базу данных по компонентам средствами сервисов Yandex.Cloud. Это может упростить инфраструктуру.
    • Использовать библиотеки NLP (Natural Language Processing) для обработки STT-запросов и упрощения обработки некорректных голосовых команд, т. к. при быстром или нечетком произношении запроса голосовой ассистент может некорректно распознать команду или параметр (например, «конденсатор — компенсатор», «резистор — регистр»).



    Блок-схема органайзера версии 2.0, компенсирующего основные аппаратные недоработки

    Эксперимент с использованием голосового ассистента для поиска радиоэлектронных компонентов буду считать удачным. С базовым функционалом (поиском компонентов по позиционным обозначениям или кодовым словам в описании) система выполняет, индикация работает, наличие ячеек в кассетнице проверяет.

    Чтобы сделать органайзер ещё удобнее, предстоит существенно доработать все его подсистемы: усовершенствовать систему голосовых команд, голосовой интерфейс поиска дополнить графическим, улучшить аппаратное обеспечение и упорно тестировать получившуюся систему на практических задачах.



    Спасибо, что дочитали до конца. С удовольствием отвечу на все вопросы в комментариях. Или в чате нашего сообщества в телеграме, где мы обсуждаем подобные проекты.
    Яндекс
    Как мы делаем Яндекс

    Комментарии 43

      +3
      Годнота. Вспоминается авторизованный СЦ Epson в прошлом веке. Показываю инженеру нужную шестерёнку подмотки ленты матричного принтера. Он в стенке 3*2м по памяти открывает ящички, в третьем оказывается искомая шестерёнка.
        0
        Отличная работа! ;)
          +5
          Эх, а когда-то мой дед так хранил детальки. До чего техника дошла… image
            +3
            Если эти ячейки пропитать столярным ПВА (сначала изнутри густо), потом кисточкой снаружи. То получится почти пластик.
              +1
              а были еще деревянные спичечные коробки
              0
              Я так же хранил 34 года назад. Использовать — одно удовольствие. Сортировать — потрачен почти весь год первого класса каждый вечер, чтобы раскидать полную консервную банку из-под джэма на 5 литров, которую отдал мне батя…
              +1
              Очень здорово. Почему-то подумалось еще и о сервах, которые будут выдвигать кассетницы)
                +2
                пальцезагибочный станок
                  +1
                  магнитик на лоток и катушка с мелким сердечником на кассету.
                  исходно фиксируется магнит к сердечнику.
                  Импульс нужной полярности на катушку выталкивает магнит.
                  0

                  для адресации можно i2c поделить и scl подавать по "строкам", а sda по "столбцам". причём через мультиплексоры 4067, тогда от МК надо log2(N) ног для адресации и одна шина на всех.


                  хотя вместо памяти и отдельного управления светодиодами какой-нибудь MSP430FR2100 (у них уникальный ID вроде есть), выйдет не дороже, зато можно всех повесить на одну шину без дополнительных чип-селектов вообще.

                    0
                    для адресации можно i2c поделить и scl подавать по «строкам», а sda по «столбцам».

                    Да уж, стоило изобретать цифровую шину с поддержкой адресации, чтобы потом мучиться с матрицами.

                    Это не вам или автору камень в огород, это я просто об абсурдности ситуации.
                      0
                      Я не очень понимаю, если честно, в чем проблема матрицу уложить в линейные адреса?
                      Ибо address = row * width + col, адрес гонится по i2c.

                      Ну или я реально не понял, в чем заключается проблема.
                    +5

                    Или я чего-то не улавливаю, или почему задачу нельзя было решить установкой на задней стенке органайзера цепочки 'адресуемых' светодиодов (а-ля ws2812). Стоят копейки, коммутация элементарная (шлейф из трех проводов), масштабируемость прекрасная.

                      0

                      можно, но у ws2812 "адресуемость" заключается в "очерёдности" соединения, а не уникальный id привязанный именно к ячейке, вне зависимости от её положения.

                        0

                        Ну потому она и в кавычках.
                        Да, задачу "подсветить конкретную коробку внутри органайзера (неважно, в какое отделение засунутую)" на ws2812 не решить. Но задача "подсветить коробку, находящуюся на конкретном месте в органайзере" с ws2812
                        решается на порядок проще и дешевле.
                        И лично мне необходимость решения первой задачи представляется надуманной.

                          0
                          Ну в принципе не совсем надуманная. Если работаешь с большим количеством номиналов одновременно, проще коробочки держать на столе перед глазами, а если они не маркированы классическим методом, то после окончания работ их будут помещать в первую попавшуюся ячейку. Поэтому, если решать адресными светодиодами, необходима дополнительная маркировка коробочек для установки на свои места.
                            0
                            QR-коды на коробочках, камера смотрящая на кассетницу и кассеты раскиданные по столу. А потом подсветка нужной кассеты лазерной указкой на паре сервоприводов или с помощью дополненной реальности на экране монитора.
                            :)
                            0

                            а вторую задачу "подсветить коробочку с конкретныму положением" и решать особо не надо, если кто-то будет следить что коробочки возвращаются на места — светодиоды не нужны
                            — "алиса, где к155ла3"
                            — "что такое к155ла3? в ячейке D7"

                              +1
                              — «алиса, где к155ла3»
                              — «включаю группу Алиса, песню Трасса Е-95»
                            0
                            Использование светодиодных лент — хорошая и прогрессивная идея. Но расположение их с тыльной стороны не даёт возможность нормально работать с непрозрачными лотками, а малая толщина перегородок между ячейками у коммерчески доступных кассетниц не всегда дает возможность расположить ленту с лицевой стороны.
                              0
                              А кто мешает использовать адресные диоды не в виде ленты?

                              не даёт возможность нормально работать с непрозрачными лотками
                              Всегда можно провести крохотный в 1мм световод из оптоволокна на переднюю панель, но на самом деле это не нужно, так как с адресными диодами их можно ставить хоть в сам контейнер впереди хоть над ним в обрешетку.

                              В случае такого решения, справится даже ATTINY85, и если принять ограничение в 1000 диодов на ленте, она даст 6x1000 = 6000 ячеек, ну или 5000, если не охота возиться с reset_disabled. Если охота, чтобы масштабировалось — отнимите еще одну ногу. Итого — 4000 ячеек в одной кассете… ну и 1000 кассет макимиум )))
                                +1
                                Внутри непрозрачных лотков можно установить пластиковый световод, который будет передавать свет на лицевую часть лотка.
                              +2
                              да и так тоже оверкилл. достаточно подписать лотки и спрашивать «в каком номере деталь Х», а найти коробушку с надписью №18 можно даже если она стоит не в кассетнице.
                                0
                                В виде далеко идущей задумки планировалось сделать модульную систему с возможностью переноса ячеек из органайзера в хранилище карусельного типа (https://www.compuphase.com/visualplace/carousel.jpg) для удобства монтажа.

                                Т.е. основная идея — «ассоциативная» память — возможность определить что находится в ячейке в настоящий момент времени. Т.к. плата с электроникой в каждой ячейке уже была — добавление пары светодиодов на нее (с управлением напрямую с МК или матричным способом через промежуточные драйверы) показалось нормальным решением.

                                Идея с LED-лентами — хороша и тоже имеет право на жизнь.
                                  0
                                  Как-то всё очень сложно. А если пойти другим путём — например, на заднюю стенку ящика приклеивать каку-то беспроводную метку (NFC, RFID), и считывать их все при поиске. А в основном контроллере хранить всю инфу по содержимому этих ячеек. А за ящиками, на считывающих платах — светодиоды, которые и будут подсвечивать ящик. Получается, что ящик полностью пассивен. При его установке в слот можно прочитывать его ID и делать пометку в головном контроллере «на месте 23 стоит ящик с ID=DEADBEEF». Из траблов — только необходимость большого количества считывателей, равного количеству ящиков. Или городить какую-то адскую механику, что не гуд.

                                  P.S. Увидел ниже в комментариях, что идея с RFID рассматривалась.
                                    0
                                    Еще вариант: многоконтактный разъём на лотке, входящий в ответную часть на раме при вставке лотка.
                                    На лотке замыканием нужных контактов формируем двоичный код с ID лотка.

                                    Траблы:
                                    1) разрастается количество проводников (по сути, на каждый разряд кода нужна своя матрица опроса).
                                    2) могут быть проблемы с нестабильностью контакта (перекосы, вставка не до конца, износ). И чем больше разрядность кода, тем хуже.

                                    Вариант: вместо разъемов — на раме набор микропереключателей, а на лотке — набор углублений (или выступов), формирующий код.

                                    Можно подумать в сторону какого-то оптического считывания, но не сложным считывателем, а как-то чтоб простыми фотодиодами можно было.
                                    Хотя нужное количество фотодиодов таки может оказаться дороже, чем одна камера и двумерные коды. Кстати, такие коды не обязательно квадратные и прямоугольные (QR, DM ), бывают системы с круглыми маркерами (пример — InterSense) или вообще неправильной формы (ReacTIVision).
                                0
                                Я себе такую напечатал.
                                Фото
                                image

                                Тоже думал об автоматизации, но потом разбил адресацию по размерному ряду, поэтому искать просто. После прочтения статьи снова задумался об автоматизации, так-как в планах сделать подобную для полупроводников.
                                  0
                                  Сколько времени заняла печать?
                                    0
                                    Полторы недели неспешно по вечерам и выходным.
                                  0
                                  Даже без поиска голосом прекрасная тема, можно стартап открывать и в ЧипиДип продать. А то мне искали недавно пару транзисторов минут 10, пока не пришел более опытный товарищ, который сунув руку не глядя вытащил нужную коробку.
                                    0
                                    Продавать, чтобы Чип-и-Дип для своего хранилища использовал систему, или чтобы он её продавал радиолюбителям?

                                    Если первое, то там масштабы такие, что не кассетницы нужны, а фидеры для pick-and-place-машин, отрезающие нужное количество деталей с катушки с лентой. А второе, то с их накрутками кто такую систему сможет себе позволить?
                                    0

                                    А как насчет RFID меток в ячейках и ридерах в посадочных местах для них? Или это слишком затратно выйдет?

                                      0
                                      Применение технологий RFID рассматривалось.
                                      RFID-метки сами по себе дешевле чем полупроводниковая память. Но для большого массива ячеек необходимо было бы делать механический привод со считывателем (который можно было бы объединить с толкателем) либо огромную печатную плату большим количеством антенн точно подобранного размера. Для демонстратора технологий усложнять механическую конструкцию не хотелось.
                                        0
                                        Много ридеров — затратно, а вот один, который, считав метку, покажет куда вернуть лоток — это должно быть удобно.
                                        0

                                        В середине 2000-x была такая штука — KDS disk organizer. Эта штука управлялась с компьютера и в программе можно было отмечать, в каком лотке какой диск хранится. Будучи школьником/студентом — мечтал, что дисков с софтом и видео у меня будет много и хранение их будет автоматизировано в таком боксе.


                                        KDS disk organizer

                                        image

                                          0
                                          ИМХО, такая система удобна для некого общего рабочего места. Не знаю вообще, насколько это практикуется в крупных компаниях или, может, коворкингах, но если человек первый раз увидел тот или иной органайзер, ему будет удобен поиск по базе с подсветкой. Если же это было бы моё личное рабочее место, то всё равно хотелось бы запомнить «где лежат те самые 0.1 мкФ», и на ячейках начнут появляться наклейки. И в таком случае я за вариант простой нумерации (1-100) и базы данных, пусть с голосовым поиском.
                                            0
                                            Скрупулёзно вести такой учёт, чтобы описание запасов соответствовало их реальному состоянию, довольно тяжело и безрадостно.
                                            Не тяжело и не безрадостно. У меня целый шкаф отведен под всю эту мелочевку. Коробочки и кассетницы промаркированы. Любая ячейка адресуется четырехзначным алфавитно-цифровым кодом, он же занесен в полноценную складскую программу. Поиск самого редко используемого компонента занимает не более минуты.
                                              +1
                                              PLD/PBD

                                              выглядит так себе решением для разъемного соединения.
                                              Возьмите магнитные USB разъемы. Только не те что для зарядки, а полноценные. Никто же не заставляет вас по проводам USB гонять. 4 проводов вполне хватит для полноценного подключения по удобному вам интерфейсу. Это даст огромный ресурс подключения/отключения и смягчит проблему точного соприкоснования.

                                              подсветит именно тот, который вы искали, даже если ранее вы поменяли его местами с соседним.

                                              Я буду немножко старомоден, но что мешает просто на стенках каждой коробочке сделать в рандомно месте дырочку и вкрутить туда болт? Тогда чисто физически не будут коробки вставляться в чужие места.

                                              перебор синонимов будет отнимать время

                                              вот это сделаете:
                                              заменять компенсатор на конденсатор, с помощью встраиваемого словаря сложных слов.

                                              И проблема уйдет. Потому что синонимы будут равны нужному слову.
                                              Собственно когда делал управление автоматизированным домом — именно так и сделал.
                                              Вполне доволен.
                                              kaldi иногда, например, слышит «что» вместо «сто». Но это не проблема, потому что в списке синонимов «что» записано как эквивалент «сто». Ну и в обратную сторону тоже самое. Проблем это никак не создает, потому что конечный автомат по контексту сам понимает «что» там или «сто».
                                              При этом я использую полное распознавание, потому что словарь синонимов работает гораздо лучшем чем специализированное распознавание по словарю.
                                              Специализированное распознавание допустимо, только если у нас есть отдельный активатор для старта распознаваний. Если же использовать его для непрерывного распознавания — он начинает сильно лажать, потому что слышит то, чего слышать не должен, что и логично для спецализированого распознавания.
                                              Ну и, конечно, в современном мире надо быть работником Яндекса чтобы использовать для распознавания Алису. Благо vosk/kaldi на упрощенных данных сейчас малинка тянет без проблем в режиме непрерывного распознавания.
                                                0

                                                Почему не рассмотрели вариант с DS2405?
                                                1-wire адресуемый ключ, на весь органайзер хватило бы параллельной шины из 3 проводов.

                                                  0
                                                  Еще понадобится 1-wire led driver. Вроде их тоже полно.
                                                  Но идея воткнуть полноценный МК с памятью, чтобы прямо в ячейке всё хранить все таки выглядит интересней.
                                                    0

                                                    Не понадобится, 4мА хватит для включения диода.
                                                    Чтобы хранить данные о содержимом можно использовать DS2406.

                                                    0

                                                    а он стоит почти на порядок дороже самого мелкого МК на котором можно то же самое изобразить.

                                                      0
                                                      Как уже указали выше — несмотря на заманчивость использования 1-wire микросхем с паразитным питанием в плане упрощения кабельной сети — меня смутили два момента:
                                                      • завязка на вендора (их выпускает только Maxim, в то время как i2c микросхемы памяти много кто);
                                                      • отсутствие возможности жесткого задания адреса (что можно реализовать путем использования адресных выводов в i2c микросхемах).


                                                      В экономическом плане для решения задачи хранения, индикации, детекции извлечения ячейки и реализации простенького протокола для информационного обмена пока побеждают 8-битные микроконтроллеры.

                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                    Самое читаемое