Sadržaj:

Istraživanje prostora boja: 6 koraka
Istraživanje prostora boja: 6 koraka

Video: Istraživanje prostora boja: 6 koraka

Video: Istraživanje prostora boja: 6 koraka
Video: Как жить с комфортом в кухне 6 метров. Дизайн и планировка с посудомойкой и всей техникой. #Хрущевка 2024, Juli
Anonim
Istraživanje prostora boja
Istraživanje prostora boja

Naše oči percipiraju svjetlost kroz receptore koji su osjetljivi na crvenu, zelenu i plavu boju u vidnom spektru. Ljudi su koristili ovu činjenicu za pružanje slika u boji putem filma, televizije, računara i drugih uređaja u posljednjih stotinjak godina.

Na ekranu računara ili telefona slike se prikazuju u mnogim bojama promenom intenziteta sitnih crvenih, zelenih i plavih LED dioda koje se nalaze jedna pored druge na ekranu. Milioni različitih boja mogu se prikazati promjenom intenziteta svjetla sa crvene, zelene ili plave LED diode.

Ovaj će vam projekt pomoći u istraživanju crvenog, zelenog i plavog (RGB) prostora boja pomoću Arduina, RGB LED i malo matematike.

Intenzitete tri boje, crvene, zelene i plave, možete zamisliti kao koordinate u kocki, gdje je svaka boja duž jedne osi, a sve tri osi su okomite jedna na drugu. Što ste bliže nultoj točki, odnosno ishodištu osi, manje se prikazuje ta boja. Kada su vrijednosti za sve tri boje na nultoj točki ili ishodištu, tada je boja crna, a RGB LED dioda je potpuno isključena. Kada su vrijednosti za sve tri boje najveće moguće (u našem slučaju, 255 za svaku od tri boje), RGB LED dioda je potpuno uključena, a oko ovu kombinaciju boja doživljava kao bijelu.

Korak 1: RGB prostor boja

RGB prostor boja
RGB prostor boja

Hvala Kennethu Morelandu na dozvoli da koristi njegovu lijepu sliku.

Željeli bismo istražiti kutove kocke 3D prostora boja pomoću RGB LED spojene na Arduino, ali isto tako želimo to učiniti na zanimljiv način. To bismo mogli učiniti gniježđenjem tri petlje (po jedna za crvenu, za zelenu i za plavu) i prolaskom kroz svaku moguću kombinaciju boja, ali to bi bilo zaista dosadno. Jeste li ikada vidjeli 2D Lissajous uzorak na osciloskopu ili laserska svjetlosna emisija? Ovisno o postavkama, Lissajousov uzorak može izgledati poput dijagonalne linije, kruga, figure 8 ili polako rotirajućeg šiljastog uzorka nalik leptiru. Lissajous obrasci nastaju praćenjem sinusoidnih signala dva (ili više) oscilatora iscrtanih na x-y (ili, u našem slučaju, x-y-z ili R-G-B) osi.

Korak 2: Dobri brod Lissajous

Dobri brod Lissajous
Dobri brod Lissajous

Najzanimljiviji Lissajous obrasci pojavljuju se kada se frekvencije sinusoidnih signala razlikuju za malu količinu. Na fotografiji osciloskopa ovdje se frekvencije razlikuju u omjeru 5 prema 2 (oba su prosti brojevi). Ovaj uzorak prilično dobro pokriva kvadrat i lijepo ulazi u uglove. Veći prosti brojevi učinili bi još bolji posao pri prekrivanju kvadrata i zabadanju još dalje u uglove.

Korak 3: Čekajte - Kako možemo upravljati LED diodom sa sinusoidnim valom?

Uhvatili ste me! Želimo istražiti 3D prostor boja koji se kreće od off (0) do full on (255) za svaku od tri boje, ali sinusoidni valovi variraju od -1 do +1. Ovdje ćemo napraviti malo matematike i programiranja kako bismo dobili ono što želimo.

  • Pomnožite svaku vrijednost sa 127 da biste dobili vrijednosti u rasponu od -127 do +127
  • Dodajte 127 i zaokružite svaku vrijednost kako biste dobili vrijednosti u rasponu od 0 do 255 (za nas dovoljno blizu 255)

Vrijednosti koje se kreću od 0 do 255 mogu se predstaviti jednobajtnim brojevima (tip podataka "char" u C-sličnom programskom jeziku Arduino), pa ćemo uštedjeti memoriju pomoću jednobajtne reprezentacije.

Ali šta je sa uglovima? Ako koristite stupnjeve, kutovi u sinusoidi kreću se od 0 do 360. Ako koristite radijane, kutovi se kreću od 0 do 2 puta π ("pi"). Učinit ćemo nešto što opet čuva memoriju u našem Arduinu, i pomislit ćemo na krug podijeljen na 256 dijelova i imati "binarne kutove" koji se kreću od 0 do 255, tako da "kutovi" za svaku od boja mogu biti predstavljeni jednobajtnim brojevima ili znakovima i ovdje.

Arduino je nevjerojatan upravo takav kakav je, i iako može izračunati sinusne vrijednosti, potrebno nam je nešto brže. Prethodno ćemo izračunati vrijednosti i staviti ih u niz od 256 unosa jednobajtnih ili char vrijednosti u našem programu (pogledajte deklaraciju SineTable […] u programu Arduino).

Korak 4: Izgradimo 3D LIssajous uzorak

Izgradimo 3D LIssajous uzorak
Izgradimo 3D LIssajous uzorak

Za kretanje po tablici različitom frekvencijom za svaku od tri boje zadržat ćemo jedan indeks po boji i svakom indeksu dodavati relativno primarne pomake dok koračamo kroz boje. Odabrat ćemo 2, 5 i 11 kao relativno primarne pomake za vrijednosti indeksa Red, Green i Blue. Vlastite interne matematičke sposobnosti Arduina pomoći će nam tako što ćemo se automatski preokrenuti dok svakom indeksu dodamo vrijednost pomaka.

Korak 5: Stavite sve ovo zajedno na Arduino

Stavljajući sve ovo zajedno na Arduino
Stavljajući sve ovo zajedno na Arduino

Većina Arduina ima brojne PWM (ili impulsno -širinske modulacije) kanale. Ovde će nam trebati tri. Arduino UNO je odličan za ovo. Čak i mali 8-bitni Atmel mikrokontroler (ATTiny85) radi odlično.

Svaki od PWM kanala će pokretati jednu boju RGB LED pomoću Arduinove funkcije "AnalogWrite", gdje je intenzitet boje u svakoj točki sinusnog ciklusa predstavljen širinom impulsa ili radnim ciklusom, od 0 (sve isključeno) do 255 (sve uključeno). Naše oči percipiraju ove različite širine impulsa, koje se ponavljaju dovoljno brzo, kao različite intenzitete ili svjetline LED -a. Kombinirajući sva tri PWM kanala koji pokreću svaku od tri boje u RGB LED diodi, dobivamo mogućnost prikaza 256*256*256 ili više od šesnaest miliona boja!

Morat ćete postaviti Arduino IDE (interaktivno razvojno okruženje) i spojiti ga na Arduino ploču pomoću USB kabela. Pokrenite kratkospojnike sa PWM izlaza 3, 5 i 6 (pinovi procesora 5, 11 i 12) na tri otpornika od 1 KΩ (hiljadu ohma) na vašoj proto ploči ili proto štitu, a sa otpornika na LED R, G, i B igle.

  • Ako je RGB LED uobičajena katoda (negativni terminal), tada vodite žicu od katode natrag do GND pina na Arduinu.
  • Ako je RGB LED zajednička anoda (pozitivni terminal), vodite žicu od anode natrag do +5V pina na Arduinu.

Arduino skica će raditi u svakom slučaju. Slučajno sam koristio SparkFun Electronics / COM-11120 RGB LED sa zajedničkom katodom (na slici gore, sa SparkFun web stranice). Najduži pin je uobičajena katoda.

Preuzmite skicu RGB-Instructable.ino, otvorite je pomoću Arduino IDE-a i testirajte je. Obavezno navedite ispravnu ciljnu Arduino ploču ili čip, a zatim učitajte program u Arduino. Trebalo bi odmah pokrenuti.

Vidjet ćete ciklus RGB LED kroz koliko god boja možete imenovati, a milijune ne možete!

Korak 6: Šta je sljedeće?

Upravo smo počeli istraživati RGB prostor boja s našim Arduinom. Neke druge stvari koje sam uradio s ovim konceptom uključuju:

Direktno pisanje u registre na čipu, umjesto korištenja AnalogWrite-a, za stvarno ubrzanje

  • Izmjena kruga tako da IC senzor blizine ubrzava ili usporava ciklus, ovisno o tome koliko ste blizu
  • Programiranje Atmel ATTiny85 8-pinskog mikrokontrolera s Arduino pokretačkim programom i ovom skicom

Preporučuje se: