Определение цвета Arduino
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
|
Об этом проекте
Проект
Это простое руководство, в котором мы исследуем, как считывать цвета с помощью Arduino и датчиков, таких как TCS 3200. Идея состоит в том, чтобы определять цвет объекта и отображать его на ЖК-дисплее. Этот проект является компонентом более крупного проекта, которым будет рука робота, которая выбирает правильное действие в зависимости от цвета объекта. На приведенной выше блок-схеме показаны основные компоненты.
На видео ниже показана работа над финальным проектом:
Шаг 1:BoM
Приведенные ниже ссылки и цена приведены только для справки.
- Arduino Nano (8 долларов США)
- Модуль датчика цвета TCS3200 (9 долларов США).
- Последовательный ЖК-модуль с синей подсветкой IIC / I2C / TWI 1602 (8 долларов США)
- Макетная плата (2 доллара США)
- Кабели
Шаг 2. Датчик цвета TSC 3200
Как описано в его техническом описании, TCS3200 представляет собой программируемый преобразователь цветного света в частоту, который объединяет конфигурируемые кремниевые фотодиоды и преобразователь тока в частоту на единой монолитной интегральной схеме КМОП.
На выходе получается прямоугольная волна (рабочий цикл 50%) с частотой, прямо пропорциональной интенсивности света (освещенности). Полная выходная частота может быть масштабирована одним из трех предустановленных значений через два управляющих входных контакта (S0 и S1). Цифровые входы и цифровой выход позволяют напрямую подключаться к микроконтроллеру или другой логической схеме.
Разрешение выхода (OE) переводит выход в состояние высокого импеданса для совместного использования нескольких блоков входной линии микроконтроллера. В TCS3200 преобразователь света в частоту считывает матрицу 8 x 8 фотодиодов.
- Шестнадцать фотодиодов имеют синие фильтры.
- 16 фотодиодов с зелеными фильтрами.
- 16 фотодиодов имеют красные светофильтры.
- 16 фотодиодов чистые без фильтров.
Контакты S2 и S3 используются для выбора активной группы фотодиодов (красный, зеленый, синий, прозрачный). Фотодиоды имеют размер 110 x 110 мкм и центр 134 мкм.
OE (Enable) должен быть подключен к GND (LOW).
Датчик герметизирован и должен иметь напряжение от 2,7 до 5,5 В постоянного тока. Мы будем использовать выход 5V Arduino для питания датчика. Для правильного использования датчика мы установим небольшое резиновое кольцо, чтобы изолировать датчик от бокового света. Я исправил это горячим клеем.
Шаг 3. Подключение аппаратного обеспечения
Подключите датчик TSC3200, как показано ниже:
- S0 ==> Нано-контакт D4
- S1 ==> Нано-контакт D5
- S2 ==> Нано-контакт D6
- S3 ==> Нано-контакт D7
- OUT ==> Nano Pin D8
- EN ==> GND
- VCC ==> + 5 В
- GND ==> GND
Подключите последовательный ЖК-дисплей I2C 2/16:
- SDA ==> Nano Pin A4
- SCL ==> Nano Pin A5
Установите Arduino Nano на доску для хлеба. Подключите выход Nano 5V и GND к обеим шинам питания.
Шаг 4. Код Arduino
Первое, что нужно определить, - это масштабирование частоты, как это определено в приведенной выше таблице. Для этого используются контакты S0 и S1. Масштабирование выходной частоты полезно для оптимизации показаний датчика для различных частотомеров или микроконтроллеров. Мы установим S0 и S1, оба в HIGH (100%):
digitalWrite (s0, HIGH); digitalWrite (s1, HIGH);
Следующее, что нужно сделать, это выбрать цвет, который будет считываться фотодиодом (красный, зеленый или синий), для этого мы используем управляющие контакты S2 и S3. Поскольку фотодиоды подключены параллельно, установка для S2 и S3 НИЗКОГО и ВЫСОКОГО значений в различных комбинациях позволяет вам выбирать разные фотодиоды, как показано в таблице выше.
digitalWrite (s2, LOW); digitalWrite (s3, LOW); красный =pulseIn (outPin, LOW); // Чтение КРАСНОЙ составляющей цвета digitalWrite (s2, HIGH); digitalWrite (s3, HIGH); grn =pulseIn (outPin, LOW); // Чтение ЗЕЛЕНОГО компонента цвета digitalWrite (s2, LOW); digitalWrite (s3, HIGH); blu =pulseIn (outPin, LOW); // Считываем СИНИЙ компонент цвета
В окончательном коде мы прочитаем несколько раз каждый из компонентов RGB и возьмем среднее значение, так что мы можем уменьшить ошибку, если одно из показаний будет плохим.
Когда у нас есть 3 компонента (RGB), мы должны определить, что это за цвет. Способ сделать это предварительно откалибровать проект. Вы можете использовать тестовую бумагу или предмет известного цвета и прочитать 3 сгенерированных компонента.
Вы можете начать с моего, изменив параметры под свой уровень освещенности:
void getColor () {readRGB (); if (красный> 8 &&красный <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="БЕЛЫЙ"; иначе if (красный> 80 &&красный <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="BLACK"; иначе if (красный> 12 &&красный <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; иначе if (красный> 50 &&красный <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="GREEN"; иначе if (красный> 10 &&красный <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="ЖЕЛТЫЙ"; иначе, если (красный> 65 &&красный <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="СИНИЙ"; else color ="NO_COLOR";}
Как вы можете видеть выше, я заранее определил 6 цветов:белый, черный, красный, зеленый, желтый и синий. По мере уменьшения окружающего освещения параметры имеют тенденцию повышаться.
Внутри цикла () я определяю показания дисплея на ЖК-дисплее каждую 1 секунду.
Полный код можно найти на моем GitHub.
Шаг 5. Заключение
Как всегда, я надеюсь, что этот проект поможет другим найти свой путь в захватывающем мире электроники, робототехники и Интернета вещей!
Посетите мой GitHub, чтобы найти обновленные файлы:Color Detector
Чтобы узнать больше о проектах, посетите мой блог:MJRoBot.org
Салудо с юга мира!
Увидимся на моем следующем уроке!
Спасибо,
Марсело
Код
- Фрагмент кода №2
- Фрагмент кода №3
Фрагмент кода 2 Обычный текст
digitalWrite (s2, LOW); digitalWrite (s3, LOW); красный =pulseIn (outPin, LOW); // Чтение КРАСНОЙ составляющей цвета digitalWrite (s2, HIGH); digitalWrite (s3, HIGH); grn =pulseIn (outPin, LOW); // Чтение ЗЕЛЕНОГО компонента цвета digitalWrite (s2, LOW); digitalWrite (s3, HIGH); blu =pulseIn (outPin, LOW); // Считываем СИНИЙ компонент цвета
Фрагмент кода № 3 Обычный текст
void getColor () {readRGB (); if (красный> 8 &&красный <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="БЕЛЫЙ"; иначе if (красный> 80 &&красный <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="BLACK"; иначе if (красный> 12 &&красный <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; иначе if (красный> 50 &&красный <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="GREEN"; иначе if (красный> 10 &&красный <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="ЖЕЛТЫЙ"; иначе, если (красный> 65 &&красный <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="СИНИЙ"; else color ="NO_COLOR";}
Github
https://github.com/Mjrovai/Color-Detectorhttps://github.com/Mjrovai/Color-DetectorСхема
Hw
https://github.com/Mjrovai/Color-Detector/blob/master/Color%20Detector.fzzПроизводственный процесс
- Создание монитора Ambilight с помощью Arduino
- Игра Arduino Pong - OLED-дисплей
- Детектор звуковой частоты
- Клон Arduino Tamagotchi - цифровой питомец
- Манипулятор беспроводного переключателя света
- Tech-TicTacToe
- Водяной пистолет с датчиком движения
- Таймер обратного отсчета Arduino
- Цветовой микшер Arduino RGB
- Arduino Sunflower:электронный танцор солнца