Indholdsfortegnelse:

Undersøgelse af farverum: 6 trin
Undersøgelse af farverum: 6 trin

Video: Undersøgelse af farverum: 6 trin

Video: Undersøgelse af farverum: 6 trin
Video: How to Color Grade Wedding Video: Make Cinematic Look in Final Cut Pro X 2024, November
Anonim
Undersøgelse af farverum
Undersøgelse af farverum

Vores øjne opfatter lys gennem receptorer, der er følsomme over for røde, grønne og blå farver i det visuelle spektrum. Folk har brugt denne kendsgerning til at levere farvebilleder via film, fjernsyn, computere og andre enheder i løbet af de sidste hundrede år eller deromkring.

På en computer eller telefonens skærm vises billeder i mange farver ved at ændre intensiteten af små røde, grønne og blå lysdioder, der er ved siden af hinanden på skærmen. Millioner af forskellige farver kan vises ved at ændre lysets intensitet fra de røde, grønne eller blå lysdioder.

Dette projekt hjælper dig med at udforske det røde, grønne og blå (RGB) farveområde ved hjælp af en Arduino, en RGB LED og lidt matematik.

Du kan tænke på intensiteten af de tre farver, rød, grøn og blå, som koordinater i en terning, hvor hver farve er langs en akse, og alle tre akser er vinkelret på hinanden. Jo tættere du er på aksens nulpunkt eller oprindelse, desto mindre vises den farve. Når værdierne for alle tre farver er på nulpunktet eller oprindelsen, så er farven sort, og RGB -lysdioden er helt slukket. Når værdierne for alle tre farver er så høje, som de kan gå (i vores tilfælde 255 for hver af de tre farver), er RGB -lysdioden helt tændt, og øjet opfatter denne kombination af farver som hvid.

Trin 1: RGB -farverum

RGB -farverum
RGB -farverum

Tak til Kenneth Moreland for tilladelse til at bruge sit flotte image.

Vi vil gerne udforske hjørnerne af 3D -farverumterningen ved hjælp af en RGB LED forbundet til en Arduino, men vil også gøre dette på en interessant måde. Vi kunne gøre det ved at indlejre tre sløjfer (en hver for rød, for grøn og for blå) og gennemgå enhver mulig farvekombination, men det ville være virkelig kedeligt. Har du nogensinde set et 2D Lissajous -mønster på et oscilloskop eller en laserlys show? Afhængigt af indstillingerne kan et Lissajous-mønster ligne en diagonal linje, en cirkel, en figur 8 eller et langsomt roterende spids sommerfugllignende mønster. Lissajous-mønstre skabes ved at spore de sinusformede signaler fra to (eller flere) oscillatorer afbildet på xy (eller i vores tilfælde x-y-z eller R-G-B) akser.

Trin 2: The Good Ship Lissajous

Det gode skib Lissajous
Det gode skib Lissajous

De mest interessante Lissajous -mønstre vises, når frekvenserne af de sinusformede signaler varierer med en lille mængde. På oscilloskopfotoet her varierer frekvenserne med et forhold på 5 til 2 (som begge er primtal). Dette mønster dækker sin firkant ret godt og kommer pænt ind i hjørnerne. Højere primtal ville gøre et endnu bedre stykke arbejde med at dække pladsen og stikke endnu længere ind i hjørnerne.

Trin 3: Vent - Hvordan kan vi drive en LED med en sinusformet bølge?

Du fangede mig! Vi ønsker at udforske 3D -farverummet, der spænder fra off (0) til fuld on (255) for hver af de tre farver, men sinusformede bølger varierer fra -1 til +1. Vi skal lave lidt matematik og programmering her for at få det, vi ønsker.

  • Gang hver værdi med 127 for at få værdier, der spænder fra -127 til +127
  • Tilføj 127 og afrund hver værdi for at få værdier, der spænder fra 0 til 255 (tæt nok på 255 for os)

Værdier, der spænder fra 0 til 255, kan repræsenteres ved single-byte tal ("char" datatypen i det C-lignende Arduino programmeringssprog), så vi sparer hukommelse ved at bruge single-byte repræsentationen.

Men hvad med vinkler? Hvis du bruger grader, varierer vinkler i en sinusformet fra 0 til 360. Hvis du bruger radianer, spænder vinkler fra 0 til 2 gange π ("pi"). Vi skal gøre noget, der igen bevarer hukommelsen i vores Arduino og tænke på en cirkel opdelt i 256 dele og have "binære vinkler", der spænder fra 0 til 255, så "vinklerne" for hver af farverne kan være repræsenteret med enkeltbyte-tal eller tegn, også her.

Arduino er temmelig fantastisk lige som den er, og selvom den kan beregne sinusformede værdier, har vi brug for noget hurtigere. Vi beregner værdierne på forhånd og sætter dem i en 256-post lang række enkeltbyte- eller char-værdier i vores program (se SineTable […] -deklarationen i Arduino-programmet).

Trin 4: Lad os bygge et 3D LIssajous -mønster

Lad os bygge et 3D LIssajous -mønster
Lad os bygge et 3D LIssajous -mønster

For at cykle gennem tabellen med en anden frekvens for hver af de tre farver beholder vi et indeks pr. Farve og tilføjer relativt primære forskydninger til hvert indeks, når vi går gennem farverne. Vi vælger 2, 5 og 11 som de relativt primære forskydninger for de røde, grønne og blå indeksværdier. Arduinos egne interne matematiske egenskaber hjælper os ved automatisk at vikle rundt, når vi tilføjer forskydningsværdien til hvert indeks.

Trin 5: Sæt det hele sammen på Arduino

Sætter det hele sammen på Arduino
Sætter det hele sammen på Arduino

De fleste Arduinos har et antal PWM (eller pulsbreddemodulation) kanaler. Vi skal bruge tre her. En Arduino UNO er fantastisk til dette. Selv en lille 8-bit Atmel mikrokontroller (ATTiny85) fungerer fantastisk.

Hver af PWM -kanalerne driver én farve på RGB -LED'en ved hjælp af Arduino's "AnalogWrite" -funktion, hvor farveintensiteten på hvert punkt omkring den sinusformede cyklus repræsenteres af en pulsbredde eller driftscyklus fra 0 (alle slukket) til 255 (alle på). Vores øjne opfatter disse varierende pulsbredder, gentaget hurtigt nok, som forskellige intensiteter eller lysstyrker af LED'en. Ved at kombinere alle tre PWM -kanaler, der driver hver af de tre farver i en RGB LED, får vi mulighed for at vise 256*256*256 eller over seksten millioner farver!

Du skal konfigurere Arduino IDE (Interactive Development Environment) og slutte det til dit Arduino -kort ved hjælp af dets USB -kabel. Kør jumpere fra PWM -udgangene 3, 5 og 6 (processorstifter 5, 11 og 12) til tre 1 KΩ (tusind ohm) modstande på dit proto -kort eller protoskærm og fra modstandene til LED R, G og B -ben.

  • Hvis RGB -LED'en er en fælles katode (negativ terminal), skal du derefter føre en ledning fra katoden tilbage til GND -stiften på Arduino.
  • Hvis RGB -LED'en er en fælles anode (positiv terminal), skal du derefter føre en ledning fra anoden tilbage til +5V -stiften på Arduino.

Arduino -skitsen vil fungere begge veje. Jeg brugte tilfældigt en SparkFun Electronics / COM-11120 RGB fælles katod-LED (billedet ovenfor, fra SparkFun-webstedet). Den længste pin er den fælles katode.

Download RGB-Instructable.ino-skitsen, åbn den med Arduino IDE, og test kompilér den. Sørg for at angive det korrekte mål Arduino -kort eller chip, og indlæs derefter programmet i Arduino. Det skal starte med det samme.

Du vil se RGB LED gennemgå så mange farver som du kan navngive, og millioner kan du ikke!

Trin 6: Hvad er det næste?

Vi er lige begyndt at udforske RGB -farverum med vores Arduino. Nogle andre ting, jeg har gjort med dette koncept, omfatter:

Direkte skrivning til on-chip-registre i stedet for at bruge AnalogWrite for virkelig at fremskynde tingene

  • Ændring af kredsløbet, så en IR -nærhedssensor fremskynder eller bremser cyklussen afhængigt af hvor tæt du kommer
  • Programmering af en Atmel ATTiny85 8-benet mikrokontroller med Arduino bootloader og denne skitse

Anbefalede: