Оглавление:

Изучение цветового пространства: 6 шагов
Изучение цветового пространства: 6 шагов

Видео: Изучение цветового пространства: 6 шагов

Видео: Изучение цветового пространства: 6 шагов
Видео: Цвет наше всё... Выпуск 56... Man from Mars 2(LAB) 2024, Ноябрь
Anonim
Изучение цветового пространства
Изучение цветового пространства

Наши глаза воспринимают свет через рецепторы, чувствительные к красному, зеленому и синему цветам зрительного спектра. Люди использовали этот факт для предоставления цветных изображений через кино, телевидение, компьютеры и другие устройства в течение последних ста лет или около того.

На экране компьютера или телефона изображения отображаются во многих цветах за счет изменения интенсивности крошечных красных, зеленых и синих светодиодов, расположенных рядом друг с другом на экране. Можно отобразить миллионы разных цветов, изменив интенсивность света красных, зеленых или синих светодиодов.

Этот проект поможет вам исследовать цветовое пространство красного, зеленого и синего (RGB) с помощью Arduino, светодиода RGB и небольшой математики.

Вы можете думать об интенсивности трех цветов, красного, зеленого и синего, как о координатах в кубе, где каждый цвет расположен вдоль одной оси, а все три оси перпендикулярны друг другу. Чем ближе вы находитесь к нулевой точке или началу оси, тем меньше отображается этот цвет. Когда значения для всех трех цветов находятся в нулевой точке или начале координат, тогда цвет черный, а светодиод RGB полностью выключен. Когда значения для всех трех цветов настолько высоки, насколько это возможно (в нашем случае 255 для каждого из трех цветов), светодиод RGB полностью включен, и глаз воспринимает эту комбинацию цветов как белый.

Шаг 1: цветовое пространство RGB

Цветовое пространство RGB
Цветовое пространство RGB

Спасибо Кеннету Морленду за разрешение использовать его красивое изображение.

Мы хотели бы исследовать углы куба трехмерного цветового пространства с помощью RGB-светодиода, подключенного к Arduino, но также хотим сделать это интересным образом. Мы могли бы сделать это, вложив три петли (по одной для красного, зеленого и синего) и пропустив все возможные комбинации цветов, но это было бы очень скучно. Вы когда-нибудь видели двумерный узор Лиссажу на осциллографе или лазерное световое шоу? В зависимости от настроек узор Лиссажу может выглядеть как диагональная линия, круг, восьмерка или медленно вращающийся заостренный узор в виде бабочки. Паттерны Лиссажу создаются путем отслеживания синусоидальных сигналов двух (или более) осцилляторов, нанесенных на оси x-y (или, в нашем случае, x-y-z или R-G-B).

Шаг 2: Хороший корабль Лиссажу

Хороший корабль Лиссажу
Хороший корабль Лиссажу

Наиболее интересные паттерны Лиссажу возникают, когда частоты синусоидальных сигналов отличаются незначительно. На фотографии осциллографа частоты различаются в соотношении 5 к 2 (оба являются простыми числами). Этот узор довольно хорошо покрывает его квадрат и хорошо ложится в углы. Более высокие простые числа могли бы еще лучше покрыть квадрат и проникнуть еще глубже в углы.

Шаг 3: Подождите - как мы можем управлять светодиодом с помощью синусоидальной волны?

Ты поймал меня! Мы хотим исследовать трехмерное цветовое пространство, которое варьируется от выключенного (0) до полного включения (255) для каждого из трех цветов, но синусоидальные волны меняются от -1 до +1. Мы собираемся заняться здесь математикой и программированием, чтобы получить то, что мы хотим.

  • Умножьте каждое значение на 127, чтобы получить значения в диапазоне от -127 до +127.
  • Добавьте 127 и округлите каждое значение, чтобы получить значения в диапазоне от 0 до 255 (для нас достаточно близко к 255).

Значения в диапазоне от 0 до 255 могут быть представлены однобайтовыми числами (тип данных «char» в C-подобном языке программирования Arduino), поэтому мы сэкономим память, используя однобайтовое представление.

А как насчет углов? Если вы используете градусы, углы в синусоиде изменяются от 0 до 360. Если вы используете радианы, углы изменяются от 0 до 2, умноженных на π («пи»). Мы собираемся сделать что-то, что снова сохранит память в нашем Arduino, и представим круг, разделенный на 256 частей, и имеющий «двоичные углы» в диапазоне от 0 до 255, поэтому «углы» для каждого из цветов могут быть представлены однобайтовыми числами или символами и здесь.

Arduino в таком виде просто потрясающий, и хотя он может вычислять синусоидальные значения, нам нужно что-то более быстрое. Мы предварительно вычислим значения и поместим их в массив из 256 однобайтовых или символьных значений в нашей программе (см. Объявление SineTable […] в программе Arduino).

Шаг 4: давайте создадим трехмерный узор лиссажу

Давайте создадим трехмерный узор Лисажу
Давайте создадим трехмерный узор Лисажу

Чтобы циклически перемещаться по таблице с разной частотой для каждого из трех цветов, мы сохраним по одному индексу для каждого цвета и добавим относительно простые смещения к каждому индексу при переходе по цветам. Мы выберем 2, 5 и 11 в качестве относительно простых смещений для значений индексов красного, зеленого и синего цветов. Собственные внутренние математические возможности Arduino помогут нам автоматически, добавляя значение смещения к каждому индексу.

Шаг 5: Собираем все вместе на Arduino

Собираем все вместе на Arduino
Собираем все вместе на Arduino

Большинство Arduinos имеют несколько каналов ШИМ (или широтно-импульсной модуляции). Здесь нам понадобятся три. Для этого отлично подходит Arduino UNO. Даже маленький 8-битный микроконтроллер Atmel (ATTiny85) работает баснословно.

Каждый из каналов ШИМ будет управлять одним цветом светодиода RGB с использованием функции Arduino «AnalogWrite», где интенсивность цвета в каждой точке синусоидального цикла представлена шириной импульса или рабочим циклом от 0 (все выключено) до 255 (все включено). Наши глаза воспринимают эти изменяющиеся длительности импульсов, повторяющиеся достаточно быстро, как разную интенсивность или яркость светодиода. Комбинируя все три канала ШИМ, управляющих каждым из трех цветов в светодиоде RGB, мы получаем возможность отображать 256 * 256 * 256 или более шестнадцати миллионов цветов!

Вам нужно будет настроить Arduino IDE (интерактивную среду разработки) и подключить ее к плате Arduino с помощью USB-кабеля. Подключите перемычки от выходов ШИМ 3, 5 и 6 (контакты 5, 11 и 12 процессора) к трем резисторам 1 кОм (одна тысяча Ом) на вашей прототипной плате или прототипе экрана, а также от резисторов к светодиоду R, G., и штифты B.

  • Если светодиод RGB является общим катодом (отрицательная клемма), проложите провод от катода обратно к контакту GND на Arduino.
  • Если светодиод RGB является общим анодом (положительный вывод), проложите провод от анода обратно к выводу + 5V на Arduino.

Скетч Arduino будет работать в любом случае. Мне довелось использовать светодиод с общим катодом SparkFun Electronics / COM-11120 RGB (изображение выше с веб-сайта SparkFun). Самый длинный штифт - это обычный катод.

Загрузите эскиз RGB-Instructable.ino, откройте его с помощью Arduino IDE и протестируйте его компиляцию. Обязательно укажите правильную целевую плату или чип Arduino, а затем загрузите программу в Arduino. Он должен немедленно запуститься.

Вы увидите, как светодиод RGB перебирает столько цветов, сколько вы можете назвать, а миллионы - нет!

Шаг 6: Что дальше?

Мы только начали изучать цветовое пространство RGB с нашим Arduino. Некоторые другие вещи, которые я сделал с этой концепцией, включают:

Прямая запись в регистры на кристалле вместо использования AnalogWrite, чтобы действительно ускорить процесс

  • Изменение схемы так, чтобы ИК-датчик приближения ускорял или замедлял цикл в зависимости от того, насколько близко вы подходите
  • Программирование 8-контактного микроконтроллера Atmel ATTiny85 с помощью загрузчика Arduino и этот скетч

Рекомендуемые: