Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Прототип цветового сенсора на Arduino — определение и отображение названий цветов

Компоненты

Arduino UNO1 шт.
RGB-светодиод (общий анод, рассеивающий)1 шт.
Фоторезистор (CdS, LDR)1 шт.
LCD 16x2 (любой, совместимый с LiquidCrystal)1 шт.
Резисторы: 10 кОм (2 шт., для кнопки и CdS), 100 Ом (3 шт., для RGB)—
Тактовая кнопка 12 мм1 шт.
Перемычки, макетная плата1 набор

Инструменты разработки

О проекте

Упрощённая версия полной статьи. Видео проекта демонстрирует принцип работы.

Обзор проекта

Аналог человеческого цветовосприятия: RGB-модель (>16 млн цветов) представлена 3D-пространством (R,G,B = 0–255). Детекция цвета выполняется комбинацией RGB-светодиода и фоторезистора, изолированных от внешнего света (чёрная пленочная кассета идеально подходит). Светодиод последовательно светит красным, зелёным, синим — фоторезистор измеряет отражённую интенсивность каждого компонента.

Многослойный перцептрон (MLP)

MLP — прямой нейронный сеть с входным слоем (3 входа: R,G,B), одним скрытым слоем (6 нейронов) и выходным слоем (10 нейронов = 10 распознаваемых цветов). Обучение обратным распространением (supervised learning). Сеть уже обучена и готова к работе. Подробности обучения и датасет — в блоге автора и на GitHub.

Прототип цветового сенсора на Arduino — определение и отображение названий цветов

Распознавание цвета

Во время обучения сеть отобрала области в RGB-пространстве, разделённые гиперплоскостями — каждая область соответствует цвету. Новый RGB-вектор попадает в область и классифицируется. Датасет (75 примеров) нормирован в диапазон [0,1] (деление на 255). На выходе сеть выдаёт float-значения; пост-обработка: нейрон с максимальным выходом → 1, остальные → 0.

Прототип цветового сенсора на Arduino — определение и отображение названий цветов

Электрическая схема

Схема рассчитана на общий анод RGB-светодиод. Если у вас общий катод — инвертируйте логику в коде. Резистор установлен на общий анод (среднее значение) — для точности лучше ставить резисторы на каждый катод отдельно. RGB-светодиод и фоторезистор расположены рядом и изолированы от постороннего света.

Прототип цветового сенсора на Arduino — определение и отображение названий цветов

Цветовая теория

Работаем с диффузным отражением (матовые поверхности). Луч цвета, падая на предмет, отражается пропорционально содержанию этого цвета в пигменте предмета. Красный свет на жёлтый объект отражается сильно (жёлтый = красный + зелёный), синий — слабо. Измеряя макс./мин. отражение для каждого цвета (на белом и чёрном эталонах), калибруем датчик и масштабируем показания в [0,255] и [0,1] для нейросети.

Прототип цветового сенсора на Arduino — определение и отображение названий цветов

Совет: после калибровки не двигайте компоненты и экран от внешнего света — иначе сбится нулевая точка.

Программирование

Алгоритм: 3 итерации (R,G,B). В каждой — включаем цвет, ждём стабилизации фоторезистора (500 мс, подбирается экспериментально), читаем АЦП. Калибровка: два прохода — на чёрном и белном эталонах для нахождения мин/макс. Распознавание: собранные RGB [0,1] подаются в MLP (библиотека Neurona, ставится через Library Manager). Веса сети уже вшиты в код.

Тесты

Распознавание цветов, напечатанных на матовой бумаге струйным принтером. На диаграмме показаны верные определения и единичные ошибки (цифры внутри — индексы ошибочно определённых цветов).

Прототип цветового сенсора на Arduino — определение и отображение названий цветов

Код

Полный скетч в папке colorSensor репозитория GitHub: moretticb/ColorSensor. Требуется установленная библиотека Neurona (Library Manager). Схема должна соответствовать приведённой выше.

Схемы

Прототип цветового сенсора на Arduino — определение и отображение названий цветов

Кнопка используется согласно инструкциям на LCD-дисплее.

Производственный процесс

  1. Цветовая маркировка резисторов — полное руководство по расшифровке номинала, допуска и стандартов E-серий
  2. Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
  3. Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
  4. Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
  5. Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
  6. Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
  7. Бесконтактный жестовый замок: APDS-9960 + Arduino для безопасного доступа
  8. Набор-компаньон для Arduino Nano — необходимые компоненты и инструменты для DIY-электроники
  9. Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
  10. Точный тест времени реакции на Arduino UNO