Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Weekend Project: US Polizeilicht mit 8mm LEDs

Posted on 9. Mai 20208. März 2024 by Stefan Draeger

In diesem Weekend Project möchte ich dir zeigen wie du dir ein US Polizeilicht mit 12 8mm LEDs erstellst.

DIY US Polizeilicht mit Arduino Nano
Dieses Video auf YouTube ansehen.

  • Aufbau der DIY US Polizeilichts
  • benötigte Bauteile
  • Aufbau
    • Schaltplan
    • Schritt 1 – positionieren der LEDs
    • Schritt 2 – Montage der Widerstände / Stiftleiste
    • Schritt 3 – „verkabeln“
    • erster Test am Arduino UNO
    • Schritt 4 – auflöten des LED Moduls
    • Schritt 5 – Montage Arduino Nano & Drehpotentiometer
  • Programmieren
  • Download

Aufbau der DIY US Polizeilichts

Dieses Projekt besteht aus 12 8mm LEDs (jeweils 6x rot und 6x blau) sowie einem Drehpotentiometer für die Frequenz des blinkens und natürlich einem Arduino welcher das ganze steuert.

Die LEDs sind in jeweils 2 Reihen zu 3 LEDs, rechts sowie links angeordnet. Damit lassen sich die verschiedenen Lichtsignale eines solchen Polizeilichts darstellen.

Die Abfolge des blinkens der LEDs ist wiefolgt:

benötigte Bauteile

  • 1x Arduino Nano*,
  • 2x 15 Pin Buchsenleiste*,
  • 2x Lochrasterplatine*,
  • 1x 13 Pin Stiftleiste, 1-reihig,  90° abgewinkelt*,
  • 6x 8mm LED rot**,
  • 6x 8mm LED blau**,
  • 12x 220 Ohm Widerstand*,
  • 1x 50 kOhm Drehpotentiometer
  • ca. 50cm blaue Litze***,
  • ca. 50cm rote Litze***,
  • ca. 20cm schwarze Litze***,
  • ca. 10cm gelbe Litze***

** Die LEDs habe ich über aliexpress.com bestellt, dort findest du diese Bauteile zu einem unschlagbaren Preis von 2€ inkl. Versandkosten für 10 Stück, du findest diese aber auch auf ebay.de*, dort jedoch zu einem deutlich höheren Preis.

*** Auf ebay.de findest du große Litzensortimente* welche deutlich günstiger sind als diese einzeln zu erwerben, daher würde ich dir eines dieser Sets empfehlen.

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!

Bauteile für das US Polizeilicht
Bauteile für das US Polizeilicht

Aufbau

Schaltplan

Schaltplan - US Polizeilicht am Arduino Nano
Schaltplan – US Polizeilicht am Arduino Nano

Schritt 1 – positionieren der LEDs

Die LEDs positionieren ich jeweils in die Ecken. Wobei in die linke die roten und in die rechte Ecke die blauen LEDs gesteckt werden.

Schritt 1 - positionieren der LEDs in den Ecken der Lochrasterplatine
Schritt 1 – positionieren der LEDs in den Ecken der Lochrasterplatine

Es ist darauf zu achten das jeweils die Kathode bzw. Anode immer in die gleiche Richtung gesteckt wird.
Wir werden nämlich später die Beinchen der Kathoden miteinander verbinden.

Schritt 2 – Montage der Widerstände / Stiftleiste

Im zweiten Schritt werden die Widerstände sowie die Stiftleiste angelötet.

Schritt 2 - auflöten der Widerstände und der Stiftleiste
Schritt 2 – auflöten der Widerstände und der Stiftleiste

Es verbleibt ein Pin ohne Widerstand, an diesem wird später der Minus Pol bzw. GND vom Arduino Nano angelötet.

Schritt 3 – „verkabeln“

Der dritte Schritt zum Aufbau beinhaltet die Verkabelung der LEDs, hier verwende ich blaue sowie rote Kabel. Diese farbliche Trennung sorgt später dafür das man auf der Rückseite besser erkennt wo welche LED angeschlossen ist ohne das man das Modul drehen und wenden muss.

Bevor wir dieses jedoch machen, werden wir zunächst die Kathoden (der Minus Pol der LED) um 90° biegen so das wir jeweils die Reihen verbinden können.

Schritt 3 - verbinden der Kathoden der LEDs
Schritt 3 – verbinden der Kathoden der LEDs

Die Kathode erkennst du an dem kurzen Beinchen (Eselsbrücke „k wie kurz“) bzw. an der abgeflachten Seite am Gehäuse.

Bauteil: LED
Bauteil: LED

erster Test am Arduino UNO

Nachdem das LED Modul verkabelt wurde, können wir einen ersten Test am Arduino vornehmen, dazu werden zusätzlich 13 Breadboardkabel benötigt. Da ich zum testen einen Arduino UNO verwende muss ich hier Breadboardkabel mit 20cm und Buchse – Stecker wählen.

Schritt 4 – auflöten des LED Moduls

Im vierten Schritt löten wir nun eine Lochrasterplatine an das LED Modul.
So das die beiden Platinen einen 90° Winkel zu einander ergeben.

Schritt 5 – Montage Arduino Nano & Drehpotentiometer

Auf einer weiteren Platine wird der Arduino Nano mit den 15 poligen Buchsenleisten sowie der Drehpotentiometer montiert.

Schritt 5 - Arduino Nano & Drehpotentiometer auf Lochrasterplatine
Schritt 5 – Arduino Nano & Drehpotentiometer auf Lochrasterplatine

Der Drehpotentiometer verfügt über 3 kleine Beinchen an

  • dem rechten Beinchen wird GND,
  • dem linken Beinchen wird 5V und
  • in der Mitte analog Pin A0

angelötet

Programmieren

Hier nun der Sketch für dieses Projekt. 

Zunächst legen wir uns zwei Arrays mit den jeweiligen Pins der LEDs für rot & blau an.

int blueLeds[2][3] = {{13,12,11},{10,9,8}};
int redLeds[2][3] = {{7,6,5},{4,3,2}};

Und natürlich definieren wir unseren Pin für den Drehpotentiometer und eine Variable für die Pause.
Die Pause berechnen wir später aus der Position / den Wert des Drehpotentiometers.

#define drehpoti A0
int pause = 75;

In der Funktion „setup“ müssen wir ersteinmal alle Pins an welche LEDs angeschlossen sind als Output quasi Ausgang setzen.

void setup() {
  for(int i=1;i<=13;i++){
    pinMode(i,OUTPUT);
  }
}

Man könnte alternativ auch über die beiden Arrays iterieren, aber eine einfache For-Schleife ist genauso gut.

Die Funktion „loop“ enthält die einzelnen Funktionen für das jeweilige Blinken sowie das lesen der Pause.

void loop() {
  pause = getPause();
  ....
}

Die Pause lesen bzw. berechnen wir aus dem aktuellen Wert des Drehpotentiometers. 
Der Drehpotentiometer ist über einen analogen Pin angeschlossen und wir erhalten einen Wert von 0 (für 0V) und 1023 (für 5V) zurück.

Diesen Wertebereich (0..1023) können wir nun auf einen Millisekundenwert unserer Wahl mappen. Ich wähle hier ein Minimum von 75ms und ein Maximum von 1500 ms. (1,5sek.).

int getPause(){
   int value = analogRead(drehpoti);
   return map(value,0,1023,75,1500);
}

Implementieren wir uns zunächst eine Hilfsmethode um eine Spalte zu aktivieren bzw. deaktivieren.

Du kannst eine LED mit der Funktion „digitalWrite“ aktivieren bzw. deaktivieren

//aktivieren einer LED
digitalWrite(<<LED_PIN>>, HIGH);

//deaktivieren einer LED
digitalWrite(<<LED_PIN>>, LOW);

Da wir die LEDs in Arrays sortiert und in dem Array selbst nach Spalte gruppiert haben übergeben wir unserer Hilfsfunktion dieses interne Array mit den 3 Werten der LEDs in der Spalte.

void activateColumn(int leds[], int stat){
  for(int i=0;i<=2;i++){
    digitalWrite(leds[i] , stat);
  }
}

Wir wissen das unser Array genau 3 Daten enthält, darum entfällt hier die Ermittlung der Anzahl der Datensätze.

Arrays beginnen immer beim Index 0, somit ergibt sich die Zahlenfolge 0,1,2 für unsere LEDs.

Wenn wir also nun die jeweils linke Spalte der blauen LEDs und die linke Spalte der roten LEDs aktivieren wollen dann schreiben wir:

void blinkLL(){
  delay(pause);
  activateColumn(blueLeds[1], HIGH); 
  delay(pause);
  resetModul();
  activateColumn(redLeds[1], HIGH);
  delay(pause);
  resetModul();
}

Wir rufen hier zusätzlich eine weitere Hilfsmethode „resetModul“ auf. Diese Hilfsmethode resetet die LEDs (deaktiviert diese) und berechnet die Pause aus dem aktuellen Wert des Drehpotentiometers.

void resetModul(){
  activateColumn(blueLeds[0], LOW);
  activateColumn(redLeds[0], LOW);  
  activateColumn(blueLeds[1], LOW);
  activateColumn(redLeds[1], LOW);  
  pause = getPause();
}

Wenn wir nun die beiden rechten Spalten der LEDs Segmente aktivieren wollen müssen wir schreiben:

void blinkRR(){
  delay(pause);
  activateColumn(blueLeds[0], HIGH); 
  delay(pause);
  resetModul();
  activateColumn(redLeds[0], HIGH);
  delay(pause);
  resetModul();
}

Wir rufen in der Funktion „loop“ nun die beiden Methoden „blinkLL“ & „blinkRR“ mit einer Pause dazwischen auf.

void loop() {
  pause = getPause();
  blinkRR();
  delay(pause);
  blinkLL();
  delay(pause);
}

Um zwei Spalten der LEDs zum blinken zu bringen müssen wir also beide Spalten auf den Wert „HIGH“ setzen und danach unsere Hilfsmethode „resetModul“ aufrufen.

void blinkBlue(){
  delay(pause);
  activateColumn(blueLeds[0], HIGH); 
  activateColumn(blueLeds[1], HIGH); 
  delay(pause);
  resetModul();
}
void blinkRed(){
  delay(pause);
  activateColumn(redLeds[0], HIGH); 
  activateColumn(redLeds[1], HIGH); 
  delay(pause);
  resetModul();
}

Es fehlt nun noch das alle LEDs gleichzeitig blinken hier müssen wir alle LEDs aktivieren und die Hilfsmethode „resetModul“ deaktiviert diese dann wieder.

void blinkAll(){
  delay(pause);
  activateColumn(blueLeds[0], HIGH); 
  activateColumn(blueLeds[1], HIGH); 
  activateColumn(redLeds[0], HIGH); 
  activateColumn(redLeds[1], HIGH); 
  delay(pause);
  resetModul();
}

Hier nun das fertige Sketch im ganzen:

#define drehpoti A0

int blueLeds[2][3] = {{13,12,11},{10,9,8}};
int redLeds[2][3] = {{7,6,5},{4,3,2}};

int pause = 75;

void setup() {
  for(int i=1;i<=13;i++){
    pinMode(i,OUTPUT);
  }
}

void loop() {
  pause = getPause();
  blinkRR();
  delay(pause);
  blinkLL();
  delay(pause);
  blinkBlue();
  delay(pause);
  blinkRed();
  delay(pause);
  blinkAll();
  delay(pause);
}

void activateColumn(int leds[], int stat){
  for(int i=0;i<=2;i++){
    digitalWrite(leds[i] , stat);
  }
}

int getPause(){
   int value = analogRead(drehpoti);
   return map(value,0,1023,75,1500);
}

void blinkLL(){
  delay(pause);
  activateColumn(blueLeds[1], HIGH); 
  delay(pause);
  resetModul();
  activateColumn(redLeds[1], HIGH);
  delay(pause);
  resetModul();
}

void blinkRR(){
  delay(pause);
  activateColumn(blueLeds[0], HIGH); 
  delay(pause);
  resetModul();
  activateColumn(redLeds[0], HIGH);
  delay(pause);
  resetModul();
}

void blinkBlue(){
  delay(pause);
  activateColumn(blueLeds[0], HIGH); 
  activateColumn(blueLeds[1], HIGH); 
  delay(pause);
  resetModul();
}

void blinkRed(){
  delay(pause);
  activateColumn(redLeds[0], HIGH); 
  activateColumn(redLeds[1], HIGH); 
  delay(pause);
  resetModul();
}

void blinkAll(){
  delay(pause);
  activateColumn(blueLeds[0], HIGH); 
  activateColumn(blueLeds[1], HIGH); 
  activateColumn(redLeds[0], HIGH); 
  activateColumn(redLeds[1], HIGH); 
  delay(pause);
  resetModul();
}

void resetModul(){
  activateColumn(blueLeds[0], LOW);
  activateColumn(redLeds[0], LOW);  
  activateColumn(blueLeds[1], LOW);
  activateColumn(redLeds[1], LOW);  
  pause = getPause();
}

Download

Nachfolgend findest du einen Link zum bequemen Download des Sketches.

Weekend Project: US PolizeilichtHerunterladen

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}