dimanche 2 mars 2014

Variation de couleur d'un bandeau de leds RGB avec un potentiomètre ou une sonde de température

Petit montage permettant de faire varier la couleur d'une ou plusieurs leds RGB.

Ce programme a été réalisé a la suite d'une demande faite sur le blog, j'ai mis deux versions, l'une ou l'on fait varier les couleur a l'aide d'un potentiomètre. Pour la seconde c'est une sonde de température qui fait varier les couleurs, étant donné que je ne fais pas de conversion tension / température, il suffit de remplacer le potentiomètre par la sonde.

Le schéma

Le schéma est très simple, il vous faut
- un potentiomètre 10 Kohms ou une TMP36
- 3 résistances 1 Kohms
- 3 transistors MOSFET canal N ( BUZ11 par exemple)

Variation avec un potentiomètre



Variation avec une sonde TMP36

Variation avec une TMP36 ou LM35 (c'est la même sonde, la seule chose qui change entre les deux est la précision)



On utilise ici 3 sorties PWM qui vont piloter les 3 transistors de puissance.




Le code

Le code est également très simple, on fait un découpage de la valeur de l'entrée analogique (0 à 1023)
puis une lui affecte une gamme de couleur.



/*
  Variation RGB by Jojo Bricolo
 
  Voici un lien vers un site qui donne la convertion des couleur en codes
 http://www.proftnj.com/RGB3.htm  exemple blanc // 255 (rouge),255 (bleu) ,255 (vert)
*/

// Définition des broches
int ledRouge = 10;
int ledVerte = 9;
int ledBleu = 11;

// Broche potentiomètre ou TMP36
int Tmpin = A1;



// Variable des leds
byte RougeVal = 0;
byte VertVal = 0;
byte BleuVal = 0;


int TmpVal; // Mesure de tension du potentiomètre ou de la TMP36 (pas de conversion pour la sonde, la valeur se situe donc entre 0 et 1023 cela permet plus de possibilité )


void setup()
{
  pinMode(ledRouge, OUTPUT);
  pinMode(ledVerte, OUTPUT);
  pinMode(ledBleu, OUTPUT);

}

void loop()

  {
   TmpVal = analogRead(A1);


  // Teinte 1 >>>>>>>> Les teintes varient selon les leds
 
  // Mélange rouge vert

   if (TmpVal > 0 && TmpVal < 170) { // si la valeur de la TMP est supérieur a 0 et inférieur a 170
     RougeVal = 255; // Rouge au max
     //BleuVal = 0; // bleu a 0 avec possibilité d'en rajouter un peu valeur a donner entre 0 et 255.
     analogWrite(ledRouge, RougeVal);
     VertVal = map(TmpVal, 0, 170, 0, 255); // variation du vert par la fonction de conversion map on dit donc que 0 a 170 (maxi 1023) est égal a 0 a 255, 255 étant la puissance max de la couleur séléctionnée.
     analogWrite(ledVerte, VertVal);
     //analogWrite(ledBleu, BleuVal);
   }

   // // Teinte 2
   if (TmpVal > 170 && TmpVal < 341) {
     VertVal = 255; // vert max
    // BleuVal = 0;
     analogWrite(ledVerte, VertVal);
     RougeVal = map(TmpVal, 341, 170, 0, 255); // variation rouge
     analogWrite(ledRouge, RougeVal);
    // analogWrite(ledBleu, BleuVal);
   }

    // Teinte 3
    if (TmpVal > 341 && TmpVal < 511) {
      VertVal = 255; // vert max
      //RougeVal = 0;
      analogWrite(ledVerte, VertVal);
      BleuVal = map(TmpVal, 341, 511, 0, 255); //variation du bleu
      analogWrite(ledBleu, BleuVal);
      //analogWrite(ledRouge, RougeVal);
   }

   // Teinte 4 
   if (TmpVal > 511 && TmpVal < 681) {
     BleuVal = 255;
     //RougeVal = 0;
     analogWrite(ledBleu, BleuVal);
     VertVal = map(TmpVal, 682, 511, 0, 255);
     analogWrite(ledVerte, VertVal);
     //analogWrite(ledRouge, RougeVal);
   }

   // // Teinte 5
   if (TmpVal > 682 && TmpVal < 852) {
     BleuVal = 255;
     //VertVal = 0;
     analogWrite(ledBleu, BleuVal);
     RougeVal = map(TmpVal, 682, 852, 0, 255);
     analogWrite(ledRouge, RougeVal);
     //analogWrite(ledVerte, VertVal);
   }

   // // Teinte 6
   if (TmpVal > 852 && TmpVal < 1023) {
     RougeVal = 255;
    // VertVal = 0;
     analogWrite(ledRouge, RougeVal);
     BleuVal = map(TmpVal, 1023, 852, 0, 255);
     analogWrite(ledBleu, BleuVal);
     //analogWrite(ledVerte, VertVal);
   }
    }
 

En vidéo



Si cela vous intéresse, je suis en mesure de vous faire un kit ou même vous réaliser ce montage !!!

8 commentaires:

  1. Au top ! fonctionne parfaitement :D un grand merci à toi Jojo :D

    RépondreSupprimer
  2. De rien, c'est avec plaisir !!!

    RépondreSupprimer
  3. j'aurais aimé faire varier la couleur avec deux potentiomètres, est ce que tu aurais une idée du montage et du code?
    C'est pour que deux personnes puissent agir sur la couleur.

    Ps: je ne suis qu'un amateur, il faudra me laisser le temps de comprendre. =D

    RépondreSupprimer
    Réponses
    1. La manière la plus simple est de mettre deux potentiomètre en série mais c'est assez moyen.
      La deuxième solution consisterai a un comparateur de tension qui ferai la moyenne des deux valeurs générées par les potentiomètre.

      Supprimer
  4. Bonjour
    je chercher à faire un montage ave arduino, avec un ruban à led verte mais je ne sais absolument comment on fait, pourriez vous m'aidez ?
    Merci d'avance

    RépondreSupprimer
  5. Bonjour,
    J'ai un capteur de température infrarouge (Grove 101020062) et une LED RGB (cathode commune. Je voudrais faire réagir la LED à la température pour faire des photos en light painting. Le programme nécessaire est-il très différent de celui que vous proposez avec le TMP36 ? Je viens juste d'acquérir un Arduino, et j'ai seulement appris à faire un feu tricolore... :-)
    Merci de votre réponse
    Cordialement
    Rhyss

    RépondreSupprimer
  6. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  7. Bonjour super tutoriel !! Votre schéma fonctionne pour un ruban a les de 1 voir 2 mètres ou plus ? Ou faut il ajouter en plus une alim sur les câbles de la bande led ?
    Je voudrais utilisé u mne bande led soit en ws2811 ou ws2813
    D'avance merci!

    RépondreSupprimer