Введение
Около 30 лет я хранил резисторы и другие мелкие радиодетали в кассетном корпусе, склеенном спичечными коробками. Такие кассеты делали многие радиолюбители. Надо признать, что это был самый распространенный способ хранения радиодеталей. Стоимость спичечного коробка (вместе со спичками!) в советское время была 1 копейка (почти бесплатно). Поэтому эта модель была очень популярна.
Рисунок 1. Старая кассета
Недостатком такой кассеты является слабая прочность спичечных коробков из тонкого картона. При частом и неаккуратном использовании они ломались и их приходилось ремонтировать. Кроме того, небольшие размеры спичечного коробка не позволяли хранить куски, превышающие его габариты.
В данной статье, помимо спичечных кассет, представлены и другие виды кассет, как промышленные, так и самодельные. Радиолюбители всегда находили приемлемые способы изготовления кассет из подручных материалов.
Но прогресс движется быстро, и вот, кажется, технология 3D-печати пластиковых предметов, которая была недосягаема для простого радиолюбителя, уже входит в повседневную практику. Цены и качество 3D-принтеров становятся доступными для населения. Два года назад я купил самый дешевый на тот момент 3D-принтер Anet A6, который был предоставлен мне производителем в виде набора для самостоятельной сборки. С тех пор 3D-печать стала моим вторым увлечением, помимо радиолюбителей.
В этой статье я покажу один из вариантов пластикового кассетодержателя в 3D-принтере.
Рис. 2. Внешний вид пластиковой кассеты
Идея
Сразу скажу, что идея почерпнута из этого источника:
Автор предложил замечательную конструкцию выдвижного ящика с фиксацией внутри тумбы. Поэтому коробка осталась оригинальной и мною не дорабатывалась.
А вот сам дизайн кабинета был переработан. Почему я переделал кабинет? По двум причинам:
1. Автор предложил распечатать весь шкаф за один раз. Что делать, если пользователя не устраивает длина и ширина предмета мебели? Да хотя бы потому, что размеры стола 3D-принтера не позволяют разместить эту конструкцию. Поэтому предлагаю распечатать шкаф отдельными секциями. Секция на 5 ящиков. При этом есть возможность не только распечатать секции на небольших столиках, но и оформить весь шкаф по своему усмотрению.
2. Вторая причина – наличие выступов внутри конструкции шкафа для фиксации ящика. Наличие этих выпуклостей расширяет ячейку, в которую входит коробка, на ширину двух выпуклостей. Я заменил выпуклости внутри шкафа углублениями в стенках камеры. Теперь ширина ячейки почти равна ширине коробки. Когда ящик полностью входит в ячейку, его выступы проваливаются в зазоры в ячейке и препятствуют безопасному падению ящика вдоль нее, пока он не войдет в полость ячейки.
Спичечные коробки
Еще в советское время было модно хранить радиодетали в спичечных коробках, склеивая их между собой в многоэтажном доме.
Недостатки этого способа хранения:
- бумажные коробки со временем изнашиваются при каждом открытии и закрытии коробки
- некоторые радиодетали большие и не помещаются в коробки
- ну с эстетической точки зрения ну как-то не красиво выглядит вся эта конструкция.
Пластиковые коробки
Представляю вам чудо химической промышленности — пластиковые ящики для хранения разных мелочей.
Что ж, очень полезная вещь для хранения различных радиодеталей. Эти шкатулки предназначались для хранения украшений и различных стеклышек:
Но они нужны нам больше! Мы с вами электроники! 🙂 Преимущества этих боксов можно сразу оценить с первого взгляда, но сейчас я вам о них расскажу.
Что мне больше всего нравится, так это очень удобный замок, который легким усилием пальца открывает нашу радиодетальную барахолку:
Также в этих полях можно изменить длину ячейки, превратив соседние ячейки в одну общую ячейку.
Прозрачность коробок – еще одно преимущество. Вы без труда найдете нужный радиоэлемент.
Вместительность этих коробок тоже очень хорошая.
Ну и главный козырь — цена. На Алиэкспресс можно найти большую коробку на 36 ячеек за 8-9 долларов, а коробку на 24 ячейки за 5-6 долларов. Выбор хороший!
Ящики, лотки и шкафы
Также в широком ассортименте выпускаются специально конусообразные ящики для хранения радиоэлементов. Они удобны тем, что доступ к радиоэлементам осуществляется путем выдвижения ящика.
У меня есть эти ящики в моем столе.
Для того, чтобы знать, где что находится, я написал номинал этих радиоэлементов прямо на коробке жалом паяльника, хотя можно положить перед ним бумажку и написать на ней номинал.
Где хранить SMD компоненты
Для хранения компонентов SMD используется специально заточенная книга.
Небольшие коробочки также очень удобны для хранения SMD-компонентов, из которых можно сделать очень приличный стеллаж.
Кроме того, на Алиэкспресс можно легко купить отличные ящики для хранения радиодеталей.
Также есть портативные холодильники, которые собираются как лего.
Конструкция ящиков
Дизайн коробок, как я уже сообщал, не изменился.
Рисунок 3. Ящики
Коробки хорошо оформлены автором. Есть жесткий «язык», чтобы вытащить ящик из тумбы. А еще замечательно решена задача вставки этикетки в переднюю панель ящика — есть пазы, которые надежно удерживают этикетку. Забегая вперед, скажу, что я заламинировал этикетки, чтобы придать им прочность и элегантность. Внутренний размер ящика 62х30х13 мм (ДхШхВ).
Изготовление ящичков
Сначала пластиковую коробку нужно разрезать на 24 части. Отмерьте 8 см.
Выровняйте переднюю и заднюю часть наждачной бумагой или наждачной бумагой, также следует отметить переднюю часть и крышку коробки. Нам понадобится 168 ящиков — это 7 двухметровых пластиковых реек. Далее нам понадобятся стенки ящиков — их мы сделаем из крышки пластиковой рейки. Берем двухметровую крышку и вырезаем на наждаке «санки», получаем ровный двухметровый кусок пластика, каждый по 4 см. В итоге из этого куска получаем 50 стенок на передней части коробки. Со спинкой аналогично, нужно только отмерить по 3см, переднюю и заднюю часть приклеиваем к основанию коробки с помощью термоклеевого пистолета. Равняем наждачной бумагой или наждачной бумагой. В итоге получаем кучу коробочек.
Далее берем деревянные рейки: в моем случае я брала две тонкие рейки на ряд, но лучше взять широкую 8 см. Теперь с ящиков снимаем крышки, кладем их на рейки и прибиваем (его можно стянуть подходящими шурупами) первый ряд (состоящий из 24 ящиков).
То же самое со вторым рядом. В результате получаем торчащие ногти. Их необходимо отшлифовать. После этого прибиваем края и заднюю стенку (из ДВП).
Мы получаем это. Рейки можно покрыть линолеумом.
Задняя стенка
Теперь нам понадобятся ручки ящиков, их можно сделать из пластиковых уголков.
Приклеиваем ручки к ящикам с помощью термопистолета. Вот так выглядят готовые коробки.
Осталось только наклеить метки, соответствующие радиодеталям, которые на них расположены.
Готовый вид изделия
Эти коробки были собраны за 3 недели.
Конструкция секций шкафа
Секции шкафа выполнены в облегченном варианте – боковые стенки имеют прямоугольные зазоры. Посередине глубины ячейки с обеих сторон есть углубления для фиксации ящика в выдвинутом положении. По бокам секции имеются выступы и отверстия для четкой ориентации секций при склейке. Размер одной секции 70х37х84 мм (ДхШхВ).
Рис. 4. Компоновка секций шкафа
Секции (и коробки) были напечатаны пластиком PLA. При подготовке модели к печати она должна ровно лежать на столе задней стенкой вниз. При этом можно печатать без опорных подмостей: пластик отлично укладывает нити, не провисая на коротких участках.
Срезы склеены дихлорэтаном. Если предполагается использовать другой тип пластика, кроме PLA, необходимо выбрать соответствующий клей.
Рисунок 5. Вставка разделов
Что хотелось улучшить
Я не отказался от проверенной временем механической конструкции. Модульные каркасные органайзеры со съемными лотками для ячеек экономичны и практичны. Управляемая подсветка, показывающая результаты поиска, удобна. Если к каждому лотку добавить ассоциативную память, в которой будет храниться описание содержимого, текущее количество комплектующих и другая необходимая для работы информация, учет станет намного проще. Чтобы создать базу данных всех компонентов с нуля (например, на устройстве, где нет информации о компонентах его хранилища), достаточно опросить все доступные бины. Чтобы обновить базу данных, действуйте таким же образом.
Имеющиеся в продаже кассеты для электронных компонентов
В рамках первых тестов я решил применить прогрессивный подход NoSQL. В моей реализации это следует понимать буквально: не «Не только SQL», а «вообще никакого SQL». Информация обо всех электронных компонентах, которыми я являюсь счастливым обладателем, хранилась в виде старых добрых электронных таблиц — это исторический подход. Но помимо БД, при монтаже РЭБ необходима спецификация (перечень элементов, используемых в проекте). Практически все современные САПР для проектирования готовых печатных плат позволяют формировать список в удобном формате .csv.
В качестве уникального ключа в системах хранения радиодеталей обычно используется их артикул (PartNo). В большинстве случаев это набор букв и цифр, который сложно запомнить и воспроизвести, поэтому лучше дополнительно хранить в базе подробное описание. Удобным вариантом является текст с основными параметрами компонента: например, размер, сопротивление и точность, если это резистор.
Лотки памяти должны быть взаимозаменяемыми, то есть их перестановка внутри органайзера не нарушит целостность базы данных. Перемещение лотка между органайзерами (например, из «долговременного хранения» в «рабочее хранилище» компонентов для работы здесь и сейчас) тоже ничего не должно сломать. Для этого системе управления необходимо отслеживать снятие или установку лотков: проверять фактическое наличие лотков в органайзере.
Для реализации голосового интерфейса я решил использовать команды в закодированном формате. Минимальный функционал управления можно организовать с помощью следующего набора:
- Поиск – поиск компонента по его описанию. Например, найти конденсатор 0603 на 10 мкФ напряжением 50В диэлектрический Х7Р.
- Ячейка: выделить трей по его индексу. Например, ячейка X1A1, где X — значение кода организатора, — это индекс ячейки на ее пересечении в столбце и столбце.
- Где: Выделите лоток в соответствии с его условным обозначением на печатной плате. Например, где C1.
- Содержимое: Перечислите содержимое лотка по звуку по его индексу. Например, Контент X1A1.
- Сбросить/Взять/Добавить/Удалить: Редактировать информацию о количестве компонентов в лотке по их индексу: установить, уменьшить, увеличить или удалить. Например, Удалить X1A1.
- Свободное место: указание лотков, которые в данный момент не заняты электронными компонентами.
К сожалению, описанная выше система команд не лишена недостатков. Например, команду типа Где R1 (которая находит компонент в органайзере) быстрее произнести, чем набрать текст, но сказать Добавить в ячейку X1A2 10 шт мощность будет намного медленнее, чем копирование описания товара из электронного каталога путем поиска его по номеру товара или считывания штрих-кода/QR-кода на упаковке.
Кроме того, использование жестко запрограммированного набора инструкций на практике далеко не лучший вариант. Нечасто используемые команды легко забыть, а поиск синонимов займет время и будет раздражать обратную связь голосового помощника, уведомляющую о том, что команда не распознана.
Как это реализовано
Аппаратные блоки, используемые в реализации органайзера:
1 — ячейка памяти (memcell),
2 — поперечная плата (объединительная плата) для коммутации электрических сигналов,
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 — Speech-to-text), проверка соответствия требуемому шаблону, анализ запроса полей, посылать команды управления оконечным устройствам (действия с ячейками памяти), оповещать результат запроса светодиодами и голосовым сообщением.
Реализована переадресация голосовых команд на конечные устройства с помощью сервисов Яндекс.Облака. Можно было использовать любой другой SDK для распознавания речи, но Яндекс.Облако уже содержит все необходимые компоненты, поэтому велосипед я создавать не стал.
Схема связи выглядит так:
Схема обмена информацией, используемая при работе с организатором
- Интерфейс голосового интерфейса разработан на основе навыков голосового помощника Яндекса Алисы. Можно было бы использовать обходные пути или автономные библиотеки для распознавания речи, но подключить «навыки» к бэкенду в виде Cloud Functions оказалось на удивление просто: выбрав функцию, соответствующую навыку. Используя бессерверный подход вместо веб-подхода, я сэкономил много времени на настройке и администрировании.
- Data Gatherer — это Python-скрипт, управляющий обменом информацией между голосовым интерфейсом и конечными устройствами: он знает состав всей базы данных компонента и карты сети, имеет все необходимое (адреса, пароли/сертификаты root) для передачи и получать данные хоста по протоколу MQTT.
Data Gatherer фильтрует STT-сообщения, проверяет соответствие формата голосовых команд, рефакторит запросы и ищет в локальной базе данных необходимые компоненты, формирует управляющие команды для индикации или модификации.
Пока рефакторинг самый простой: убрать лишние пробелы и знаки препинания. Есть планы использовать что-то более хитрое для исправления распространенных ошибок распознавания: например, заменить компенсатор конденсатором, используя встроенный словарь сложных слов.
В настоящее время DG работает с ноутбука, но вы можете запустить его из облака или любого выделенного сервиса.
- Хосты — электронные устройства, имеющие доступ к MQTT-брокеру — отображают результат запроса с помощью светодиодной индикации. Они также хранят информацию об их содержании: текстовые описания компонентов и данные об их количестве.
В качестве основного протокола связи я выбрал MQTT, который часто используется для управления «умными» устройствами. Он не предназначен для администрирования баз данных, но настолько прост, гибок и удобен, что его несложно доработать под нужный функционал. Протокол реализует концепцию «pub/sub», поддерживает передачу сообщений в текстовом и бинарном форматах, а также имеет удобную и расширяемую систему адресации с использованием тематического механизма.
Функционал MQTT-брокера реализован с помощью Yandex IoT Core. Для корректной работы информация (ключи шифрования или пароли для аутентификации) о каждом устройстве должна быть добавлена через веб-консоль или утилиту CLI.
Стоит отметить использование понятий «реестр» и «устройство» при реализации MQTT в IoT Core, для организации сети (с реестром можно связать несколько устройств) для передачи одиночных и широковещательных сообщений при их использовании например, «$devices//config» (для отправки данных на устройство), «$logs//events» (отправка данных для каждого устройства в раздел журнала), «$logs//config» (передача данных на все устройства, на которые подписаны тему регистрации).
Для настройки/получения параметров или выявления событий, которые связаны с компонентами устройства (в нашем случае с лотками), удобно использовать подтемы (в виде расширения исходной темы путем добавления дополнительной информации о ней через полоса в верхней части). Правильный). Например, содержимое конкретной корзины можно указать с помощью такой подтемы, как «$devices//config//Descr». Либо уведомлять соответствующую запись о добавлении/удалении лотка из органайзера при использовании подтемы типа $registrations//events//Comments’.
Из соображений безопасности устройства должны быть авторизованы с использованием сертификатов x509 или пароля. Можно создать ссылку для имени устройства, чтобы изменить имя типа «are9f7p0igla52rp88k7» на что-то более читаемое.
Для взаимодействия с MQTT-брокером с помощью Python-скриптов использовалась библиотека PAHO MQTT. Позволяет авторизоваться, если для подключения к брокеру установлен пароль. Адаптер Wi-Fi ESP8266 реализует клиент MQTT с использованием клиентской библиотеки Adafruit MQTT.
При реализации голосового интерфейса через способности Алисы необходимо учитывать следующие нюансы:
- голосовые сообщения проигрываются только в ответ на запрос (т.е невозможно реализовать голосовое оповещение в произвольное время),
- скрипт управления должен вернуть голосовое сообщение до таймаута, т.е в течение 3-5 секунд, иначе связь с Алисой будет потеряна.
Помимо функций передачи сообщений и взаимодействия с импровизированной базой данных компонентов, управляющий скрипт обеспечивает простой разбор и фильтрацию STT-запроса, а также проверку соответствия формата запроса требуемому синтаксису. В частности, запрос STT разбит на кодовые слова (такие как «зажигание», «напряжение», «диэлектрик»). В полях, отвечающих за названия компонентов, русскоязычные сочетания, обозначающие буквы, заменяются англоязычными сочетаниями (например, jay=J, kei=K, cue=Q).
Еще одна неочевидная проблема, которую решает скрипт, — это восприятие цифровых обозначений и перевод их в цифры. Система распознавания не понимает контекст сказанного, и число 125 (сто двадцать пять) иногда может быть распознано как 100, 20, 5, как отдельные числа, а не одно многозначное число. Дробные числа (например, 55,89 в виде пятьдесят пять и восемьдесят девять) распознаются как отдельные числа.
Если голосовая команда не соответствует указанному формату, голосовой помощник ответит недопустимым форматом запроса.
Ожидание vs реальность
Мне удалось реализовать голосовой интерфейс для поиска нужных компонентов без помощи рук. Вы можете использовать его на любом устройстве с Алисой (смартфон, планшет, ноутбук, рабочий стол, умная колонка).
Реализация поиска компонентов по описанию на практике не впечатлила. Время произнесения голосовой команды Найти конденсатор 0603 на 4,7 мкФ напряжением 50В диэлектрик X7R пропорционально набору этого же предложения в тексте.
Но скорости работы системы с уведомлением в режиме Where X хватает для удобной работы — лаги системы не раздражают. Находите компоненты, когда ячейки, в которых они находятся, выделены быстрее, чем текст.
Дабы приблизить DIY к полезному в быту устройству, планирую некоторые доработки:
- Установите недорогой микроконтроллер (предположительно из семейства STM32L0 или STM32G0) в каждое оконечное устройство, что позволит вам отказаться от проброса строк индикации и выявления наличия лотка, а ваш Flash-ресурс будет длиться долго при циклической перезаписи , что устраняет необходимость использования внешней микросхемы памяти.
- Замените два отдельных дискретных светодиода на разноцветный, что за счет использования микроконтроллера в каждой ячейке памяти сделает индикацию более гибкой. Можно будет настроить яркость и цвета светодиодов, чтобы реагировать на события.
- Значительно упростить разводку сети внутри устройства (теперь для каждой ячейки памяти требуется 3 выделенные линии для светодиодной индикации и обнаружения ее наличия, а также 2 линии питания и 2 линии для интерфейса I2C).
- Упростите систему адресации устройств, например, используя счетчик импульсов и регистры сдвига вместо выделенных адресных линий (что позволяет адресовать до 2^N устройств при использовании N линий).
- Замените средний модуль Wi-Fi на дискретный, установленный на плате хост-контроллера. Если возможно, откажитесь от интерфейса UART для передачи данных в пользу чего-то более мощного (например, SDIO), что позволит вам перекачивать большие объемы данных и уменьшить задержку.
- Оптимизируйте систему голосовых команд для работы с органайзером. Можно различать использование команд для разных режимов: «логистика» — перемещение ячеек, изменение количества элементов в них, добавление новых компонентов в базу данных; «сварка» — поиск компонентов по условному обозначению; «поиск» — найти компоненты с нужными параметрами).
- Перенести скрипт управления Python в Cloud Functions, вести базу компонентов с помощью сервисов Яндекс.Облака. Это может упростить инфраструктуру.
- Используйте библиотеки NLP (Natural Language Processing) для обработки STT-запросов и упрощения обработки некорректных голосовых команд, так как при быстром или сбивчивом произношении запроса голосовой помощник может неправильно распознать команду или параметр (например, «конденсатор — компенсатор «, «сопротивление — регистр»).
Блок-схема органайзера версии 2.0, компенсирующая основные аппаратные недостатки
Успешным будет считаться эксперимент с использованием голосового помощника для поиска электронных компонентов. При базовом функционале (поиск компонентов по позиционным обозначениям или ключевым словам в описании) система работает, индикация работает и проверяет наличие ячеек в кассете.
Для того, чтобы сделать органайзер еще более удобным, все его подсистемы придется значительно доработать: будет усовершенствована система голосовых команд, интерфейс голосового поиска дополнен графическим интерфейсом, усовершенствована аппаратная часть, и полученная система будет упорно проверяться на практических задачах.