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 !!!
Au top ! fonctionne parfaitement :D un grand merci à toi Jojo :D
RépondreSupprimerDe rien, c'est avec plaisir !!!
RépondreSupprimerj'aurais aimé faire varier la couleur avec deux potentiomètres, est ce que tu aurais une idée du montage et du code?
RépondreSupprimerC'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
La manière la plus simple est de mettre deux potentiomètre en série mais c'est assez moyen.
SupprimerLa deuxième solution consisterai a un comparateur de tension qui ferai la moyenne des deux valeurs générées par les potentiomètre.
Bonjour
RépondreSupprimerje 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
Bonjour,
RépondreSupprimerJ'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
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimerBonjour 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 ?
RépondreSupprimerJe voudrais utilisé u mne bande led soit en ws2811 ou ws2813
D'avance merci!