Obsah:

Skúmanie farebného priestoru: 6 krokov
Skúmanie farebného priestoru: 6 krokov

Video: Skúmanie farebného priestoru: 6 krokov

Video: Skúmanie farebného priestoru: 6 krokov
Video: Машинное обучение для разработчиков Java: переход на стек технологий ИИ. 2024, Júl
Anonim
Skúmanie farebného priestoru
Skúmanie farebného priestoru

Naše oči vnímajú svetlo prostredníctvom receptorov, ktoré sú vo vizuálnom spektre citlivé na červenú, zelenú a modrú farbu. Ľudia túto skutočnosť využili na poskytnutie farebných obrazov prostredníctvom filmu, televízie, počítačov a ďalších zariadení za posledných zhruba sto rokov.

Na displeji počítača alebo telefónu sa obrázky zobrazujú v mnohých farbách zmenou intenzity malých červených, zelených a modrých diód LED, ktoré sú na obrazovke vedľa seba. Milióny rôznych farieb je možné zobraziť zmenou intenzity svetla z červenej, zelenej alebo modrej diódy LED.

Tento projekt vám pomôže preskúmať červený, zelený a modrý (RGB) farebný priestor pomocou Arduina, RGB LED a trochy matematiky.

Intenzity troch farieb, červenej, zelenej a modrej, si môžete predstaviť ako súradnice v kocke, kde je každá farba pozdĺž jednej osi a všetky tri osi sú navzájom kolmé. Čím bližšie ste k nulovému bodu alebo pôvodu osi, tým menej farby sa zobrazí. Keď sú hodnoty všetkých troch farieb na nulovom bode alebo na pôvode, potom je farba čierna a LED dióda RGB úplne zhasne. Keď sú hodnoty pre všetky tri farby tak vysoké, ako môžu ísť (v našom prípade 255 pre každú z troch farieb), RGB LED dióda je úplne zapnutá a oko vníma túto kombináciu farieb ako bielu.

Krok 1: Farebný priestor RGB

Farebný priestor RGB
Farebný priestor RGB

Ďakujem Kennethovi Morelandovi za povolenie použiť jeho pekný obrázok.

Chceli by sme preskúmať rohy 3D kocky farebného priestoru pomocou RGB LED pripojenej k Arduinu, ale tiež to chceme urobiť zaujímavým spôsobom. Mohli by sme to urobiť tak, že vnoríme tri slučky (jednu pre červenú, zelenú a modrú) a prejdeme všetkými možnými farebnými kombináciami, ale to by bolo naozaj nudné. Videli ste niekedy 2D Lissajousov vzor na osciloskope alebo laserová svetelná show? V závislosti od nastavení môže Lissajousov vzor vyzerať ako diagonálna čiara, kruh, obrázok 8 alebo pomaly sa otáčajúci špicatý vzor podobný motýľu. Lissajousove vzorce sú vytvárané sledovaním sínusových signálov dvoch (alebo viacerých) oscilátorov vykreslených na osiach x-y (alebo v našom prípade x-y-z alebo R-G-B).

Krok 2: Dobrá loď Lissajous

Dobrá loď Lissajous
Dobrá loď Lissajous

Najzaujímavejšie Lissajousove vzorce sa objavia, keď sa frekvencie sínusových signálov líšia o malé množstvo. Na fotografii z osciloskopu sa frekvencie líšia v pomere 5 k 2 (obe sú prvočísla). Tento vzor pekne pokrýva svoj štvorec a pekne sa dostáva do rohov. Vyššie prvočísla by urobili ešte lepšiu prácu pri pokrývaní štvorca a pokeku ešte ďalej do rohov.

Krok 3: Počkajte - ako môžeme ovládať LED diódu so sínusovou vlnou?

Chytil si ma! Chceme preskúmať 3D farebný priestor, ktorý sa pohybuje od vypnutého (0) po úplné zapnuté (255) pre každú z troch farieb, ale sínusové vlny sa pohybujú od -1 do +1. Urobíme si tu malú matematiku a programovanie, aby sme dosiahli to, čo chceme.

  • Každú hodnotu vynásobte 127, aby ste získali hodnoty v rozsahu od -127 do +127
  • Pridajte 127 a zaokrúhlite každú hodnotu, aby ste získali hodnoty v rozsahu od 0 do 255 (pre nás dostatočne blízkych 255)

Hodnoty v rozsahu od 0 do 255 môžu byť reprezentované jednobajtovými číslami (dátový typ „char“v programovacom jazyku Arduino podobnom C), takže ušetríme pamäť pomocou jednobajtovej reprezentácie.

Ale čo uhly? Ak používate stupne, uhly v sínusoide sú v rozsahu od 0 do 360. Ak používate radiány, uhly sa pohybujú od 0 do 2 -násobku π („pi“). Urobíme niečo, čo opäť ušetrí pamäť v našom Arduine, a myslíme na kruh rozdelený na 256 častí a s „binárnymi uhlami“, ktoré sa pohybujú od 0 do 255, takže „uhly“pre každú z farieb môžu byť aj tu reprezentované jednobajtovými číslami alebo znakmi.

Arduino je úžasné také, aké je, a aj keď dokáže vypočítať sínusové hodnoty, potrebujeme niečo rýchlejšie. Hodnoty predbežne vypočítame a vložíme ich do 256-vstupného dlhého poľa jednobajtových alebo char hodnôt v našom programe (pozri deklaráciu SineTable […] v programe Arduino).

Krok 4: Vytvorme 3D Lajšajousov vzor

Vytvorme 3D Lajšajousov vzor
Vytvorme 3D Lajšajousov vzor

Aby sme mohli cyklicky prechádzať tabuľkou s inou frekvenciou pre každú z týchto troch farieb, ponecháme jeden index pre každú farbu a ku každému indexu pri prechode farbami pridáme relatívne hlavné offsety. Vyberieme 2, 5 a 11 ako relatívne hlavné kompenzácie hodnôt červeného, zeleného a modrého indexu. Vlastné interné matematické schopnosti Arduina nám pomôžu tým, že sa automaticky zalomia, keď do každého indexu pridáme hodnotu offsetu.

Krok 5: Dajte to všetko dohromady na Arduino

Toto všetko dáme dohromady na Arduino
Toto všetko dáme dohromady na Arduino

Väčšina Arduinos má niekoľko kanálov PWM (alebo pulzne šírkovej modulácie). Budeme tu potrebovať troch. Arduino UNO je na to skvelé. Aj malý 8-bitový mikrokontrolér Atmel (ATTiny85) funguje báječne.

Každý z kanálov PWM bude poháňať jednu farbu RGB LED pomocou funkcie Arduino „AnalogWrite“, kde intenzita farby v každom bode okolo sínusového cyklu je reprezentovaná šírkou impulzu alebo pracovným cyklom od 0 (všetky vypnuté) až 255 (všetky zapnuté). Naše oči vnímajú tieto rôzne široké pulzy, dostatočne rýchlo sa opakujúce, ako rôzne intenzity alebo jasy LED diódy. Kombináciou všetkých troch kanálov PWM poháňajúcich každú z týchto troch farieb v LED dióde RGB získame možnosť zobraziť 256*256*256 alebo viac ako šestnásť miliónov farieb!

Budete musieť nastaviť Arduino IDE (interaktívne vývojové prostredie) a pripojiť ho k doske Arduino pomocou kábla USB. Spustite prepojky z výstupov PWM 3, 5 a 6 (piny procesora 5, 11 a 12) na tri odpory 1 KΩ (tisíc ohmov) na doske proto alebo do štítu proto a z odporov na diódy LED R, G a kolíky B.

  • Ak je RGB LED spoločnou katódou (záporný pól), potom zapojte vodič z katódy späť na pin GND na Arduine.
  • Ak je RGB LED spoločnou anódou (kladný pól), potom zapojte vodič z anódy späť na pin +5V na Arduine.

Skica Arduino bude fungovať tak či onak. Náhodou som použil bežnú katódovú LED diódu SparkFun Electronics / COM-11120 RGB (na obrázku vyššie z webovej stránky SparkFun). Najdlhší kolík je spoločná katóda.

Stiahnite si skicu RGB-Instructable.ino, otvorte ju pomocou Arduino IDE a otestujte ju. Nezabudnite zadať správnu cieľovú dosku alebo čip Arduino a potom načítajte program do Arduina. Malo by sa to spustiť okamžite.

Cyklus RGB LED uvidíte v toľkých farbách, koľko dokážete pomenovať, a v miliónoch, ktoré nemôžete!

Krok 6: Čo bude ďalej?

Práve sme začali skúmať farebný priestor RGB s naším Arduinom. Medzi ďalšie veci, ktoré som s týmto konceptom urobil, patrí:

Priamy zápis do registrov na čipe, namiesto použitia AnalogWrite, skutočne veci urýchli

  • Úprava obvodu tak, aby infračervený senzor priblíženia cyklus zrýchlil alebo spomalil v závislosti od toho, ako blízko sa dostanete
  • Programovanie 8-kolíkového mikrokontroléra Atmel ATTiny85 pomocou bootloadera Arduino a tejto skice

Odporúča: