Датчик цвета

Датчик цвета способен распознавать оттенки и используется в различных робототехнических системах, например, для сортировки объектов по цвету.

Принцип работы

Принцип работы датчика основан на анализе отраженного света от поверхности. Внутри сенсора находятся 8 фотодиодов разной чувствительности (2 для белого, 2 для синего, 2 для зеленого и 2 для красного цвета) и микросхема, которая занимается подсчетом интенсивностей составляющих. В итоге датчик раскладывает полученный цвет на три составляющие: красную, зеленую и синюю - именно эти данные можно получить и впоследствии с ними работать.

Для удобства и простоты использования мы разместили всю схему с необходимой обвязкой на одной плате, к модулю необходимо подключить только питание и выводы контроллера при помощи четырехконтактного разъема.

У модуля также имеется подсветка, которую можно включить или выключить при помощи джампера, который установлен на контактах GND и LED_EN.

Технические характеристики модуля

Напряжение: 5 В
Протокол: I2С

Подключение

Подключается датчик к контроллеру по шине I2C. Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:

VCC - питание
SCL - пин передачи данных
SDA - пин передачи данных
GND - земля (общий)

На противоположной стороне платы дополнительно выведен разъем, расширяющий функционал модуля:
GND - земля (общий)
INT - прерывание. Уровень меняется если превышен порог яркости заданный пользователем. По умолчанию не используется.
LED_EN - управление диодом подсветки (включение/выключение)
GND - земля (общий)
3.3V - пониженное питание

Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру по схеме ниже. Для быстрого и надежного подключения используйте QuatroPort A050. 

Программа

Далее необходимо загрузить программу в микроконтроллер. Для данного модуля мы написали свою библиотеку, которую можно скачать здесь: https://github.com/geegrow/Geegrow_TCS34725

#include "Geegrow_TCS34725.h"
Geegrow_TCS34725* color_dev;

void setup() {
  Serial.begin(9600);
  while(!Serial);
  color_dev = new Geegrow_TCS34725(TCS34725_I2C_ADDRESS, RN_ATIME_INTEG_TIME_154, RN_CONTROL_GAIN_1X);

  /* Auto-calibration */
  color_dev->calibrate();

  /* Manual calibration */
//  RGBC_value_t arr[4] = {
//    {3300, 3400, 3300, 10000},
//    {1800, 2300, 1900, 6000},
//    {290, 400, 300, 1000},
//    {150, 180, 160, 500},
//  };
//  color_dev->calibrateManual(arr, 4);
}

void loop() {
  // put your main code here, to run repeatedly:
  int16_t red = 0, green = 0, blue = 0, cl = 0;
  
//  color_dev->getRawData(red, green, blue, cl);
//  Serial.print("R: "); Serial.print(red);
//  Serial.print(" G: "); Serial.print(green);
//  Serial.print(" B: "); Serial.print(blue);
//  Serial.print(" Clear: "); Serial.print(cl);
//  Serial.println();

  color_dev->getRGB_255(red, green, blue);
  Serial.print("R: "); Serial.print(red);
  Serial.print(" G: "); Serial.print(green);
  Serial.print(" B: "); Serial.print(blue);
  Serial.print(" "); Serial.print(red, HEX);Serial.print(green, HEX);Serial.print(blue, HEX);
  Serial.println();
  }

После запуска скетча на контроллере необходимо откалибровать сенсор, для этого нужно открыть монитор порта, появится надпись о том, что через 5 секунд начнется калибровка, за это время необходимо подготовиться и расположить перед датчиком белый лист бумаги. В течение следующих 5 секунд нужно перемещать бумагу параллельно сенсору отдаляя и приближая её.

Как только в монитор порта начнут поступать данные - калибровка завершена. Данные имеют следующий вид:

R - red - яркость красной составляющей цвета от 0 до 255.

G - green - яркость зеленой составляющей цвета от 0 до 255.

B - blue - яркость синей составляющей цвета от 0 до 255.

Последнее число - код цвета в шестнадцатеричной системе.