Innholdsfortegnelse:

Utforske fargerom: 6 trinn
Utforske fargerom: 6 trinn

Video: Utforske fargerom: 6 trinn

Video: Utforske fargerom: 6 trinn
Video: Come funziona il tuo monitor? | Spiegazione tecnica (Davvero molto tecnica) 2024, Juli
Anonim
Utforske fargerommet
Utforske fargerommet

Øynene våre oppfatter lys gjennom reseptorer som er følsomme for røde, grønne og blå farger i det visuelle spekteret. Folk har brukt dette faktum for å gi fargebilder via film, fjernsyn, datamaskiner og andre enheter i løpet av de siste hundre årene eller så.

På en datamaskin eller telefonens skjerm vises bilder i mange farger ved å endre intensiteten til de små røde, grønne og blå lysdiodene som ligger ved siden av hverandre på skjermen. Millioner av forskjellige farger kan vises ved å endre lysstyrken fra de røde, grønne eller blå lysdiodene.

Dette prosjektet vil hjelpe deg med å utforske det røde, grønne og blå (RGB) fargerommet ved hjelp av en Arduino, en RGB LED og litt matte.

Du kan tenke på intensiteten til de tre fargene, rød, grønn og blå, som koordinater i en kube, hvor hver farge er langs en akse, og alle tre aksene er vinkelrett på hverandre. Jo nærmere du er nullpunktet, eller opprinnelsen til aksen, desto mindre blir fargen vist. Når verdiene for alle tre fargene er på nullpunktet, eller opprinnelsen, er fargen svart, og RGB -LED -en er helt av. Når verdiene for alle tre fargene er så høye de kan gå (i vårt tilfelle 255 for hver av de tre fargene), er RGB -LED -en fullstendig på, og øyet oppfatter denne kombinasjonen av farger som hvit.

Trinn 1: RGB -fargerom

RGB -fargerom
RGB -fargerom

Takk til Kenneth Moreland for tillatelse til å bruke det fine bildet sitt.

Vi ønsker å utforske hjørnene av 3D -fargerommet med en RGB -LED koblet til en Arduino, men vil også gjøre dette på en interessant måte. Vi kunne gjøre det ved å hekke tre sløyfer (en hver for rødt, for grønt og for blått), og kjøre gjennom alle mulige fargekombinasjoner, men det ville være veldig kjedelig. Har du noen gang sett et 2D Lissajous -mønster på et oscilloskop eller en laserlysshow? Avhengig av innstillingene kan et Lissajous-mønster se ut som en diagonal linje, en sirkel, en figur 8 eller et sakte roterende spiss sommerfugllignende mønster. Lissajous-mønstre skapes ved å spore de sinusformede signalene til to (eller flere) oscillatorer plottet på x-y (eller, for vårt tilfelle, x-y-z eller R-G-B) akser.

Trinn 2: The Good Ship Lissajous

The Good Ship Lissajous
The Good Ship Lissajous

De mest interessante Lissajous -mønstrene vises når frekvensene til de sinusformede signalene varierer med en liten mengde. På oscilloskopbildet her varierer frekvensene med et forhold på 5 til 2 (som begge er primtall). Dette mønsteret dekker torget ganske godt, og kommer pent inn i hjørnene. Høyere primtall vil gjøre en enda bedre jobb med å dekke torget og stikke enda lenger inn i hjørnene.

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

Du tok meg! Vi ønsker å utforske 3D -fargerommet som varierer fra off (0) til full on (255) for hver av de tre fargene, men sinusformede bølger varierer fra -1 til +1. Vi skal gjøre litt matte og programmering her for å få det vi ønsker.

  • Multipliser hver verdi med 127 for å få verdier som varierer fra -127 til +127
  • Legg til 127 og rund hver verdi for å få verdier som varierer fra 0 til 255 (nær nok til 255 for oss)

Verdier som varierer fra 0 til 255 kan representeres av enkeltbyte-tall (datatypen "char" i det C-lignende Arduino-programmeringsspråket), så vi sparer minne ved å bruke enbyte-representasjonen.

Men hva med vinkler? Hvis du bruker grader, varierer vinkler i sinusformet fra 0 til 360. Hvis du bruker radianer, varierer vinkler fra 0 til 2 ganger π ("pi"). Vi skal gjøre noe som igjen bevarer minnet i Arduinoen vår, og tenker på en sirkel delt i 256 deler, og har "binære vinkler" som varierer fra 0 til 255, slik at "vinklene" for hver av fargene kan være representert med enkeltbyte-tall, eller tegn, også her.

Arduino er ganske fantastisk akkurat slik den er, og selv om den kan beregne sinusformede verdier, trenger vi noe raskere. Vi vil forhåndsberegne verdiene og sette dem inn i en 256 oppføringer lang rekke byte- eller char-verdier i programmet vårt (se SineTable […] -erklæringen i Arduino-programmet).

Trinn 4: La oss bygge et 3D LIssajous -mønster

La oss bygge et 3D LIssajous -mønster
La oss bygge et 3D LIssajous -mønster

For å bla gjennom tabellen med en annen frekvens for hver av de tre fargene, beholder vi en indeks per farge, og vi legger til relativt prime offsets til hver indeks mens vi går gjennom fargene. Vi velger 2, 5 og 11 som de relativt primære kompensasjonene for indeksverdiene Rød, Grønn og Blå. Arduinos egne interne matematiske evner vil hjelpe oss ved automatisk å vikle rundt mens vi legger til offset -verdien til hver indeks.

Trinn 5: Sett alt sammen på Arduino

Å sette alt sammen på Arduino
Å sette alt sammen på Arduino

De fleste Arduinos har en rekke PWM (eller pulsbreddemodulering) kanaler. Vi trenger tre her. En Arduino UNO er flott for dette. Selv en liten 8-biters Atmel-mikrokontroller (ATTiny85) fungerer fantastisk.

Hver av PWM -kanalene vil kjøre én farge på RGB LED ved hjelp av Arduinos "AnalogWrite" -funksjon, hvor intensiteten til fargen på hvert punkt rundt den sinusformede syklusen er representert med en pulsbredde eller driftssyklus, fra 0 (alle av) til 255 (alle på). Øynene våre oppfatter disse varierende pulsbredder, gjentatt raskt nok, som forskjellige intensiteter eller lysstyrker på LED -en. Ved å kombinere alle tre PWM -kanalene som driver hver av de tre fargene i en RGB LED, får vi muligheten til å vise 256*256*256, eller over seksten millioner farger!

Du må konfigurere Arduino IDE (Interactive Development Environment) og koble den til Arduino -kortet ved hjelp av USB -kabelen. Kjør hoppere fra PWM -utgangene 3, 5 og 6 (prosessorpinnene 5, 11 og 12) til tre 1 KΩ (tusen ohm) motstander på prototavlen eller protoskjoldet, og fra motstandene til LED R, G og B -pinner.

  • Hvis RGB -LED -en er en vanlig katode (negativ terminal), kjør du en ledning fra katoden tilbake til GND -pinnen på Arduino.
  • Hvis RGB -LED -en er en vanlig anode (positiv terminal), kjør du en ledning fra anoden tilbake til +5V -pinnen på Arduino.

Arduino -skissen vil fungere begge veier. Jeg brukte tilfeldigvis en SparkFun Electronics / COM-11120 RGB felles katod-LED (bildet ovenfor, fra SparkFun-nettstedet). Den lengste tappen er den vanlige katoden.

Last ned RGB-Instructable.ino-skissen, åpne den med Arduino IDE, og testkompiler den. Sørg for å spesifisere riktig Arduino -brett eller brikke, og last deretter programmet inn i Arduino. Det bør starte opp umiddelbart.

Du vil se RGB LED -syklusen gjennom så mange farger du kan nevne, og millioner du ikke kan!

Trinn 6: Hva er neste?

Vi har nettopp begynt å utforske RGB -fargerom med vår Arduino. Noen andre ting jeg har gjort med dette konseptet inkluderer:

Direkte skriving til on-chip-registre, i stedet for å bruke AnalogWrite, for å virkelig få fart på tingene

  • Endre kretsen slik at en IR -nærhetssensor øker eller reduserer syklusen, avhengig av hvor nær du kommer
  • Programmering av en Atmel ATTiny85 8-pinners mikrokontroller med Arduino bootloader og denne skissen

Anbefalt: