====== Датчик цвета (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]]