In diesem Beitrag möchte ich dir zeigen, wie du RGB LED-Stripes mit Bewegungssensor am Arduino programmierst. Die Idee zu diesem Beitrag stammt von einem Leser meines Blogs, wobei ich mich an dieser Stelle bei ihm bedanke.
Wie du ein RGB Stripe am Arduino programmierst, habe ich dir bereits auf diesem Blog gezeigt.
- LED Stripe am Arduino UNO steuern,
- LED Stripe wechsel blinken am Arduino UNO R3,
- LED Stripe wechsel blinken am Arduino UNO R3 – Teil2 einzelne LEDs steuern,
- LED Stripe wechsel blinken am Arduino UNO R3 – Teil3 LED Stripe kaskadierend anschließen
Inhaltsverzeichnis
- Ziel des Projektes
- Benötigte Ressourcen für dieses Projekt
- Hinweis beim Verwenden einer LED-Stripe am Arduino
- Aufbau der Schaltung – LED-Stripes mit Bewegungssensor am Arduino
- Programmieren in der Arduino IDE
Ziel des Projektes
Hier möchte ich nun speziell auf eine Anforderung eingehen, welche vom Leser gestellt wurde.
Es soll eine Anzahl x LEDs in RGB Farben aufleuchten, wenn der Bewegungssensor aktiv ist, sollen 75 % der LEDs in der Farbe Weiß aufleuchten und die anderen 25 % verbleiben in der zuvor gesetzten Farbe.
Benötigte Ressourcen für dieses Projekt
Um dieses Projekt aufzubauen, benötigst du:
- einen Arduino Nano V3*,
- ein passendes USB-Datenkabel für den Mikrocontroller*,
- ein RGB Stripe*,
- einen Bewegungssensor Typ HC-SR501*, sowie
- eine externe 5V Stromquelle mit minimal 2A Leistung*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
In meinem Fall musste ich für mein Netzteil noch einen Schukostecker sowie 1,5 m 3×1,5 mm flexibles Kupferkabel vom örtlichen Baumarkt besorgen.
Hinweis beim Verwenden einer LED-Stripe am Arduino
Eine LED-Stripe hat je nach Anzahl der verbauten LEDs eine hohe Spannungsaufnahme. Der Arduino liefert am 5V Pin jedoch mit nur maximal 800 mA, das würde bei einer Leistungsaufnahme von 20 mA pro LED für 40 LEDs ausreichen. Jedoch führst du deinen Mikrocontroller dann an das Maximum der Leistung und das ist dauerhaft schädlich.
Es gibt auf den einschlägigen Portalen 5V Netzteile mit guter Leistung.
Aufbau der Schaltung – LED-Stripes mit Bewegungssensor am Arduino
Nachfolgend zunächst der Aufbau der Schaltung, hier habe ich exemplarisch einen RGB Stripe angeschlossen. Da die RGB Stripes einfach hintereinander angeschlossen werden können, kannst du somit fast beliebig viele solcher Stripes ansprechen. Die Grenze ist hier nur deine Spannungsversorgung.
In meinem Fall verwende ich keine LED-Stripe, sondern zwei 8Bit LED-Bars, welche jedoch genauso aufgebaut sind. Als Stromquelle verwende ich hier ein Power Supply Modul mit einer 9V Blockbatterie.
Programmieren in der Arduino IDE
Erstellen wir nun das kleine Programm in der Arduino IDE. Wie du die Arduino IDE installierst, habe ich dir im Beitrag Arduino IDE installieren erläutert und wenn du ein Linux benutzt findest du unter Arduino IDE 2.0 auf Linux installieren einen passenden Beitrag.
Adafruit NeoPixel Bibliothek
Für das Ansteuern der NeoPixel / RGB LED-Stripes benötigen wir eine Bibliothek. Sehr gute Erfahrungen habe ich mit der NeoPixel Bibliothek von Adafruit gesammelt. Diese Bibliothek kannst du über den internen Bibliotheksmanager (1) der Arduino IDE installieren.
Im Bibliotheksverwalter suchst du zunächst nach „Adafruit NeoPixel“ (2) und wählst dort am Eintrag „Adafruit NeoPixel by Adafruit“ die Schaltfläche „INSTALL“ (3). Wenn diese Bibliothek erfolgreich installiert wurde, dann wird der Text „Version <Nummer> INSTALLED“ (4) angezeigt.
Programm
Hier nun das fertige Programm mit Kommentaren:
//Bibliothek zum ansteuern von NeoPixel / RGB LED-Stripes. #include <Adafruit_NeoPixel.h> //Die RGB Stripe ist am digitalen Pin D2 angeschlossen. #define PIXELPIN 2 //Die RGB Stripe hat 16 NeoPixel / LEDs. #define NUMPIXELS 16 //Der Bewegungssensor ist am digitalen Pin D3 angeschlossen. #define SENSOR 3 //Initialisieren eines Objektes vom Typ Adafruit_NeoPixel Adafruit_NeoPixel pixels(NUMPIXELS, PIXELPIN, NEO_GRB + NEO_KHZ800); //Definieren der Farben, mit RGB Werten const uint32_t COLOR_WHITE = pixels.Color(255, 255, 255); const uint32_t COLOR_RED = pixels.Color(107, 10, 10); void setup() { //Begin der kommunikation mit dem NeoPixel pixels.begin(); //Definieren das der Pin des Bewegungssensors als Eingang dient. pinMode(SENSOR, INPUT); } void loop() { //Wenn der Pin des Sensors HIGH ist, dann... if (digitalRead(SENSOR) == HIGH) { //löschen der derzeit angezeigten Farben pixels.clear(); //Schleife von 0 bis 15,... for(int i = 0;i<NUMPIXELS;i++){ //default Farbe ist Weiß uint32_t color = COLOR_WHITE; //Wenn das Ergebnis der Operation i modulo 3 ohne Rest ist, dann... if((i % 3) == 0){ //ändern der Farbe auf Rot color = COLOR_RED; } //Zuweisen der Farbe zu einem NeoPixel pixels.setPixelColor(i, color); } //Anzeigen der Farben pixels.show(); } else { //Wenn keine Bewegung erkannt wurde, dann sollen alle NeoPixel die gleiche Farbe haben. //löschen der derzeit angezeigten Farben pixels.clear(); //Schleife von 0 bis 15,... for(int i = 0;i<NUMPIXELS;i++){ //Zuweisen der Farbe Rot zu einem NeoPixel pixels.setPixelColor(i, COLOR_RED); } //Anzeigen der Farben pixels.show(); } }