Augmenter et réduire la luminosité d’une LED après appui bouton avec une carte PCA9685 et un Arduino Uno
Description :
Projet permettant de faire varier automatiquement la luminosité d’une LED après le lancement d’un cycle par un appui sur un bouton, en utilisant une carte PWM PCA9685 et un Arduino Uno.
Lorsqu’un bouton est pressé, le programme déclenche un cycle où la LED augmente puis diminue progressivement son intensité, créant un effet de fondu lumineux. La carte PCA9685, via l’interface I2C, assure un contrôle précis du PWM, libérant les broches Arduino et permettant de gérer facilement plusieurs LEDs simultanément.
Cette configuration est idéale pour des projets de décoration lumineuse, effets visuels interactifs ou pour apprendre le contrôle de luminosité analogique avec des cycles automatisés pilotés par Arduino.
Prérequis :
- 1 x Carte Arduino Uno
- 1 x Carte PCA9685
- 3 x LED
- 3 x Résistance 220Ω
- 3 x Bouton
- 1 x Breadboard
- Fils de connexion
Version IDE :
- Arduino IDE 2.3.5
Bibliothèque :
- Adafruit BusIO (version: 1.17.2 par Adafruit)
- Adafruit-PWM-Servo-Driver-Library-master (version: 3.0.2 par Adafruit)
Vidéo de démonstration :
Schéma de câblage :


Code :
int BtJaune = 2;
int BtBleue = 3;
int BtVert = 4;
bool EtatBtVert;
bool EtatBtBleue;
bool EtatBtJaune;
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
int pinLedVert = 0;
int ValeurpinLedVert;
int pinLedBleue = 1;
int ValeurpinLedBleue;
int pinLedJaune = 2;
int ValeurpinLedJaune;
unsigned long previousMillis = 0;
const int interval = 15;
void setup() {
pwm.begin();
pinMode(BtVert, INPUT_PULLUP);
pinMode(BtBleue, INPUT_PULLUP);
pinMode(BtJaune, INPUT_PULLUP);
}
void loop() {
unsigned long currentMillis = millis();
EtatBtVert = digitalRead(BtVert);
if (EtatBtVert == LOW) {
ValeurpinLedVert = 4095;
}
EtatBtBleue = digitalRead(BtBleue);
if (EtatBtBleue == LOW) {
ValeurpinLedBleue = 4095;
}
EtatBtJaune = digitalRead(BtJaune);
if (EtatBtJaune == LOW) {
ValeurpinLedJaune = 4095;
}
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ValeurpinLedVert > 0 && EtatBtVert == HIGH) {
ValeurpinLedVert = ValeurpinLedVert - 100;
}
if (ValeurpinLedBleue > 0 && EtatBtBleue == HIGH) {
ValeurpinLedBleue = ValeurpinLedBleue - 100;
}
if (ValeurpinLedJaune > 0 && EtatBtJaune == HIGH) {
ValeurpinLedJaune = ValeurpinLedJaune - 100;
}
}
pwm.setPWM(pinLedVert, 0, ValeurpinLedVert);
pwm.setPWM(pinLedBleue, 0, ValeurpinLedBleue);
pwm.setPWM(pinLedJaune, 0, ValeurpinLedJaune);
}
