dimanche 10 juillet 2011

LED strip

Réalisation d'une interface entre Arduino et une bande de LED analogique.




La bande de LED que je possède fonctionne sous 12 Vcc (voir détails). Après avoir perdu du temps sur la recherche de conversion de 9V vers 12V en courant continu, je me suis rendu compte que le Arduino Uno pouvait être alimenté de 6V à 20V, contrairement au Arduino Mini qui est limité à 9V.

J'ai suivi le tutorial RGB LED Strips sur le site LadyAda afin de réaliser une interface pouvant être pluggée sur le Arduino Uno. Elle est simplement composée de 3 résistances et 3 transistors.

Le premier programme que j'ai testé est celui que j'ai réalisé pour la LED RGB.



J'ai amélioré le programme pour adoucir les variations des couleurs façon lumière d'ambiance.



Programme

struct RGB {
  byte r;
  byte g;
  byte b;
};

const boolean aleatoire = false;

const int LED_BLEU = 6;
const int LED_ROUGE = 5;
const int LED_VERT = 3;

RGB couleurRouge = { 255, 0, 0 };
RGB couleurVert = { 0, 255, 0 };
RGB couleurBleu = { 0, 0, 255 };
RGB couleurCyan = { 0, 255, 255 };
RGB couleurMagenta = { 255, 0, 255 };
RGB couleurJaune = { 255, 255, 0 };

RGB couleurs[] = { couleurRouge, couleurJaune, couleurVert, couleurCyan, couleurBleu, couleurMagenta };
int nbCouleurs = 6;
int indiceCouleur = 0;

int bleu = 0;
int rouge = 0;
int vert = 0;

int deltaBleu = 0; 
int deltaRouge = 0; 
int deltaVert = 0; 

int boucle = 0;

void setup() {
  pinMode(LED_BLEU, OUTPUT); // BLEU
  pinMode(LED_VERT, OUTPUT); // VERT
  pinMode(LED_ROUGE, OUTPUT); // ROUGE
  
  randomSeed(analogRead(A0));
  
  indiceCouleur = random(nbCouleurs);
  
  bleu = couleurs[indiceCouleur].b;
  rouge = couleurs[indiceCouleur].r;
  vert = couleurs[indiceCouleur].g;
  
  analogWrite(LED_BLEU, bleu);
  analogWrite(LED_ROUGE, rouge);
  analogWrite(LED_VERT, vert);
  
}

void loop() {
  if(boucle == 0) {
    indiceCouleur = (indiceCouleur + 1) % nbCouleurs;
    deltaBleu = (couleurs[indiceCouleur].b - bleu)/255;
    deltaRouge = (couleurs[indiceCouleur].r - rouge)/255;
    deltaVert = (couleurs[indiceCouleur].g - vert)/255;
  } else if(boucle == 255) {
    deltaBleu = 0;
    deltaRouge = 0;
    deltaVert = 0;
  } else if(boucle == 512) {
    boucle = -1;
  }
  
  bleu += deltaBleu;
  rouge += deltaRouge;
  vert += deltaVert;
  
  analogWrite(LED_BLEU, constrain(bleu,0,255));
  analogWrite(LED_ROUGE, constrain(rouge,0,255));
  analogWrite(LED_VERT, constrain(vert,0,255));
  
  delay(20);
  boucle++;
  
}

Aucun commentaire:

Enregistrer un commentaire