Главная » Микроконтроллеры
Призовой фонд
на март 2017 г.
1. UNI-T UT-39C
Паяльник
2. Тестер компонентов LCR-T4
Паяльник
3. 100 руб.
От пользователей

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

Попала мне в руки как-то вещь, а точнее датчик под маркировкой 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) и полученная частоты поступает на выход датчика. Однако не все так просто, если просто измерить частоту и принять ее за цвета, то получим скорее всего кашу. В документации на датчик имеется таблица, определяющая пропускную способность фильтров фотодиодов относительно определенных длин волны (как вам известно, длина волны определяет спектр видимых цветов). И относительно этих данных нужно подобрать коэффициенты для частот трех цветов фильтров, чтобы измеренные данные соответствовали действительности. Для удобства измеренные частоты можно перевести в формат 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):

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

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

Сердцем схемы является микроконтроллер Atmega8.  Данный микроконтроллер можно использовать как в корпусе DIP-28, так и в СМД исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации используется жидко кристаллический (ЖК или LCD) дисплей SC1602. Он имеет 2 строки символов по шестнадцать штук в каждой из них. ЖК дисплей подключается к микроконтроллеру по четырех битной системе. Переменный резистор 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-бит
ATmega8
1 Поиск в FivelВ блокнот
VR1 Линейный регулятор
L7805AB
1 Поиск в FivelВ блокнот
VD1-VD4 Выпрямительный диод
1N4007
4 Поиск в FivelВ блокнот
M1 Датчик цветаTCS32001 Поиск в FivelВ блокнот
R1 Резистор
22 Ом
1 Поиск в FivelВ блокнот
R2 Подстроечный резистор10 кОм1 Поиск в FivelВ блокнот
R3 Резистор
10 кОм
1 Поиск в FivelВ блокнот
C1 Электролитический конденсатор1000 мкФ1 Поиск в FivelВ блокнот
C2, C3 Конденсатор100 нФ2 Поиск в FivelВ блокнот
C4 Электролитический конденсатор220 мкФ1 Поиск в FivelВ блокнот
HG1 LCD-дисплейSC16021 На базе HD44780Поиск в FivelВ блокнот
Tr1 ТрансформаторBV EI 382 11891 220В - 9В ACПоиск в FivelВ блокнот
S1 Тактовая кнопкаTC-A1091 Поиск в FivelВ блокнот
Добавить все

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

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

Теги:

Опубликована: 0 2
Я собрал 0 4
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 4.8 Проголосовало: 4 чел.

Комментарии (18) | Я собрал (0) | Подписаться

0
Zlodey #
Скорость опроса можно было сделать раз в 10 побыстрее
Ответить
0

[Автор]
Gauss #
Так точность измерения частоты до единиц Гц, а если в 10 раз быстрее - будет точность до десятков Гц, единицы все время будут равны нулю, а вообще кому как удобно, этот датчик не даст большой точности сам по себе
Ответить
0
Zlodey #
Оно вам и так не выдаст точность в единицы Герц
Ответить
0

[Автор]
Gauss #
Именно при данном методе подсчета импульсов в единицу времени - нет, если измерять период и вычислять частоту, то да, будет быстрее и точность такая же в единицы Герц
Ответить
0
tyomanik #
И где это можно применять?
Ответить
0

[Автор]
Gauss #
Вот вы и предложите, работа с датчиком описана
Например, определение баланса белого RGB светодиодной ленты при разработке устройств с ее применением
Отредактирован 04.09.2014 14:02
Ответить
0
Andrey #
Цель статьи как я понял - показать работу с сенсором, а как и где применить - тут каждый сам должен думать. Применений можно найти масса, особенно в световых эффектах, системах автоматического коррекции баланса белого, печатном производстве, фото и т.п.
Лично я хочу взять данный проект за основу для устройства работы с пантонами цветов в полиграфии. Уже прикинул по деньгам выходит в районе 1000 руб. Ближайший зарубежный аналог от X-Rite стоит на eBay - 2200$.
Автору респект!
Ответить
0

[Автор]
Gauss #
Спасибо, но главное не забудьте про хорошее освещение, этому вопросу в статье не уделилось должного внимания - чем больше яркость, тем точнее определение цвета.
Ответить
0
RGB #
Похоже засветка светодиодами датчика сильно влияет на результат.
Ответить
0

[Автор]
Gauss #
Конечно - яркость цветов, воспринимаемых датчиком с подсветкой, больше, если в темноте пытаться определить - будет просто черный цвет
Ответить
0
Arhat109 #
Спасибки за обзор, очень детально.
По программе:
1. Чем выше режим частоты (100%), тем шустрее определение цветов. Как-бы понятно, что желательно выставлять s0=s1=1.
2. В переводе на люксы, сам датчик вполне тянет на измерительный прибор: шумы не более 0.1-0.2лк, диапазон 0.4 - 12000лк при неравномерности 0.2% что само по себе очень даже нефигово (какие люксы и когда - есть табличка в википедии: "освещенность");
3. Высокая чувствительность всех(!) каналов к ИК засветке .. которую производят светодиоды тоже. Применение без ИК отсекающего светофильтра - проблематично.
4. Высокая засветка от своих же светодиодов. Применение без изолирующей трубки - проблематично;
5. Замер на прерываниях полезен только как демо-режим. Ибо реакция на него у ардуино около 50тактов, что дает "пропуски" в подсчете уже с 2-3тыс. люксов;
6. Замер периода даст ошибку подсчета начиная с частоты 160кГц (100%) более 1% - т.е. полезен только на слабых освещенностях;
7. Подсчет импульсов даст ошибку в 1% на частотах ниже 100гц для 10мсек интервала;
8. Фильтры имеют "перекрытие", которое надо вычитать с учетом относительной яркости каналов (от белого) .. что усложняет программу замера.
9. Датчик "дрожит" (даташит), что требует усреднения нескольких замеров.

В целом, для нешустрых измерений и с учетом вышеизложенного, вполне может использоваться как чувствительный прибор для домашнего применения с точность до 0.5%, что очень немало.
Ответить
0

[Автор]
Gauss #
Спасибо за отзыв, много статистической полезной информации в дополнение к статье!
Ответить
0
Tantrumm #
Большое спасибо за статью!
Каким образом происходит преобразоваине частосты в числовой диапазон 0-255?
И зачем нужна функция BCD_3IntLcd()?
Ответить
0

[Автор]
Gauss #
1. в даташите на самом деле все ответы - 3 страница, в таблице Full-scale frequency (See Note 4), а в коде пропорция перевода полной шкалы в текущее значение
2. вывод на дисплей, это же логично
Ответить
0
Tantrumm #
То есть
600кГц - 255
500 кГц - 0
верно?
Ответить
0

[Автор]
Gauss #
то есть
600 кГц - 255
0 Гц - 0
Ответить
0
Tantrumm #
Всё таки не пойму...
Что делает это h=h*945/2000;? (и числа для каждого цвета разные)
Зачем это x=(h*255)/k;? (тут как я понимаю перевод из числа частоты в 0-255)
И зачем здесь множить на 5 BCD_3IntLcd(x*5);?
Ответить
0

[Автор]
Gauss #
Ох, 2 года прошло, однако, а я код не прокомментировал в этих частях....
1. числа для каждого цвета разные, потому что даташит, стр.4. в таблице (почему для red взял 0,945 (94,5 %) и поделил на 2 - не помню.. видимо для красного засвет не так сильно влияет (с отсылкой на 3. и отзыв выше ))
2. да
3. светодиоды подсветки засвечивали сам датчик из-за этого цвет воспринимался несколько темнее - так магически добавил "яркости" для значения кодов
(с высоким засветом и без трубки таким образом получается я подгонял значения в конкретных условия - если их изменить или исключить засветку, то нужно изменить коэффициенты в коде или подставить все строго по даташиту здесь:
// вывести на экран измеренное (преобразовать значения и вывести в нужные места)
if (cvet == R) {LCD_Goto(1, 0); LCD_WriteData('R'); LCD_Goto(0, 1); h=h*945/2000;}
if (cvet == G) {LCD_Goto(7, 0); LCD_WriteData('G'); LCD_Goto(6, 1); h=h*685/1000;}
if (cvet == B) {LCD_Goto(13, 0);LCD_WriteData('B'); LCD_Goto(12,1); h=h*610/1000;}

x=(h*255)/k;
BCD_3IntLcd(x*5);
)
Отредактирован 25.07.2016 20:27
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Ветрогенератор Металлоискатель MD3010II
вверх