Inhaltsverzeichnis:
- Schritt 2: Was Sie brauchen
- Schritt 3: Alles anschließen
- Schritt 4: Der Code
- Schritt 5: Eine kleine Erklärung des Codes
Sinuswellen sind kontinuierliche Wellen, die in der Natur als Schallwellen, Radiowellen, Lichtwellen und viele andere Formen vorkommen. Sie können durch ihre Amplitude (wie groß sie sind) und ihre Frequenz (die Geschwindigkeit, mit der sich die Welle wiederholt) beschrieben werden.
Nun zu etwas Mathe
Die Sinuswelle kann durch die Formel beschrieben werden Eine Sünde (2 * PI * F * t)
Woher EIN ist die Amplitude.
Die Amplitude ist der maximale Wert, den die Welle von der Mittelachse abweicht (normalerweise Null).
F ist die Frequenz oder wie oft die Welle in 1 Sekunde zykliert und in (Hertz: Hz) gemessen wird. Die im Bild gezeigte Welle hat eine Frequenz von 1 Hz.
t ist die Zeit in Sekunden und die variable Größe, mit der die Formel eine Welle beschreibt, anstatt nur eine feste Antwort zu geben.
Die im Diagramm dargestellte Periode (manchmal auch als Wellenlänge bezeichnet) kann wie folgt beschrieben werden:
p (Periode) = 1 / F (Frequenz).
2 * PI ist das Verhältnis des Radius eines Kreises (analog zur Amplitude) zum Umfang eines Kreises (analog zur Periode der Welle).
Schritt 2: Was Sie brauchen
Ein Computer, der mit der Arduino-ID http://www.arduino.cc/en/Main/Software geladen ist
Ein Arduino
RGB-LEDs
Lötfreies Steckbrett
Widerstände 330 Ohm x 3 oder 6, wenn Sie zwei LEDs verwenden
Verbindungsdrähte
Schritt 3: Alles anschließen
Verbinden Sie wie gezeigt. Bitte beachten Sie: Ich habe gemeinsame Kathoden-LEDs verwendet. Wenn Sie eine gemeinsame Anode verwendet haben, müssen Sie dies möglicherweise bei der Verkabelung berücksichtigen.
Die gemeinsamen Kathoden-LEDs sind wie folgt verdrahtet.
Von der flachen Seite
Grün
Kathode (längster Stift)
Blau
rot
Für den Arduino habe ich die Pins 9, 10 und 11 verwendet. Dies sind PWM-Pins, die für das Programm erforderlich sind.
Schritt 4: Der Code
/*
Basierend auf Adafruit Arduino - Lektion 3. RGB LED
learn.adafruit.com/adafruit-arduino-lesson-3-rgb-leds/arduino-sketch
Programm zum Variieren der Farben von RGB-LEDs mithilfe von Sinuswellen
Von Ray Houghton
Bitte zögern Sie nicht, diese Software zu verwenden oder herumzuspielen
es wie du willst.
*/
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
float t;
/ * Ausgangspins für LEDs (dies sind alle PWM-Ausgänge * /
// Kommentiere diese Zeile aus, wenn du eine Common Anode LED verwendest
// # definiere COMMON_ANODE
void setup ()
{
pinMode (redPin, OUTPUT);
pinMode (greenPin, OUTPUT);
pinMode (bluePin, OUTPUT);
// Stifte auf Ausgabe setzen
}
leere Schleife ()
{
für (t = 0; t <1000; t = t + 0,001)
// Setzt das Momentanzeitelement von Sinusfunktionen.
{
/ * Sinusfunktionen zum Variieren der PWM-Ausgänge haben die Form
Offset + Amplitude * sin (2 * pi * F * t)
Wobei Offset sicherstellt, dass die Sinuswelle nicht unter Null geht und
wobei F die gewünschte Frequenz ist
HINWEIS: Rot, Grün und Blau sind unterschiedliche Helligkeiten mit RGB-LEDs.
Offset und Amplitude werden so eingestellt, um dies zu kompensieren.
*/
int redsat = 126 + 126 · sin (2 · 3,141592654 · 0,03 · t);
int greensat = 64 + 64 · sin (2 · 3,141592654 · 0,027 · t);
int bluesat = 32 + 32 · sin (2 · 3,141592654 · 0,025 · t);
// Funktion setColor aufrufen
setColor (Redsat, Greensat, Bluesat);
Verzögerung (1);
}
}
void setColor (int rot, int grün, int blau)
{
#ifdef COMMON_ANODE
rot = 255 - rot;
grün = 255 - grün;
blau = 255 - blau;
#endif
analogWrite (redPin, red);
analogWrite (greenPin, grün);
analogWrite (bluePin, blue);
}
Schritt 5: Eine kleine Erklärung des Codes
Der Code beschreibt die Sinuswellen im obigen Diagramm.
Um eine Variation zwischen Nullleistung und Maximalleistung zu erzielen, müssen die Sinuswellen zwischen 0 und 255 variieren. Eine normale Sinusfunktion der Form:
Eine Sünde (2 * PI * F * t)
Gibt eine Welle aus, die zwischen - 128 und +128 variiert. Um die Welle zwischen 0 und 255 zu machen, müssen wir einen Offset hinzufügen. Dies gibt die Form
MAX / 2 + A sin (2 * PI * F * t)
Woher EIN ist das Maximum (MAX) verfügbare Amplitude (256) geteilt durch 2.
Da die RGB-LEDs unterschiedliche Intensitäten für Rot, Grün und Blau liefern, habe ich die Amplitude und den Offset reduziert.
Die verwendeten Frequenzen geben einen Zeitraum von ca. 30 Sekunden an.
Redsat = 126 + 126 · sin (2 · 3,141592654 · 0,03 · t);
Grünsättigung = 64 + 64 · sin (2 · 3,141592654 · 0,027 · t);
Bluesat = 32 + 32 · sin (2 · 3,141592654 · 0,025 · t);
Die drei im Code beschriebenen Sinuswellen haben leicht unterschiedliche Frequenzen.
Dies bedeutet, dass sich die Farbmischung so ändert, dass sie sich erst nach Ablauf der Variablen (t) wiederholt (1000 in Schritten von 0,001).