Съдържание:

Проучване на цветовото пространство: 6 стъпки
Проучване на цветовото пространство: 6 стъпки

Видео: Проучване на цветовото пространство: 6 стъпки

Видео: Проучване на цветовото пространство: 6 стъпки
Видео: Ето Защо НАСА Никога не се Върна на ЛУНАТА - Moon Discoveries 2024, Ноември
Anonim
Проучване на цветовото пространство
Проучване на цветовото пространство

Очите ни възприемат светлината чрез рецептори, които са чувствителни към червените, зелените и сините цветове във визуалния спектър. Хората са използвали този факт, за да предоставят цветни изображения чрез филм, телевизия, компютри и други устройства през последните сто години.

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

Този проект ще ви помогне да изследвате червеното, зеленото и синьото (RGB) цветово пространство с помощта на Arduino, RGB LED и малко математика.

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

Стъпка 1: Цветово пространство RGB

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

Благодаря на Кенет Мореланд за разрешението да използва хубавия му образ.

Бихме искали да изследваме ъглите на 3D кубчето цветно пространство, използвайки RGB LED, свързан към Arduino, но също така искаме да направим това по интересен начин. Бихме могли да го направим, като вмъкнем три контура (по един за червено, за зелено и за синьо) и преминем през всяка възможна комбинация от цветове, но това би било наистина скучно. Виждали ли сте някога двуизмерен модел Лисаж на осцилоскоп или лазерно светлинно шоу? В зависимост от настройките, моделът на Lissajous може да изглежда като диагонална линия, кръг, фигура 8 или бавно въртящ се остър модел, подобен на пеперуда. Лисажовите модели се създават чрез проследяване на синусоидалните сигнали на два (или повече) осцилатора, нанесени върху оси x-y (или в нашия случай x-y-z или R-G-B) оси.

Стъпка 2: Добрият кораб Lissajous

Добрият кораб Lissajous
Добрият кораб Lissajous

Най -интересните модели на Lissajous се появяват, когато честотите на синусоидалните сигнали се различават с малко количество. На снимката на осцилоскопа тук честотите се различават в съотношение 5 към 2 (и двете са прости числа). Този модел покрива квадрата си доста добре и попада добре в ъглите. По -високите прости числа биха свършили още по -добра работа за покриване на квадрата и забиване още по -далеч в ъглите.

Стъпка 3: Изчакайте - Как можем да управляваме светодиод със синусоидална вълна?

Хвана ме! Искаме да изследваме 3D цветовото пространство, което варира от изключено (0) до пълно включено (255) за всеки от трите цвята, но синусоидалните вълни варират от -1 до +1. Ще направим малко математика и програмиране тук, за да получим това, което искаме.

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

Стойностите, които варират от 0 до 255, могат да бъдат представени с еднобайтови числа (типът "char" в C-подобния език за програмиране Arduino), така че ще спестим памет, като използваме еднобайтовото представяне.

Но какво ще кажете за ъглите? Ако използвате градуси, ъглите в синусоида варират от 0 до 360. Ако използвате радиани, ъглите варират от 0 до 2 пъти π ("pi"). Ще направим нещо, което отново запазва паметта в нашия Arduino, и ще мислим за кръг, разделен на 256 части, и ще имаме „двоични ъгли“, които варират от 0 до 255, така че „ъглите“за всеки от цветовете могат да бъдат представени с еднобайтови числа или символи и тук.

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

Стъпка 4: Нека изградим 3D LIssajous модел

Нека изградим 3D LIssajous модел
Нека изградим 3D LIssajous модел

За да преминете през таблицата с различна честота за всеки от трите цвята, ще запазим по един индекс на цвят и ще добавим относително първични отмествания към всеки индекс, докато пристъпваме през цветовете. Ще изберем 2, 5 и 11 като относително първоначално изместване за стойностите на индекса Red, Green и Blue. Собствените вътрешни математически възможности на Arduino ще ни помогнат, като автоматично се завъртаме, докато добавяме стойността на отместване към всеки индекс.

Стъпка 5: Поставете всичко това заедно на Arduino

Поставяйки всичко това заедно на Arduino
Поставяйки всичко това заедно на Arduino

Повечето Arduinos имат редица PWM (или широчинно -импулсна модулация) канали. Тук ще ни трябват три. Arduino UNO е чудесен за това. Дори малък 8-битов микроконтролер Atmel (ATTiny85) работи страхотно.

Всеки от PWM каналите ще управлява един цвят на RGB LED, използвайки функцията "AnalogWrite" на Arduino, където интензитетът на цвета във всяка точка около синусоидалния цикъл е представен от ширина на импулса или работен цикъл от 0 (всички изключени) до 255 (всички включени). Очите ни възприемат тези различни ширини на импулсите, повтарящи се достатъчно бързо, като различна интензивност или яркост на светодиода. Комбинирайки трите PWM канала, управляващи всеки от трите цвята в RGB LED, получаваме възможността да показваме 256*256*256 или над шестнадесет милиона цвята!

Ще трябва да настроите Arduino IDE (интерактивна среда за разработка) и да го свържете към дъската си Arduino, като използвате USB кабела. Пуснете джъмперите от PWM изходи 3, 5 и 6 (процесорни щифтове 5, 11 и 12) до три 1 KΩ (хиляда ома) резистора на вашата прото платка или прото щит и от резисторите към светодиода R, G, и B щифтове.

  • Ако RGB светодиодът е общ катод (отрицателен извод), прокарайте проводник от катода обратно към щифта GND на Arduino.
  • Ако RGB светодиодът е общ анод (положителен извод), след това прокарайте проводник от анода обратно към +5V щифта на Arduino.

Скицата на Arduino ще работи така или иначе. Случайно използвах SparkFun Electronics / COM-11120 RGB LED с общ катод (на снимката по-горе, от уеб сайта на SparkFun). Най -дългият щифт е общият катод.

Изтеглете скицата RGB-Instructable.ino, отворете я с Arduino IDE и тествайте да я компилирате. Не забравяйте да посочите правилната целева Arduino платка или чип, след което заредете програмата в Arduino. Трябва да стартира незабавно.

Ще видите цикъла на RGB LED през толкова цветове, колкото можете да назовете, и милиони, които не можете!

Стъпка 6: Какво следва?

Току -що започнахме да изследваме RGB цветовото пространство с нашия Arduino. Някои други неща, които направих с тази концепция, включват:

Директно писане в регистрите на чипа, вместо да използвате AnalogWrite, за да ускорите действително нещата

  • Промяна на веригата, така че сензорът за близост на IR да ускори или забави цикъла в зависимост от това колко близо сте
  • Програмиране на 8-пинов микроконтролер Atmel ATTiny85 с буутлоудъра Arduino и тази скица

Препоръчано: