Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

LED-Helligkeit per PWM und Taster am Arduino Mega steuern

Komponenten und Zubehör

Komponente Menge Hinweise
Arduino Mega 2560 1
Steckbrett (Breadboard) 1
Jumper-Kabel 11 Menge kann variieren
LED (beliebig) 3 Empfohlen: 3 verschiedene Farben
Taster 12 mm (SparkFun) 1
Widerstand 330 Ω 4

Apps und Online-Dienste

Projektbeschreibung

Dieses Projekt zeigt, wie man LEDs mit Arduino per PWM dimmt. Es ist in drei Stufen unterteilt:

1. LEDs faden (automatisch)

Am Ende dieses Abschnitts leuchten die LEDs nacheinander wie eine Ampel auf und ab.

Schaltplan

LED-Helligkeit per PWM und Taster am Arduino Mega steuern

Die LEDs sind an den PWM-Pins 3, 6 und 9 angeschlossen. Andere PWM-Pins sind möglich, müssen aber im Code angepasst werden.

Code

Zuerst die Pin-Definitionen:

int ledRed = 9;
int ledYellow = 6;
int ledGreen = 3;

Im setup() die Pins als Output definieren:

void setup() {
  pinMode(ledRed, OUTPUT);
  pinMode(ledYellow, OUTPUT);
  pinMode(ledGreen, OUTPUT);
}

Im loop() die PWM-Werte hoch- und runterzählen:

void loop() {
  // Rot
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledRed, i);
    delay(30);
  }
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledRed, i);
    delay(30);
  }
}

Die Variable i läuft von 0 bis 255 (aufhellen) und zurück (abdimmen). delay(30) bestimmt die Geschwindigkeit.

Für alle drei LEDs und einfachere Anpassung der Geschwindigkeit eine Konstante definieren:

const int fade = 10; // Verzögerung in ms

void loop() {
  // Rot
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fade); }
  // Gelb
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  // Grün
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fade); }
  // Gelb wieder
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
}

2. LEDs faden mit Taster

Der Farbwechsel erfolgt nur bei Tastendruck.

Schaltplan

LED-Helligkeit per PWM und Taster am Arduino Mega steuern

Taster an Pin 7 (Pull-Down-Widerstand nicht vergessen oder internen Pull-Up nutzen).

Code

Taster-Pin definieren und im setup() als Input setzen, Startzustand (Grün an) festlegen:

int button = 7;
const int fade = 10;

void setup() {
  pinMode(ledRed, OUTPUT);
  pinMode(ledYellow, OUTPUT);
  pinMode(ledGreen, OUTPUT);
  pinMode(button, INPUT);
  digitalWrite(ledRed, LOW);
  digitalWrite(ledYellow, LOW);
  digitalWrite(ledGreen, HIGH);
}

Der loop() prüft den Taster (mit einfacher Entprellung) und ruft fadeLights() auf:

void loop() {
  if (digitalRead(button) == HIGH) {
    delay(15); // Entprellung
    if (digitalRead(button) == HIGH) {
      fadeLights();
    }
  } else {
    digitalWrite(ledRed, LOW);
    digitalWrite(ledYellow, LOW);
    digitalWrite(ledGreen, HIGH);
  }
}

Die Funktion fadeLights() enthält die Fade-Sequenz (beginnend mit Grün ausblenden):

void fadeLights() {
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fade); }
}

Falls die Reihenfolge nicht stimmt: Code und Verkabelung prüfen. Wenn LEDs nicht leuchten: Verkabelung, Pin-Nummern und Formel prüfen.

3. LEDs faden mit Taster – Verbesserung (nicht-blockierend)

Problem: Bei loslassen des Tasters läuft die Sequenz weiter. Lösung: In jeder Schleife den Taster prüfen und bei Loslassen return ausführen.

Schaltplan

Unverändert.

LED-Helligkeit per PWM und Taster am Arduino Mega steuern

Code

Konstante fade entfällt. Im loop() bleibt die Struktur, aber fadeLights() wird geändert:

void fadeLights() {
  // Grün ausblenden
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledGreen, i);
    for (int y = 0; y < 1000; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Gelb aufblenden
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Gelb ausblenden
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Rot aufblenden
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledRed, i);
    for (int y = 0; y < 1000; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Rot ausblenden
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledRed, i);
    for (int y = 0; y < 1000; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Gelb aufblenden
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Gelb ausblenden
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Grün aufblenden
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledGreen, i);
    for (int y = 0; y < 1000; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
}

Die inneren for-Schleifen ersetzen delay() und prüfen dabei den Taster. Wird er losgelassen, bricht return die Funktion ab und der else-Zweig im loop() setzt den Startzustand (Grün an). Die Schleifenzähler (1000, 400) bestimmen die Geschwindigkeit – je nach Board anpassen.

Complete Codes

1. Fade Lights

int ledRed = 9; int ledYellow = 6; int ledGreen = 3; const int fade = 10;
void setup() {
  pinMode(ledRed, OUTPUT); pinMode(ledYellow, OUTPUT); pinMode(ledGreen, OUTPUT);
}
void loop() {
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
}

2. Fade Lights with Push Button

int ledRed = 9; int ledYellow = 6; int ledGreen = 3; int button = 7; const int fade = 10;
void setup() {
  pinMode(ledRed, OUTPUT); pinMode(ledYellow, OUTPUT); pinMode(ledGreen, OUTPUT);
  pinMode(button, INPUT);
  digitalWrite(ledRed, LOW); digitalWrite(ledYellow, LOW); digitalWrite(ledGreen, HIGH);
}
void loop() {
  if (digitalRead(button) == HIGH) { delay(15); if (digitalRead(button) == HIGH) fadeLights(); }
  else { digitalWrite(ledRed, LOW); digitalWrite(ledYellow, LOW); digitalWrite(ledGreen, HIGH); }
}
void fadeLights() {
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fade); }
}

3. Fade Lights with Push Button (Improvement)

int ledRed = 9; int ledYellow = 6; int ledGreen = 3; int button = 7; const int fade = 10;
void setup() {
  pinMode(ledRed, OUTPUT); pinMode(ledYellow, OUTPUT); pinMode(ledGreen, OUTPUT);
  pinMode(button, INPUT);
  digitalWrite(ledRed, LOW); digitalWrite(ledYellow, LOW); digitalWrite(ledGreen, HIGH);
}
void loop() {
  if (digitalRead(button) == HIGH) { delay(15); if (digitalRead(button) == HIGH) fadeLights(); }
  else { digitalWrite(ledRed, LOW); digitalWrite(ledYellow, LOW); digitalWrite(ledGreen, HIGH); }
}
void fadeLights() {
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); for (int y = 0; y < 1000; y++) if (digitalRead(button) == LOW) return; }
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); for (int y = 0; y < 400; y++) if (digitalRead(button) == LOW) return; }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); for (int y = 0; y < 400; y++) if (digitalRead(button) == LOW) return; }
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); for (int y = 0; y < 1000; y++) if (digitalRead(button) == LOW) return; }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); for (int y = 0; y < 1000; y++) if (digitalRead(button) == LOW) return; }
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); for (int y = 0; y < 400; y++) if (digitalRead(button) == LOW) return; }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); for (int y = 0; y < 400; y++) if (digitalRead(button) == LOW) return; }
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); for (int y = 0; y < 1000; y++) if (digitalRead(button) == LOW) return; }
}

Schaltpläne

LED-Helligkeit per PWM und Taster am Arduino Mega steuern
LED-Helligkeit per PWM und Taster am Arduino Mega steuern

Herstellungsprozess

  1. Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
  2. RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
  3. DHT11 Temperatur- & Feuchtesensor mit LED-Anzeige & Piezo-Summer
  4. Ultraschall-Schwebegerät mit Arduino bauen – Akustische Levitation Schritt für Schritt
  5. Unopad: Nahtloser Arduino MIDI-Controller für Ableton Live
  6. Automatische Pflanzenbewässerung mit Arduino – Sorgenfrei in den Urlaub
  7. Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
  8. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  9. Erdmassen-Messung mit Arduino: Schritt-für-Schritt DIY-Anleitung
  10. 25-kHz-4-Pin-PWM-Lüftersteuerung mit Arduino Uno – Bau, Code & Test