Zum Inhalt springen
US Police Car Lights Blaulicht mit Arduino und WS2812

US Police Lights mit Arduino und WS2812-LED-Strip

    Die Signalleuchten von amerikanischen Polizeiautos sind nicht mit denen europäischer Einsatzfahrzeuge zu vergleichen. Was da auf dem Dach für eine Party abgeht, wenn der Sheriff auf den Knopf drückt :-D

    Wir benötigen Ihre Zustimmung um den Inhalt von YouTube laden zu können.

    Mit dem Klick auf das Video werden durch den mit uns gemeinsam Verantwortlichen Youtube [Google Ireland Limited, Irland] das Video abgespielt, auf Ihrem Endgerät Skripte geladen, Cookies gespeichert und personenbezogene Daten erfasst. Damit kann Google Aktivitäten im Internet verfolgen und Werbung zielgruppengerecht ausspielen. Es erfolgt eine Datenübermittlung in die USA, diese verfügt über keinen EU-konformen Datenschutz. Weitere Informationen finden Sie hier.

    Jmx0O2RpdiBjbGFzcz0mcXVvdDtudi1pZnJhbWUtZW1iZWQmcXVvdDsmZ3Q7Jmx0O2lmcmFtZSB0aXRsZT0mcXVvdDtVUyBQb2xpY2UgQ2FyIExpZ2h0cyBtaXQgQXJkdWlubyB1bmQgV1MyODEyIExFRHMmcXVvdDsgd2lkdGg9JnF1b3Q7MTIwMCZxdW90OyBoZWlnaHQ9JnF1b3Q7Njc1JnF1b3Q7IHNyYz0mcXVvdDtodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9rLW1lT1R1VG1hcz9mZWF0dXJlPW9lbWJlZCZxdW90OyBmcmFtZWJvcmRlcj0mcXVvdDswJnF1b3Q7IGFsbG93PSZxdW90O2FjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmUmcXVvdDsgYWxsb3dmdWxsc2NyZWVuJmd0OyZsdDsvaWZyYW1lJmd0OyZsdDsvZGl2Jmd0Ow==

    Das lässt sich mit WS2812-LED-Strip und Arduino natürlich nachbauen. Hier zeige ich dir, wie das geht:

    Bauteile

    Schaltung

    Die Schaltung besteht aus einem Arduino UNO. Der digitale Pin 6 ist über einen 470 Ohm Widerstand mit dem DI-Pin (Data In) des LED-Strips verbunden. Der GND des Strips ist mit dem GND des Arduinos verbunden. Im Beispiel werden nur 8 LEDs verwendet. Deshalb kann der 5V+ vom LED-Strip ebenfalls direkt mit dem 5V+ des Arduino-Boards verbunden werden.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    US Police Lights mit Arduino und WS2812-LED-Strip Schaltplan

    Optional lässt sich eine externe Spannungsquelle, z. B. eine Batterie, eine Powerbank oder ein Netzteil, verwenden. Besonders bei vielen LEDs des WS2812-Strips ist dies zu empfehlen.

    US Police Lights mit Arduino und WS2812-LED-Strip Schaltplan Externe Spannungsversorgung

    Programmtext

    Das Arduino-Programm benötigt die Adafruit-Nanopixel-Bibliothek. Die muss in der Arduino-Software installiert werden. Öffne dafür in der Arduino IDE (Software) das Menü Sketch>Bibliotheken einbinden>Bibliotheken verwalten … und suche im Suchfeld nach NeoPixel. Installiere die Adafruit NeoPixel-Library von Adafruit in der aktuellen Version.

    Das Programm verwendet für die Darstellung der Animation – das Blinken der LEDs ist ja nichts anderes, als eine Animation auf 8 Pixeln – das mehrdimensionales Array frame. Es speichert für jede Animationsphase die drei Farbwerte (RGB) für 8 Pixel.

    frame[Animationsphase][LED-Nummer][Farbe]

    Die Animation im Beispiel hat 19 Animationsphasen. Zu jeder Animationsphase gehört auch eine Animationsdauer, also einen Wert, der bestimmt, wie lange eine Animationsphase gezeigt werden soll. Das ist wichtig, da z. B. das weiße Aufblitzen der LEDs nur sehr kurz geschehen soll, während ein abwechselndes Rot-Blau-Blinken länger dauert.

    Ich habe so lange an den Animationsphasen und Animationsdauern getestet, bis ich zufrieden war.

    Zurück zum Code. Im Loop wird zuerst die Methode police1 aufgerufen. Sie zeigt die aktuelle Animationsphase auf den LEDs an und wartet die Animationsdauer ab. Danach wird im Loop der Animationszähler frameCurrent um 1 erhöht (++). Nun wird noch getestet, ob der Animationszähler größer als die maximale Animationsphase (frameMax) ist. Falls das der Fall ist, wird der Animationszähler auf 0 gesetzt und die Animation beginnt von vorne.

    #include <Adafruit_NeoPixel.h>
    
    #define LED_PIN 6
    #define LED_COUNT 8
    
    Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
    
    const int frameMax = 19;
    
    int frames[frameMax][8][3] = {
      {{0, 0, 255 }, {0, 0, 255 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 255 }, {0, 0, 255 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 255 }, {0, 0, 255 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {255, 255, 255}, {255, 255, 255}, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {255, 255, 255}, {255, 255, 255}, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 0 }, {255, 0, 0 }, {255, 0, 0}, {0, 0, 0 }, {255, 0, 0 }, {0, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }},
      {{0, 0, 255 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {255, 0, 0 }},
      {{255, 255, 255},{255, 255, 255},{255, 255, 255},{255, 255, 255},{255, 255, 255},{255, 255, 255},{255, 255, 255},{255, 255, 255}},
      {{0, 0, 255 }, {0, 0, 255 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }},
      {{0, 0, 0 },{0, 0, 0 },{255, 255, 255},{255, 255, 255},{255, 255, 255},{255, 255, 255},{0, 0, 0 },{0, 0, 0 }},
      {{0, 0,  0}, {0, 0, 0 }, {255, 0, 0}, {255, 0, 0 }, {255, 0, 0 }, {255, 0, 0 }, {0, 0, 0 }, {0, 0, 0 }}
        };
    
    int durations[frameMax] = {1000, 100, 100, 50, 50, 10, 50, 50, 50,40,50,40,100,100,100,20,40,20,100};
    int frameCurrent = 0;
    
    void setup() {
      strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
      strip.show();            // Turn OFF all pixels ASAP
      strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
    }
    
    void loop() {
      police1(strip.Color(255,   0,   0), durations[frameCurrent]);
      frameCurrent++;
      if (frameCurrent >= frameMax) frameCurrent = 0;
    }
    
    void police1(uint32_t color, int wait) {
      for (int i = 0; i < 8; i++) { // For each pixel in strip...
        strip.setPixelColor(i, strip.Color(frames[frameCurrent][i][0],frames[frameCurrent][i][1],frames[frameCurrent][i][2]));         //  Set pixel's color (in RAM)
        strip.show();           //  Update strip to match
      }
      delay(wait);              //  Pause for a moment
    }
    

    Du kannst die Animation natürlich anpassen, erweitern oder verkürzen. Dazu musst du nur weitere Animationsphasen in das Array frames einfügen, weitere Wartezeiten in das Array durations hinzufügen und die Variable frameMax anpassen.

    Viel Spaß dabei und viel Erfolg. Ach ja, wenn du noch ein bisschen mehr über die WS2812 LEDs erfahren willst, guck dir doch mal den Beitrag an: WS2812 – Der einfachste Weg, viele LEDs mit Arduino steuern.

    Wir benötigen Ihre Zustimmung um den Inhalt von YouTube laden zu können.

    Mit dem Klick auf das Video werden durch den mit uns gemeinsam Verantwortlichen Youtube [Google Ireland Limited, Irland] das Video abgespielt, auf Ihrem Endgerät Skripte geladen, Cookies gespeichert und personenbezogene Daten erfasst. Damit kann Google Aktivitäten im Internet verfolgen und Werbung zielgruppengerecht ausspielen. Es erfolgt eine Datenübermittlung in die USA, diese verfügt über keinen EU-konformen Datenschutz. Weitere Informationen finden Sie hier.

    Jmx0O2RpdiBjbGFzcz0mcXVvdDtudi1pZnJhbWUtZW1iZWQmcXVvdDsmZ3Q7Jmx0O2lmcmFtZSB0aXRsZT0mcXVvdDtGZWRlcmFsIFNpZ25hbCBJbnRlZ3JpdHkgTGlnaHRiYXIgZmxhc2ggcGF0dGVybnMgd2l0aCBvcHRpb25hbCB3aGl0ZSBsaWdodCZxdW90OyB3aWR0aD0mcXVvdDsxMjAwJnF1b3Q7IGhlaWdodD0mcXVvdDs2NzUmcXVvdDsgc3JjPSZxdW90O2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2tHcGlzUWdUOUpZP3N0YXJ0PTE5MSZhbXA7ZmVhdHVyZT1vZW1iZWQmcXVvdDsgZnJhbWVib3JkZXI9JnF1b3Q7MCZxdW90OyBhbGxvdz0mcXVvdDthY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlJnF1b3Q7IGFsbG93ZnVsbHNjcmVlbiZndDsmbHQ7L2lmcmFtZSZndDsmbHQ7L2RpdiZndDs=

    Und dieses Video zeigt die Animationen eines kommerziellen Polizeilichts aus den USA. Vielleicht hast du ja Lust, die originalen Animationen zu programmieren.


    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    Ein Gedanke zu „US Police Lights mit Arduino und WS2812-LED-Strip“

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.