Inhoudsopgave:

Kleurruimte verkennen: 6 stappen
Kleurruimte verkennen: 6 stappen

Video: Kleurruimte verkennen: 6 stappen

Video: Kleurruimte verkennen: 6 stappen
Video: Strategisch marketingplan maken | marketingplan in 7 stappen 2024, Juli-
Anonim
Kleurruimte verkennen
Kleurruimte verkennen

Onze ogen nemen licht waar via receptoren die gevoelig zijn voor rode, groene en blauwe kleuren in het visuele spectrum. Mensen hebben dit feit de afgelopen honderd jaar gebruikt om kleurenafbeeldingen te leveren via film, televisie, computers en andere apparaten.

Op het scherm van een computer of telefoon worden afbeeldingen in veel kleuren weergegeven door de intensiteit van kleine rode, groene en blauwe LED's die naast elkaar op het scherm staan te veranderen. Miljoenen verschillende kleuren kunnen worden weergegeven door de intensiteit van het licht van de rode, groene of blauwe LED's te veranderen.

Dit project helpt je de rode, groene en blauwe (RGB) kleurruimte te verkennen met behulp van een Arduino, een RGB-LED en een beetje wiskunde.

Je kunt de intensiteiten van de drie kleuren rood, groen en blauw zien als coördinaten in een kubus, waarbij elke kleur langs één as staat en alle drie de assen loodrecht op elkaar staan. Hoe dichter u bij het nulpunt of de oorsprong van de as bent, hoe minder van die kleur wordt weergegeven. Als de waarden voor alle drie de kleuren op het nulpunt of de oorsprong liggen, dan is de kleur zwart en is de RGB-led helemaal uit. Wanneer de waarden voor alle drie de kleuren zo hoog mogelijk zijn (in ons geval 255 voor elk van de drie kleuren), is de RGB-led volledig aan en neemt het oog deze combinatie van kleuren waar als wit.

Stap 1: RGB-kleurruimte

RGB-kleurruimte
RGB-kleurruimte

Met dank aan Kenneth Moreland voor toestemming om zijn mooie afbeelding te gebruiken.

We willen de hoeken van de 3D-kleurruimtekubus verkennen met behulp van een RGB-led die is aangesloten op een Arduino, maar willen dit ook op een interessante manier doen. We zouden het kunnen doen door drie lussen te nesten (elk één voor rood, voor groen en voor blauw) en door alle mogelijke kleurencombinaties te lopen, maar dat zou echt saai zijn. Heb je ooit een 2D Lissajous-patroon op een oscilloscoop of een laserlichtshow? Afhankelijk van de instellingen kan een Lissajous-patroon eruitzien als een diagonale lijn, een cirkel, een 8-figuur of een langzaam draaiend puntig vlinderachtig patroon. Lissajous-patronen worden gecreëerd door de sinusvormige signalen van twee (of meer) oscillatoren te volgen die zijn uitgezet op x-y (of, in ons geval, x-y-z of R-G-B) assen.

Stap 2: Het goede schip Lissajous

Het goede schip Lissajous
Het goede schip Lissajous

De meest interessante Lissajous-patronen verschijnen wanneer de frequenties van de sinusvormige signalen een klein beetje verschillen. Op de oscilloscoopfoto hier verschillen de frequenties met een verhouding van 5 tot 2 (beide priemgetallen). Dit patroon bedekt het vierkant redelijk goed en komt mooi in de hoeken. Hogere priemgetallen zouden het vierkant nog beter bedekken en nog verder in de hoeken steken.

Stap 3: Wacht - Hoe kunnen we een LED aansturen met een sinusvormige golf?

Je hebt me gevangen! We willen de 3D-kleurruimte verkennen die varieert van uit (0) tot volledig aan (255) voor elk van de drie kleuren, maar sinusoïdale golven variëren van -1 tot +1. We gaan hier wat rekenen en programmeren om te krijgen wat we willen.

  • Vermenigvuldig elke waarde met 127 om waarden te krijgen die variëren van -127 tot +127
  • Tel 127 op en rond elke waarde af om waarden te krijgen die variëren van 0 tot 255 (dicht genoeg bij 255 voor ons)

Waarden die variëren van 0 tot 255 kunnen worden weergegeven door enkelbyte-nummers (het "char"-gegevenstype in de C-achtige Arduino-programmeertaal), dus we zullen geheugen besparen door de enkelbyte-representatie te gebruiken.

Maar hoe zit het met hoeken? Als u graden gebruikt, variëren de hoeken in een sinusoïde van 0 tot 360. Als u radialen gebruikt, variëren de hoeken van 0 tot 2 keer π ("pi"). We gaan iets doen dat weer geheugen bespaart in onze Arduino, en denken aan een cirkel verdeeld in 256 delen, en hebben "binaire hoeken" die variëren van 0 tot 255, dus de "hoeken" voor elk van de kleuren kunnen zijn ook hier weergegeven door nummers van één byte, of tekens.

De Arduino is behoorlijk verbazingwekkend zoals hij is, en hoewel hij sinusoïdale waarden kan berekenen, hebben we iets snellers nodig. We zullen de waarden vooraf berekenen en ze in een 256-entry lange array van single-byte- of char-waarden in ons programma plaatsen (zie de SineTable[…]-declaratie in het Arduino-programma).

Stap 4: Laten we een 3D Lissajous-patroon bouwen

Laten we een 3D Lissajous-patroon bouwen
Laten we een 3D Lissajous-patroon bouwen

Om voor elk van de drie kleuren met een andere frequentie door de tabel te bladeren, houden we één index per kleur en voegen we relatief prime-offsets toe aan elke index terwijl we door de kleuren lopen. We kiezen 2, 5 en 11 als de relatief prime offsets voor de rode, groene en blauwe indexwaarden. De eigen interne wiskundige mogelijkheden van de Arduino zullen ons helpen door automatisch om te wikkelen terwijl we de offsetwaarde aan elke index toevoegen.

Stap 5: Dit alles samen op de Arduino zetten

Dit alles samen op de Arduino zetten
Dit alles samen op de Arduino zetten

De meeste Arduino's hebben een aantal PWM-kanalen (of pulsbreedtemodulatie). We hebben er hier drie nodig. Hiervoor is een Arduino UNO ideaal. Zelfs een kleine 8-bit Atmel-microcontroller (ATTiny85) werkt fantastisch.

Elk van de PWM-kanalen stuurt één kleur van de RGB-LED aan met behulp van de Arduino's "AnalogWrite" -functie, waarbij de intensiteit van de kleur op elk punt rond de sinusoïdale cyclus wordt weergegeven door een pulsbreedte, of duty cycle, vanaf 0 (allemaal uit) tot 255 (alles aan). Onze ogen nemen deze variërende pulsbreedtes waar, snel genoeg herhaald, als verschillende intensiteiten of helderheidswaarden van de LED. Door alle drie PWM-kanalen te combineren die elk van de drie kleuren in een RGB-led aansturen, krijgen we de mogelijkheid om 256 * 256 * 256 weer te geven, of meer dan zestien miljoen kleuren!

U moet de Arduino IDE (Interactive Development Environment) instellen en deze via de USB-kabel op uw Arduino-bord aansluiten. Voer jumpers uit van de PWM-uitgangen 3, 5 en 6 (processorpinnen 5, 11 en 12) naar drie weerstanden van 1 KΩ (duizend ohm) op uw proto-bord of proto-schild, en van de weerstanden naar de LED R, G, en B-pinnen.

  • Als de RGB-LED een gemeenschappelijke kathode is (negatieve aansluiting), voer dan een draad van de kathode terug naar de GND-pin op de Arduino.
  • Als de RGB-LED een gemeenschappelijke anode is (positieve aansluiting), voer dan een draad van de anode terug naar de +5V-pin op de Arduino.

De Arduino-schets zal hoe dan ook werken. Ik gebruikte toevallig een SparkFun Electronics / COM-11120 RGB gemeenschappelijke kathode LED (hierboven afgebeeld, van de SparkFun-website). De langste pin is de gemeenschappelijke kathode.

Download de RGB-Instructable.ino-schets, open deze met de Arduino IDE en test het compileren. Zorg ervoor dat u het juiste Arduino-bord of -chip opgeeft en laad het programma vervolgens in de Arduino. Het zou onmiddellijk moeten opstarten.

Je zult zien dat de RGB-LED door zoveel kleuren gaat als je kunt noemen, en miljoenen niet!

Stap 6: Wat nu?

We zijn net begonnen met het verkennen van RGB-kleurruimte met onze Arduino. Enkele andere dingen die ik met dit concept heb gedaan, zijn:

Rechtstreeks schrijven naar registers op de chip, in plaats van AnalogWrite te gebruiken, om de zaken echt te versnellen

  • Het circuit aanpassen zodat een IR-nabijheidssensor de cyclus versnelt of vertraagt, afhankelijk van hoe dichtbij je komt
  • Een Atmel ATTiny85 8-pins microcontroller programmeren met de Arduino-bootloader en deze schets

Aanbevolen: