INHOUDSOPGAWE:

Verken kleurruimte: 6 stappe
Verken kleurruimte: 6 stappe

Video: Verken kleurruimte: 6 stappe

Video: Verken kleurruimte: 6 stappe
Video: Horeca training | Een perfect biertje tappen in 6 stappen 2024, November
Anonim
Verken kleurruimte
Verken kleurruimte

Ons oë sien lig deur reseptore wat sensitief is vir rooi, groen en blou kleure in die visuele spektrum. Mense het die afgelope honderd jaar of wat hierdie feit gebruik om kleurprente via film, televisie, rekenaars en ander toestelle te verskaf.

Op 'n rekenaar of telefoon se skerm word beelde in baie kleure vertoon deur die intensiteit van klein rooi, groen en blou LED's wat langs mekaar op die skerm is, te verander. Miljoene verskillende kleure kan vertoon word deur die intensiteit van die lig te verander van die rooi, groen of blou LED's.

Hierdie projek sal u help om die rooi, groen en blou (RGB) kleurruimte te verken met behulp van 'n Arduino, 'n RGB LED en 'n bietjie wiskunde.

U kan dink aan die intensiteite van die drie kleure, rooi, groen en blou, as koördinate in 'n kubus, waar elke kleur langs een as is, en al drie asse loodreg op mekaar is. Hoe nader jy aan die nulpunt of oorsprong van die as is, hoe minder word die kleur getoon. As die waardes vir al drie kleure op die nulpunt of oorsprong is, is die kleur swart en is die RGB -LED heeltemal af. As die waardes vir al drie kleure so hoog is as moontlik (in ons geval 255 vir elk van die drie kleure), is die RGB -LED heeltemal aan, en die oog sien hierdie kombinasie van kleure as wit.

Stap 1: RGB -kleurruimte

RGB -kleurruimte
RGB -kleurruimte

Dankie aan Kenneth Moreland vir die toestemming om sy mooi beeld te gebruik.

Ons wil die hoeke van die 3D -kleurruimteblokkie verken met 'n RGB -LED wat aan 'n Arduino gekoppel is, maar wil dit ook op 'n interessante manier doen. Ons kan dit doen deur drie lusse (een elk vir rooi, vir groen en vir blou) te nestel en deur elke moontlike kleurkombinasie te loop, maar dit sal regtig vervelig wees. Het u al ooit 'n 2D Lissajous -patroon op 'n ossilloskoop of 'n laser lig vertoon? Afhangende van die instellings, kan 'n Lissajous-patroon soos 'n diagonale lyn, 'n sirkel, 'n figuur 8 of 'n stadig roterende puntige vlinderagtige patroon lyk. Lissajous-patrone word geskep deur die sinusvormige seine van twee (of meer) ossillators op x-y (of, in ons geval, x-y-z of R-G-B) asse op te spoor.

Stap 2: The Good Ship Lissajous

Die goeie skip Lissajous
Die goeie skip Lissajous

Die interessantste Lissajous -patrone verskyn wanneer die frekwensies van die sinusvormige seine klein verskil. Op die ossilloskoopfoto hier verskil die frekwensies met 'n verhouding van 5 tot 2 (albei priemgetalle). Hierdie patroon dek sy vierkant redelik goed en kom mooi in die hoeke. Hoër priemgetalle sou die vierkant nog beter bedek en nog verder in die hoeke steek.

Stap 3: Wag - hoe kan ons 'n LED met 'n sinusvormige golf dryf?

Jy het my gevang! Ons wil die 3D -kleurruimte verken wat wissel van af (0) tot vol aan (255) vir elk van die drie kleure, maar sinusvormige golwe wissel van -1 tot +1. Ons gaan hier 'n bietjie wiskunde doen en programmeer om te kry wat ons wil hê.

  • Vermenigvuldig elke waarde met 127 om waardes te kry wat wissel van -127 tot +127
  • Voeg 127 by en rond elke waarde om waardes te kry wat wissel van 0 tot 255 (naby genoeg tot 255 vir ons)

Waardes wat wissel van 0 tot 255 kan voorgestel word deur enkel-byte getalle (die "char" datatipe in die C-agtige Arduino programmeertaal), dus bespaar ons geheue deur die enkel-byte voorstelling te gebruik.

Maar hoe gaan dit met hoeke? As u grade gebruik, wissel die hoeke in 'n sinusvormige van 0 tot 360. As u radiale gebruik, wissel die hoeke van 0 tot 2 keer π ("pi"). Ons gaan iets doen wat ons geheue weer in ons Arduino bewaar, en dink aan 'n sirkel wat in 256 dele verdeel is en 'binêre hoeke' het wat wissel van 0 tot 255, sodat die 'hoeke' vir elk van die kleure kan wees verteenwoordig deur enkel-byte getalle, of tekens, ook hier.

Die Arduino is redelik ongelooflik net soos dit is, en hoewel dit sinusvormige waardes kan bereken, het ons iets vinniger nodig. Ons bereken die waardes vooraf en plaas dit in 'n 256-ingang lange reeks byte- of char-waardes in ons program (sien die SineTable […] -verklaring in die Arduino-program).

Stap 4: Kom ons bou 'n 3D LIssajous -patroon

Kom ons bou 'n 3D LIssajous -patroon
Kom ons bou 'n 3D LIssajous -patroon

Om deur die tabel met 'n ander frekwensie vir elk van die drie kleure te blaai, behou ons een indeks per kleur en voeg ons by elke indeks relatief goeie verrekenings by terwyl ons deur die kleure stap. Ons kies 2, 5 en 11 as die relatief goeie verrekenings vir die rooi, groen en blou indekswaardes. Die Arduino se eie interne wiskundige vermoëns sal ons help deur outomaties om te draai terwyl ons die offsetwaarde by elke indeks voeg.

Stap 5: Sit dit alles saam op die Arduino

Dit alles saam op die Arduino
Dit alles saam op die Arduino

Die meeste Arduino's het 'n aantal PWM (of polswydte modulasie) kanale. Ons sal drie hier nodig hê. 'N Arduino UNO is ideaal hiervoor. Selfs 'n klein 8-bis Atmel-mikrobeheerder (ATTiny85) werk fantasties.

Elkeen van die PWM -kanale dryf een kleur van die RGB LED met behulp van die "AnalogWrite" -funksie van die Arduino, waar die intensiteit van die kleur op elke punt rondom die sinusvormige siklus voorgestel word deur 'n polswydte, of dienssiklus, van 0 (alles af) tot 255 (almal aan). Ons oë sien hierdie verskillende polswydtes, wat vinnig genoeg herhaal word, as verskillende intensiteite, of helderhede, van die LED. Deur die kombinasie van al drie PWM -kanale wat elk van die drie kleure in 'n RGB LED bestuur, kry ons die moontlikheid om 256*256*256 of meer as sestien miljoen kleure te vertoon!

U moet die Arduino IDE (Interactive Development Environment) instel en dit met u USB -kabel op u Arduino -bord koppel. Begin springers van die PWM -uitsette 3, 5 en 6 (verwerkerpenne 5, 11 en 12) na drie 1 KΩ (duisend ohm) weerstande op u protobord of protoskerm, en van die weerstande na die LED R, G, en B -penne.

  • As die RGB -LED 'n algemene katode (negatiewe terminaal) is, voer dan 'n draad van die katode terug na die GND -pen op die Arduino.
  • As die RGB -LED 'n algemene anode (positiewe terminaal) is, voer dan 'n draad van die anode terug na die +5V -pen op die Arduino.

Die Arduino -skets werk in elk geval. Ek het toevallig 'n SparkFun Electronics / COM-11120 RGB gewone katode LED gebruik (hierbo op die SparkFun-webwerf). Die langste pen is die gewone katode.

Laai die RGB-Instructable.ino-skets af, maak dit oop met die Arduino IDE en toets dit op. Maak seker dat u die korrekte teiken Arduino -bord of -skyfie spesifiseer, en laai die program dan in die Arduino. Dit moet onmiddellik begin.

U sien die RGB LED -siklus deur soveel kleure as wat u kan noem, en miljoene wat u nie kan nie!

Stap 6: Wat is volgende?

Ons het pas begin met die verkenning van RGB -kleurruimte met ons Arduino. 'N Paar ander dinge wat ek met hierdie konsep gedoen het, sluit in:

Skryf direk na on-chip-registers, in plaas van om AnalogWrite te gebruik, om dinge regtig te bespoedig

  • Om die kring so te verander dat 'n IR -nabyheidssensor die siklus versnel of vertraag, afhangende van hoe naby u kom
  • Programmering van 'n Atmel ATTiny85 8-pins mikrobeheerder met die Arduino-laaiprogram en hierdie skets

Aanbeveel: