diff --git a/schemes/mvp_1.drawio b/schemes/mvp_1.drawio new file mode 100644 index 0000000..d50949f --- /dev/null +++ b/schemes/mvp_1.drawio @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schemes/mvp_1.jpg b/schemes/mvp_1.jpg new file mode 100644 index 0000000..5373e55 Binary files /dev/null and b/schemes/mvp_1.jpg differ diff --git a/schemes/mvp_1.md b/schemes/mvp_1.md new file mode 100644 index 0000000..945e23c --- /dev/null +++ b/schemes/mvp_1.md @@ -0,0 +1,114 @@ +# Наброски будущей схемы конвейера + +![](mvp_1.jpg) + +## Пояснение к схеме + +### todo + +## Список материалов: + +В этот список необходимо доложить энкодер для двигателя! + +| Название | Сумма, ₽ | Количество | +| :--- | :--- | :--- | +| Медная лента для удаления припоя / Оплетка для выпайки диаметр 2 мм длина 1.5 м | 164 | 1 | +| Набор проводов для пайки | 1 030 | 1 | +| Набор проводов для пайки | 855 | 1 | +| Флюс гель универсальный безотмывочный, для пайки микросхем и компонентов Flux RMA-223-UV-10г | 162 | 1 | +| Припой для пайки с канифолью 1мм 50гр ПОС-61 на катушке (ГОСТ) | 423 | 1 | +| ALIENTEK Паяльник 140 Вт, 7 предметов | 4 985 | 1 | +| Преобразователь DC-DC понижающий с 8-60V до 1-36V 15A max | 805 | 1 | +| Беспаечная макетная плата (breadboard) MB-102, 830 точек, для Arduino и прочих устройств | 1 112 | 2 | +| 120 шт. Провода перемычки для макетных плат, соединительные провода для модулей, контроллеров arduino (10 см) 3 вида по 40 шт папа-папа, мама-мама, папа-мама | 636 | 3 | +| Homeled, Блок питания, 12V, 200W, 180-265 вольт. С клеммами. Импульсный для светодиодных лент и светильников | 599 | 1 | +| Двигатель для шуруповерта 12v без шестерни | 834 | 2 | +| Сервопривод MG996R, 10 шт, 180 , металлические шестерни, для Arduino, роботов и RC, размеры стандарт | 2 990 | 1 | +| PWM PCA9685 драйвер на 16 сервоприводов расширитель портов с I2C интерфейсом для Led и Servo (12 bit, I2C) в IIC/I2C/TWI/SPI c тестером сервоприводов 3 режима, набор | 1 178 | 2 | +| Датчик расстояния ультразвуковой HY-SRF05 для Arduino | 1 310 | 5 | +| Модуль MOSFET силовой ключ, опторазвязка, 40В, 50А, AOD4184 | 898 | 4 | +| Arduino UNO R3 Atmega328P (CH340G), с кабелем | 1 377 | 3 | +| Плата расширения Ethernet Shield W5100 | 1 376 | 2 | +| ИТОГО | 20 732 | | + +[Ссылка на товары](https://www.ozon.ru/cart?share=IxNShaU) + + +## Возможные проблемы в программно-аппаратной автоматической сортировке товаров на конвейерной линии + +### 1. Проблемы визуального распознавания + + - Сложность освещения: Непредсказуемое освещение может затруднить распознавание объектов + - Схожие внешние признаки: Товары с похожими формами/цветами могут быть распознаны неправильно + - Неправильная калибровка камер: Ошибки в определении координат объектов + +### 2. Проблемы сенсорной системы + + - Недостаточная чувствительность датчиков: Пропуск объектов или ложные срабатывания + - Влияние пыли/влаги: Затруднение работы сенсоров + - Нестабильность работы датчиков: Необходимость постоянной калибровки + +### 3. Проблемы управления движением + + - Неправильная синхронизация: Несовпадение времени сортировки и движения конвейера + - Недостаточная мощность приводов: Задержки в перемещении + - Конфликты в движении: Пересечение траекторий сортировщиков + +### 4. Проблемы программного обеспечения + + - Недостаточная обработка ошибок: Простой системы при возникновении проблем + - Неправильная логика принятия решений: Неправильная классификация объектов + - Проблемы с обновлением модели ИИ: Устаревшие алгоритмы распознавания + +### 5. Проблемы механики + + - Недостаточная прочность конструкции: Повреждение при высоких скоростях + - Неправильное размещение сортировщиков: Конфликты при перемещении + - Проблемы с удержанием объектов: Потеря товаров при сортировке + + ## Решения от ИИ: + +Когда мы переходим к прототипу на **Arduino + отдельный сервер**, архитектура меняется. Теперь у нас есть «Мозг» (сервер), который видит и думает, и «Руки» (Arduino), которые исполняют. + +Главная проблема здесь — **задержка (latency)** при передаче данных между сервером и контроллером. Если сервер скажет «толкай» в тот момент, когда объект уже проехал, система провалится. + +Вот как я бы решил эти проблемы в контексте такого прототипа: + +### 1. Визуальное распознавание (Серверная часть) +Поскольку сервер мощный, мы можем использовать тяжелые модели (YOLO, TensorFlow), но должны ограничить влияние среды. + +* **Освещение:** Для прототипа я бы сделал «световой короб» из белого пластика или картона с LED-лентой внутри. Это создаст мягкий свет без теней, что критично для дешевых веб-камер. +* **Схожие признаки:** На сервере я бы реализовал многоэтапную проверку: сначала определение класса объекта, затем — анализ его геометрии (площадь, периметр), чтобы отличить, например, красный кубик от красного шарика. +* **Калибровка:** Чтобы сервер понимал, где находится объект в реальном мире, я бы использовал «маркеры привязки» (например, черные метки по углам ленты). Сервер видит метку -> понимает масштаб -> вычисляет координаты объекта в миллиметрах. + +### 2. Сенсорная система (Arduino часть) +Датчики на Arduino будут служить «триггерами» для сервера. + +* **Чувствительность:** Я бы добавил ИК-датчик в начале линии. Как только объект пересекает его, Arduino посылает сигнал на сервер: «Объект в зоне, сделай фото!». Это избавит сервер от необходимости анализировать видеопоток 24/7. +* **Пыль/Влага:** В прототипе это менее критично, но я бы использовал простые пластиковые колпачки-козырьки над датчиками, чтобы на них не оседал мусор. +* **Нестабильность:** Программный «антидребезг» (debouncing) в коде Arduino, чтобы один объект не засчитывался как несколько из-за помех. + +### 3. Управление движением (Arduino часть) +Здесь решается проблема рассинхронизации между «медленным» сервером и «быстрым» конвейером. + +* **Синхронизация (Критический узел):** Я бы **не** использовал команду «Толкай сейчас». Вместо этого сервер отправляет пакет данных: `ID объекта` и `Тип (куда сортировать)`. Arduino записывает этот объект в очередь (массив) и отслеживает его движение с помощью энкодера на моторе или датчика прохождения. + * *Логика:* «Я знаю, что объект №5 — это 'Красный', и он должен быть сброшен через 500 импульсов энкодера». +* **Мощность приводов:** Использование внешнего блока питания для моторов (не от Arduino!), чтобы избежать просадок напряжения и перезагрузок контроллера при старте ленты. +* **Конфликты:** Ограничение скорости подачи. В прототипе проще всего реализовать «дискретную подачу»: один объект заходит в систему -> обрабатывается -> вылетает -> только тогда подается следующий. + +### 4. Программное обеспечение (Взаимодействие) +Разделение ответственности между Python (сервер) и C++ (Arduino). + +* **Обработка ошибок:** Внедрение «контрольного сигнала» (Heartbeat). Если Arduino не получает сигнал от сервера в течение 2 секунд, он останавливает конвейер, чтобы товары не улетели в пустоту. +* **Логика принятия решений:** Сервер отправляет не просто команду, а структуру данных. Например: `{"id": 12, "action": "divert", "target": 2, "confidence": 0.98}`. Если `confidence` низкий, Arduino отправляет объект в корзину «Ошибка». +* **Обновление модели:** Преимущество сервера в том, что я могу обновлять модель ИИ, не перепрошивая Arduino. Весь «интеллект» живет в Python-скрипте. + +### 5. Механика (Прототип) +Для прототипа важна модульность и легкость замены деталей. + +* **Прочность:** Использование 3D-печатных деталей с заполнением (infill) более 40% в точках крепления моторов и использование подшипников в осях, чтобы избежать люфта. +* **Размещение:** Установка сортировщиков (сервоприводов) на стандартных профилях или рельсах, чтобы их можно было сдвинуть на пару сантиметров вперед/назад для точной подстройки под камеру. +* **Удержание объектов:** Вместо жестких толкателей я бы использовал «мягкие» лапки из силикона или резины на сервоприводах. Это предотвратит опрокидывание легких предметов и снизит ударную нагрузку на пластиковые детали. + +**Резюме по архитектуре:** +`Датчик (Arduino) -> Триггер (Сервер) -> Распознавание (Сервер) -> Команда в очередь (Arduino) -> Отсчет расстояния (Arduino) -> Сброс (Механика)`. \ No newline at end of file