Датчик цвета (Troyka-модуль): инструкция, схемы и примеры использования

Используйте датчик цвета для определения оттенков объекта в зоне видимости.

Пример работы для Arduino

На роль мозга для работы с датчиком цвета рассмотрим платформы из семейства Arduino, например Arduino Uno.

Что понадобится

Схема устройства

Датчик цвета Arduino Uno
L 6
V 5V
G GND
D SDA
C SCL

Базовое подключение

Подключение через Troyka Shield

Для быстрой сборки используйте плату расширения Troyka Shield. Два трёхпроводных шлейфа включены в комплект к сенсору.

Подключение через Troyka Slot Shield

С Troyka Slot Shield провода не понадобятся вовсе.

Вывод данных

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

printColorData.ino
// Библиотека для работы с датчиком цвета
#include "Adafruit_TCS34725.h"
 
// Создаём объект для работы с датчиком
Adafruit_TCS34725 colorSensor;
 
// Назначаем пин для управления подсветкой
constexpr uint8_t PIN_BACKLIGHT = 6;
 
void setup() {
  // Открываем Serial-порт
  Serial.begin(9600);
  // PIN_BACKLIGHT в режим выхода
  pinMode(PIN_BACKLIGHT, OUTPUT);
  // Включаем подсветку
  digitalWrite(PIN_BACKLIGHT, HIGH);
  // Инициализация сенсора цвета
  if (colorSensor.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found...");
    while (1);
  }
}
 
void loop() {
  // Переменные для хранения цветовой температуры и освещённости
  int colorTemp, lux;
  // Переменные для хранения цветов R, G и B
  float r, g, b;
  // Считываем цвета с датчика цвета
  colorSensor.getRGB(&r, &g, &b);
  // Вычисляем цветовую температуру в кельвинах
  colorTemp = colorSensor.calculateColorTemperature(r, g, b);
  // Вычисляем освещённость в люксах
  lux = colorSensor.calculateLux(r, g, b);
  // Выводим данные в Serial-порт
  Serial.print("Color Temp: ");
  Serial.print(colorTemp);
  Serial.print(" K");
  Serial.print('\t');
  Serial.print("Lux: "); 
  Serial.print(lux);
  Serial.print('\t'); 
  Serial.print("R: "); 
  Serial.print(r); 
  Serial.print('\t');
  Serial.print("G: "); 
  Serial.print(g); 
  Serial.print('\t');
  Serial.print("B: "); 
  Serial.println(b);
}

Определение цвета

В продолжении определим, какой цвет на текущий момент преобладает в зоне видимости датчика.

DetectColor.ino
// Библиотека для работы с датчиком цвета
#include "Adafruit_TCS34725.h"
 
// Создаём объект для работы с датчиком
Adafruit_TCS34725 colorSensor;
 
// Назначаем пин для управления подсветкой
constexpr uint8_t PIN_BACKLIGHT = 6;
 
void setup() {
  // Открываем Serial-порт
  Serial.begin(9600);
  // PIN_BACKLIGHT в режим выхода
  pinMode(PIN_BACKLIGHT, OUTPUT);
  // Включаем подсветку
  digitalWrite(PIN_BACKLIGHT, HIGH);
  // Инициализация сенсора цвета
  if (colorSensor.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found...");
    while (1);
  }
}
 
void loop() {
  // Переменные для хранения цветов R, G и B
  float r, g, b;
  // Считываем цвета с датчика цвета
  colorSensor.getRGB(&r, &g, &b);
  // Вычисляем какой цвет преобладает в зоне видимости датчика
  if ((r > g) && (r > b))
    Serial.println("RED");
  else if ((g > r) && (g > b))
    Serial.println("GREEN");
  else if ((b > g) && (b > r))
    Serial.println("BLUE");
  delay(100);
}

Примеры работы для Espruino

На роль мозга для работы с датчиком цвета рассмотрим платформы из семейства Espruino, например Iskra JS.

Что понадобится

Схема устройства

Датчик цвета Iskra JS
L 6
V 5V
G GND
D SDA
C SCL

Базовое подключение

Подключение через Troyka Shield

Для быстрой сборки используйте плату расширения Troyka Shield. Два трёхпроводных шлейфа включены в комплект к сенсору.

Подключение через Troyka Slot Shield

С Troyka Slot Shield провода не понадобятся вовсе.

Вывод данных

Выведем RGB-составляющие в консоль. Для работы примера используется библиотека TCS3472x, которая подключается автоматически при прошивки платы.

PrintColorData.js
// Настраиваем шину I²C
PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 100000});
// Подключаем библиотеку для работы с сенсором
var colorSensor = require("TCS3472x").connect(PrimaryI2C, 1, 1);
// Назначаем пин для управления подсветкой
var PIN_BACKLIGHT = P6;
// выставляем яркость светодиода
digitalWrite(PIN_BACKLIGHT, true);
 
// Выводим данные датчика цвета в консоль
setInterval(function() {
  var color = colorSensor.getValue();
  var r = Math.floor(color.red / color.clear * 255);
  var g = Math.floor(color.green / color.clear * 255);
  var b = Math.floor(color.blue / color.clear * 255);
  print(r, g, b);
}, 100);

Определение цвета

В продолжении определим, какой цвет на текущий момент преобладает в зоне видимости датчика.

DetectColor.js
// Настраиваем шину I²C
PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 100000});
// Подключаем библиотеку для работы с сенсором
var colorSensor = require("TCS3472x").connect(PrimaryI2C, 1, 1);
// Назначаем пин для управления подсветкой
var PIN_BACKLIGHT = P6;
// выставляем яркость светодиода
digitalWrite(PIN_BACKLIGHT, true);
 
// Выводим данные датчика цвета в консоль
setInterval(function() {
  var color = colorSensor.getValue();
  var r = Math.floor(color.red / color.clear * 255);
  var g = Math.floor(color.green / color.clear * 255);
  var b = Math.floor(color.blue / color.clear * 255);
  // Вычисляем какой цвет преобладает в зоне видимости датчика
  if ((r > g) && (r > b))
    print("RED");
  else if ((g > r) && (g > b))
    print("GREEN");
  else if ((b > g) && (b > r))
    print("BLUE");
}, 100);

Примеры работы для Raspberry Pi

На роль мозга для работы с датчиком цвета рассмотрим платформы из семейства Raspberry, например Raspberry Pi 4.

Что понадобится

Схема устройства

Датчик цвета Raspberry Pi BCM Raspberry Pi WP
L 25 06
V 5V 5V
G GND GND
D 02 08
C 03 09

Базовое подключение

Подключение через Troyka HAT

Для быстрой сборки используйте плату расширения Troyka HAT. Два трёхпроводных шлейфа включены в комплект к сенсору.

Программная настройка

  1. Просмотрите подключённые I²C-устройства:
    sudo i2cdetect -y 1

    Сканер должен найти адрес 0x29, который является I²C-адресом датчика цвета. Если сканер нашёл ещё адреса, значит к шине I²C подключены другие устройства, но это никак не повлияет на работу сенсора.

  2. Установите библиотеку Adafruit CircuitPython TCS34725 для работы с датчиком цвета:
    pip3 install adafruit-circuitpython-tcs34725

На этом настройка закончена, теперь смело переходите к экспериментам.

Вывод данных

Выведем RGB-составляющие, цветовую температуру и уровень освещённости в Serial-порт. Для работы примера скачайте и установите библиотеку для Raspberry Pi.

printColorData.py
# Подключаем необходимы библиотеки
import time
import board
import adafruit_tcs34725
import digitalio
 
# Создаём объект для работы с модулями наше I²C
i2c = board.I2C()
# Создаём объект для работы с датчиком цвета
sensor = adafruit_tcs34725.TCS34725(i2c)
# Создаём объект подсветки на пине 25 BCM (6 WP)
backlight = digitalio.DigitalInOut(board.D25)
# Светодиод подсветки в режим выхода
backlight.direction = digitalio.Direction.OUTPUT
# Включаем подсветку
backlight.value = True
 
try:
    while True:
        # Считываем цвета с датчика цвета
        color_rgb = sensor.color_rgb_bytes
        # Выводим данные
        print("RGB color: {0}".format(color_rgb))
 
        # Вычисляем цветовую температуру и освещеность
        temp = int(sensor.color_temperature)
        lux = int(sensor.lux)
        # Выводим данные
        print("Temperature: {0}K Lux: {1}\n".format(temp, lux))
        # Ждём 1 секунду.
        time.sleep(1.0)
except KeyboardInterrupt:
    backlight.value = False
    print('The program was stopped by keyboard.')

Элементы платы

Сенсор TCS34725

Датчик выполнен на микросхеме AMS TCS34725, которая содержит 12 светочувствительных элементов. Часть из них оснащена цветными фильтрами для измерения красной, зелёной и синей составляющей, а остальные определяют общий уровень освещённости. Каждая группа фотоэлементов подключена к своему АЦП, который выдаёт 16-битный сигнал, пропорциональный интенсивности падающего света. Готовые результаты измерений передаются по интерфейсу I²C.

LED-подсветка

За включение и отключение LED-подсветки отвечает сигнальный пин L. А если контакт управляющей платы поддерживает ШИМ, то можно управлять яркостью светодиода.

Регулировка подсветки

Для ручного управления подсветкой на плате предусмотрен потенциометр. Для регулировки воспользуйтесь отвёрткой из набора.

Понижающий регулятор напряжения

Линейный понижающий регулятор напряжения NCP582LSQ33 обеспечивает питание датчика цвета и других компонентов сенсора. Диапазон входного напряжения от 3,3 до 5 вольт. Выходное напряжение 3,3 В с максимальным выходным током 150 мА.

Преобразователь логических уровней

Преобразователь логических уровней PCA9306DCT необходим для сопряжения датчика с разными напряжениями логических уровней от 3,3 до 5 вольт. Другими словами сенсор совместим как с 3,3 вольтовыми платами, например, Raspberry Pi, так и с 5 вольтовыми — Arduino Uno.

Troyka-контакты

На дисплейном модуле выведено две пары Troyka-контактов.

Нижняя группа

  • Сигнальный (A) — пин управления подсветкой экрана. Подключите к аналоговому/цифровому пину микроконтроллера.
  • Питание (V) — соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — соедините с землёй микроконтроллера.

Верхняя группа

  • Сигнальный (D) — пин данных шины I²C. Подключите к SDA пину микроконтроллера.
  • Сигнальный (C) — пин тактирования шины I²C. Подключите к SCL пину микроконтроллера.

Принципиальная и монтажная схемы

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

  • Сенсор: TCS34725
  • Детектируемые цвета: RGB, общая освещённость
  • Интерфейс: I²C
  • Адрес модуля: 0x29
  • Подсветка: белый светодиод (LED)
  • Напряжение питания: 3,3–5 В
  • Потребляемый ток: <300 мкА
  • Габариты: 25,4×25,4 мм

Ресурсы

Документация

Библиотеки