Arduino Mood Light: 5 Schritte

Arduino Mood Light: 5 Schritte

Inhaltsverzeichnis:

Anonim

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).