Я, как и многие, залип в датасеты, метрики и нейросети – и в какой-то момент понял, что почти не думаю о главном, как вообще проходит процесс инспекции печатных плат.
Чтобы закрыть вопрос реального процесса инспекции печатных плат, было принято решение собрать собственный компактный стенд (подиум на алюминиевом профиле, камера, два шаговых двигателя и много (очень много) хомутов для проведения автоматической инспекции. Основные критерии, которые были заложены в основу будущего стенда: он должен быть простым в управлении, достаточно компактным, чтобы уместиться на рабочем столе и универсальным. Чтобы была возможность решать различные задачи инспекции.
В статье расскажу, почему я не стал делать конвейер, как в промышленности, какие компромиссы пришлось принять, что пошло не так при сборке и почему этот DIY-подход оказался полезнее, чем ещё один прогон модели на готовом датасете.
Если коротко, то я собрал из того, что было под рукой (местами буквально “на коленке”), и это неожиданно дало больше понимания, чем ещё одно обучение модели.
Введение
В рамках магистерского дипломного проекта я занимался разработкой автоматизированной системы распознавания дефектов печатных плат. На этапе работы стало очевидно, что одной только модели машинного зрения недостаточно. Чтобы по-настоящему понять задачу, нужно было выйти за рамки датасета, кода и метрик и собрать собственный физический стенд, на котором можно экспериментировать с геометрией съёмки, освещением, повторяемостью кадров и механикой перемещения камеры.
Но как это сделать, если ничего этого не умеешь и не знаешь? Разбираться пришлось по классике: документация, google, любая LLM и куча проб и ошибок.
Когда речь заходит об автоматизированной инспекции, на первый взгляд кажется, что достаточно взять готовое промышленное решение, но на практике есть несколько вариантов и у каждого есть свои ограничения: либо сложность, либо цена, либо требования к инфраструктуре. Тем более это инженерный стенд, который позволил бы проверить гипотезы, понять ограничения и приблизиться к реальным условиям инспекции.
Мне нужен был именно промежуточный вариант, который не требует сложной конвейерной инфраструктуры, но при этом позволяет исследовать механику позиционирования камеры и качество распознавания дефектов на реальных изображениях.
Решение 1. Промышленные AOI-системы – большие, сложные и дорогие.

Решение 2. Системы, напоминающие микроскоп, где плату кладут на стол, после чего инспекция идёт на фиксированном участке с высоким увеличением.
Решение 3. Стационарные решения, которые работают как большой сканер, где плата лежит неподвижно, а камера или оптический модуль последовательно снимает поверхность. Это решение уже имеет средние габариты, но все еще большое и дорогое для инженера одиночки.
Решение 4. Мультикамерные системы – интересный вариант, но с ограниченной зоной съёмки.

В итоге стало понятно, что готовые решения либо избыточны, либо плохо подходят под задачу прототипирования. В какой-то момент я наткнулся на довольно интересные системы, например MEK iSpector JDz и VeriSpector Low Cost THT AOI, что достаточно современно и НЕ ОБЫЧНО. Именно их концепция показалась мне наиболее близкой к тому, что хотелось получить в рамках прототипа. По сути, это модульная конструкция, где плата располагается на рабочей поверхности, а сверху находится подвижный оптический модуль с камерой и подсветкой. При этом настольный вариант системы можно относительно просто интегрировать в конвейерную линию. В таких системах используется Z-ось для изменения высоты оптического модуля, что позволяет работать с платами и компонентами разной высоты. Фактически это уже не просто «камера над столом», а полноценная платформа, которую можно масштабировать под разные производственные задачи.
Если говорить про конвейер, то он имеет свои сильные стороны (скорость, но не точность), но для моей задачи он был избыточен и тянул за собой отдельный пласт сложности (механика, приводы, синхронизация, стабильность подачи, освещение). Это уже полноценный производственный комплекс, а не учебно-исследовательский прототип. Уже теперь исходя из полученного опыта, собрав бы я его, то я бы лишился множества ограничений и особенностей программного продукта, с которым столкнулся при разработке и тестировании “подиума на четырёх ножках”.
Почему именно это решение? Мне понравился вариант без “лишнего” корпуса. По сути, это конструкция на алюминиевом профиле, которую можно достаточно легко адаптировать под задачу (заменить рабочий стол на конвейер, изменить рабочую область или добавить дополнительные оси). При этом у такого подхода есть ограничение. Если камера фиксирована и снимает плату целиком, то возможности детальной инспекции становятся ограниченными. Нельзя просто сместить область контроля без перемещения самой платы или изменения положения камеры.
Именно такую возможность и необходимо добавить в стенд. А, так как для прототипа нет необходимости собирать большой стенд, то он будет на небольших ножках, но с возможностью снимать кадры вблизи (под увеличением).
В качестве реализации системы перемещения была выбрана максимально простая и доступная механика, похожая на ту, что используется в бюджетных ЧПУ-станках и DIY 3D-принтерах.
В DIY есть два очевидных пути: делать “почти промышленно” на ШВП, линейных рельсах с высокой точностью и соответствующей ценой, или идти по пути бюджетных 3D-принтеров на ремнях, шаговых двигателях и более простой механике.
Я выбрал второй вариант с алюминиевым профилем в качестве основы, ременной передачей и с шаговыми двигателями. По сути, получился тот же CoreXY, только вместо печатающей головки перемещается камера.
Стенд задумывался как подиум на четырёх ножках, на котором закреплена камера. Где камера перемещается по двум осям (вертикальная и горизонтальная) чтобы можно было просматривать плату последовательно, как бы “сканируя” её поверхность. Еще было желание добавить третью ось – для автоматического увеличения. Уже на этом этапе стало понятно, что решение выглядит наивно, но именно такие “наивные” конструкции хорошо показывают реальные ограничения.
Поставленные задачи
Во-первых, создать физический прототип, который можно использовать для автоматизации сбора данных изображений печатной платы в контролируемых условиях, а также выявить какие дефекты вообще можно распознавать при заданной оптике и механике.
Во-вторых, проверить, насколько удобно строить систему инспекции не через перемещение самой платы, а через перемещение камеры над объектом. Спойлер – не очень удобно, если камера будет “дрожать”.
И, наконец, сделать это в рамках DIY решений из говна-и-палок имеющегося оборудования и без сложных конструкторских задач проектирования.
Так появился стенд с подиумом на курьих четырёх опорах, вертикальной стойкой и узлом перемещения камеры по двум осям.
Идея конструкции
Идея простая, плата лежит на основании, камера ездит над ней по двум осям и последовательно “сканирует” поверхность.
Камера должна иметь возможность менять положение по горизонтали и вертикали, чтобы охватывать разные участки платы.
В результате конструкция получилась такой:
-
каркас из алюминиевого профиля как основной конструктивный материал;
-
крепёжные элементы и хомуты для фиксации узлов;
-
два шаговых двигателя для перемещения камеры;
-
блок питания;
-
управляющая плата на Arduino-совместимом контроллере;
-
камера для съёмки поверхности платы;
-
стяжки – временные решения, которые в итоге стали частью конструкции.
Принцип – максимум функциональности при минимуме сложности.
Почему алюминиевый профиль? Идеальный выбор для того, чтобы быстро собрать жёсткую и модульную конструкцию. Так же стенд должен быть не только прочным, но и изменяемым. Если в процессе экспериментов нужно изменить высоту, расположение камеры или жёсткость рамы, профиль позволяет это сделать без полной переделки конструкции или просто нарезать профиль новой длины.
В качестве приводов использовал шаговые двигатели, они проще в управлении и хорошо подходят для таких задач (управляются супер-простым способом – шагами, с помощью дешевого драйвера за 100 рублей). Сервоприводы рассматривал, но для них потребовался бы дорогой драйвер, либо много знаний как ими управлять без него (PID-регулятор). И да, они еще “дрожат” сами по себе в режиме удержания.
Плата управления. В качестве управляющей платформы было «взято готовое решение от опытных DIY мастеров», а именно плата уровня Arduino-совместимого контроллера (How to setup a stepper motor on arduino mega). Для задачи прототипирования этого достаточно. С ней можно задавать углы, писать простую логику движения, тестировать сценарии позиционирования и интегрировать управление с будущим ПО.
Как собирался стенд
Сначала собрал основной каркас на алюминиевом профиле. Внутри него сразу заложил узел перемещения по одной оси, а сверху второй узел и крепление под камеру. Чтобы камера могла поворачиваться, в основание крепежа поставил отдельный мотор.
Механика здесь простая: направляющие ролики идут по пазу профиля, усилие передаётся ремнями. Большую ось перемещают два параллельных мотора, а внутреннюю ось камеры два мотора с общим ремнём. Отдельный мотор отвечает за поворот самой камеры.
Когда основной каркас был собран и начал работать, я добавил ножки, чтобы поднять камеру над рабочей поверхностью. Камера съёмная и крепится к валу мотора через муфту для ШВП.
После этого система была подключена к управляющей плате и блоку питания. Моторы через драйверы шаговых двигателей на плате управляются с Arduino (калибровка системы, линейное перемещение по осям XY и круговое вращение камеры).
Почти на каждом этапе “внутренний инженер” начал активно вмешиваться, он хотел улучшить, переделать, усилить и в итоге конструкция несколько раз менялась по ходу сборки. Где-то приходилось менять высоту, где-то усиливать крепление, где-то переставлять элементы, чтобы добиться нормального хода и уменьшить люфт.
С точки зрения электроники проект оказался довольно понятным, но именно в простоте и была его ценность, можно быстро менять логику и проверять разные сценарии.
Управляющая часть отвечала за перемещение/вращение камеры над рабочим полем и за передачу обратной связи в ПО (получение текущих координат) по USB-соединению.
Отдельной задачей было определить, как часто двигать камеру, на сколько градусов/шагов, и когда делать снимок. Это уже не просто механика, а часть исследовательской постановки, где движение камеры влияет на качество данных, а качество данных влияет на качество распознавания дефектов.
Что дало это на практике
Важно подчеркнуть, что этот стенд не является отдельной “игрушкой ради игрушки”. Он напрямую связан с дипломной задачей.
Когда изучаешь дефекты печатных плат только по готовым изображениям, очень легко недооценить реальные ограничения:
-
как влияет угол обзора и увеличение;
-
необходимость дополнительного источника освещения в рабочей области направленный на объект, но при этом не создающий блики;
-
что происходит при малом смещении камеры;
-
как изменяется видимость дефекта в зависимости от масштаба;
-
насколько вообще реалистично то, что показала модель в ноутбуке.
Собственный стенд позволил мне посмотреть на задачу глазами практикующего инженера. Я не только обучал и анализировал модель, но и понимал, как именно будет получаться изображение в реальной системе.
Это особенно важно для задач промышленного зрения, потому что качество распознавания начинается не с нейросети, а с физического мира (механики, оптики и повторяемости съёмки).
На картинке конструкция выглядела проще, чем в реальности. На практике сразу проявились типичные проблемы прототипирования (люфты, недостаточная жёсткость, неидеальная геометрия, необходимость до настройки креплений и подбор оптимального положения камеры).
Некоторые решения пришлось пересмотреть. Например, часть креплений оказалась недостаточно надёжной, и их пришлось усиливать. В других местах потребовалась дополнительная фиксация хомутами. Где-то пришлось менять порядок сборки, чтобы обеспечить доступ к узлам.
Самый важный вывод, в DIY-проекте прототип почти никогда не получается “с первого раза”, и это нормально. В инженерной задаче ценность не в отсутствии ошибок, а в том, как быстро ты их находишь и исправляешь.
Практические выводы
Почти сразу вылезла главная проблема. Нужно было добиться повторяемости. Не просто чтобы камера “куда-то приехала”, а чтобы она каждый раз оказывалась в одном и том же положении. Даже небольшое смещение начинает ломать всё (уезжает масштаб, плывёт перспектива, начинает гулять детекция). Если снимать с увеличением, ситуация становится ещё жёстче, любое отклонение, и ты уже смотришь не в ту область платы.
При попытке сравнивать кадры между собой появляется ещё одна проблема. Возникает “шум”, который вообще не связан с дефектами, а вызван только нестабильностью съёмки.
В промышленности обычно используют специализированные камеры с фиксированной оптикой и контролируемыми параметрами. У меня задача была другая, хотелось получить приемлемое качество на доступном железе, вплоть до обычных веб-камер. Это добавляет свои ограничения: автофокус, “плавающая” резкость, разная экспозиция. Всё это напрямую влияет на итоговое изображение и, как следствие, на качество распознавания.
По факту половина задачи здесь не про алгоритмы, а про то, как получить стабильный кадр.
В какой-то момент стало понятно, что задача тут не “заставить камеру двигаться”, а сделать так, чтобы она двигалась предсказуемо. Без люфтов, без паразитных вибраций, с нормальным возвратом в ту же точку и с сохранением геометрии съёмки.
На практике это быстро упирается в довольно приземлённые вещи (жёсткость конструкции, вес камеры и то, насколько шаговые двигатели вообще способны это всё удерживать без дрожания пропуска шагов). И вот тут начинается классическая инженерия, баланс между “хочу” и “работает стабильно”.
Удивительно, но получилась не просто “железка ради железки”. Стенд даёт вполне практичные вещи, например можно собирать свои изображения в контролируемых условиях, смотреть, как ведут себя алгоритмы на реальных данных, проверять влияние масштаба и позиции камеры, а не только гонять модель по датасету. И самое главное, появляется возможность автоматизировать сбор данных. Если есть, например, несколько одинаковых плат, можно один раз настроить сценарий съёмки и дальше прогнать их автоматически. Это сильно экономит время и даёт более стабильный датасет по сравнению с ручной съёмкой.
И вот тут хорошо видно разницу с типичными ML-проектами. Очень часто всё заканчивается на обучении модели, а дальше, как будто “магия произойдёт сама”. В реальности же половина проблем живёт не в коде, а в том, как как получить данные.
В моём случае задача постепенно развернулась в полноценную систему, как объект попадает в зону съёмки, как получить стабильное изображение, как управлять позицией камеры, какие дефекты вообще видны при выбранной камере, а какие нет. И только после этого имеет смысл говорить про качество модели.
Поэтому этот проект для меня не столько DIY, сколько небольшой НИОКР. Способ разобраться в задаче целиком, а не только в её “нейросетевой” части.
Если говорить про развитие, то тут всё довольно очевидно: не хватает жёсткости конструкции, напрашиваются нормальные направляющие, нужна калибровка перемещения, нормальный свет и более аккуратная интеграция с софтом. В текущем виде это прототип, но уже понятен путь, как довести его до более вменяемого инженерного решения.
Отдельно стоит сказать про камеры. В процессе пришлось поработать с разными вариантами, от обычных веб-камер до более “серьёзных” решений. Быстро стало понятно, что дешёвые камеры вполне подходят для прототипа, но добавляют нестабильности (автофокус, плавающая резкость, скачущая экспозиция). С более профессиональными камерами возникает другая история. Они дают более предсказуемую картинку, но требуют аккуратной настройки (отдельные интерфейсы подключения, работа с потоками, настройка ПО). И тут появляются уже свои проблемы – камера не определяется, поток блокируется, картинка подвисает или ведёт себя нестабильно.
С другой стороны, специализированные камеры дают предсказуемую картинку, но сильно увеличивают стоимость системы и требования к остальной части стенда. В итоге для себя сделал простой вывод: на этапе прототипирования достаточно доступных решений, если понимать их ограничения. А уже при переходе к более серьёзной системе имеет смысл вкладываться в оптику и стабильность съёмки.
Итог
В рамках магистерского проекта мне было важно не только изучить алгоритмы распознавания дефектов печатных плат, но и понять саму физическую основу задачи. Поэтому я собрал компактную инженерную установку на алюминиевом профиле с перемещаемой камерой, двумя шаговыми двигателями, управляющей платой и базовой системой питания.
Создание физической инфраструктуры к модели ИИ даёт понять, как на практике устроены задачи визуального контроля, почему качество изображения критично для распознавания и как механика влияет на итоговый результат.
Этот проект для меня стал простым, но важным выводом, где любая задача в компьютерном зрении – это не только алгоритмы, но и “физика” процесса.
Когда разбираешь её целиком от механики до данных, то начинаешь видеть ограничения и возможности, которые не видны в ноутбуке.
И иногда для этого достаточно просто взять и собрать что-то руками.
Если вам нужен прототип, проверка ограничений, то два инженера с радостью воплотят вашу задумку в физический прототип.
Не идеально, но как инженерный прототип более чем рабочая история, на котором уже можно тестировать механику, собирать данные и проверять реальные сценарии инспекции.
Собрать стенд оказалось проще, чем заставить всю систему стабильно анализировать изображения и выдавать вменяемый результат.
Во второй части хочу разобрать уже программную часть проекта, которая включает распознавание дефектов, обработку изображений, анализ результатов и формирование отчётов на основе данных со стенда. Само ПО при этом писалось с нуля, в том числе с использованием AI-инструментов как помощника при разработке и отладке.
Отдельный интерес представляют задачи адаптации подобных систем под существующее оборудование, включая сценарии импортозамещения и доработки уже работающих производственных линий.
Автор: Aimnew


