Обзор датчик цвета на TCS3472
В этой статье расскажу о высокочувствительный модуль цвета TCS3472, который способен определять RGB цвета (красный, зеленый, синий), потребляя при этом доли миллиампер и имеет широкую область применения.
В этой статье расскажу о высокочувствительный модуль цвета TCS3472, который способен определять RGB цвета (красный, зеленый, синий), потребляя при этом доли миллиампер и имеет широкую область применения.
Технические параметры:
► Напряжение питания модуля: 3.3 — 5В;
► Потребляемый ток: 235 мкА (сред.), 330 мкА (макс.);
► Время преобразований: от 2.4 мс до 700 мс (настраиваемое);
► Скорость интерфейса I2C: до 400 кбит/с;
► Адрес датчика на шине I2C: 0x29;
► Габариты: 31 x 11 x 4 мм;
► Вес: 3 грамм;
Обзор модуля TCS3472
Модуль основан на микросхеме TCS3472 производства AMS (ранее Taos). Так-же, на плате установлено два белых светодиода, стабилизатор напряжения, транзисторы и резисторы. Для связи с микроконтроллером, используется стандартный интерфейс I2C с фиксируемым адресом 0x29. Mosfet транзисторы используются для сдвига уровней интерфейса I2C, тем самым можно подключить как микроконтроллеру 3.3 В так и 5 В. Существуют несколько видов плат с датчиком TCS3472, в которых установлено один, два и более светодиодов, но по функционалу они одинаковые.
Принцип работы датчика TCS3472 простое, на измеряемый объект направляем белый свет (с помощью светодиодов), свет отражается от объекта и производится измерения количества красного, зеленого, синего и белого света.
Измерения производятся с помощью матрицы фотодиодов 3 х 4, которая состоит из красного, зеленого, синего и прозрачного фотодиода. Вся матрица закрыты ИК-фильтром, которая минимизирует влияние ИК-излучения на показания.
Далее, показания с выводов фотодиодов преобразуются в 16-битное цифровое значения с помощью четырех интегрирующих АЦП. Затем, эти данные доступны для микроконтроллера, через шину I2C.
Дополнительные настройки датчик TCS3472:
► Коэффициент усиления, можно установить 1x, 4x, 16x или 60x. Более высокие можно использовать в плохо освещенном месте, но увеличивается уровень шума.
► Время преобразований — это промежуток времени, используемый для считывания показания. Время может быть установлено равным 2,4 мс, 24 мс, 50 мс, 101 мс, 154 мс или 700 мс.
Назначение контактов:
► LED — вход управления LED, всегда включен, чтобы выключить необходимо установить в низкое состояние.
► INT — выход прерывания, активный низкий уровень. Выход является открытым коллектором, поэтому требуется подтягивающий резистор.
► SDA — линия SDA I2C.
► SCL — линия SCL I2C.
► 3V3 — вывод питания 3,3 В.
► GND — заземление вывод.
► VCC — питание модуля 3,3 В или 5 В
Подключение модуля TCS3472 к Arduino
Необходимые детали:
► Arduino UNO x 1 шт.
► Датчик цвета на TCS34725 x 1 шт.
► Провода DuPont M-F, 20 см x 1 шт.
Описание:
В примере покажу как подключить датчик цвета на TCS34725 к Arduino, полученные данные будем отправлять в последовательный порт.
Подключение.
Сначала подключить питание, выводы +5 В и GND (Arduino) подключаем к выводам VIN и GND (TCS34725), далее подключаем интерфейс I2C, выводы A4 и A5 (Arduino) подключаем к выводам SDA и SCL (TCS34725). Для удобства приведу схему подключения.
Установка библиотек:
Для работы с модулем необходимо установить библиотеку «Adafruit TCS34725», для установки перейдите в Скетч —> Подключить библиотеку —> Управление библиотеками.
В строке поиска введите «TCS34725», найдите библиотеку « Adafruit TCS34725» и установите ее.
Программа:
Теперь запускаем среду разработку Arduino IDE и загружаем скетч в контроллер.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#include <Wire.h> // Подключаем библиотеку Wire #include "Adafruit_TCS34725.h" // Подключаем библиотеку Adafruit_TCS34725 // Создаем объект и передаем данные о настройке усиления и время преобразования Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X); void setup(void) { Serial.begin(9600); // Открываем последовательную связь на скорости 9600 if (tcs.begin()){ // Инициализация датчика с проверкой Serial.println("Found sensor");} // Печать текста else{ // Если инициализация не прошла, зацикливаем Serial.println("No TCS34725 found"); // Печать текста while (1);} } void loop(void) { uint16_t r, g, b, c, colorTemp, lux; // Создаем переменные tcs.getRawData(&r, &g, &b, &c); // Получение данных colorTemp = tcs.calculateColorTemperature_dn40(r, g, b, c); // Вычисление температуры цвета lux = tcs.calculateLux(r, g, b); // Вычисление освещенности Serial.print("Color Temp: "); // Печать текста Serial.print(colorTemp, DEC); // Отправка температуры света Serial.print(" K - "); // Печать текста Serial.print("Lux: "); // Печать текста Serial.print(lux, DEC); // Отправка освещенности Serial.print(" - "); // Печать текста Serial.print("R: "); // Печать текста Serial.print(r, DEC); // Отправка красного цвета Serial.print(" "); // Печать текста Serial.print("G: "); // Печать текста Serial.print(g, DEC); // Отправка зеленого цвета Serial.print(" "); // Печать текста Serial.print("B: "); // Печать текста Serial.print(b, DEC); // ОТправка синего цвета Serial.print(" "); // Печать текста Serial.print("C: "); // Печать текста Serial.print(c, DEC); // Отправка белого цвета Serial.print(" "); // Печать текста Serial.println(" "); // Печать текста } |
Загрузите скетч и откройте «Последовательный монитор» из Arduino IDE.
Описание скетча:
Скетч начинается с включения библиотек Wire.h и Adafruit_TCS34725
1 2 |
#include <Wire.h> #include "Adafruit_TCS34725.h" |
Далее, создаем объект и передаем данные о коэффициенте усиления TCS34725_GAIN_1X (1x, 4x, 16x или 60x) и времени преобразования TCS34725_INTEGRATIONTIME_700MS (2,4 мс, 24 мс, 50 мс, 101 мс, 154 мс или 700 мс)
1 |
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X); |
В void setup(), инициализируем работу последовательного порта. Так же, инициализируем датчик TCS34725 с проверкой, если проверка не прошла то зацикливаем программу.
1 2 3 4 5 6 |
Serial.begin(9600); if (tcs.begin()){ Serial.println("Found sensor");} else{ Serial.println("No TCS34725 found"); while (1);} |
В void loop(), создаем переменные r, g, b, c, colorTemp, lux; и считываем показания красного, зеленого, синего и белых цветов (tcs.getRawData). Далее на основании этих показаний делаем расчет цветовой температуры и освещенности.
1 2 3 4 5 |
uint16_t r, g, b, c, colorTemp, lux; tcs.getRawData(&r, &g, &b, &c); colorTemp = tcs.calculateColorTemperature_dn40(r, g, b, c); lux = tcs.calculateLux(r, g, b); |
Далее, передаем все полученные показания в последовательный порт.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Serial.print("Color Temp: "); // Печать текста Serial.print(colorTemp, DEC); // Отправка температуры света Serial.print(" K - "); // Печать текста Serial.print("Lux: "); // Печать текста Serial.print(lux, DEC); // Отправка освещенности Serial.print(" - "); // Печать текста Serial.print("R: "); // Печать текста Serial.print(r, DEC); // Отправка красного цвета Serial.print(" "); // Печать текста Serial.print("G: "); // Печать текста Serial.print(g, DEC); // Отправка зеленого цвета Serial.print(" "); // Печать текста Serial.print("B: "); // Печать текста Serial.print(b, DEC); // Отправка синего цвета Serial.print(" "); // Печать текста Serial.print("C: "); // Печать текста Serial.print(c, DEC); // Отправка белого цвета Serial.print(" "); // Печать текста Serial.println(" "); // Печать текста |
Ссылки
Библиотека Adafruit TCS34725 v.1.3.5
Документация на TCS34725
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Комплект проводов DuPont, 2,54 мм, 20 см
Датчик цвета на TCS34725
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Датчик цвета на TCS34725