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: ДЕСАНТНАЯ ОПЕРАЦИЯ НА КОСЕ ФРИШЕ-НЕРУНГ! БАЛТИЙСКАЯ КОСА! ИСТОРИИ ПРОФЕССОРА! ЧАСТЬ 1 2024, Studeni
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 tu činjenicu koristili za pružanje slika u boji putem filma, televizije, računala i drugih uređaja u posljednjih stotinjak godina.

Na zaslonu računala ili telefona slike se prikazuju u mnogim bojama promjenom intenziteta sitnih crvenih, zelenih i plavih LED dioda koje se nalaze jedna do druge na zaslonu. Milijuni različitih boja mogu se prikazati promjenom intenziteta svjetla s 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 ili ishodištu osi, manje se prikazuje ta boja. Kad su vrijednosti za sve tri boje na nultoj točki, ili izvoru, tada je boja crna, a RGB LED dioda je potpuno isključena. Kad 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 dopuštenju da koristi njegovu lijepu sliku.

Željeli bismo istražiti kutove 3D kocke prostora u boji pomoću RGB LED spojene na Arduino, ali želimo to učiniti i 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 laserski svjetlosni show? Ovisno o postavkama, Lissajousov uzorak može izgledati poput dijagonalne crte, kruga, figure 8 ili polako rotirajućeg šiljastog uzorka nalik leptiru. Lissajous obrasci nastaju praćenjem sinusoidnih signala dva (ili više) oscilatora ucrtanih na osi 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 prekriva kvadrat i lijepo ulazi u kutove. Veći prosti brojevi učinili bi još bolji posao pri prekrivanju kvadrata i zabadanju još dalje u kutove.

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

Uhvatio si me! Želimo istražiti 3D prostor u boji 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 malo matematički i programirati 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 jednobajtnog prikaza.

Ali što je s kutovima? 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, te ćemo zamisliti 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 prilično nevjerojatan upravo takav kakav jest, 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 osnovne 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 kanale PWM (ili modulaciju širine impulsa). Ovdje će nam trebati tri. Arduino UNO je odličan za to. Čak i mali 8-bitni Atmel mikrokontroler (ATTiny85) radi izvrsno.

Svaki od PWM kanala će pokretati jednu boju RGB LED -e pomoću Arduinove funkcije "AnalogWrite", gdje je intenzitet boje u svakoj točki oko 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, dobivamo mogućnost prikaza 256*256*256 ili više od šesnaest milijuna boja!

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

  • Ako je RGB LED uobičajena katoda (negativni terminal), 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 uobičajenom katodom (na slici gore, sa SparkFun web stranice). Najduži pin je zajednička katoda.

Preuzmite skicu RGB-Instructable.ino, otvorite je s Arduino IDE-om i testirajte je. Svakako navedite ispravnu ciljnu Arduino ploču ili čip, a zatim učitajte program u Arduino. Trebao bi se odmah pokrenuti.

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

Korak 6: Što je sljedeće?

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

Izravno pisanje u registre na čipu, umjesto korištenja AnalogWrite, kako bi se stvari doista ubrzale

  • 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čeni: