Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

LED helderheid regelen met PWM via drukknop op Arduino Mega

Onderdelen en benodigdheden

Arduino Mega 2560 × 1
Breadboard × 1
Draadjes (jumper wires) × 11
LED's (3 stuks, verschillende kleur aanbevolen) × 3
Drukknop (12 mm) × 1
Weerstanden 330 Ω × 4

Apps en online diensten

  • Arduino IDE

Over dit project

Deze tutorial laat in drie stappen zien hoe je LED's laat faden (dimmen) met een Arduino:

  1. Fade Lights – basis fading zonder knop
  2. Fade Lights met Drukknop – cyclus start op knopdruk
  3. Fade Lights met Drukknop (verbeterde delay) – faden stopt direct bij loslaten knop

1. Fade Lights (basis)

De LED's pulseren achtereen in volgorde: rood → geel → groen → geel (verkeerslicht-stijl).

Schema

LED helderheid regelen met PWM via drukknop op Arduino Mega

LED's aangesloten op PWM-pinnen 3, 6 en 9 (andere PWM-pinnen mogelijk, code aanpassen).

Code

int ledRed = 9;
int ledYellow = 6;
int ledGreen = 3;
const int fade = 10; // vertraging in ms

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

void loop() {
  // Rood faden
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fade); }
  // Geel faden
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  // Groen faden
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fade); }
  // Geel faden (terug)
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
}

De variabele fade maakt het makkelijk de snelheid aan te passen op één plek.

2. Fade Lights met Drukknop

De fading-cyclus start alleen wanneer de knop wordt ingedrukt. Bij loslaten gaat de groene LED aan (standaard).

Schema

LED helderheid regelen met PWM via drukknop op Arduino Mega

Drukknop op pin 7 (met interne pull-down of externe weerstand).

Code

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); // startstand
}

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

void fadeLights() {
  // Groen uitfaden
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fade); }
  // Geel aan/uit
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  // Rood aan/uit
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fade); }
  // Geel aan/uit
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
  // Groen aanfaden
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fade); }
}

3. Fade Lights met Drukknop – Directe stop bij loslaten (verbeterde delay)

Probleem: bij de vorige versie loopt de cyclus door na loslaten van de knop. Oplossing: controleer de knop tussen elke PWM-stap door de delay() te vervangen door een lus die de knop monitort.

Schema

Hetzelfde als versie 2.

LED helderheid regelen met PWM via drukknop op Arduino Mega

Code

int ledRed = 9;
int ledYellow = 6;
int ledGreen = 3;
int button = 7;
// const int fade = 10; // niet meer nodig

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() {
  // Groen uitfaden
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledGreen, i);
    for (int y = 0; y < 1000; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Geel aan
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Geel uit
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Rood aan
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledRed, i);
    for (int y = 0; y < 1000; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Rood uit
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledRed, i);
    for (int y = 0; y < 1000; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Geel aan
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Geel uit
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
  // Groen aan
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledGreen, i);
    for (int y = 0; y < 1000; y++) {
      if (digitalRead(button) == LOW) return;
    }
  }
}

Hoe het werkt: De innerlijke for (y...) lus vervangt delay(). Elke iteratie checkt de knop (~10 µs per loop). Bij loslaten (LOW) voert return direct uit de functie, zodat de else in loop() de standaardtoestand (groen aan) herstelt. De telling (1000/400) bepaalt de effectieve fadesnelheid.

Bestanden

  • Code: drie versies (zie boven)
  • Schema's: twee Fritzing-afbeeldingen

Productieproces

  1. Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
  2. Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
  3. DHT11 Temperatuur- & Vochtigheidsensor Project met LED-indicatoren en Piezo-luidspreker
  4. Bouw een Ultrasonische Zweefapparaat met Arduino – Stap-voor-stap Handleiding
  5. Unopad: Naadloze Arduino MIDI-controller voor Ableton Live
  6. Arduino-gestuurd automatische plantenwateringssysteem
  7. Een eenvoudige obstakelsensor bouwen met Arduino – IR LED & Fotodiodo Tutorial
  8. Find Me: Slimme Item Locator met Arduino en Bluetooth
  9. De massa van de aarde meten met Arduino: een stapsgewijze DIY-gids
  10. Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
  11. 25 kHz 4-pins PWM-ventilatorbesturing met Arduino Uno – Bouw, Code & Test