Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Датчик цвета

Датчик света встречается в виде модуля TCS230 (TCS3200). Модуль состоит из самого датчика цвета в центре платы и четырёх инфракрасных светодиодов, которые используются для освещения объекта, расположенного перед датчиком, чтобы обеспечить точность результатов измерения и их независимость от окружающего освещения. Датчик состоит из набора фотодиодов с цветовыми фильтрами для красного, синего и зелёного цветов и с просветляющим фильтром поверх них.

Чтобы определить цвет, датчик считывает данные с набора фотодиодов, расположенных в виде матрицы 8 × 8, которая включает 16 фотодиодов с фильтрами синего, 16 — с фильтрами зелёного, 16 — с фильтрами красного и 16 фотодиодов без фильтров. Четыре типа (цветов) фотодиодов чередуются друг с другом, чтобы минимизировать влияние неравномерности интенсивности падающего излучения. Все 16 фотодиодов для одного цвета включены параллельно, а выбор используемого во время работы фотодиода производится посредством штырьков.

На выходе датчика цвета TCS230 — прямоугольный сигнал с 50% коэффициентом заполнения, чья частота пропорциональна интенсивности света на выбранном световом фильтре.

Color Sensor

Купить на 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

schema

Напишем скетч.


#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. Напрашивается применение экрана, который умеет выводить цвета в данном режиме.

Также существуют различные библиотеки для работы с данным модулем.

Реклама