Inhaltsverzeichnis:
- Schritt 1: RGB-Farbraum
- Schritt 2: Das gute Schiff Lissajous
- Schritt 3: Warten - Wie können wir eine LED mit einer Sinuswelle ansteuern?
- Schritt 4: Lassen Sie uns ein 3D-LIssajous-Muster erstellen
- Schritt 5: Setzen Sie dies alles zusammen auf dem Arduino
- Schritt 6: Was kommt als nächstes?
Video: Erkunden des Farbraums - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
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
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
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
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
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:
Entwicklung des Drivemall-Boards: 5 Schritte
Entwicklung des Drivemall Boards: In diesem Tutorial sehen wir die grundlegenden Schritte zum Erstellen eines benutzerdefinierten Arduino-Boards. Die verwendete Software ist KiCad für das Boarddesign und die Arduino IDE für das Erstellen und Laden der Firmware für das Board
Installieren des Windows-Subsystems für Linux (WSL): 3 Schritte
Installieren des Windows-Subsystems für Linux (WSL): Diese Anleitung soll Benutzern helfen, das Windows-Subsystem für Linux auf ihrem Windows 10-Computer zu installieren. Die spezifische Linux-Distribution, die dieser Befehlssatz verwendet, heißt Ubuntu. Schauen Sie hier für eine Übersicht über die verschiedenen Linux
Kennenlernen des "Professional ILC8038 Function Generator DIY Kit": 5 Schritte
Kennenlernen des "Professional ILC8038 Function Generator DIY Kit": Auf der Suche nach neuen Elektronikprojekten bin ich auf ein süßes kleines Funktionsgenerator-Kit gestoßen. Es wird als „Professional ILC8038 Function Generator Sine Triangle Square Wave DIY Kit“bezeichnet und ist bei einer Reihe von Anbietern erhältlich
Überprüfung des JDM-Programmierers: 9 Schritte
JDM Programmer Review: JDM ist ein beliebter PIC-Programmierer, da er einen seriellen Port, ein Minimum an Komponenten und keine Stromversorgung verwendet. Aber es gibt Verwirrung da draußen, mit vielen Programmiervarianten im Netz, welche funktionieren mit welchen PICs? In diesem „Instru
Wie man eine Babygewichtsmaschine mit Arduino Nano, HX-711 Wägezelle und OLED 128X64 herstellt -- Kalibrierung des HX-711: 5 Schritte
Wie man eine Babygewichtsmaschine mit Arduino Nano, HX-711-Wägezelle und OLED 128X64 herstellt || Kalibrierung von HX-711: Hallo Instructables, vor wenigen Tagen wurde ich Vater eines süßen Babys?. Als ich im Krankenhaus war, stellte ich fest, dass das Gewicht des Babys so wichtig ist, um das Wachstum des Babys zu überwachen. Also ich habe eine Idee? um eine Babygewichtsmaschine von meinem Selbst zu machen. In diesem Instructable ich