Taula de continguts:

Exploració de l’espai de color: 6 passos
Exploració de l’espai de color: 6 passos

Vídeo: Exploració de l’espai de color: 6 passos

Vídeo: Exploració de l’espai de color: 6 passos
Vídeo: Бычок Гаврюша/Goby Gavryusha (Авторский МК Маргариты Легенькой) 2024, De novembre
Anonim
Exploració de l’espai de color
Exploració de l’espai de color

Els nostres ulls perceben la llum a través de receptors que són sensibles als colors vermell, verd i blau de l’espectre visual. La gent ha utilitzat aquest fet per proporcionar imatges en color a través de pel·lícules, televisió, ordinadors i altres dispositius durant els darrers cent anys aproximadament.

A la pantalla d'un ordinador o telèfon, les imatges es mostren en molts colors canviant la intensitat dels diminuts LED vermells, verds i blaus que estan al costat de la pantalla. Es poden mostrar milions de colors diferents canviant la intensitat de la llum dels LED vermells, verds o blaus.

Aquest projecte us ajudarà a explorar l'espai de color vermell, verd i blau (RGB) mitjançant un Arduino, un LED RGB i una mica de matemàtiques.

Podeu pensar en les intensitats dels tres colors, vermell, verd i blau, com a coordenades en un cub, on cada color es troba al llarg d’un eix i els tres eixos són perpendiculars entre si. Com més a prop estigueu del punt zero, o origen, de l'eix, menys color es mostrarà. Quan els valors dels tres colors es troben al punt zero, o origen, el color és negre i el LED RGB està completament apagat. Quan els valors dels tres colors són tan elevats (en el nostre cas, 255 per a cadascun dels tres colors), el LED RGB està completament encès i l’ull percep aquesta combinació de colors com a blanc.

Pas 1: espai de color RGB

Espai de color RGB
Espai de color RGB

Gràcies a Kenneth Moreland pel permís per utilitzar la seva bonica imatge.

Ens agradaria explorar les cantonades del cub d’espai de color 3D mitjançant un LED RGB connectat a un Arduino, però també volem fer-ho d’una manera interessant. Ho podríem fer anidant tres bucles (un per al vermell, el verd i el blau) i passar per totes les combinacions de colors possibles, però seria realment avorrit. espectacle de llum làser? Depenent de la configuració, un patró de Lissajous pot semblar una línia diagonal, un cercle, una figura 8 o un patró de papallona que gira lentament. Els patrons de Lissajous es creen mitjançant el seguiment dels senyals sinusoïdals de dos (o més) oscil·ladors representats en eixos x-y (o, en el nostre cas, x-y-z o R-G-B).

Pas 2: El bon vaixell Lissajous

El Bon Vaixell Lissajous
El Bon Vaixell Lissajous

Els patrons de Lissajous més interessants apareixen quan les freqüències dels senyals sinusoïdals difereixen en una petita quantitat. A la foto de l’oscil·loscopi, les freqüències difereixen en una proporció de 5 a 2 (tots dos són nombres primers). Aquest patró cobreix força el seu quadrat i entra molt bé a les cantonades. Els nombres primers més alts farien un treball encara millor de cobrir el quadrat i ficar-se encara més a les cantonades.

Pas 3: Espereu: com podem conduir un LED amb una ona sinusoïdal?

M'has atrapat! Volem explorar l’espai de color 3D que oscil·la entre off (0) i full on (255) per a cadascun dels tres colors, però les ones sinusoïdals varien de -1 a +1. Aquí farem una mica de matemàtiques i programació per aconseguir el que volem.

  • Multipliqueu cada valor per 127 per obtenir valors que oscil·len entre -127 i +127
  • Afegiu 127 i arrodoneu cada valor per obtenir valors que oscil·len entre 0 i 255 (prou propers a 255 per a nosaltres)

Els valors que oscil·len entre 0 i 255 es poden representar mitjançant números d’un byte (el tipus de dades "char" en el llenguatge de programació Arduino tipus C), de manera que estalviarem memòria mitjançant la representació d'un byte.

Però, què tal els angles? Si feu servir graus, els angles d'un sinusoide oscil·len entre 0 i 360. Si feu servir radians, els angles oscil·len entre 0 i 2 vegades π ("pi"). Farem alguna cosa que de nou conservi la memòria al nostre Arduino i pensem en un cercle dividit en 256 parts i que tinguem "angles binaris" que oscil·len entre 0 i 255, de manera que els "angles" de cadascun dels colors poden ser representat per números d’un byte o caràcters, també aquí.

L'Arduino és bastant increïble tal com és i, tot i que pot calcular valors sinusoïdals, necessitem quelcom més ràpid. Pre-calcularem els valors i els posarem en una matriu llarga de 256 entrades de valors d’un byte o de caràcters al nostre programa (vegeu la declaració SineTable […] al programa Arduino).

Pas 4: construïm un patró 3D important

Construïm un patró 3D important
Construïm un patró 3D important

Per circular per la taula a una freqüència diferent per a cadascun dels tres colors, conservarem un índex per color i afegirem compensacions relativament primeres a cada índex a mesura que anem passant pels colors. Triarem 2, 5 i 11 com a compensacions relativament primeres per als valors de l’índex vermell, verd i blau. Les pròpies capacitats matemàtiques internes de l’Arduino ens ajudaran mitjançant un embolcall automàtic mentre afegim el valor de compensació a cada índex.

Pas 5: unir-ho tot a l'Arduino

Posant-ho tot junt a l'Arduino
Posant-ho tot junt a l'Arduino

La majoria dels Arduinos tenen diversos canals PWM (o amplada de pols). Aquí en necessitarem tres. Un Arduino UNO és ideal per a això. Fins i tot un petit microcontrolador Atmel de 8 bits (ATTiny85) funciona fabulosament.

Cadascun dels canals PWM conduirà un color del LED RGB mitjançant la funció "AnalogWrite" d'Arduino, on la intensitat del color en cada punt al voltant del cicle sinusoidal es representa mitjançant una amplada de pols, o cicle de treball, des de 0 (tot apagat)) a 255 (tot activat). Els nostres ulls perceben aquestes amplades de pols variables, repetides prou ràpidament, com a diferents intensitats o lluminositats del LED. Combinant els tres canals PWM que condueixen cadascun dels tres colors en un LED RGB, tenim la possibilitat de mostrar 256 * 256 * 256, o més de setze milions de colors.

Haureu de configurar l’Arduino IDE (Entorn de desenvolupament interactiu) i connectar-lo a la placa Arduino mitjançant el seu cable USB. Executeu ponts des de les sortides PWM 3, 5 i 6 (pins de processador 5, 11 i 12) a tres resistències de 1 KΩ (mil ohms) a la vostra placa proto o protecció blindatge, i des de les resistències al LED R, G, i pins B.

  • Si el LED RGB és un càtode comú (terminal negatiu), executeu un cable des del càtode cap al pin GND de l'Arduino.
  • Si el LED RGB és un ànode comú (terminal positiu), executeu un cable des de l’ànode cap al pin + 5V de l’Arduino.

L’esbós d’Arduino funcionarà de qualsevol manera. He utilitzat un LED de càtode RGB de SparkFun Electronics / COM-11120 RGB (a la imatge superior, del lloc web de SparkFun). El passador més llarg és el càtode comú.

Baixeu-vos l'esbós RGB-Instructable.ino, obriu-lo amb l'IDE Arduino i proveu-ne la compilació. Assegureu-vos d’especificar la placa o xip Arduino objectiu correcte i, a continuació, carregueu el programa a l’Arduino. Hauria de començar immediatament.

Veureu el LED RGB recorrent tants colors com pugueu anomenar i milions que no.

Pas 6: Què passa a continuació?

Acabem d’explorar l’espai de color RGB amb el nostre Arduino. Algunes altres coses que he fet amb aquest concepte són:

Escriviu directament als registres del xip, en lloc d’utilitzar AnalogWrite, per accelerar les coses

  • Modificar el circuit perquè un sensor de proximitat IR infeliqui o alenteixi el cicle en funció del grau de proximitat
  • Programació d’un microcontrolador de 8 pins Atmel ATTiny85 amb el carregador d’Arduino i aquest esbós

Recomanat: