Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Определение цвета объектов с помощью Arduino Nano и датчика TCS3200

Компоненты и материалы

Arduino Nano R31 шт.
Модуль датчика цвета TCS32001 шт.
LCD-дисплей 16x2 (I2C, синяя подсветка)1 шт.
Беспаяная макетная плата1 шт.
Провода-перемычкинабор

Необходимое ПО

О проекте

В этом уроке мы научимся определять цвет объектов с помощью Arduino и датчика TCS3200. Результат будет выводиться на LCD-дисплей. Этот проект является частью более крупной системы — манипулятора, который выполняет действия в зависимости от цвета объекта.

Определение цвета объектов с помощью Arduino Nano и датчика TCS3200

Шаг 1: Спецификация компонентов (BoM)

Цены и ссылки приведены для ориентира:

Шаг 2: Датчик цвета TCS3200

Определение цвета объектов с помощью Arduino Nano и датчика TCS3200

Согласно даташиту, TCS3200 — это программируемый преобразователь цвета света в частоту. Он объединяет настраиваемые фотодиоды и преобразователь тока в частоту в одном CMOS-кристалле.

Выходной сигнал — прямоугольная волна (скважность 50%) с частотой, пропорциональной интенсивности света. Полная шкала выходной частоты масштабируется одним из трёх предустановленных значений через управляющие входы S0 и S1. Цифровые входы и выход позволяют подключать датчик напрямую к микроконтроллеру.

Определение цвета объектов с помощью Arduino Nano и датчика TCS3200

Вход OE (Output Enable) переводит выход в высокоомное состояние для совместного использования линии ввода микроконтроллера несколькими устройствами. В TCS3200 преобразователь света в частоту считывает массив 8×8 фотодиодов:

Ножки S2 и S3 выбирают активную группу фотодиодов (красную, зелёную, синюю или прозрачную). Размер фотодиодов — 110×110 мкм, шаг — 134 мкм.

Вывод OE следует соединить с GND (LOW). Датчик запитан от 2.7–5.5 В; мы используем 5 В от Arduino. Для защиты от бокового света рекомендуется установить небольшое резиновое кольцо (можно зафиксировать термоклеем).

Определение цвета объектов с помощью Arduino Nano и датчика TCS3200

Шаг 3: Подключение оборудования

Определение цвета объектов с помощью Arduino Nano и датчика TCS3200

Датчик TCS3200:

I2C LCD 16x2:

Установите Arduino Nano на макетную плату. Соедините выводы 5V и GND Nano с обеими шинами питания.

Шаг 4: Программный код

Определение цвета объектов с помощью Arduino Nano и датчика TCS3200

Сначала задаём масштабирование частоты через S0 и S1. Установим оба в HIGH (100%):

digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);

Затем выбираем цвет для чтения через S2 и S3. Фотодиоды соединены параллельно, поэтому комбинации LOW/HIGH на S2/S3 позволяют выбрать нужную группу:

digitalWrite(s2, LOW);  digitalWrite(s3, LOW);  red = pulseIn(outPin, LOW);  // Красный
digitalWrite(s2, HIGH); digitalWrite(s3, HIGH); grn = pulseIn(outPin, LOW);  // Зелёный
digitalWrite(s2, LOW);  digitalWrite(s3, HIGH); blu = pulseIn(outPin, LOW);  // Синий

В итоговом коде каждый компонент RGB считывается несколько раз и усредняется для уменьшения погрешности.

После получения трёх компонентов нужно определить цвет. Для этого проводится предварительная калибровка: используйте объекты известного цвета и запишите полученные значения.

Пример функции определения цвета (подстройте пороги под свою освещённость):

void getColor() {
  readRGB();
  if (red > 8 && red < 18 && grn > 9 && grn < 19 && blu > 8 && blu < 16) color = "WHITE";
  else if (red > 80 && red < 125 && grn > 90 && grn < 125 && blu > 80 && blu < 125) color = "BLACK";
  else if (red > 12 && red < 30 && grn > 40 && grn < 70 && blu > 33 && blu < 70) color = "RED";
  else if (red > 50 && red < 95 && grn > 35 && grn < 70 && blu > 45 && blu < 85) color = "GREEN";
  else if (red > 10 && red < 20 && grn > 10 && grn < 25 && blu > 20 && blu < 38) color = "YELLOW";
  else if (red > 65 && red < 125 && grn > 65 && grn < 115 && blu > 32 && blu < 65) color = "BLUE";
  else color = "NO_COLOR";
}

Здесь заданы 6 цветов: белый, чёрный, красный, зелёный, жёлтый, синий. При снижении освещённости пороговые значения увеличиваются.

В функции loop() показания выводятся на LCD каждую секунду. Полный код доступен на GitHub.

Шаг 5: Заключение

Определение цвета объектов с помощью Arduino Nano и датчика TCS3200

Надеюсь, этот проект поможет вам погрузиться в увлекательный мир электроники, робототехники и IoT!

Обновлённые файлы на GitHub: Color Detector

Блог автора: MJRoBot.org

Привет с юга мира! До встречи в следующем уроке.

С уважением,
Марсело

Исходный код

Фрагмент 2: Чтение RGB-компонентов

digitalWrite(s2, LOW); digitalWrite(s3, LOW); red = pulseIn(outPin, LOW);
digitalWrite(s2, HIGH); digitalWrite(s3, HIGH); grn = pulseIn(outPin, LOW);
digitalWrite(s2, LOW); digitalWrite(s3, HIGH); blu = pulseIn(outPin, LOW);

Фрагмент 3: Функция getColor()

void getColor() {
  readRGB();
  if (red > 8 && red < 18 && grn > 9 && grn < 19 && blu > 8 && blu < 16) color = "WHITE";
  else if (red > 80 && red < 125 && grn > 90 && grn < 125 && blu > 80 && blu < 125) color = "BLACK";
  else if (red > 12 && red < 30 && grn > 40 && grn < 70 && blu > 33 && blu < 70) color = "RED";
  else if (red > 50 && red < 95 && grn > 35 && grn < 70 && blu > 45 && blu < 85) color = "GREEN";
  else if (red > 10 && red < 20 && grn > 10 && grn < 25 && blu > 20 && blu < 38) color = "YELLOW";
  else if (red > 65 && red < 125 && grn > 65 && grn < 115 && blu > 32 && blu < 65) color = "BLUE";
  else color = "NO_COLOR";
}

Репозиторий

https://github.com/Mjrovai/Color-Detector

Схемы

Fritzing-файл: Color Detector.fzz

Производственный процесс

  1. Создание потрясающей системы Ambilight для монитора на Arduino
  2. Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
  3. Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
  4. Собираем свой Tamagotchi на Arduino: цифровой питомец своими руками
  5. Умный беспроводной выключатель света: Arduino-контроллер для удаленного управления
  6. Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
  7. Умный водяной пистолет с датчиком движения на Arduino Nano
  8. Сборка надежного таймера обратного отсчета на Arduino с 7-сегментным дисплеем SparkFun
  9. Arduino RGB-микшер цветов: Простой проект для начинающих
  10. Arduino Sunflower: электронный подсолнух, следящий за солнцем