Подключение датчика цвета

Датчик раскладывает полученный цвет на три составляющие: красную, зеленую и синюю. Комбинируя эти три цвета можно получить любой оттенок. 

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

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


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

В примерах к библиотеке есть код для этого проекта. 

#include "Geegrow_TCS34725.h"

#define R_PIN   11
#define G_PIN   10
#define B_PIN   9

Geegrow_TCS34725* color_dev;

void setup() {
  pinMode(R_PIN, OUTPUT);
  pinMode(G_PIN, OUTPUT);
  pinMode(B_PIN, OUTPUT);
  // put your setup code here, to run once:
  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();
  setColor(red, green, blue);
}

void setColor(uint8_t r, uint8_t g, uint8_t b) {
  analogWrite(R_PIN, r);
  analogWrite(G_PIN, g);
  analogWrite(B_PIN, b);
}

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

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

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

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

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

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