Датчик цвета для ардуино рассмотрим на примере датчика TCS230. Данный датчик располагается посреди платы, окружается фотодиодами 4 типов: шестнадцать фотодиодов с фильтром красного цвета, шестнадцать фотодиодов с фильтром зеленого цвета, шестнадцать фотодиодов с фильтром синего цвета, шестнадцать фотодиодов без какого либо фильтра.
Когда к датчику подносят один из цветов, на плате загорается светодиод. Так же модуль преобразует ток фотодиодов в частоту, определяемого цвета. Данная частота и передается на пин Arduino.
Распиновка датчика
Датчик цвета ардуино TCS230 имеет следующие выводы:
- GND – земля;
- OE – контакт включения;
- S1, S0 – масштабирование частоты импульсов;
- S3, S2 – вход, настраивается фильтр;
- OUT – выход преобразованной частоты;
- VCC – питание модуля.
Что бы установить какой цвет будет считываться модулем, необходимо в нужной комбинации установить уровни на контактах S2 и S3.Комбинации контактов для выбора цвета следующие:
| Тип фотодиода | S2 | S3 |
|---|---|---|
| Красный | LOW | LOW |
| Синий | LOW | HIGH |
| Без фильтра (чистый) | HIGH | LOW |
| Зеленый | HIGH | HIGH |
Так же на модуле есть возможность масштабирования частоты для совместимости работы на разных микроконтроллерах. Предустановлено 3 значения 100%, 20% и 2%. Для этого необходимо установить контакты S0 и S1.
| Масштабирование частоты | S0 | S1 |
|---|---|---|
| Отключение | LOW | LOW |
| 2% | LOW | HIGH |
| 20% | HIGH | LOW |
| 100% | HIGH | HIGH |
ВНИМАНИЕ! Для устойчивой работы ардуино, необходимо установить 20%.
Подключение датчика к Ардуино
Что бы увидеть какой цвет определил модуль подключим к ардуино RGB светодиод. Программа работает так, что как только датчик определения цвета, определит цвет, этот цвет загорится на светодиоде.
Подключим датчик цвета к ардуино согласно таблице:
| TCS230 | GND | VCC | OUT | S0 | S1 | S2 | S3 |
| Arduino Uno | GND | +5V | 8 | 4 | 5 | 6 | 7 |
Схема подключения датчика определения цвета
Внешний вид макета
Пример скетча для датчика цвета и Ардуино
После запуска программы, открываем мониторинг порта. Если подносить к модулю определенный цвет, на порту можно будет наблюдать код цвета.
// контакты TCS230 для подключения к Arduino
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
// для хранения частоты, считанной фотодиодами
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;
// для хранения данных о красном, зеленом и синем цветах
int redColor = 0;
int greenColor = 0;
int blueColor = 0;
// подключение к контактам rgb-светодиода
const byte rPin = 9;
const byte gPin = 10;
const byte bPin = 11;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(rPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(sensorOut, INPUT);
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
Serial.begin(9600);
}
void loop() {
// считывание данных с фотодиодов с красным фильтром
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
redFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту
redColor = map(redFrequency, 70, 120, 255,0);
Serial.print("R = ");
Serial.print(redColor);
delay(100);
// считывание данных с фотодиодов с зеленым фильтром
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
greenFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту
greenColor = map(greenFrequency, 100, 199, 255, 0);
Serial.print(" G = ");
Serial.print(greenColor);
delay(100);
// считывание данных с фотодиодов с синим фильтром
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
blueFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту
blueColor = map(blueFrequency, 38, 84, 255, 0);
Serial.print(" B = ");
Serial.print(blueColor);
delay(100);
// вывод на светодиод распознанный цвет
// вывод в монитор порта сообщение, какой цвет распознан
if(redColor > greenColor && redColor > blueColor){
digitalWrite( bPin, LOW );
digitalWrite( gPin, LOW );
digitalWrite( rPin, HIGH );
Serial.println(" - RED detected!");
}
if(greenColor > redColor && greenColor > blueColor){
digitalWrite( rPin, LOW );
digitalWrite( bPin, LOW );
digitalWrite( gPin, HIGH );
Serial.println(" - GREEN detected!");
}
if(blueColor > redColor && blueColor > greenColor){
digitalWrite( gPin, LOW );
digitalWrite( rPin, LOW );
digitalWrite( bPin, HIGH );
Serial.println(" - BLUE detected!");
}
}
Документация
Где купить?
- Модуль датчика цвета TCS230





