Inhaltsverzeichnis:

Erkunden des Farbraums - Gunook
Erkunden des Farbraums - Gunook

Video: Erkunden des Farbraums - Gunook

Video: Erkunden des Farbraums - Gunook
Video: Топ-5 ЛУЧШИХ OLED-телевизоров 2024 года: LG C3, Sony A95L и Samsung S90C (... 2024, November
Anonim
Farbraum erkunden
Farbraum erkunden

Unsere Augen nehmen Licht durch Rezeptoren wahr, die für rote, grüne und blaue Farben im visuellen Spektrum empfindlich sind. Die Menschen haben diese Tatsache in den letzten 100 Jahren genutzt, um Farbbilder über Film, Fernsehen, Computer und andere Geräte bereitzustellen.

Auf dem Display eines Computers oder Telefons werden Bilder in vielen Farben angezeigt, indem die Intensität winziger roter, grüner und blauer LEDs geändert wird, die auf dem Bildschirm nebeneinander liegen. Millionen verschiedener Farben können angezeigt werden, indem die Intensität des Lichts der roten, grünen oder blauen LEDs geändert wird.

Dieses Projekt hilft Ihnen, den Farbraum Rot, Grün und Blau (RGB) mit einem Arduino, einer RGB-LED und ein wenig Mathematik zu erkunden.

Sie können sich die Intensitäten der drei Farben Rot, Grün und Blau als Koordinaten in einem Würfel vorstellen, wobei jede Farbe entlang einer Achse liegt und alle drei Achsen senkrecht aufeinander stehen. Je näher Sie sich dem Nullpunkt oder Ursprung der Achse befinden, desto weniger Farbe wird angezeigt. Wenn die Werte für alle drei Farben am Nullpunkt oder Ursprung liegen, ist die Farbe schwarz und die RGB-LED ist vollständig aus. Wenn die Werte für alle drei Farben so hoch wie möglich sind (in unserem Fall 255 für jede der drei Farben), ist die RGB-LED vollständig an und das Auge nimmt diese Farbkombination als weiß wahr.

Schritt 1: RGB-Farbraum

RGB-Farbraum
RGB-Farbraum

Danke an Kenneth Moreland für die Erlaubnis, sein schönes Bild verwenden zu dürfen.

Wir möchten die Ecken des 3D-Farbraumwürfels mit einer an einen Arduino angeschlossenen RGB-LED erkunden, wollen dies aber auch auf interessante Weise tun. Wir könnten es tun, indem wir drei Schleifen (je eine für Rot, für Grün und für Blau) verschachteln und jede mögliche Farbkombination durchgehen, aber das wäre wirklich langweilig. Haben Sie jemals ein 2D-Lissajous-Muster auf einem Oszilloskop oder einem anderen gesehen? Laserlichtshow? Je nach Einstellung kann ein Lissajous-Muster wie eine diagonale Linie, ein Kreis, eine 8 oder ein langsam rotierendes spitzes schmetterlingsähnliches Muster aussehen. Lissajous-Muster werden erzeugt, indem die sinusförmigen Signale von zwei (oder mehr) Oszillatoren verfolgt werden, die auf x-y-Achsen (oder in unserem Fall x-y-z- oder R-G-B)-Achsen aufgetragen sind.

Schritt 2: Das gute Schiff Lissajous

Das gute Schiff Lissajous
Das gute Schiff Lissajous

Die interessantesten Lissajous-Muster treten auf, wenn sich die Frequenzen der Sinussignale geringfügig unterscheiden. Im Oszilloskopfoto hier unterscheiden sich die Frequenzen im Verhältnis 5 zu 2 (beides Primzahlen). Dieses Muster deckt sein Quadrat ziemlich gut ab und geht schön in die Ecken. Höhere Primzahlen würden das Quadrat noch besser abdecken und noch weiter in die Ecken stoßen.

Schritt 3: Warten - Wie können wir eine LED mit einer Sinuswelle ansteuern?

Sie haben mich erwischt! Wir möchten den 3D-Farbraum untersuchen, der für jede der drei Farben von Aus (0) bis Voll ein (255) reicht, aber Sinuswellen variieren von -1 bis +1. Wir werden hier ein wenig rechnen und programmieren, um zu bekommen, was wir wollen.

  • Multiplizieren Sie jeden Wert mit 127, um Werte im Bereich von -127 bis +127. zu erhalten
  • Addieren Sie 127 und runden Sie jeden Wert, um Werte im Bereich von 0 bis 255 zu erhalten (für uns nahe genug an 255).

Werte im Bereich von 0 bis 255 können durch Einzelbyte-Zahlen dargestellt werden (der Datentyp "char" in der C-ähnlichen Arduino-Programmiersprache), sodass wir durch die Einzelbyte-Darstellung Speicher sparen.

Aber wie sieht es mit Winkeln aus? Wenn Sie Grad verwenden, reichen die Winkel in einer Sinuskurve von 0 bis 360. Wenn Sie Bogenmaß verwenden, reichen die Winkel von 0 bis 2 mal π ("pi"). Wir werden etwas tun, das wieder Speicher in unserem Arduino spart, und denken an einen Kreis, der in 256 Teile unterteilt ist und "binäre Winkel" im Bereich von 0 bis 255 haben, so dass die "Winkel" für jede der Farben sein können auch hier durch Single-Byte-Zahlen oder Zeichen dargestellt.

Der Arduino ist so wie er ist ziemlich erstaunlich, und obwohl er sinusförmige Werte berechnen kann, brauchen wir etwas schnelleres. Wir berechnen die Werte im Voraus und fügen sie in unserem Programm in ein 256 Einträge langes Array von Einzelbyte- oder char-Werten ein (siehe die SineTable[…]-Deklaration im Arduino-Programm).

Schritt 4: Lassen Sie uns ein 3D-LIssajous-Muster erstellen

Lassen Sie uns ein 3D-LIssajous-Muster erstellen
Lassen Sie uns ein 3D-LIssajous-Muster erstellen

Um die Tabelle mit einer anderen Häufigkeit für jede der drei Farben zu durchlaufen, behalten wir einen Index pro Farbe bei und fügen jedem Index relativ erstklassige Offsets hinzu, während wir durch die Farben gehen. Wir wählen 2, 5 und 11 als relativ erstklassige Offsets für die Rot-, Grün- und Blau-Indexwerte. Die eigenen internen mathematischen Fähigkeiten des Arduino helfen uns, indem wir automatisch umbrechen, wenn wir den Offset-Wert zu jedem Index hinzufügen.

Schritt 5: Setzen Sie dies alles zusammen auf dem Arduino

Setzen Sie dies alles zusammen auf dem Arduino
Setzen Sie dies alles zusammen auf dem Arduino

Die meisten Arduinos haben eine Reihe von PWM-Kanälen (oder Pulsweitenmodulation). Wir brauchen hier drei. Dafür eignet sich ein Arduino UNO hervorragend. Sogar ein kleiner 8-Bit-Atmel-Mikrocontroller (ATTiny85) funktioniert fabelhaft.

Jeder der PWM-Kanäle steuert eine Farbe der RGB-LED mit der Arduino-Funktion "AnalogWrite", bei der die Intensität der Farbe an jedem Punkt um den Sinuszyklus durch eine Impulsbreite oder einen Arbeitszyklus von 0 (alles aus) dargestellt wird) bis 255 (alle an). Unsere Augen nehmen diese unterschiedlichen Pulsbreiten, die sich schnell genug wiederholen, als unterschiedliche Intensitäten oder Helligkeiten der LED wahr. Durch die Kombination aller drei PWM-Kanäle, die jede der drei Farben in einer RGB-LED ansteuern, können wir 256 * 256 * 256 oder über sechzehn Millionen Farben anzeigen!

Sie müssen die Arduino IDE (Interactive Development Environment) einrichten und über das USB-Kabel mit Ihrem Arduino-Board verbinden. Führen Sie Jumper von den PWM-Ausgängen 3, 5 und 6 (Prozessorpins 5, 11 und 12) zu drei 1 KΩ (eintausend Ohm) Widerständen auf Ihrer Proto-Platine oder Proto-Abschirmung und von den Widerständen zur LED R, G, und B-Pins.

  • Wenn die RGB-LED eine gemeinsame Kathode (Minuspol) ist, führen Sie einen Draht von der Kathode zurück zum GND-Pin des Arduino.
  • Wenn die RGB-LED eine gemeinsame Anode (positiver Anschluss) ist, führen Sie einen Draht von der Anode zurück zum +5V-Pin des Arduino.

Die Arduino-Skizze funktioniert so oder so. Ich habe zufällig eine gemeinsame Kathoden-LED von SparkFun Electronics / COM-11120 RGB verwendet (oben abgebildet, von der SparkFun-Website). Der längste Pin ist die gemeinsame Kathode.

Laden Sie die RGB-Instructable.ino-Skizze herunter, öffnen Sie sie mit der Arduino IDE und testen Sie sie. Stellen Sie sicher, dass Sie das richtige Arduino-Zielboard oder den richtigen Chip angeben, und laden Sie dann das Programm in das Arduino. Es sollte sofort starten.

Sie werden sehen, wie die RGB-LED so viele Farben durchläuft, wie Sie benennen können, und Millionen, die Sie nicht können!

Schritt 6: Was kommt als nächstes?

Wir haben gerade damit begonnen, den RGB-Farbraum mit unserem Arduino zu erkunden. Einige andere Dinge, die ich mit diesem Konzept gemacht habe, sind:

Direktes Schreiben in On-Chip-Register, anstatt AnalogWrite zu verwenden, um die Dinge wirklich zu beschleunigen

  • Ändern Sie die Schaltung so, dass ein IR-Näherungssensor den Zyklus beschleunigt oder verlangsamt, je nachdem, wie nahe Sie kommen
  • Programmierung eines Atmel ATTiny85 8-Pin-Mikrocontrollers mit dem Arduino-Bootloader und dieser Skizze

Empfohlen: