Учебное пособие по распознаванию цвета Arduino — датчик цвета TCS230 TCS3200
<основной класс="главный сайт" id="главный">
В этом уроке по Arduino мы научимся определять цвета с помощью Arduino и датчика цвета TCS230/TCS3200. Вы можете посмотреть следующее видео или прочитать письменное руководство ниже для получения более подробной информации.
Как работает датчик цвета TCS230/TCS3200
TCS230 воспринимает цветной свет с помощью массива фотодиодов 8 x 8. Затем с помощью преобразователя тока в частоту показания фотодиодов преобразуются в прямоугольную волну с частотой, прямо пропорциональной интенсивности света. Наконец, используя плату Arduino, мы можем прочитать выходные сигналы прямоугольной формы и получить результаты для цвета.

Если мы внимательно посмотрим на датчик, мы увидим, как он обнаруживает различные цвета. Фотодиоды имеют три различных цветовых фильтра. Шестнадцать из них имеют красные фильтры, еще 16 – зеленые фильтры, еще 16 – синие фильтры, а остальные 16 фотодиодов прозрачные без фильтров.

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

Датчик имеет еще два контакта управления, S0 и S1, которые используются для масштабирования выходной частоты. Частоту можно масштабировать до трех различных предустановленных значений:100 %, 20 % или 2 %. Эта функция масштабирования частоты позволяет оптимизировать выходной сигнал датчика для различных частотомеров или микроконтроллеров.
Теперь мы готовы двигаться дальше и подключить датчик TCS230 к плате Arduino. Вот принципиальная схема.

Вы можете получить компоненты, необходимые для этого руководства по Arduino, по ссылкам ниже:
- TCS230 Датчик цвета TCS3200…….
- Плата Arduino ……………………………
- Макет и соединительные провода………
Исходный код датчика цвета TCS230
Описание: Сначала нам нужно определить контакты, к которым подключен датчик, и определить переменную для считывания частоты. В разделе настройки нам нужно определить четыре контакта управления как выходы, а выход датчика — как вход Arduino. Здесь нам также нужно установить масштабирование частоты, для этого примера я установлю его на 20% и запущу последовательную связь для отображения результатов в последовательном мониторе.
В разделе контура мы начнем со считывания красных фильтрованных фотодиодов. Для этого мы установим два контакта управления S2 и S3 на низкий логический уровень. Затем с помощью функции «pulseIn()» мы считываем выходную частоту и помещаем ее в переменную «частота». Используя функцию Serial.print(), мы будем печатать результат на последовательном мониторе. Та же процедура применима и для двух других цветов, нам просто нужно настроить контрольные штифты для соответствующего цвета.
/* Arduino Color Sensing Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int frequency = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Setting frequency-scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
Serial.begin(9600);
}
void loop() {
// Setting red filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("R= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(100);
// Setting Green filtered photodiodes to be read
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("G= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(100);
// Setting Blue filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("B= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.println(" ");
delay(100);
}
Code language: Arduino (arduino)
Теперь, если мы запустим Serial Monitor, мы начнем получать некоторые значения. Эти значения зависят от выбранного частотного масштабирования, а также от окружающего освещения.

Обратите внимание, что три значения различаются из-за разной чувствительности каждого типа фотодиода, как видно из диаграммы спектральной чувствительности фотодиода из таблицы данных датчика.
Тем не менее, теперь давайте посмотрим, как отреагируют значения, когда мы будем подносить к сенсору разные цвета. Так, например, если мы добавим красный цвет, начальное значение упадет, в моем случае примерно с 70 до примерно 25.

Итак, теперь, если мы хотим представить обнаруженные цвета с помощью модели RGB со значениями от 0 до 255, мы будем использовать функцию map() для сопоставления или преобразования показаний в значения от 0 до 255.
//Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,70,255,0);
Значение 70 будет сопоставлено с 0, а значение 25 — с 255. Та же процедура выполняется для двух других цветов.
Вот окончательный исходный код для этого примера:
/* Arduino Color Sensing Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int frequency = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Setting frequency-scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
Serial.begin(9600);
}
void loop() {
// Setting red filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
//Remaping the value of the frequency to the RGB Model of 0 to 255
frequency = map(frequency, 25,72,255,0);
// Printing the value on the serial monitor
Serial.print("R= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(100);
// Setting Green filtered photodiodes to be read
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
//Remaping the value of the frequency to the RGB Model of 0 to 255
frequency = map(frequency, 30,90,255,0);
// Printing the value on the serial monitor
Serial.print("G= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(100);
// Setting Blue filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
//Remaping the value of the frequency to the RGB Model of 0 to 255
frequency = map(frequency, 25,70,255,0);
// Printing the value on the serial monitor
Serial.print("B= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.println(" ");
delay(100);
}
Code language: Arduino (arduino)
Обратите внимание, что цвета не очень точны, но они все еще достаточно хороши для простых проектов. В качестве еще одного примера датчика цвета TCS230 в моем следующем видео мы узнаем, как сделать автоматическую машину для сортировки цветов на Arduino.

Не стесняйтесь задавать любые вопросы в разделе комментариев ниже и не забудьте ознакомиться с моей коллекцией проектов Arduino.
Производственный процесс
- Датчик освещенности Raspberry Pi:простое руководство по LDR
- Учебное пособие по блокировке RFID для Arduino
- Мониторинг CO2 с помощью датчика K30
- Какой ты рост?
- Емкостной датчик отпечатков пальцев с Arduino или ESP8266
- Башня датчика облаков Arduino
- Цветовой микшер Arduino RGB
- Цветовой миксер Arduino
- Музыкальный цвет
- Учебник по Arduino 01:Начало работы