Датчик цвета способен распознавать оттенки и используется в различных робототехнических системах, например, для сортировки объектов по цвету.
Принцип работы датчика основан на анализе отраженного света от поверхности. Внутри сенсора находятся 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.
Последнее число - код цвета в шестнадцатеричной системе.