
Датчик цвета для ардуино рассмотрим на примере датчика 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