Используйте датчик цвета для определения оттенков объекта в зоне видимости.
На роль мозга для работы с датчиком цвета рассмотрим платформы из семейства Arduino, например Arduino Uno.
Датчик цвета | Arduino Uno |
---|---|
L | 6 |
V | 5V |
G | GND |
D | SDA |
C | SCL |
Для быстрой сборки используйте плату расширения Troyka Shield. Два трёхпроводных шлейфа включены в комплект к сенсору.
С Troyka Slot Shield провода не понадобятся вовсе.
Выведем RGB-составляющие, цветовую температуру и уровень освещённости в Serial-порт. Для работы примера скачайте и установите библиотеку для 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, например Iskra JS.
Датчик цвета | Iskra JS |
---|---|
L | 6 |
V | 5V |
G | GND |
D | SDA |
C | SCL |
Для быстрой сборки используйте плату расширения Troyka Shield. Два трёхпроводных шлейфа включены в комплект к сенсору.
С Troyka Slot Shield провода не понадобятся вовсе.
Выведем RGB-составляющие в консоль. Для работы примера используется библиотека 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, например 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. Два трёхпроводных шлейфа включены в комплект к сенсору.
sudo i2cdetect -y 1
Сканер должен найти адрес
, который является I²C-адресом датчика цвета. Если сканер нашёл ещё адреса, значит к шине I²C подключены другие устройства, но это никак не повлияет на работу сенсора.pip3 install adafruit-circuitpython-tcs34725
На этом настройка закончена, теперь смело переходите к экспериментам.
Выведем RGB-составляющие, цветовую температуру и уровень освещённости в Serial-порт. Для работы примера скачайте и установите библиотеку для 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.')
Датчик выполнен на микросхеме AMS TCS34725, которая содержит 12 светочувствительных элементов. Часть из них оснащена цветными фильтрами для измерения красной, зелёной и синей составляющей, а остальные определяют общий уровень освещённости. Каждая группа фотоэлементов подключена к своему АЦП, который выдаёт 16-битный сигнал, пропорциональный интенсивности падающего света. Готовые результаты измерений передаются по интерфейсу I²C.
За включение и отключение LED-подсветки отвечает сигнальный пин L
. А если контакт управляющей платы поддерживает ШИМ, то можно управлять яркостью светодиода.
Для ручного управления подсветкой на плате предусмотрен потенциометр. Для регулировки воспользуйтесь отвёрткой из набора.
Линейный понижающий регулятор напряжения NCP582LSQ33 обеспечивает питание датчика цвета и других компонентов сенсора. Диапазон входного напряжения от 3,3 до 5 вольт. Выходное напряжение 3,3 В с максимальным выходным током 150 мА.
Преобразователь логических уровней PCA9306DCT необходим для сопряжения датчика с разными напряжениями логических уровней от 3,3 до 5 вольт. Другими словами сенсор совместим как с 3,3 вольтовыми платами, например, Raspberry Pi, так и с 5 вольтовыми — Arduino Uno.
На дисплейном модуле выведено две пары Troyka-контактов.
SDA
пину микроконтроллера.SCL
пину микроконтроллера.