Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega

Composants et Fournitures

Composant Quantité Notes
Arduino Mega 2560 1
Plaque d'essai (breadboard) 1
Fils de liaison (jumper wires) 11 Selon méthode de câblage
LED (générique) 3 3 couleurs différentes recommandées
Bouton poussoir 12 mm (SparkFun) 1
Résistance 330 Ω 4 3 pour LEDs + 1 pour pull-down bouton

Applications et Services en Ligne

À Propos du Projet

Ce tutoriel progressif en trois étapes vous apprend à faire varier l'intensité de LEDs (fondu/« fade ») grâce à la modulation de largeur d'impulsion (PWM) sur Arduino :

  1. Fade simple : enchaînement automatique rouge → jaune → vert → jaune
  2. Fade déclenché par bouton : une pression lance la séquence
  3. Fade réactif : la séquence s'arrête dès que le bouton est relâché

Étape 1 : Fade Simple (Séquence Automatique)

Schéma

Les trois LEDs sont connectées sur des pins PWM : D9 (rouge), D6 (jaune), D3 (vert). Chaque anode via une résistance 330 Ω, cathodes au GND.

Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega

Code

On définit les pins, on les configure en sortie, puis dans loop() on utilise deux boucles for par LED : montée 0→255 puis descente 255→0, avec analogWrite() et un délai constant.

int ledRed = 9;
int ledYellow = 6;
int ledGreen = 3;
const int fadeDelay = 10;  // ms entre chaque pas (vitesse du fondu)

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

void loop() {
  // Rouge
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fadeDelay); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fadeDelay); }
  // Jaune
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fadeDelay); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fadeDelay); }
  // Vert
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fadeDelay); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fadeDelay); }
  // Jaune (retour)
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fadeDelay); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fadeDelay); }
}

Astuce : la constante fadeDelay permet de modifier la vitesse globalement sans toucher à chaque delay().

Étape 2 : Fade Déclenché par Bouton Poussoir

Schéma

Ajout d'un bouton poussoir sur D7 (pull-down 10 kΩ vers GND, ou utilisation de INPUT_PULLUP avec logique inversée). Les LEDs restent sur D9, D6, D3.

Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega

Code

On extrait la séquence de fondu dans une fonction fadeLights(). Dans loop(), on détecte une pression (avec anti-rebond logiciel 15 ms) pour l'appeler. Si le bouton n'est pas pressé, la LED verte reste allumée (état par défaut).

int ledRed = 9, ledYellow = 6, ledGreen = 3;
int button = 7;
const int fadeDelay = 10;

void setup() {
  pinMode(ledRed, OUTPUT);
  pinMode(ledYellow, OUTPUT);
  pinMode(ledGreen, OUTPUT);
  pinMode(button, INPUT);          // ou INPUT_PULLUP avec câblage inverse
  digitalWrite(ledRed, LOW);
  digitalWrite(ledYellow, LOW);
  digitalWrite(ledGreen, HIGH);    // état initial : vert allumé
}

void loop() {
  if (digitalRead(button) == HIGH) {
    delay(15);                     // anti-rebond
    if (digitalRead(button) == HIGH) {
      fadeLights();                // lance la séquence complète
    }
  } else {
    digitalWrite(ledRed, LOW);
    digitalWrite(ledYellow, LOW);
    digitalWrite(ledGreen, HIGH);
  }
}

void fadeLights() {
  // Vert s'éteint
  for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fadeDelay); }
  // Jaune monte/descend
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fadeDelay); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fadeDelay); }
  // Rouge monte/descend
  for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fadeDelay); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fadeDelay); }
  // Jaune monte/descend
  for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fadeDelay); }
  for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fadeDelay); }
  // Vert rallume
  for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fadeDelay); }
}

⚠ Une fois fadeLights() lancée, elle s'exécute entièrement même si on relâche le bouton.

Étape 3 : Fade Réactif (Arrêt au Relâchement du Bouton)

Schéma

Identique à l'étape 2.

Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega

Code

On remplace les delay(fadeDelay) par une boucle active qui teste l'état du bouton à chaque micro-itération. Si le bouton est relâché (LOW), return quitte immédiatement fadeLights() et le else du loop() rétablit l'état par défaut (vert allumé).

int ledRed = 9, ledYellow = 6, ledGreen = 3;
int button = 7;
// const int fadeDelay = 10;  // plus nécessaire

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() {
  // Vert s'éteint
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledGreen, i);
    for (int y = 0; y < 1000; y++) if (digitalRead(button) == LOW) return;
  }
  // Jaune monte
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) if (digitalRead(button) == LOW) return;
  }
  // Jaune descend
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) if (digitalRead(button) == LOW) return;
  }
  // Rouge monte
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledRed, i);
    for (int y = 0; y < 1000; y++) if (digitalRead(button) == LOW) return;
  }
  // Rouge descend
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledRed, i);
    for (int y = 0; y < 1000; y++) if (digitalRead(button) == LOW) return;
  }
  // Jaune monte
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) if (digitalRead(button) == LOW) return;
  }
  // Jaune descend
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledYellow, i);
    for (int y = 0; y < 400; y++) if (digitalRead(button) == LOW) return;
  }
  // Vert rallume
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledGreen, i);
    for (int y = 0; y < 1000; y++) if (digitalRead(button) == LOW) return;
  }
}

Note : les boucles internes (y < 1000 ou 400) remplacent delay() ; leur nombre détermine la durée apparente de chaque pas. Ajustez selon la réactivité souhaitée.

Codes Complets

1. Fade Simple
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 avec Bouton
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 Réactif (Amélioration Délai)
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; }
}

Schémas

Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega
Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega

Processus de fabrication

  1. Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
  2. Système de pointage RFID fiable avec Arduino et Python (base de données phpMyAdmin)
  3. Projet capteur DHT11 température/humidité avec indicateurs LED et buzzer piézo
  4. Construire un dispositif de lévitation ultrasonique avec Arduino – Guide étape par étape
  5. Unopad : contrôleur MIDI Arduino fluide pour Ableton Live
  6. Système d'arrosage automatique pour plantes piloté par Arduino
  7. Capteur d'obstacle IR simple avec Arduino — LED IR + Photodiode
  8. Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
  9. Contrôle de ventilateur PWM 4 broches 25 kHz avec Arduino Uno – Construction, code et test