TCS34725

ams / TAOS; плата Adafruit · TCS34725; Adafruit PID 1334

Четырёхканальный RGBC-сенсор с ИК-фильтром. Пример для Adafruit PID 1334 и Arduino UNO R3.

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьЛегко
Проекты с компонентом

О МОДУЛЕ

Что делает TCS34725; Adafruit PID 1334

TCS34725 измеряет интенсивность красного, зелёного, синего и широкополосного clear-канала. Встроенный ИК-фильтр уменьшает влияние инфракрасного излучения. Сенсор подходит для учебной сортировки цветных меток и сравнения материалов при одинаковых условиях.

Документированный модуль — Adafruit PID 1334 с белой подсветкой, регулятором и согласованием уровней. Другие платы на TCS34725 могут иначе управлять LED и не иметь этих цепей. Белая подсветка в данном примере оставлена включённой.

Отсчёты RGBC не являются непосредственно sRGB экрана, координатами цвета или гарантированными люксами. На них влияют источник света, расстояние, угол, блики, окно корпуса и выбранное усиление. Сначала зафиксируйте геометрию и получите эталоны белого, чёрного и нужных цветов. При насыщении уменьшайте усиление или время интегрирования.

На фото прямоугольный модуль Adafruit PID 1334 с подсветкой; круглый вариант FLORA в изображение не включён. TCS34725. Фото: Bill Earl / Adafruit. Оригинал: https://learn.adafruit.com/assets/8645 . Лицензия фотографии: CC BY-SA 3.0, https://creativecommons.org/licenses/by-sa/3.0/ . Изменения: Выделен только прямоугольный модуль Adafruit PID1334 слева; круглый FLORA1356 из сравнительной фотографии исключён. Удалены исходный фон и фон внутри двух монтажных и семи сигнальных отверстий. Пропорциональное масштабирование, размещение на предоставленном фоне и JPEG-сжатие. Геометрия, цвет, маркировка и видимые детали не перерисовывались. Адаптация фотографии распространяется по той же лицензии.

Схема распиновки

Авторская распиновка SLDV LAB для прямоугольного Adafruit PID 1334, показанного на фото. Круглая FLORA PID 1356 имеет другие питание и контакты; её нет на обложке.

Источники: 1, 2, 3, 4, 5. Схема создана SLDV LAB по фактам из документации; фото и исходная графика документации не копировались в схему.

Характеристики

Каналы
R, G, B, Clear
Разрядность регистров каналов
16 бит
Адрес I²C
0x29
Доступное усиление
1× / 4× / 16× / 60×
Интегрирование в примере
153.6 мс
Усиление в примере
4 ×
Встроенный ИК-фильтр
Да
Интерфейс
I²C
Питание модуля
Adafruit PID 1334: VIN 3–5 В, встроенный регулятор и согласование I²C; в примере UNO R3 — VIN 5 В. Голая TCS34725: VDD 2,7–3,6 В; не подключать её непосредственно к 5 В. Выход 3V3 платы не соединять с 5 В.

ПРАКТИКА

Подключение

Контакт модуляКонтакт платыНазначение
VIN5VUNO R3; только Adafruit PID 1334 с регулятором/level shifting.
GNDGNDОбщая земля.
SDAA4 / SDAI²C UNO R3.
SCLA5 / SCLI²C UNO R3.
LEDНе подключатьБелая подсветка включена; соединение LED с GND её выключает.
INT, 3V3Не подключатьПример использует опрос, не прерывания.

Подходит для Arduino. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги интегрировать TCS34725. Уточни плату сенсора, контроллер, подсветку, расстояние до объекта и задачу. Основа: Adafruit PID 1334, UNO R3 A4/A5, VIN 5 В, I²C 0x29, Adafruit TCS34725 1.4.4, 153,6 мс и 4×. Дай полный пример с проверкой инициализации, готовности и длины чтения, защитой от насыщения. Объясни, как сравнивать RGBC при постоянной геометрии, почему RGBC не равен sRGB и как откалибровать пороги по собственным образцам.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Библиотека
Adafruit TCS34725 1.4.4

Зависимость Adafruit BusIO.

Адрес I²C
0x29

Фиксированный адрес TCS34725.

Время интегрирования
TCS34725_INTEGRATIONTIME_154MS

Фактически номинально 153,6 мс, ATIME=0xC0.

Усиление
TCS34725_GAIN_4X

Если каналы насыщаются, уменьшить усиление или время.

Arduino UNO R3 · полный скетч

cpp
#include <Wire.h>
#include <Adafruit_TCS34725.h>

Adafruit_TCS34725 tcs(TCS34725_INTEGRATIONTIME_154MS, TCS34725_GAIN_4X);

bool readBytes(uint8_t command, uint8_t *data, uint8_t count) {
  Wire.beginTransmission(0x29);
  Wire.write(command);
  if (Wire.endTransmission(false) != 0) return false;
  if (Wire.requestFrom(uint8_t(0x29), count) != count) {
    while (Wire.available()) Wire.read();
    return false;
  }
  for (uint8_t i = 0; i < count; ++i) data[i] = Wire.read();
  return true;
}

uint16_t little16(const uint8_t *p) {
  return uint16_t(p[0]) | (uint16_t(p[1]) << 8);
}

void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.setWireTimeout(25000, true);
  if (!tcs.begin(0x29, &Wire)) {
    Serial.println(F("TCS34725 initialization failed"));
    while (true) delay(1000);
  }
}

void loop() {
  delay(200);
  uint8_t status = 0;
  if (!readBytes(0x93, &status, 1)) {
    Serial.println(F("I2C status read failed"));
    return;
  }
  if (!(status & 0x01)) {
    Serial.println(F("RGBC data not yet valid"));
    return;
  }
  uint8_t data[8];
  if (!readBytes(0xB4, data, sizeof(data))) {
    Serial.println(F("Incomplete RGBC read"));
    return;
  }
  const uint16_t c = little16(data);
  const uint16_t r = little16(data + 2);
  const uint16_t g = little16(data + 4);
  const uint16_t b = little16(data + 6);
  if (c == 65535 || r == 65535 || g == 65535 || b == 65535) {
    Serial.println(F("RGBC saturation; reduce gain or integration time"));
    return;
  }
  Serial.print(F("R=")); Serial.print(r);
  Serial.print(F(" G=")); Serial.print(g);
  Serial.print(F(" B=")); Serial.print(b);
  Serial.print(F(" Clear=")); Serial.println(c);
}

Полный скетч Arduino UNO R3, Arduino AVR Boards 1.8.6, Adafruit TCS34725 1.4.4. Инициализация использует библиотеку. Для ошибок чтения добавлен собственный helper Wire: 0x93 — чтение STATUS, 0xB4 — команда auto-increment с начального регистра CDATAL 0x14; затем идут C/R/G/B по два байта, младший первым. API и протокол сверены с исходниками и datasheet; компиляция и аппаратный тест не выполнялись. Serial Monitor: 115200 бод. Сравните белую, чёрную и цветную поверхность на фиксированном расстоянии при одной подсветке. В темноте все каналы могут быть нулевыми; деления на Clear в коде нет. Предел 65535 относится к выбранным 153,6 мс: при сокращении времени интегрирования предел насыщения нужно пересчитать.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты