Определитель цвета

Попала мне в руки как-то вещь, а точнее датчик под маркировкой TCS3200. В первом приближении при изучении документации на эту микросхему (сам датчик в виде микросхемы с прозрачным корпусом) весьма приличная вещь. Под прозрачным корпусом матрица из фотодиодов размером 8 на 8 штук. Эта матриц разделена на 4 зоны: 16 фотодиодов с красным фильтром, 16 фотодиодов с зеленым фильтром, 16 фотодиодов с синим фильтром и 16 фотодиодов без фильтра. Таким образом можно измерять частоту (уровень или интенсивность цвета по частоте) отдельных основных цветов — красного, зеленого и синего. После получения данных об этих цветах, можно открыть какой-нибудь графический редактор, например, Paint и ввести значения красного, зеленого и синего в соответствующие поля редактора цветовой палитры и убедиться, что все таки датчик определяет цвет правильно (ну или почти правильно, все зависит от яркости).

Продолжаем изучение датчика. Микросхема имеет корпус SOIC-8. Один вывод — выход для измерения частоты, преобразованной из интенсивности цвета. Два вывода — плюс и минус питания. Ещё один вывод служит для включения датчика (активный уровень — 0). Ну, и самое интересное — это четыре вывода, определяющие режим работы датчика — S0 — S3. Выводы S0, S1 определяют шкалу частоты (в зависимости от комбинации высоких и низких потенциалов на этих выводах). Два вывода могут дать четыре комбинации режимов: 

  • 0 — отключить выход частоты
  • 1 — шкала 2% от 600 кГц максимальной возможной частоты
  • 2 — шкала 20% от 600 кГц максимальной возможной частоты
  • 3 — шкала 100% от 600 кГц максимальной возможной частоты

Далее два вывода S2, S3, они определяют режим измерения цвета, также два вывода дают четыре комбинации режимов:

  • 0 — используются фотодиоды с красным фильтром
  • 1 — используются фотодиоды с синим фильтром
  • 2 — используются фотодиоды без фильтра
  • 3 — используются фотодиоды с зеленым фильтром

 Теперь, зная назначение и функционал выводов датчика можно спокойно подключать его к микроконтроллеру и измерять цвета, управляя датчиком. Таким образом, датчик работает следующим образом — выводы S2, S3 задают используемый фильтр фотодиодов, свет, отраженный от поверхности предмета определенного цвета попадает на фотодиоды датчика, далее интенсивность света конвертируется в частоту (шкала частоты задана выводами S0, S1) и полученная частоты поступает на выход датчика. Но не все так просто, если просто измерить частоту и принять ее за цвета, то получим скорее всего кашу. В документации на датчик имеется таблица, определяющая пропускную способность фильтров фотодиодов относительно определенных длин волны (как вам известно, длина волны определяет спектр видимых цветов). И относительно этих данных нужно подобрать коэффициенты для частот 3-х цветов фильтров, чтобы измеренные данные соответствовали действительности. Для удобства измеренные частоты можно перевести в формат R-G-B (от 0 до 255 по каждому из цветов). Для этого берется используемая шкала (2%, 20% или 100%) и принимается за максимум, то есть за 255 (для шкалы 20% значение 255 будет соответствовать 120 кГц) и через пропорцию находим текущее значение цвета относительно измеренной частоты. Но просто цветная бумажка обладает маленькой яркостью, поэтому полученные данные можно просто умножить все на 5 или другое удобное значение, иначе все полученные цвета будут близки к серым или темным оттенкам, подсветка при свете дня не сильно помогает, зато при отсутствии света как раз кстати. При измерении цвета RGB светодиода домножать не потребуется, потому что излучение светодиодов дают хорошую яркость для нашего датчика цвета.

Параметры микросхемы (датчика):

  • напряжение питания от 2,7 В до 5,5 В
  • высокий входной уровень от 2 В до напряжения питания
  • низкий входной уровень от 0 В до 0,8 В
  • температура использования от -40 до 70 градусов по Цельсию
  • ток потребления от 1,4 до 2 мА
  • максимальная температура пайки 260 градусов по Цельсию

Для построения конструкции на микроконтроллере будем использовать готовый китайский модуль датчика на TCS3200 (TCS230):

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

Схема устройства определителя цвета представлена ниже:

Сердцем схемы является микроконтроллер Atmega8.  Данный микроконтроллер можно использовать как в корпусе DIP-28, так и в СМД исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации используется жидко кристаллический (ЖК или LCD) дисплей SC1602. Он имеет 2 строки символов по шестнадцать штук в каждой из них. ЖК дисплей подключается к микроконтроллеру по 4-х битной системе. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод «А» и «К» на плате дисплея. Подсветка включается через резистор, ограничивающий ток — R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Но пренебрегать этим резистором не стоит во избежание порчи подсветки. Кнопка S1 осуществляет сброс микроконтроллера (всей схемы). В качестве тактового генератора используется внутренний генератор микроконтроллера на частоту 8 МГц. Проект данного устройства разрабатывался лишь для ознакомления и обучения. Для более точного измерения рекомендуется использовать внешний кварцевый генератор (хотя в нормальных условиях при нормальной комнатной температуре особой разницы в точности можно и не заметить между внутренним генератором и кварцем).

Питается вся схема от простого модуля питания на силовом трансформаторе. Переменное напряжение выпрямляется четырьмя диодами VD1 — VD4 марки 1N4007, пульсации сглаживаются конденсаторами C1 и C2. Четыре выпрямительных диода можно заменить одним диодным мостом. Трансформатор применен марки BV EI 382 1189 — преобразует 220 вольт переменного тока в 9 вольт переменного тока. Мощность трансформатора составляет 4,5 Вт, этого вполне достаточно и ещё с запасом. Такой трансформатор можно заменить любым другим силовым трансформатором, подходящим для Вас. Либо данный питающий модуль схемы заменить на импульсный источник напряжения, можно собрать схему обратноходового преобразователя либо применить иже готовый блок питания от телефона, например — все это дело вкусов и потребностей. Выпрямленное напряжение с трансформатора стабилизируется на микросхеме линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее).

В качестве датчика цвета используется выше упомянутый модуль. 

Устройство собиралось на макетной печатной плате для микроконтроллера Atmega8:

Алгоритм работы микроконтроллера следующий: вкратце это в начале инициализируются все настройки, потом запускается разрешение на прерывания, по внешним прерываниям считается количество импульсов частоты от датчика, когда сработает прерывание по переполнению таймера определенное количество раз (чтобы прошла 1 секунда), прерывания глобально запрещаются и происходит подсчет частоты и ее конвертация в нужное значение, а также вывод этого значения на дисплей, потом применяются настройки для другого фильтра датчика цвета, по завершении этих операций прерывания снова глобально разрешаются и происходит подсчет импульсов по внешним прерываниям и так далее по кругу перебирая все три фильтра фотодиодов. На экране отображается три значения цветов — красного, зеленого и синего. Калибровочные коэффициенты подбирались экспериментально многократными экспериментами с показаниями и прошивкой микроконтроллера. Исходный код прилагается ниже.

В итоге можно сказать следующее: при цене на датчик порядка 4 — 5 условных (что не так и мало для такого датчика) результаты определения цвета обычных предметов не так уж и точны. Особого применения такому датчику я так и не смог придумать, буду рад комментариям по этому поводу (можно, например, обучить своего робота выбирать предметы по цвету и манипулировать ими или что-то в этом роде по надобности). Потому эту схему отнес к ознакомительным и обучающим проектам, не несущим большой практической ценности. 

Для программирования микроконтроллера ATmega8 необходимо знать конфигурацию фьюз битов (скриншот сделан в программе AVR Studio):

К статье прилагается прошивка для микроконтроллера Atmega8, проект протеус (вместо датчика цвета — генератор частоты), документация на датчик TCS3200, исходный код прошивки в программе AVR Studio, а также видео работы устройства на основе датчика цвета (на видео определяются цвета картонок, если ввести полученные данные в редактор цветов Paint, то можно заметить, что результаты более менее соответствуют действительности).


Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

IC1
МК AVR 8-битATmega81
VR1
Линейный регуляторL7805AB1
VD1-VD4
Выпрямительный диод1N40074
M1
Датчик цветаTCS32001
R1
Резистор22 Ом1
R2
Подстроечный резистор10 кОм1
R3
Резистор10 кОм1
C1
Электролитический конденсатор1000 мкФ1
C2, C3
Конденсатор100 нФ2
C4
Электролитический конденсатор220 мкФ1
HG1
LCD-дисплейSC16021
На базе HD44780Tr1
ТрансформаторBV EI 382 11891
220В — 9В ACS1
Тактовая кнопкаTC-A1091
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.