5. Arduino - dynamischer Autoblinker

5. Arduino - dynamischer Autoblinker

Wir werden jetzt versuchen das Wissen aus den vorigen Projekten anzuwenden und einen dynamischen Autoblinker zu erstellen. Ein dynamischer Autoblinker besteht aus einer LED-Leiste in welcher die LED's im Blinkvorgang nacheinander anfangen zu leuchten und gemeinsam ausgeschaltet werden, sobald alle leuchten. Viele Auto's haben dieses Goodie heutzutage, weil es aktuell noch was Besonderes ist. Ich werde euch mit diesem Projekt zeigen, dass es nichts besonders kompliziertes ist und du demnächst deinen eigenen "besonderen Autoblinker" programmieren könntest.



1. LED-Blinker mit Taster gesteuert1.1. Benötigte Komponenten und Aufbau
1.2. Arduino Sketch
2. Dynamischer Autoblinker2.1. Benötigte Komponenten und Aufbau
2.3. Modifikationen des dynamischen Autoblinkers2.3.1 Rechtsblinker und Linksblinker mit 2 Tastern
2.3.2 Blinker-Geschwindigkeit ändern


1. LED-Blinker mit Taster gesteuert

Fangen wir erstmal mit einem grundlegenden Aufbau namens "LED-Blinker mit Taster gesteuert" an:


1.1. Benötigte Komponenten und Aufbau
- Arduino Uno
- 1 LEDs
- 1 x 220 Ohm Widerstand
- 1 Taster
- 10k Ohm Widerstand
- Steckbrett und Verbindungskabel

- LED anschließen: Verbinde die LED mit dem digitalen Pins 3 am Arduino, indem du die Kathode (kurzes Bein) der LED an den Minuspol (GND) des Steckbretts anschließt, und einen 220 Ohm Widerstand zwischen die Anode (langes Bein) der LED und den entsprechenden dem Pin 3.
- Taster anschließen: Verbinde einen Pin des Tasters mit einem Ende des 10k Ohm Widerstands und mit dem digitalen Pin 2. Verbinde das andere Ende des Widerstands mit GND des Steckbretts. Verbinde den anderen Pin des Tasters mit dem Pluspol des Steckbretts.
-
1.2. Arduino Sketch
// Definiere die Pins für die LED und den Taster
int ledPin = 3;
int buttonPin = 2;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT); // Setze den LED-Pin als Ausgang
pinMode(buttonPin, INPUT); // Setze den Taster-Pin als Eingang
}
void loop() {
buttonState = digitalRead(buttonPin); // Lese den Zustand des Tasters
if (buttonState == HIGH) { // Wenn der Taster gedrückt ist, starte den Autoblinker
for (int i = 0; i < 4; i++) {
digitalWrite(ledPin, HIGH); // LED einschalten
delay(500); // Warte 500 Millisekunden
digitalWrite(ledPin, LOW); // LED ausschalten
delay(500); // Warte 500 Millisekunden
}
}
}

.


1.3. Arduino Sketch-Code erklärt


// Definiere die Pins für die LED und den Taster
int ledPin = 3;
int buttonPin = 2;
int buttonState = 0;

Pins und Zustandsvariable definieren: Wir definieren die Pins für die LED und den Taster. Zusätzlich definieren wir eine Variable für den Zustand des Taster (wie bereits im Projekt "Arduino - Digital Read Serial".


void setup() {
pinMode(ledPin, OUTPUT); // Setze den LED-Pin als Ausgang
pinMode(buttonPin, INPUT); // Setze den Taster-Pin als Eingang
}

Im Setup-Bereich Pins konfigurieren: Hier wird nun der LED-Pin als Ausgang und der Taster Pin als Eingang konfiguriert.


void loop() {
buttonState = digitalRead(buttonPin); // Lese den Zustand des Tasters
if (buttonState == HIGH) { // Wenn der Taster gedrückt ist, starte den Autoblinker
for (int i = 0; i < 4; i++) {
digitalWrite(ledPin, HIGH); // LED einschalten
delay(500); // Warte 500 Millisekunden
digitalWrite(ledPin, LOW); // LED ausschalten
delay(500); // Warte 500 Millisekunden
}
}
}

Taster abfragen: In der `loop`-Funktion wird der Zustand des Tasters kontinuierlich gelesen und in der Variable "buttonState" aktualisiert.
LED-Blinker starten: Wenn der Taster gedrückt wird und damit in der Variable "buttonState" ein "HIGH" gespeichert wird, ist die if-Abfrage erfüllt. Damit wird dann der folgende Code ausgeführt:


for (int i = 0; i < 4; i++) {
digitalWrite(ledPin, HIGH); // LED einschalten
delay(500); // Warte 500 Millisekunden
digitalWrite(ledPin, LOW); // LED ausschalten
delay(500); // Warte 500 Millisekunden
}

Es wird eine For-Schleife ausgeführt, die bei "i = 0" startet, bei jeden Schleifendurchlauf i um 1 erhöht wird ("i++") und die For-schleife beendet wird, wenn "i < 4" nicht mehr erfüllt ist. Also ist nach 4 Durchläufen dieser Teil beendet.


Innerhalb der For-Schleife wird die LED für 0,5s eingeschaltet und für 0,5s ausgeschaltet.


Glückwunsch, du hast den ersten Teil erfolgreich gemeistert!


2. Dynamischer Autoblinker

Nun werden den grundlegenden Aufbau vom "LED-Blinker mit Taster gesteuert" so erweitern, dass daraus der dynamische Autoblinker entsteht.


2.1. Benötigte Komponenten und Aufbau
- Arduino Uno
- 8 LEDs
- 8 x 220 Ohm Widerstände
- 1 Taster
- 10k Ohm Widerstand
- Steckbrett und Verbindungskabel

Verbinde die weiteren LED's mit dem digitalen Pins 4 bis 10 am Arduino auf die selbe Weise wie im grundlegenden Aufbau oben.


2.2. Arduino Sketch-Erweiterung


// Definiere die Pins für die LEDs und den Taster
int ledPins = {3, 4, 5, 6, 7, 8, 9, 10};
int buttonPin = 2;
int buttonState = 0;
void setup() {
for (int k = 0; k < 8; k++) {
pinMode(ledPins, OUTPUT); // Setze die LED-Pins als Ausgänge
}
pinMode(buttonPin, INPUT); // Setze den Taster-Pin als Eingang
}
void loop() {
buttonState = digitalRead(buttonPin); // Lese den Zustand des Tasters
if (buttonState == HIGH) { // Wenn der Taster gedrückt ist, starte den Laufblinker
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 8; k++) {
digitalWrite(ledPins, HIGH); // LED einschalten
delay(200); // Warte 200 Millisekunden
}
for (int k = 0; k < 8; k++) {
digitalWrite(ledPins, LOW); // LED ausschalten
}
delay(200); // Warte 200 Millisekunden
}
}
}

Pins und Zustandsvariable definieren: Neu ist hier, dass alle LED-Pins in einem Array zusammengefasst werden. Hat in den späteren For-Schleifen einige Vorteile wie sehen wirst.


Im Setup-Bereich Pins konfigurieren: Hier werden nun alle LED-Pins in einer For-Schleife konfiguriert. Dies ist nur möglich, weil die definierten Pins in einem Array gespeichert sind.


Funktion im Loop-Bereich: Auch hier wird nun eine For-Schleife genutzt um die einzelnen Pins der LED's anzusteuern.


Glückwunsch, du hast nun den dynamischen Autoblinker nachgebaut, woran die Automotive-Firmen lange geforscht haben!


.


2.3. Modifikationen des dynamischen Autoblinkers

Hier noch ein paar Modifikationen mit Mittel aus den bisherigen Projekten.


2.3.1 Rechtsblinker und Linksblinker mit 2 Tastern

Wie du unten im Aufbau sehen kannst, wird ein weiterer Taster ergänzt.



Der Sketch wird dann wie folgt verändert:


// Definiere die Pins für die LEDs und den Taster
int ledPins = {3, 4, 5, 6, 7, 8, 9, 10};
int buttonPin1 = 1;
int buttonPin2 = 2;
int buttonState1 = 0;
int buttonState2 = 0;
void setup() {
for (int k = 0; k < 8; k++) {
pinMode(ledPins, OUTPUT); // Setze die LED-Pins als Ausgänge
}
pinMode(buttonPin1, INPUT); // Setze den Taster-Pin als Eingang
pinMode(buttonPin2, INPUT); // Setze den Taster-Pin als Eingang
}
void loop() {
buttonState1 = digitalRead(buttonPin1); // Lese den Zustand des Tasters 1
buttonState2 = digitalRead(buttonPin2); // Lese den Zustand des Tasters 2
if (buttonState1 == HIGH) { // Wenn der Taster gedrückt ist, starte den Laufblinker
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 8; k++) {
digitalWrite(ledPins, HIGH); // LED einschalten
delay(200); // Warte 200 Millisekunden
}
for (int k = 0; k < 8; k++) {
digitalWrite(ledPins, LOW); // LED ausschalten
}
delay(200); // Warte 200 Millisekunden
}
}
if (buttonState2 == HIGH) { // Wenn der Taster gedrückt ist, starte den Laufblinker
for (int i = 0; i < 4; i++) {
for (int k = 7; k < 0; k--) {
digitalWrite(ledPins, HIGH); // LED einschalten
delay(200); // Warte 200 Millisekunden
}
for (int k = 7; k < 0; k--) {
digitalWrite(ledPins, LOW); // LED ausschalten
}
delay(200); // Warte 200 Millisekunden
}
}
}
2.3.2 Blinker-Geschwindigkeit ändern

Für die Geschwindigkeit ist hauptsächlich die delay() Funktion verantwortlich, die du sowohl im Einschaltteil, als auch im Abschaltteil der LED's findest.


delay(200); // Warte 200 Millisekunden

Nun kannst du hingehen und die 200 durch eine Variable ersetzen, die von einem Potentiometer abhängig ist. Und schon kannst du die Blinkgeschwindigkeit über das Potentiometer beeinflussen.


Der Aufbau sieht dann wie folgt aus:



Der zugehörige Arduino Code sieht dann wie folgt aus:


// Definiere die Pins für die LEDs und den Taster
int ledPins = {3, 4, 5, 6, 7, 8, 9, 10};
int buttonPin1 = 1;
int buttonPin2 = 2;
int buttonState1 = 0;
int buttonState2 = 0;
int sensorPin = A0; // Der Sensor ist mit dem analogen Pin A0 verbunden
int sensorValue = 0; // Variable zum Speichern des Sensorwerts
void setup() {
for (int k = 0; k < 8; k++) {
pinMode(ledPins, OUTPUT); // Setze die LED-Pins als Ausgänge
}
pinMode(buttonPin1, INPUT); // Setze den Taster-Pin als Eingang
pinMode(buttonPin2, INPUT); // Setze den Taster-Pin als Eingang
}
void loop() {
buttonState1 = digitalRead(buttonPin1); // Lese den Zustand des Tasters 1
buttonState2 = digitalRead(buttonPin2); // Lese den Zustand des Tasters 2
if (buttonState1 == HIGH) { // Wenn der Taster gedrückt ist, starte den Laufblinker
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 8; k++) {
digitalWrite(ledPins, HIGH); // LED einschalten
delay(200); // Warte 200 Millisekunden
}
for (int k = 0; k < 8; k++) {
digitalWrite(ledPins, LOW); // LED ausschalten
}
delay(200); // Warte 200 Millisekunden
}
}
if (buttonState2 == HIGH) { // Wenn der Taster gedrückt ist, starte den Laufblinker
for (int i = 0; i < 4; i++) {
for (int k = 7; k < 0; k--) {
digitalWrite(ledPins, HIGH); // LED einschalten
sensorValue = analogRead(sensorPin); // Lese den Wert des Sensors
delay(sensorValue); // Warte x Millisekunden (nach Poti-Einstellung)
}
for (int k = 7; k < 0; k--) {
digitalWrite(ledPins, LOW); // LED ausschalten
}
sensorValue = analogRead(sensorPin); // Lese den Wert des Sensors
delay(sensorValue); // Warte x Millisekunden (nach Poti-Einstellung)
}
}
}

Glückwunsch! Jetzt hast du schon was geschafft, was nicht vielen gelingt!


Du suchst noch weiteres Hintergrundwissen? Ich kann dir nur Arduino Referenzen empfehlen.

https://smarthome-assistant.info/5-arduino-dynamischer-autoblinker/

Kommentare

Beliebte Posts aus diesem Blog

10. Arduino - Spannungsmessung am Fotowiderstand