Obsah:

Zkoumání barevného prostoru: 6 kroků
Zkoumání barevného prostoru: 6 kroků

Video: Zkoumání barevného prostoru: 6 kroků

Video: Zkoumání barevného prostoru: 6 kroků
Video: Adel ukazala prso 2024, Červenec
Anonim
Zkoumání barevného prostoru
Zkoumání barevného prostoru

Naše oči vnímají světlo prostřednictvím receptorů citlivých na červené, zelené a modré barvy ve vizuálním spektru. Lidé tuto skutečnost využívali k poskytování barevných obrazů prostřednictvím filmu, televize, počítačů a dalších zařízení za posledních zhruba sto let.

Na displeji počítače nebo telefonu se obrázky zobrazují v mnoha barvách změnou intenzity malých červených, zelených a modrých LED diod, které jsou na obrazovce vedle sebe. Miliony různých barev lze zobrazit změnou intenzity světla z červené, zelené nebo modré LED diody.

Tento projekt vám pomůže prozkoumat červený, zelený a modrý (RGB) barevný prostor pomocí Arduina, RGB LED a trochu matematiky.

Intenzity tří barev, červené, zelené a modré, můžete považovat za souřadnice v krychli, kde každá barva je podél jedné osy a všechny tři osy jsou navzájem kolmé. Čím blíže jste k nulovému bodu neboli počátku osy, tím méně se této barvy zobrazí. Když jsou hodnoty pro všechny tři barvy v nulovém bodě nebo původu, pak je barva černá a LED RGB úplně zhasne. Když jsou hodnoty pro všechny tři barvy tak vysoké, jak jen mohou jít (v našem případě 255 pro každou ze tří barev), RGB LED je zcela rozsvícená a oko vnímá tuto kombinaci barev jako bílou.

Krok 1: Barevný prostor RGB

Barevný prostor RGB
Barevný prostor RGB

Díky Kennethovi Morelandovi za svolení použít jeho pěkný obrázek.

Chtěli bychom prozkoumat rohy kostky 3D barevného prostoru pomocí RGB LED připojené k Arduinu, ale také to chceme udělat zajímavým způsobem. Mohli bychom to udělat vnořením tří smyček (každá pro červenou, pro zelenou a modrou) a procházením všech možných barevných kombinací, ale to by byla opravdu nuda. Už jste někdy viděli 2D Lissajousův vzor na osciloskopu nebo laserová světelná show? V závislosti na nastavení může Lissajousův vzor vypadat jako diagonální čára, kruh, obrázek 8 nebo pomalu rotující špičatý vzor podobný motýlu. Lissajousovy vzorce jsou vytvářeny sledováním sinusových signálů dvou (nebo více) oscilátorů zakreslených na osách x-y (nebo v našem případě x-y-z nebo R-G-B).

Krok 2: Dobrá loď Lissajous

Dobrá loď Lissajous
Dobrá loď Lissajous

Nejzajímavější Lissajousovy vzorce se objevují, když se frekvence sinusových signálů liší o malé množství. Na fotografii z osciloskopu se zde frekvence liší poměrem 5 ku 2 (obě jsou prvočísla). Tento vzor pokrývá svůj čtverec docela dobře a pěkně se dostává do rohů. Vyšší prvočísla by udělala ještě lepší práci, kdyby pokryla čtverec a šťouchla ještě dál do rohů.

Krok 3: Počkejte - jak můžeme řídit LED pomocí sinusové vlny?

Chytil jsi mě! Chceme prozkoumat 3D barevný prostor, který se pohybuje od vypnuto (0) do plně zapnuto (255) pro každou ze tří barev, ale sinusové vlny se pohybují od -1 do +1. Uděláme si tu malou matematiku a programování, abychom získali to, co chceme.

  • Vynásobením každé hodnoty číslem 127 získáte hodnoty v rozsahu od -127 do +127
  • Sečtením 127 a zaokrouhlením každé hodnoty získáte hodnoty v rozsahu od 0 do 255 (dostatečně blízko k 255 pro nás)

Hodnoty, které se pohybují od 0 do 255, lze reprezentovat jednobajtovými čísly (datový typ „char“v programovacím jazyce Arduino podobném C), takže ušetříme paměť pomocí jednobajtové reprezentace.

Ale co úhly? Pokud používáte stupně, úhly v sinusoidě se pohybují od 0 do 360. Pokud používáte radiány, úhly se pohybují od 0 do 2krát π („pi“). Uděláme něco, co opět zachová paměť v našem Arduinu, a myslíme na kruh rozdělený na 256 částí a budeme mít „binární úhly“, které se pohybují od 0 do 255, takže „úhly“pro každou z barev mohou být zde také reprezentovány jednobajtovými čísly nebo znaky.

Arduino je úžasné tak, jak je, a přestože dokáže vypočítat sinusové hodnoty, potřebujeme něco rychlejšího. Hodnoty předpočítáme a vložíme do 256 vstupního dlouhého pole jednobajtových nebo char hodnot v našem programu (viz deklarace SineTable […] v programu Arduino).

Krok 4: Pojďme vytvořit 3D Lajssajousův vzor

Pojďme vytvořit 3D Lajssajousův vzor
Pojďme vytvořit 3D Lajssajousův vzor

Abychom mohli cyklicky procházet tabulkou s jinou frekvencí pro každou ze tří barev, ponecháme jeden index na barvu a ke každému indexu přidáme relativně základní posuny, jak procházíme barvami. Vybereme 2, 5 a 11 jako relativně hlavní kompenzace pro hodnoty červeného, zeleného a modrého indexu. Vlastní interní matematické schopnosti Arduina nám pomohou tím, že se automaticky zalomí, když do každého indexu přidáme hodnotu offsetu.

Krok 5: Dát to všechno dohromady na Arduino

Dát to všechno dohromady na Arduino
Dát to všechno dohromady na Arduino

Většina Arduinos má řadu kanálů PWM (nebo pulzně šířková modulace). Budeme tady potřebovat tři. Arduino UNO je k tomu skvělé. I malý 8bitový mikrokontrolér Atmel (ATTiny85) funguje báječně.

Každý z kanálů PWM bude řídit jednu barvu RGB LED pomocí funkce Arduino „AnalogWrite“, kde intenzita barvy v každém bodě kolem sinusového cyklu je reprezentována šířkou pulsu nebo pracovním cyklem od 0 (vše vypnuto) až 255 (vše zapnuto). Naše oči vnímají tyto různé šířky pulzů, dostatečně rychle opakované, jako různé intenzity nebo jasy LED. Kombinací všech tří kanálů PWM pohánějících každou ze tří barev v RGB LED, získáme možnost zobrazit 256*256*256 nebo více než šestnáct milionů barev!

Budete muset nastavit Arduino IDE (Interactive Development Environment) a připojit jej k desce Arduino pomocí kabelu USB. Spusťte propojky z výstupů PWM 3, 5 a 6 (piny procesoru 5, 11 a 12) na tři odpory 1 KΩ (tisíc ohmů) na desce proto nebo stínění proto a od rezistorů k LED R, G a kolíky B.

  • Pokud je RGB LED běžnou katodou (záporný pól), pak veďte vodič z katody zpět na pin GND na Arduinu.
  • Pokud je RGB LED běžnou anodou (kladný pól), pak veďte vodič z anody zpět na pin +5V na Arduinu.

Skica Arduina bude fungovat jakkoli. Náhodou jsem použil běžnou katodovou LED diodu SparkFun Electronics / COM-11120 RGB (na obrázku výše, z webu SparkFun). Nejdelším kolíkem je společná katoda.

Stáhněte si skicu RGB-Instructable.ino, otevřete ji pomocí Arduino IDE a otestujte ji. Nezapomeňte zadat správnou cílovou desku nebo čip Arduino a poté načtěte program do Arduina. Mělo by se to okamžitě spustit.

Uvidíte RGB LED cyklus tolika barvami, kolik jich dokážete pojmenovat, a miliony, které nemůžete!

Krok 6: Co bude dál?

Právě jsme začali zkoumat RGB Color Space s naším Arduino. Mezi další věci, které jsem s tímto konceptem udělal, patří:

Přímé zapisování do registrů na čipu, místo použití AnalogWrite, to opravdu zrychlí

  • Úprava obvodu tak, aby IR senzor přiblížení cyklus zrychlil nebo zpomalil podle toho, jak blízko se dostanete
  • Programování 8kolíkového mikrokontroléru Atmel ATTiny85 pomocí bootloaderu Arduino a této skici

Doporučuje: