0. Vorbereitung: Bibliothek installieren
- Den Bibliotheksmanager links in der Arduino-Umgebung öffnen. (Icon sieht aus wie ein Bücherregal)
- Dann „Adafruit NeoPixel“ eingeben (ohne Anführungszeichen)
- Die „Adafruit NeoPixel by Adafruit“-Bibliothek über den Button „INSTALL“ installieren.
1. Programm: LEDs ansteuern
Wir nutzen folgende adressierbare LEDs: WS2812B mit 5V.
Hinweis für eigene Bauprojekte
Bis zu 10 LEDs kann man auf jeden Fall direkt am Arduino betreiben. Darüber hinaus bräuchte man ein gesondertes Netzteil. Wichtig ist dabei folgende Verkabelung:
Minus-Pol des Netzteils wird sowohl mit dem Arduino-Minus als auch dem Minus des LED-Streifens verkabelt. Beim Plus-Pol macht man das nicht, sondern verkabelt diesen nur an den LED-Streifen. Den Arduino versorgt man am besten per USB mit Strom.
Verkabelung genau so durchführen:
- „D“ oder „Data“ oder „DO“ an Pin 7 am Arduino
- 5V an 5V am Arduino
- GND an GND am Arduino
Die wichtigsten Befehle:
- Die Bibliothek ganz oben im Programm einbinden: #include <Adafruit_NeoPixel.h>
- Die LEDs als Objekt anlegen (noch vor dem Setup): Adafruit_NeoPixel meineLEDS(3, 7, NEO_GRB + NEO_KHZ800);
- Im Setup-Teil einmal ausführen, damit die LEDs angesprochen werden können: meineLEDS.begin();
- Die LEDs zurücksetzen: meineLEDS.clear();
- Eine LED ansprechen: meineLEDS.setPixelColor(0, meineLEDS.Color(255,0,0));
- Die erste Zahl ist die Nummer der LED (beginnend bei 0)
- der zweite Teil ist der Farb-Code (siehe unten)
- Die gesetzten Farb-Befehle ausführen: meineLEDS.show();
- Pause für 500 Millisekunden (eine halbe Sekunde): delay(500);
- Farbcodes:
- Jede Farbe mit 0 bis 255 steuerbar.
- 0 ist dunkel, 255 ist maximale Helligkeit
- Befehl: meineLEDS.Color(Zahl1, Zahl2, Zahl3)
- Zahl1 = Rotanteil; Zahl2 = Grünanteil; Zahl3 = Blauanteil
Aufgabe: Lasse die drei LEDs in rot, grün und blau leuchten.
Lösung
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel meineLEDS(3, 7, NEO_GRB + NEO_KHZ800);
void setup() {
meineLEDS.begin();
meineLEDS.clear();
}
void loop() {
meineLEDS.setPixelColor(0, meineLEDS.Color(255,0,0));
meineLEDS.setPixelColor(1, meineLEDS.Color(0,255,0));
meineLEDS.setPixelColor(2, meineLEDS.Color(0,0,255));
meineLEDS.show();
}
2. Programm: Pulsieren
Verkabelung bleibt gleich.
Die wichtigsten Befehle:
- Eine for-Schleife beginnen:
for(int i = 0; i < 255; i++) {
Code, der ausgeführt wird pro Schleifendurchgang;
}- Genauso kann man auch runterzählen:
for (int i = 255; i > 0; i–) {
euer Code;
}
- Genauso kann man auch runterzählen:
- Tipp: i entspricht der Helligkeit der LED an Stelle einer Zahl
Aufgabe 2.1: Lasse die erste LED in rot pulsieren.
Lösung
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel meineLEDS(3, 7, NEO_GRB + NEO_KHZ800);
void setup() {
meineLEDS.begin();
meineLEDS.clear();
}
void loop() {
for(int i = 0; i < 255; i++) {
meineLEDS.setPixelColor(0, meineLEDS.Color(i, 0, 0));
meineLEDS.show();
delay(10);
}
for (int i = 255; i > 0; i--) {
meineLEDS.setPixelColor(0, meineLEDS.Color(i, 0, 0));
meineLEDS.show();
delay(10);
}
}
Aufgabe 2.2: Ändere die Farbe, in der die LEDs pulsieren. Zum Beispiel sollen die LEDs weiss leuchten. Lasse danach alle LEDS gleichzeitig pulsieren.
Lösung
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel meineLEDS(3, 7, NEO_GRB + NEO_KHZ800);
void setup() {
meineLEDS.begin();
meineLEDS.clear();
}
void loop() {
for(int i = 0; i < 255; i++) {
meineLEDS.setPixelColor(0, meineLEDS.Color(i, i, i));
meineLEDS.setPixelColor(1, meineLEDS.Color(i, i, i));
meineLEDS.setPixelColor(2, meineLEDS.Color(i, i, i));
meineLEDS.show();
delay(10);
}
for (int i = 255; i > 0; i--) {
meineLEDS.setPixelColor(0, meineLEDS.Color(i, i, i));
meineLEDS.setPixelColor(1, meineLEDS.Color(i, i, i));
meineLEDS.setPixelColor(2, meineLEDS.Color(i, i, i));
meineLEDS.show();
delay(10);
}
}
3. Programm: Farbwechsel
Code zum Kopieren:
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel meineLEDS(3, 7, NEO_GRB + NEO_KHZ800);
void setup() {
meineLEDS.begin();
meineLEDS.clear();
}
void loop() {
for(int i = 0; i < 255; i++) {
meineLEDS.setPixelColor(0, meineLEDS.Color(255, 0, i));
meineLEDS.show();
delay(10);
}
for (int i = 255; i > 0; i--) {
meineLEDS.setPixelColor(0, meineLEDS.Color(255, 0, i));
meineLEDS.show();
delay(10);
}
}
Aufgabe: Ändere den Farbwechsel zu folgendem: Grün zu Blau und zurück. Lasse alle LEDs den Farbwechsel vollziehen.
Lösung
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel meineLEDS(3, 7, NEO_GRB + NEO_KHZ800);
void setup() {
meineLEDS.begin();
meineLEDS.clear();
}
void loop() {
for(int i = 0; i < 255; i++) {
meineLEDS.setPixelColor(0, meineLEDS.Color(0, 255, 255-i));
meineLEDS.show();
delay(10);
}
for (int i = 255; i > 0; i--) {
meineLEDS.setPixelColor(0, meineLEDS.Color(0, 255, 255-i));
meineLEDS.show();
delay(10);
}
}
4. Programm: Lauflichter
Aufgabe: Programmiere ein Licht, das von einem Ende zum anderen Ende wandert und wieder zurück (in einer Endlosschleife). Hierfür kennst du bereits alle notwendigen Befehle.
Lösung
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel meineLEDS(3, 7, NEO_GRB + NEO_KHZ800);
void setup() {
meineLEDS.begin();
meineLEDS.clear();
}
void loop() {
meineLEDS.setPixelColor(1, meineLEDS.Color(0, 0, 0));
meineLEDS.setPixelColor(0, meineLEDS.Color(255, 0, 0));
meineLEDS.show();
delay(250);
meineLEDS.setPixelColor(0, meineLEDS.Color(0, 0, 0));
meineLEDS.setPixelColor(1, meineLEDS.Color(255, 0, 0));
meineLEDS.show();
delay(250);
meineLEDS.setPixelColor(1, meineLEDS.Color(0, 0, 0));
meineLEDS.setPixelColor(2, meineLEDS.Color(255, 0, 0));
meineLEDS.show();
delay(250);
meineLEDS.setPixelColor(2, meineLEDS.Color(0, 0, 0));
meineLEDS.setPixelColor(1, meineLEDS.Color(255, 0, 0));
meineLEDS.show();
delay(250);
}
Aufgabe: Kombiniere das Pulsieren der einzelnen Lichter mit dem Lauflicht. Kannst du sogar gleichzeit eine LED abblenden, während die nächste bereits aufblendet?
Lösung
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel meineLEDS(3, 7, NEO_GRB + NEO_KHZ800);
void setup() {
meineLEDS.begin();
meineLEDS.clear();
}
void loop() {
for (int i = 0; i<256; i++) {
meineLEDS.setPixelColor(0, meineLEDS.Color(255-i, 0, 0));
meineLEDS.setPixelColor(1, meineLEDS.Color(i, 0, 0));
meineLEDS.show();
delay(5);
}
for (int i = 0; i<256; i++) {
meineLEDS.setPixelColor(1, meineLEDS.Color(255-i, 0, 0));
meineLEDS.setPixelColor(2, meineLEDS.Color(i, 0, 0));
meineLEDS.show();
delay(5);
}
for (int i = 0; i<256; i++) {
meineLEDS.setPixelColor(2, meineLEDS.Color(255-i, 0, 0));
meineLEDS.setPixelColor(1, meineLEDS.Color(i, 0, 0));
meineLEDS.show();
delay(5);
}
for (int i = 0; i<256; i++) {
meineLEDS.setPixelColor(1, meineLEDS.Color(255-i, 0, 0));
meineLEDS.setPixelColor(0, meineLEDS.Color(i, 0, 0));
meineLEDS.show();
delay(5);
}
}