- Роботрек вики
- Инструменты пользователя
- Инструменты сайта
- Содержание
- Датчик цвета
- Описание
- Подключение
- Программирование
- Распознавание цвета и уровня освещенности с помощью APDS-9960
- Датчик цвета
- Принцип работы
- Технические характеристики модуля
- Подключение
- Программа
- Урок № 5 — Продолжаем изучать датчик цвета
- Введение:
- 6.1. Датчик цвета – режим «Яркость отраженного света»
- 6.2. Датчик цвета – режим «Яркость внешнего освещения»
- 6.3. Желтая палитра — «Датчики»
Роботрек вики
Инструменты пользователя
Инструменты сайта
Содержание
Датчик цвета
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
Описание
Датчик цвета позволяет определять цвет поверхности. По сути это два устройства в одном — трехцветный светодиод и датчик освещенности, которые можно использовать по отдельности.
Принцип работы: Датчик цвета имеет два основных компонента -трехцветный (RGB) светодиод, который излучает красный, синий и зеленый свет, а также светочувствительный датчик (фоторезистор), который определяет интенсивность падающего на него света.
Белый свет состоит из всех цветов радуги. Когда свет падает на поверхность, некоторые цвета поглощаются, а некоторые отражаются. Отраженные цвета – это цвета воспринимаемого нами объекта. Для измерения и определения количества цвета с помощью электронной схемы, вам необходимо измерить интенсивность различных длин волн света, отраженного от поверхности. Самый простой способ сделать это – осветить поверхность разными цветами и измерить, какой из цветов поверхность отражает лучше. Измеряя отраженный свет для каждого цвета можно вычислить цвет объекта.
Для улучшения результатов измерений следуйте следующим советам:
Подключение
Датчик использует два стандартных 3-пиновых разъема, однако, подключается не совсем обычно:
Коннектор 1 (без цветового обозначения) подключается в любой из портов IN контроллера «Трекдуино», сигнальный провод этой шины подключен к фоторезистору, поэтому, подключив только эту шину, вы сможете использовать датчик как датчик освещенности.
Коннектор 2 (с цветовой маркировкой) служит для управления трехцветным светодиодом. Каждый из проводов подключен напрямую соответствующему каналу светодиода. Наклейка с цветовой маркировкой на коннекторе указывает, к какому из каналов соответствует каждый из проводов. Подключается в любые три порта OUT и в любые порты IN контроллера «Трекдуино». Подключается горизонтально в верхнюю (сигнальную, «S») линию контактов.. Для того, чтобы использовать только RGB-светодиод, коннектор №1 все равно придется подключить, т.к. земляной провод (GND) общий для светодиода и фоторезистора.
Программирование
Блоки, необходимые для работы с датчиком цвета, расположены в группе блоков «Датчики».
Калибровка
Каждый раз при перезагрузке программы, использующей датчик цвета, в момент выполнения блока Настройка датчика цвета будет производится калибровка датчика под текущие условия освещения. Процедура калибровки выполняется следующим образом:
Для удобной работы с датчиком, сделайте 2 карточки 5х8 см. черного и белого цвета.
Блок и генерируемая функция | Описание |
---|---|
Аргументы:
Красный светодиод (int Rpin) — порт, к которому подключен красный канал RGB-светодиода
Синий светодиод (int Bpin) — порт, к которому подключен синий канал RGB-светодиода
Зеленый светодиод (int Gpin) — порт, к которому подключен зеленый канал RGB-светодиода
датчик (int Spin) — порт, к которому подключен немаркированный провод датчика освещенности.
Источник
Распознавание цвета и уровня освещенности с помощью APDS-9960
Недавно на Habr.com промелькнула статья в которой, среди прочего, сообщалось о датчике освещенности. Некоторое время назад я нашел и приобрел интересную вещь — модуль производства фирмы RobotDyn на основе датчика APDS-9960, который тоже умеет измерять уровень освещенности. Поискав и не сумев отыскать упоминаний сего прибора на данном ресурсе, я решил, что это подходящий повод для написания статьи.
В статье мне бы хотелось в общих чертах познакомить читателей с возможностями которые предоставляет этот датчик и более подробно рассмотреть каким образом с его помощью можно определять цвет и измерять уровень освещенности.
APDS-9960 — это датчик от компании Avago, он представляет собой комбинированный цифровой датчик с целым рядом разных интересных и полезных функций.
Он умеет распознавать жесты, определять приближение, а еще он умеет регистрировать интенсивность окружающего освещения и определять цвет.
Вот именно об этом и пойдет речь в данной статье — с помощью старенькой STM32VLDISCOVERY и APDS-9960 мы с Вами измерим освещенность и будем определять цвет во всем его богатстве оттенков Красного, Зеленого и Синего.
Однако, прежде чем мы приступим к практической части, позвольте сперва несколько слов написать об общих возможностях APDS-9960.
Функциональная схема APDS-9960 представлена на рисунке ниже
Распознавание жестов
Представление о том как выглядит распознавания жестов на APDS-9960 очень неплохо показано на этом видео.
В документации описан принцип регистрации жестов:
Для распознавания жеста используется четыре направленных фотодиода которые регистрируют отраженный свет (в ИК диапазоне) излучаемый встроенным светодиодом.
Функция обнаружения приближения
Судя по описанию из все той же документации, механизм обнаружения (приближения) работает по такому же точно принципу, что и распознавание жестов.
Распознавание цвета и уровень окружающего освещения (Color/ALS)
Согласно функциональной схеме, датчик определяет цвет/уровень освещенности с помощью соответствующих фотодиодов. Также заявлено, что APDS-9960 имеет встроенные фильтры блокирующие ультрафиолетовый и инфракрасный диапазоны.
Упрощенно это выглядит так: зарегистрированные фотодиодами сигналы измеряются с помощью АЦП, заносятся в буфер и затем данные отправляются по i2c.
Графики на картинке выше взяты из документации на датчик, слева сверху представлена спектральная характеристика Color Sense (RGBC).
Сигнал RGBC фотодиодов накапливается в течение периода времени, установленного значением регистра ATIME. У SparkFun (в их «apds9960.h») это значение определено константой DEFAULT_ATIME и равно 219 что соответствует 103 ms.
Усиление регулируется в диапазоне от 1x до 64x и определяется настройкой параметра CONTROL AGAIN. Константа DEFAULT_AGAIN, равная, в свою очередь значению 1, что соответствует усилению в 4 раза.
Практическая часть
Лично меня в APDS-9960 интересовала только функция Color/ALS, поэтому я решил рассмотреть ее наиболее подробно и написал небольшой код демонстрирующий ее работу.
Код я намеренно старался сделать максимально компактным, лаконичным и предельно простым для понимания; весь код целиком будет представлен в конце статьи.
Итак, вся документация (чертеж, распиновка и принципиальная электрическая схема) на модуль доступна на сайте производителя.
Подключим наш модуль APDS-9960 к STM32VLDISCOVERY
APDS9960 для связи с внешним миром использует интерфейс i2c, поэтому у STM32VLDISCOVERY задействуем шину I2C1 подключив вывод модуля SCL к ножке PB6, а вывод SDA, соответственно к ножке PB7. Не забываем подключить питание и общий провод. Прерывания в данном случае использоваться не будут, поэтому вывод Int можно не подключать. У меня на фото он подключен, но не используется.
А теперь немножко кода. Поскольку все общение с модулем происходит с помощью i2c, создадим необходимую конфигурацию и определим функции чтения/записи для i2c.
Источник
Датчик цвета
Датчик цвета способен распознавать оттенки и используется в различных робототехнических системах, например, для сортировки объектов по цвету.
Принцип работы
Принцип работы датчика основан на анализе отраженного света от поверхности. Внутри сенсора находятся 8 фотодиодов разной чувствительности (2 для белого, 2 для синего, 2 для зеленого и 2 для красного цвета) и микросхема, которая занимается подсчетом интенсивностей составляющих. В итоге датчик раскладывает полученный цвет на три составляющие: красную, зеленую и синюю — именно эти данные можно получить и впоследствии с ними работать.
Для удобства и простоты использования мы разместили всю схему с необходимой обвязкой на одной плате, к модулю необходимо подключить только питание и выводы контроллера при помощи четырехконтактного разъема.
У модуля также имеется подсветка, которую можно включить или выключить при помощи джампера, который установлен на контактах GND и LED_EN.
Технические характеристики модуля
Напряжение: 5 В
Протокол: I2С
Подключение
Подключается датчик к контроллеру по шине I2C. Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:
VCC — питание
SCL — пин передачи данных
SDA — пин передачи данных
GND — земля (общий)
На противоположной стороне платы дополнительно выведен разъем, расширяющий функционал модуля:
GND — земля (общий)
INT — прерывание. Уровень меняется если превышен порог яркости заданный пользователем. По умолчанию не используется.
LED_EN — управление диодом подсветки (включение/выключение)
GND — земля (общий)
3.3V — пониженное питание
Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру по схеме ниже. Для быстрого и надежного подключения используйте QuatroPort A050.
Программа
Далее необходимо загрузить программу в микроконтроллер. Для данного модуля мы написали свою библиотеку, которую можно скачать здесь: https://github.com/geegrow/Geegrow_TCS34725
После запуска скетча на контроллере необходимо откалибровать сенсор, для этого нужно открыть монитор порта, появится надпись о том, что через 5 секунд начнется калибровка, за это время необходимо подготовиться и расположить перед датчиком белый лист бумаги. В течение следующих 5 секунд нужно перемещать бумагу параллельно сенсору отдаляя и приближая её.
Как только в монитор порта начнут поступать данные — калибровка завершена. Данные имеют следующий вид:
R — red — яркость красной составляющей цвета от 0 до 255.
G — green — яркость зеленой составляющей цвета от 0 до 255.
B — blue — яркость синей составляющей цвета от 0 до 255.
Последнее число — код цвета в шестнадцатеричной системе.
Источник
Урок № 5 — Продолжаем изучать датчик цвета
Введение:
На этом уроке мы продолжим изучать использование датчика цвета. Материал, изложенный ниже, очень важен для дальнейшего изучения курса робототехники. После того, как мы научимся использовать все датчики конструктора Lego mindstorms EV3, при решении множества практических задач, будем опираться на знания, полученные на этом занятии.
6.1. Датчик цвета – режим «Яркость отраженного света»
Итак, мы приступаем к изучению следующего режима работы датчика цвета, который называется«Яркость отраженного света». В этом режиме датчик цвета направляет поток красного света на близкорасположенный предмет или поверхность и измеряет количество отраженного света. Более темные предметы будут поглощать световой поток, поэтому датчик будет показывать меньшее значение, по сравнению с более светлыми поверхностями. Диапазон значений датчика измеряется от 0 (очень темный) до 100 (очень яркий). Данный режим работы датчика цвета используется во множестве задач по робототехнике, например, для организации движения робота по заданному маршруту вдоль черной линии, нанесенной на белое покрытие. При использовании этого режима рекомендуется располагать датчик таким образом, чтобы расстояние от него до исследуемой поверхности составляло примерно 1 см (Рис. 1).
Рис. 1
Перейдем к практическим занятиям: датчик цвета уже установлен на нашем роботе и направлен вниз к поверхности покрытия, по которому будет передвигаться наш робот. Расстояние между датчиком и полом соответствует рекомендуемому. Датчик цвета уже подключен к порту «2» модуля EV3. Давайте загрузим среду программирования, подключим робота к среде и для проведения замеров воспользуемся полем с цветными полосами, изготовленным нами для выполнения заданий Раздела 5.4 Урока №5. Установим робота, таким образом, чтобы датчик цвета расположился над белой поверхностью. «Страницу аппаратных средств» среды программирования переключим в режим «Просмотр портов» (Рис. 2 поз. 1). В этом режиме мы можем наблюдать все выполненные нами подключения. На Рис. 2 отображено подключение к портам «B» и «C» двух больших моторов, а к порту «2» — датчика цвета.
Рис. 2
Для выбора варианта отображения показаний датчиков необходимо нажать на изображение датчика и выбрать нужный режим (Рис. 3)
Рис. 3
На Рис. 2 поз. 2 мы видим, что значение показания датчика цвета над белой поверхностью равно 84. В вашем случае может получиться другое значение, ведь оно зависит от материала поверхности и освещения внутри помещения: часть освещения, отражаясь от поверхности, попадает на датчик и влияет на его показания. Установив робота таким образом, чтобы датчик цвета расположился над черной полосой, зафиксируем его показания (Рис. 4). Попробуйте измерить самостоятельно значения отраженного света над оставшимися цветными полосами. Какие значения у вас получились? Напишите ответ в комментарии к этому уроку.
Рис. 4
Давайте теперь порешаем практические задачи.
Задача №11: необходимо написать программу движения робота, останавливающегося при достижении черной линии.
Решение:
Проведенный эксперимент показал нам, что при пересечении черной линии, значение датчика цвета в режиме «Яркость отраженного света» равняется 6. Значит, для выполнения Задачи №11 наш робот должен двигаться прямолинейно, пока искомое значение датчика цвета не станет меньше 7. Воспользуемся уже знакомым нам программным блоком «Ожидание» Оранжевой палитры. Выберем требуемый условию задачи режим работы программного блока «Ожидание» (Рис. 5).
Рис. 5
Необходимо также настроить параметры программного блока «Ожидание». Параметр «Тип сравнения» (Рис. 6 поз. 1) может принимать следующие значения: «Равно»=0, «Не равно»=1, «Больше»=2, «Больше или равно»=3, «Меньше»=4, «Меньше или равно»=5. В нашем случае установим «Тип сравнения» в значение «Меньше». Параметр «Пороговое значение» установим равным 7 (Рис.6 поз. 2).
Рис. 6
Как только установится значение датчика цвета меньше 7, что случится, когда датчик цвета окажется расположенным над черной линией, нам необходимо будет выключить моторы, остановив робота. Задача решена (Рис. 7).
Рис. 7
Для продолжения занятий нам понадобится изготовить новое поле, представляющее собой чернуюокружность диаметром примерно 1 метр, нанесенную на белое поле. Толщина линии окружности равняется 2 — 2,5 см. Для основы поля можно взять один лист бумаги размером A0 (841×1189 мм), склеить вместе два листа бумаги размером A1 (594×841 мм). На этом поле разметить линию окружности и закрасить её черной тушью. Можете также скачать макет поля, выполненный в формате Adobe Illustrator, а затем заказать его печать на баннерной ткани в типографии. Размер макета равен 1250×1250 мм. (Просмотреть скачанный ниже макет можно, открыв его в программе Adobe Acrobat Reader)
Данное поле пригодится нам для решения нескольких классических задач курса робототехники.
Задача №12: необходимо написать программу для робота, передвигающегося внутри круга, окантованного черной окружностью по следующему правилу:
- робот движется вперед прямолинейно;
- достигнув черной линии, робот останавливается;
- робот отъезжает назад на два оборота моторов;
- робот поворачивает вправо на 90 градусов;
- движение робота повторяется.
Знания, полученные на предыдущих уроках, помогут вам самостоятельно создать программу, решающую Задачу №12
Решение задачи №12
К работе датчика цвета в режиме «Яркость отраженного света» мы еще неоднократно вернемся, когда будем рассматривать алгоритмы движения вдоль черной линии. А пока разберем третий режим работы датчика цвета.
6.2. Датчик цвета – режим «Яркость внешнего освещения»
Режим работы датчика цвета «Яркость внешнего освещения» очень похож на режим «Яркость отраженного света», только в этом случае датчик не излучает освещение, а измеряет естественное световое освещение окружающей среды. Визуально данный режим работы датчика можно определить по слабо светящемуся синему светодиоду. Показания датчика изменяются от 0 (отсутствие света) до 100(самый яркий свет). При решении практических задач, требующих измерения внешнего освещения, рекомендуется располагать датчик, так, чтобы датчик оставался максимально открытым и не загораживался другими деталями и конструкциями.
Давайте закрепим датчик цвета на нашем роботе так же, как мы крепили датчик касания в Уроке №4 (Рис. 9). Подключим датчик цвета кабелем к порту «2» модуля EV3. Перейдем к решению практических задач.
Рис. 9
Задача №13: необходимо написать программу, изменяющую скорость движения нашего робота в зависимости от интенсивности внешнего освещения.
Чтобы решить эту задачу, нам надо узнать, как получать текущее значение датчика. А поможет нам в этом Желтая палитра программных блоков, которая называется «Датчики».
6.3. Желтая палитра — «Датчики»
Желтая палитра среды программирования Lego mindstorms EV3 содержит программные блоки, позволяющие получать текущие показания датчиков для дальнейшей обработки в программе. В отличие, например, от программного блока «Ожидание» Оранжевой палитры, программные блоки Желтой палитры сразу же передают управление к следующим за ними программным блокам.
Количество программных блоков Желтой палитры отличается в домашней и образовательной версии среды программирования. В домашней версии среды программирования отсутствуют программные блоки для датчиков, не входящих в домашнюю версию конструктора. Но, при необходимости, их можно самостоятельно подключить.
Желтая палитра. Домашняя версия среды программирования.
Образовательная версия среды программирования содержит программные блоки для всех датчиков, которые можно использовать с конструктором Lego mindstorms EV3.
Желтая палитра. Образовательная версия среды программирования.
Вернемся же к решению Задачи №13 и посмотрим, как можно получать и обрабатывать показания датчика цвета. Как мы уже знаем: диапазон значений датчика цвета в режиме «Яркость внешнего освещения» находится в пределах от 0 до 100. Такой же диапазон у параметра, регулирующего мощность моторов. Попробуем показанием датчика цвета регулировать мощность моторов в программном блоке «Рулевое управление».
Решение:
- Считать текущее показание датчика цвета в режиме «Яркость внешнего освещения»;
- Подать полученное с датчика цвета значение на вход параметра «Мощность» программного блока«Рулевое управление»;
- Повторять команды 1 — 2 в бесконечном цикле.
Рис. 10
Давайте загрузим получившуюся программу в робота и запустим её на выполнение. Робот поехал медленно? Включим светодиодный фонарик и попробуем подносить его к датчику цвета на разном расстоянии. Что происходит с роботом? Закроем датчик цвета ладонью — что случилось в этом случае? Напишите ответы на эти вопросы в комментарии к уроку.
Источник