====== Датчик цвета (Troyka-модуль): инструкция, схемы и примеры использования ======
Используйте [[amp>product/troyka-color-sensor?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|датчик цвета]] для определения оттенков объекта в зоне видимости.
{{ :products:troyka-color-sensor:troyka-color-sensor.5.jpg?nolink |}}
===== Пример работы для Arduino =====
На роль мозга для работы с датчиком цвета рассмотрим платформы из семейства [[amp>collection/arduino?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Arduino]], например [[amp>product/arduino-uno?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Arduino Uno]].
[[articles:arduino-ide-install|Как начать работу с Arduino?]]
==== Что понадобится ====
* [[amp>product/arduino-uno?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Arduino Uno]]
* [[amp>product/troyka-color-sensor?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Датчик цвета]]
* [[amp>product/usb-cable?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Кабель USB (A — B)]]
* [[amp>product/wire-fm?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Соединительные провода «мама-папа»]]
==== Схема устройства ====
^ Датчик цвета ^ Arduino Uno ^
| L | 6 |
| V | 5V |
| G | GND |
| D | SDA |
| C | SCL |
=== Базовое подключение ===
{{ :products:troyka-color-sensor:troyka-color-sensor-example-arduino.png?nolink |}}
=== Подключение через Troyka Shield ===
Для быстрой сборки используйте плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Troyka Shield]]. Два [[amp>product/3-wire-cable-digital-troyka?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|трёхпроводных шлейфа]] включены в комплект к сенсору.
{{ :products:troyka-color-sensor:troyka-color-sensor-example-arduino-troyka-shield.png?nolink |}}
=== Подключение через Troyka Slot Shield ===
С [[amp>product/arduino-troyka-slot-shield?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Troyka Slot Shield]] провода не понадобятся вовсе.
{{ :products:troyka-color-sensor:troyka-color-sensor-example-arduino-troyka-slot-shield.png?nolink |}}
==== Вывод данных ====
Выведем RGB-составляющие, цветовую температуру и уровень освещённости в Serial-порт. Для работы примера [[https://github.com/adafruit/Adafruit_TCS34725|скачайте и установите библиотеку для Arduino]].
// Библиотека для работы с датчиком цвета
#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);
}
==== Определение цвета ====
В продолжении определим, какой цвет на текущий момент преобладает в зоне видимости датчика.
// Библиотека для работы с датчиком цвета
#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 =====
На роль мозга для работы с датчиком цвета рассмотрим платформы из семейства [[amp>collection/espruino?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Espruino]], например [[amp>product/iskra-js?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Iskra JS]].
[[js:ide|Как начать работу с Espruino?]]
==== Что понадобится ====
* [[amp>product/iskra-js?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Iskra JS]]
* [[amp>product/troyka-color-sensor?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Датчик цвета]]
* [[amp>product/usb-cable-micro?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Кабель USB (A — Micro USB)]]
* [[amp>product/wire-fm?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Соединительные провода «мама-папа»]]
==== Схема устройства ====
^ Датчик цвета ^ Iskra JS ^
| L | 6 |
| V | 5V |
| G | GND |
| D | SDA |
| C | SCL |
=== Базовое подключение ===
{{ :products:troyka-color-sensor:troyka-color-sensor-example-espruino.png?nolink |}}
=== Подключение через Troyka Shield ===
Для быстрой сборки используйте плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Troyka Shield]]. Два [[amp>product/3-wire-cable-digital-troyka?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|трёхпроводных шлейфа]] включены в комплект к сенсору.
{{ :products:troyka-color-sensor:troyka-color-sensor-example-espruino-troyka-shield.png?nolink |}}
=== Подключение через Troyka Slot Shield ===
С [[amp>product/arduino-troyka-slot-shield?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Troyka Slot Shield]] провода не понадобятся вовсе.
{{ :products:troyka-color-sensor:troyka-color-sensor-example-espruino-troyka-slot-shield.png?nolink |}}
==== Вывод данных ====
Выведем RGB-составляющие в консоль. Для работы примера используется библиотека [[https://www.espruino.com/TCS3472x|TCS3472x]], которая подключается автоматически при прошивки платы.
// Настраиваем шину 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);
==== Определение цвета ====
В продолжении определим, какой цвет на текущий момент преобладает в зоне видимости датчика.
// Настраиваем шину 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 =====
На роль мозга для работы с датчиком цвета рассмотрим платформы из семейства [[amp>collection/raspberry-pi?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Raspberry]], например [[amp>product/raspberry-pi-4-model-b-4-gb?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Raspberry Pi 4]].
[[articles:rpi-guide|Как начать работу с Raspberry Pi?]]
==== Что понадобится ====
* [[amp>product/raspberry-pi-4-model-b-4-gb?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Raspberry Pi 4]]
* [[amp>product/troyka-color-sensor?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Датчик цвета]]
* [[amp>product/cable-usb-type-c?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Кабель USB (A — Type C)]]
* [[amp>product/wire-ff?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Соединительные провода «мама-мама»]]
==== Схема устройства ====
^ Датчик цвета ^ Raspberry Pi BCM ^ Raspberry Pi WP ^
| L | 25 | 06 |
| V | 5V | 5V |
| G | GND | GND |
| D | 02 | 08 |
| C | 03 | 09 |
=== Базовое подключение ===
{{ :products:troyka-color-sensor:troyka-color-sensor-example-raspberry-pi.png?nolink |}}
=== Подключение через Troyka HAT ===
Для быстрой сборки используйте плату расширения [[amp>product/raspberry-pi-troyka-hat?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Troyka HAT]]. Два [[amp>product/3-wire-cable-digital-troyka?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|трёхпроводных шлейфа]] включены в комплект к сенсору.
{{ :products:troyka-color-sensor:troyka-color-sensor-example-raspberry-pi-troyka-hat.png?nolink |}}
==== Программная настройка ====
- [[:articles:rpi-guide|Заведите Raspberry Pi]].
- [[:articles:rpi-interfaces|Включите шину I²C]] и [[articles:rpi-interfaces#i_c_сканер|установите I²C сканер]].
- Просмотрите подключённые I²C-устройства:sudo i2cdetect -y 1
Сканер должен найти адрес 0x29, который является I²C-адресом датчика цвета. Если сканер нашёл ещё адреса, значит к шине I²C подключены другие устройства, но это никак не повлияет на работу сенсора.{{ :products:troyka-color-sensor:troyka-color-sensor-raspberry-pi-software.1.png?nolink |}}
- Установите библиотеку [[https://pypi.org/project/adafruit-circuitpython-tcs34725/|Adafruit CircuitPython TCS34725]] для работы с датчиком цвета:pip3 install adafruit-circuitpython-tcs34725
На этом настройка закончена, теперь смело [[#примеры_работы|переходите к экспериментам]].
==== Вывод данных ====
Выведем RGB-составляющие, цветовую температуру и уровень освещённости в Serial-порт. Для работы примера [[https://github.com/adafruit/Adafruit_TCS34725|скачайте и установите библиотеку для Raspberry Pi]].
# Подключаем необходимы библиотеки
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.')
===== Элементы платы =====
{{ :products:troyka-color-sensor:troyka-color-sensor-annotation.png?nolink |}}
==== Сенсор TCS34725 ====
Датчик выполнен на микросхеме {{ :products:troyka-color-sensor:tcs34725-datasheet.pdf |AMS TCS34725}}, которая содержит 12 светочувствительных элементов. Часть из них оснащена цветными фильтрами для измерения красной, зелёной и синей составляющей, а остальные определяют общий уровень освещённости. Каждая группа фотоэлементов подключена к своему АЦП, который выдаёт 16-битный сигнал, пропорциональный интенсивности падающего света. Готовые результаты измерений передаются по интерфейсу I²C.
==== LED-подсветка ====
За включение и отключение LED-подсветки отвечает сигнальный пин ''L''. А если контакт управляющей платы поддерживает [[:конспект-arduino:шим|ШИМ]], то можно управлять яркостью светодиода.
==== Регулировка подсветки ====
Для ручного управления подсветкой на плате предусмотрен потенциометр. Для регулировки воспользуйтесь [[amp>product/screw-kit?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|отвёрткой из набора]].
==== Понижающий регулятор напряжения ====
Линейный понижающий регулятор напряжения {{ :products:troyka-color-sensor:ncp582lsq33-datasheet.pdf |NCP582LSQ33}} обеспечивает питание датчика цвета и других компонентов сенсора. Диапазон входного напряжения от 3,3 до 5 вольт. Выходное напряжение 3,3 В с максимальным выходным током 150 мА.
==== Преобразователь логических уровней ====
Преобразователь логических уровней {{ :products:troyka-color-sensor:pca9306-datasheet.pdf |PCA9306DCT}} необходим для сопряжения датчика с разными напряжениями логических уровней от 3,3 до 5 вольт. Другими словами сенсор совместим как с 3,3 вольтовыми платами, например, Raspberry Pi, так и с 5 вольтовыми — Arduino Uno.
==== Troyka-контакты ====
На дисплейном модуле выведено две пары Troyka-контактов.
=== Нижняя группа ===
* Сигнальный (A) — пин управления подсветкой экрана. Подключите к аналоговому/цифровому пину микроконтроллера.
* Питание (V) — соедините с рабочим напряжением микроконтроллера.
* Земля (G) — соедините с землёй микроконтроллера.
=== Верхняя группа ===
* Сигнальный (D) — пин данных шины I²C. Подключите к ''SDA'' пину микроконтроллера.
* Сигнальный (C) — пин тактирования шины I²C. Подключите к ''SCL'' пину микроконтроллера.
===== Принципиальная и монтажная схемы =====
{{:products:troyka-color-sensor:troyka-color-sensor-schematic.png?direct&500 |}}
{{ :products:troyka-color-sensor:troyka-color-sensor-layout-top.png?direct&170|}}
{{ :products:troyka-color-sensor:troyka-color-sensor-layout-bottom.png?direct&170|}}
===== Характеристики =====
* Сенсор: TCS34725
* Детектируемые цвета: RGB, общая освещённость
* Интерфейс: I²C
* Адрес модуля: 0x29
* Подсветка: белый светодиод (LED)
* Напряжение питания: 3,3–5 В
* Потребляемый ток: <300 мкА
* Габариты: 25,4×25,4 мм
===== Ресурсы =====
* [[amp>product/troyka-color-sensor?utm_source=man&utm_campaign=troyka-color-sensor&utm_medium=wiki|Датчик цвета (Troyka-модуль)]] в магазине.
* [[https://github.com/amperka/hardware-drawings/blob/master/troyka-color-sensor.svg|Векторное изображение сенсора]]
==== Документация ====
* {{ :products:troyka-color-sensor:tcs34725-datasheet.pdf |Datasheet на чувствительный элемент TCS34725}}
* {{ :products:troyka-color-sensor:ncp582lsq33-datasheet.pdf |Datasheet на понижающий регулятор напряжения NCP582LSQ33}}
* {{ :products:troyka-color-sensor:pca9306-datasheet.pdf |Datasheet на преобразователь логических уровней PCA9306DCT}}
==== Библиотеки ====
* [[https://github.com/adafruit/Adafruit_TCS34725|Библиотека для Arduino]]
* [[https://www.espruino.com/TCS3472x|Библиотека для Espruino]]
* [[https://pypi.org/project/adafruit-circuitpython-tcs34725/|Библиотека для Raspberry Pi]]