Общие сведения
Датчик цвета с ИК-фильтром TCS34725 — датчик позволит вашей электронике в буквальном смысле различать цвета окружающих предметов, а не только светлые и темные оттенки. Вам будут доступны значения таких параметров как: цветовая температура (по Кельвину), освещенность (в люксах), а также непосредственные значения красной, зеленой и синей составляющей.
ИК-фильтр
позволяет добиться более точной
цветопередачи, блокируя невидимую
человеческому глазу инфракрасную часть
спектра.
Характеристики
- Напряжение питания модуля: 3.3 - 5В;
- Потребляемый ток: 235 мкА (сред.), 330 мкА (макс.);
- Время преобразований: от 2.4 мс до 700 мс (настраиваемое);
- Скорость интерфейса I2C: до 400 кбит/с;
- Адрес датчика на шине I2C: 0x29 (41);
- Рабочая температура: -40 … +85 ºС;
- Габариты: 20x20 мм;
- Вес: 3.23 г;
Подключение
Для удобства подключения к Arduino воспользуйтесь Trema Shield, Trema Power Shield, Motor Shield или Trema Set Shield.
Модуль подключается к Arduino через интерфейс I2C (выводы SDA и SCL). Питание подается на выводы GND и VIN (от 3.3 до 5В). Вывод LED служит для управления светодиодом. Можно либо не использовать его вовсе (подключить к земле), либо контролировать через цифровой вывод Arduino, либо подключить к выводу INT и контролировать с помощью соответствующих функций из библиотеки.
Подробнее о модуле
Данный модуль построен на базе чипа TCS34725 и общается с Arduino по двухпроводному интерфейсу I2C. На плате дополнительно размещены: светодиод с нейтральным белым светом, стабилизатор напряжения в цепи питания и преобразователь уровней I2C 3.3/5В.
Для работы с модулем рекомендуем вам воспользоваться библиотекой Adafruit_TCS34725.
Примеры
Вывод полученного цвета на RGB-светодиод
// Подключаем библиотеки //
#include <Wire.h> // Для работы с шиной I2C
#include "Adafruit_TCS34725.h" // Для работы с датчиком TCS34725
//
// Выводы для ШИМ - сигнала
#define redpin 3 // Дополнительно подключаем резистор номиналом в ~560 Ом для красного цвета
#define greenpin 5 // Дополнительно подключаем резистор номиналом в ~1000 Ом для зеленого цвета
#define bluepin 6 // Дополнительно подключаем резистор номиналом в ~560 Ом для синего цвета
// Для RGB светодиода с общим анодом, подключаем общий вывод к +5В
// Для RGB светодиода с общим катодом, подключаем общий вывод к земле
//
#define commonAnode true // Для RGB светодиода с общим катодом изменить на false
//
byte gammatable[256]; // Гамма-таблица визуально различимых глазом цветов
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);
// Определяем объект tcs, экземпляр класса Adafruit_TCS34725
// Устанавливаем время выборки и чувствительность сенсора
// Время выборки может быть одним из значений: TCS34725_INTEGRATIONTIME_2_4MS,
// TCS34725_INTEGRATIONTIME_24MS, TCS34725_INTEGRATIONTIME_50MS,
// TCS34725_INTEGRATIONTIME_101MS, TCS34725_INTEGRATIONTIME_154MS,
// TCS34725_INTEGRATIONTIME_700MS
// Чувствительность сенсора может быть одним из значений: TCS34725_GAIN_1X,
// TCS34725_GAIN_4X, TCS34725_GAIN_16X, TCS34725_GAIN_60X
void setup()
{
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бит/сек
Serial.println("Color View Test!"); // Печатаем приветственное сообщение
// Инициируем работу датчика
if (tcs.begin()) // Если инициализация сенсора цвета прошла успешно...
{
Serial.println("Found sensor"); // Выводим сообщение об успешной инициализации
}
else
{
Serial.println("No TCS34725 found ... check your connections"); // Выводим сообщение об ошибке
while (1); // Входим в бесконечный цикл в случае неуспеха
}
// Конфигурируем выводы для ШИМ-сигнала как выходные
pinMode(redpin, OUTPUT);
pinMode(greenpin, OUTPUT);
pinMode(bluepin, OUTPUT);
// Инициализируем таблицу гамма-значений, она помогает
// конвертировать RGB значения в различимые человеческим глазом
// Отдельное спасибо за нее PhilB
for (int i=0; i<256; i++)
{
float x = i;
x /= 255;
x = pow(x, 2.5);
x *= 255;
if (commonAnode)
{
gammatable[i] = 255 - x;
}
else
{
gammatable[i] = x;
}
}
// Завершение инициализации
}
void loop()
{
uint16_t clear, red, green, blue; // Переменные для красной, зеленой и синей составляющих цвета
//
tcs.setInterrupt(false); // Включаем светодиод
//
delay(60); // Ждем как минимум 50 миллисекунд для выборки значений
//
tcs.getRawData(&red, &green, &blue, &clear); // Читаем данные
//
tcs.setInterrupt(true); // Выключаем светодиод
// Выводим в монитор последовательного порта полученные значения
Serial.print("C:\t"); Serial.print(clear);
Serial.print("\tR:\t"); Serial.print(red);
Serial.print("\tG:\t"); Serial.print(green);
Serial.print("\tB:\t"); Serial.print(blue);
// Вычисляем шестнадцатеричное значение цвета
uint32_t sum = clear;
float r, g, b;
r = red; r /= sum;
g = green; g /= sum;
b = blue; b /= sum;
r *= 256; g *= 256; b *= 256;
Serial.print("\t");
Serial.print((int)r, HEX); Serial.print((int)g, HEX); Serial.print((int)b, HEX);
Serial.println();
// Выставляем значения на выводах
analogWrite(redpin, gammatable[(int)r]);
analogWrite(greenpin, gammatable[(int)g]);
analogWrite(bluepin, gammatable[(int)b]);
}
Комплектация
- 1х Датчик цвета с ИК-фильтром TCS34725;
- 1х Соединитель типа "ПАПА-ПАПА";
Ссылки
- DataSheet;
- Библиотека Adafruit_TCS34725;
















