Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Датчик света встречается в виде модуля TCS230 (TCS3200). Модуль состоит из самого датчика цвета в центре платы и четырёх инфракрасных светодиодов, которые используются для освещения объекта, расположенного перед датчиком, чтобы обеспечить точность результатов измерения и их независимость от окружающего освещения. Датчик состоит из набора фотодиодов с цветовыми фильтрами для красного, синего и зелёного цветов и с просветляющим фильтром поверх них.
Чтобы определить цвет, датчик считывает данные с набора фотодиодов, расположенных в виде матрицы 8 × 8, которая включает 16 фотодиодов с фильтрами синего, 16 — с фильтрами зелёного, 16 — с фильтрами красного и 16 фотодиодов без фильтров. Четыре типа (цветов) фотодиодов чередуются друг с другом, чтобы минимизировать влияние неравномерности интенсивности падающего излучения. Все 16 фотодиодов для одного цвета включены параллельно, а выбор используемого во время работы фотодиода производится посредством штырьков.
На выходе датчика цвета TCS230 — прямоугольный сигнал с 50% коэффициентом заполнения, чья частота пропорциональна интенсивности света на выбранном световом фильтре.
Купить на AliExpress (у этого поставщика у модуля не подписаны некоторые выводы, возможно стоит поискать у другого продавца).
У модуля 8 выводов (4х2), встречаются также модули 5х2.
Color | Arduino
----------------
GND | GND
OE | N/A
S1 | D
S0 | D
VCC | 5V
Out | D
S2 | D
S3 | D
Напишем скетч.
#define S1 4
#define S0 5
#define S3 6
#define S2 7
#define sensorOut 8
// Stores frequency read by the photodiodes
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;
void setup() {
// Setting the outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// Setting the sensorOut as an input
pinMode(sensorOut, INPUT);
// Setting frequency scaling to 20%
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
// Begins serial communication
Serial.begin(9600);
}
void loop() {
// Setting RED (R) filtered photodiodes to be read
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
// Reading the output frequency
redFrequency = pulseIn(sensorOut, LOW);
// Printing the RED (R) value
Serial.print("R = ");
Serial.print(redFrequency);
delay(100);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
// Reading the output frequency
greenFrequency = pulseIn(sensorOut, LOW);
// Printing the GREEN (G) value
Serial.print(" G = ");
Serial.print(greenFrequency);
delay(100);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
// Reading the output frequency
blueFrequency = pulseIn(sensorOut, LOW);
// Printing the BLUE (B) value
Serial.print(" B = ");
Serial.println(blueFrequency);
delay(100);
}
Далее следует запустить скетч, открыть последовательный монитор и подносить к модулю предметы разных цветов. Модуль будет определять составляющие цвета в режиме RGB. Напрашивается применение экрана, который умеет выводить цвета в данном режиме.
Также существуют различные библиотеки для работы с данным модулем.