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

Прототип датчика цвета:определение имени цвета из объектов

Компоненты и расходные материалы

Arduino UNO
× 1
Общий анод, рассеянный RGB
Обычный катод или анод ... используйте то, что у вас есть
× 1
Фоторезистор
× 1
Стандартный ЖК-экран Adafruit - 16x2, белый на синем
Все, что можно использовать с библиотекой LiquidCrystal Arduino
× 1
Резистор 10 кОм
Для тактильного переключателя и ячейки CDS
× 2
Резистор 100 Ом
150 Ом для красного контакта и 2x 100 Ом для зеленого и синего контактов светодиода RGB
× 3
Кнопочный переключатель SparkFun, 12 мм
× 1
Перемычки (общие)
× 1
Макет (общий)
× 1

Приложения и онлайн-сервисы

Инструментальные средства топологии MLP
Инструмент, используемый для переобучения нейронных сетей для использования с библиотекой Neurona в Arduino.

Об этом проекте

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

Эта статья разделена на разделы, перечисленные в правом боковом меню. Если вы хотите перейти к техническим деталям, проверьте оглавление справа или загрузите код из репозитория GitHub. Прежде чем продолжить чтение, посмотрите видео проекта, чтобы узнать, о чем этот проект на самом деле :)

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

Подобно цветовому зрению человеческого глаза, а также основанному на свете, модель RGB включает более 16 миллионов цветов , которые расположены в трехмерном пространстве , где целочисленные значения компонентов R (красный), G (зеленый) и B (синий) в диапазоне от 0 до 255 составляют координаты этого пространства. На основе этой модели обнаружение и распознавание цвета выполнялось с помощью связанных со светом электронных компонентов и механизмов машинного обучения ; по сути, это комбинация светодиода RGB и ячейки CdS (датчик освещенности, или LDR), которые изолированы от окружающего света . . Такие компоненты, соответственно, излучают и определяют интенсивность каждого света (красного, зеленого и синего), который отражается от объекта определенного цвета.

Многослойный персептрон

Многослойный персептрон (MLP) - это архитектура с прямой связью искусственных нейронных сетей, имеющая входной (не нейронный) слой, скрытые слои и выходной слой. Эта сеть обучается с помощью алгоритма обратного распространения ошибки, выполняющего контролируемое обучение (обучение на примерах).

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

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

Эту задачу можно выполнить с помощью нашей обученной сети MLP. Он позволяет классифицировать и распознавать пространственно разделимые образцы - в этом случае очень полезно. На этапе обучения сеть отображала области в цветовом пространстве RGB, показанном ниже, так что каждая область, изолированная гиперплоскостями, представляет цвет . . Следовательно, каждый новый цветовой образец RGB (представленный как трехмерная точка) попадает в определенную область, классифицируемую как соответствующий ей цвет.

С целью получения обобщения с помощью MLP для хорошего распознавания шаблонов RGB, обучающий набор (примеры цветов с желаемым выходом из трехмерного пространства, проиллюстрированные выше) должен быть представлен в сеть для этапа обучения. Обучающий набор, используемый в этом проекте, доступен на GitHub проекта. репозиторий. Если вам нравятся нейронные сети, продолжайте читать этот раздел и ознакомьтесь с разработанной мной игровой площадкой, чтобы вы могли использовать набор данных для самостоятельного обучения сети и использования его в коде :). В противном случае перейдите к сведениям о реализации . .

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

Набор данных (все примеры) содержит 75 экземпляров цветовых узоров в диапазоне от 0 до 1. Первоначально в диапазоне от 0 до 255, эти экземпляры были масштабированы путем простого деления каждого значения на 255, так что 0 <=x1, x2, x3 <=1 Как видно из набора данных, важно отметить, что только один нейрон на выходном слое должен выводить 1, тогда как остальные должны выводить ноль. Поскольку обученная сеть выводит значения с плавающей запятой, постобработка происходит следующим образом:

где yi - это выход i-го нейрона, а max (y) - это наибольшее выходное значение. На практике нейрон с наибольшим выходным сигналом дает 1 на выходе, а остальные - 0. Вот и все.

Электронная схема

Вся процедура обнаружения, возникающая из объектов, происходит в электронной схеме, включая вычислительную активность, выполняемую в Atmega328, подключенном к платам Arduino. Проверьте подключение по схемам ниже.

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

Еще одна важная деталь - я использую только один резистор со светодиодом RGB. Поскольку будет гореть один цвет за раз, я вставил резистор в общий анод со средним сопротивлением резисторов, которое должно было быть с катодами - лень, знаю и извиняюсь! Когда я пошел покупать детали для проекта, у них не было всего, что мне было нужно, но, тем не менее, очень важно использовать правильные резисторы с катодами, чтобы обеспечить точность собранных значений RGB по отношению к значениям RGB в компьютере. То, что я сделал, не так уж и плохо, так как узоры не искажаются; это просто не те цвета, которые мы видим на экране компьютера (и которые улавливает человеческий глаз).

На схемах можно увидеть смежность между светодиодом RGB и ячейкой CdS. Это потому, что они должны быть изолированы от окружающего света (старая черная пленочная трубка - идеальная деталь), чтобы можно было выполнить калибровку (объясняется в разделе «Программирование») и распознавание. Посмотрите видео проекта, чтобы увидеть, что такие компоненты изолированы от окружающего света.

Теория цвета

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

Вернемся к реальной теории цвета, когда свет (определенного цвета) достигает объекта, он отражается в соответствии со свойствами цвета этого объекта. Например, красный свет, достигающий желтого объекта, будет отражаться в зависимости от того, сколько красного существует в составе этого желтого цвета - помните, мы говорим об огнях! - поэтому ожидается, что будет отражаться много красного света, что имеет смысл, когда мы думаем о композиции RGB из желтого (по сути, красного и зеленого). Однако когда синий свет достигает желтого объекта, сильного отражения не ожидается из-за низкого присутствия синего в цветовой композиции.

Учитывая аддитивную цветовую систему, в которой белый и черный - это соответственно наличие и отсутствие каждого цвета (подробнее здесь ), можно измерить (с помощью ячейки CdS) максимальное и минимальное отражение каждого света от светодиода RGB, который достигнет цветных объектов. Тем не менее, можно выполнить калибровку электронных компонентов, включенных в схему. Это еще один ключ к обеспечению точности обнаружения, а также к обеспечению стабильного обнаружения шаблонов (избегая выбросов) - вот золотой совет :после калибровки постарайтесь (сильно!) не перемещать и не касаться ни электронных компонентов (особенно, когда они размещены на макетной плате), ни части, которую вы используете (вы должны использовать) для изоляции компонентов от окружающего света.

US_plugins_acrobat_en_motion_education_colorTheory.pdf

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

Для калибровки и распознавания датчик цвета выполняет три итерации после того, как цветной объект подвергается воздействию светодиода RGB и ячейки CdS. В первой итерации на объект попадает красный свет, и программа ожидает, что ячейка CdS стабилизирует свое восприятие; затем считывается аналоговый вход и сохраняется отражение красного света. Программа повторяет еще дважды для зеленого и синего цветов. Рисунок, показанный в Теории цвета, дает хорошее визуальное объяснение этого итеративного процесса.

Что касается калибровки, упомянутый выше итерационный процесс выполняется дважды:один раз для черного цвета и один раз для белого цвета. Как объясняется в теории цвета, это для обнаружения максимума и минимума - первоначально от около нуля до около 1024 , в соответствии с разрешением чтения - отражения красного, зеленого и синего огней, получение истинного диапазона для правильного масштабирования до интервалов [0, 255] (для информативных целей) и [0, 1] (фактический ввод для питания нейронной сети ).

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

При обнаружении собранные значения RGB - от 0 до 1 - подаются в MLP, выполняя фактическое распознавание цвета. Для MLP, работающего в Arduino, я использую Neurona - библиотеку, которую я написал, чтобы легко использовать ANN в arduino, которую можно установить из Arduino IDE с помощью диспетчера библиотек. Проверьте также этот пост подробнее.

Как упоминалось ранее, сеть уже обучена и готова к обнаружению в коде проекта. Он был обучен с использованием разработанной мной Playground, встраивая в код скорректированные веса, так что библиотека Neurona делает сеть готовой к работе.

Тесты

В информационных целях из набора данных были извлечены некоторые цвета для выполнения некоторых тестов распознавания:

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

Код

Прототип датчика цвета
Код для отправки в Arduino находится внутри папки colorSensor. Убедитесь, что ваша электронная схема построена в соответствии с представленными схемами и что библиотека Neurona правильно установлена ​​(вы можете установить ее из Arduino Library Manager). Https://github.com/moretticb/ColorSensor/

Схема

Используйте кнопку в соответствии с инструкциями на ЖК-дисплее.

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

  1. Цветовые коды резисторов
  2. Сигнал тревоги для растений, предупреждающий о жажде
  3. Итальянские часы со словами
  4. Простой датчик препятствий с Arduino
  5. Счетчик кВтч Sigfox
  6. Монитор температуры Bluetooth
  7. Блокировка, управляемая жестами
  8. Компаньон IC
  9. Изолированный аналоговый вход для Arduino
  10. Измерьте время реакции