← Retour

Contrôleur RGB Intelligent (Arduino)

Arduino C/C++ Électronique Codage LED

C'était mon premier projet en apprenant Arduino. Je voulais créer un système d'éclairage à la fois ajustable manuellement et assez intelligent pour réagir à l'environnement de la pièce.

Le concept : Utiliser un encodeur rotatif pour ajuster la couleur parfaite, et un capteur de lumière pour s'assurer que la lampe ne fonctionne que quand il fait vraiment sombre.

J'ai utilisé un encodeur rotatif pour naviguer dans les canaux Rouge, Vert et Bleu. En cliquant sur le bouton, je peux changer de couleur, et en le tournant, j'ajuste la luminosité de cette couleur spécifique.

Pour la rendre "intelligente", j'ai intégré une photorésistance (LDR). J'ai défini un seuil dans le code pour que les LED s'éteignent automatiquement quand le soleil se lève, ce qui économise l'énergie. Construire cela m'a beaucoup appris sur les diviseurs de tension, l'élimination de bruit des signaux matériels et comment organiser un circuit propre sur une breadboard.

Voir en action

Le Code Source

Voici la version finale du code.


        const int pinCLK = 2; 
const int pinDT = 7;  
const int pinSW = 4;  
const int ROUGE = 5;
const int VERT = 6;
const int BLEU = 3;


const int seuil = 200;


 int val_bleu = 50;
 int val_vert = 50;
 int val_rouge = 50;

int compteur = 0;
int etatPrecedentCLK;
int actual_color = 0;

void setup() {
  pinMode(pinCLK, INPUT);
  pinMode(pinDT, INPUT);

  pinMode(ROUGE, OUTPUT);
  pinMode(VERT, OUTPUT);
  pinMode(BLEU, OUTPUT);

  

  pinMode(pinSW, INPUT_PULLUP);

  Serial.begin(9600);
  
  etatPrecedentCLK = digitalRead(pinCLK);
  
  Serial.println("Debut");
}
void loop() {
  int etatActuelCLK = digitalRead(pinCLK);
  int color = actual_color % 3;
  int lumiere = analogRead(A1);

  if (etatActuelCLK != etatPrecedentCLK) {
    int delta = (digitalRead(pinDT) != etatActuelCLK) ? 5 : -5;

    if (color == 1) val_rouge = constrain(val_rouge + delta, 0, 255);
    else if (color == 2) val_vert = constrain(val_vert + delta, 0, 255);
    else val_bleu = constrain(val_bleu + delta, 0, 255);

    Serial.print("Lumiere : "); Serial.print(lumiere);
    Serial.print(" | R:"); Serial.print(val_rouge);
    Serial.print(" | V:"); Serial.print(val_vert);
    Serial.print(" | B:"); Serial.println(val_bleu);
  }
  etatPrecedentCLK = etatActuelCLK;

  if (digitalRead(pinSW) == LOW) {
    actual_color++;
    delay(200); 
  }

  if (lumiere < seuil) {
    analogWrite(ROUGE, val_rouge);
    analogWrite(VERT, val_vert);
    analogWrite(BLEU, val_bleu);
  } else {
    analogWrite(ROUGE, 0);
    analogWrite(VERT, 0);
    analogWrite(BLEU, 0);
  }
}