Problème lumière jaune avec LED RGB

Bonjour à tous,

Sur ma quatrième leçon de mon kit Elegoo avec la Mega 2560, j'essaye de modifier le programme pour qu'il affiche la couleur désirée suivant les valeurs que je mets dans mon programme.

Le but est donc de voir une lumière jaune avec ma led RGB autrement dit d'avoir le rouge et le vert à 255 pour avoir cette résultante, or malheureusement, suivant mes essais, j'ai soit rouge, soit vert mais pas de jaune .

J'ai testé de modifier des paramètres du programme mais cela ne donne rien au final.

Je n'ose imaginer quand je vais attaquer la leçon 30 et suivantes !

Merci d'avance pour vos suggestions.

Je mets le programme ici , je n'ai pas d'erreur de compilation

//www.elegoo.com
//2016.12.8

// Define Pins
#define BLUE 3
#define GREEN 5
#define RED 6

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, LOW);
}

// define variables
int redValue;
int greenValue;
int blueValue;

// main loop
void loop() {

  redValue = 255;  // choose a value between 1 and 255 to change the color.
  greenValue = 255;
  blueValue = 0;

  analogWrite(RED, redValue);
  analogWrite(GREEN, greenValue);
  analogWrite(BLUE, blueValue);
}

La boulette doit me crever les yeux mais je ne vois pas :frowning:
Merci d'avance pour votre aide.

Merci de prendre quelques minutes pour lire (ou relire) "Les bonnes pratiques du forum francophone" et les appliquer.

En particulier, la mise en forme du code avec des balises en cliquant sur l'icône <code/>

Bonjour eruptionsolar

Tout d'abord, mets ton programme en forme comme indiqué ci-dessus.

Ton programme fonctionne, peut être une erreur de câblage?
Fais ne photo, en gros plan, de ton montage,

A+
Cordialement
jpbbricole

C'est bon, pigé la manip et de l'astuce copier pour le forum.

Je joins les deux images du montage, pas trop de lumière au vu de l'heure donc un peu flou malheureusement.


Merci.
Le code est plus lisible ainsi.
Il est à priori correcte et il devrait fonctionner.

  • As-tu vérifié le brochage de ta LED, la broche la plus longue c'est le commun?
  • Es-tu certain de ton câblage?
  • On ne peut pas lire va valeur des résistances sur la photo.

Vérifiez que la LED n'est pas endommagée avec un petit code qui affiche les 3 couleurs principales

#define BLUE 3
#define GREEN 5
#define RED 6

void setup() {
  pinMode(RED, OUTPUT);   digitalWrite(RED, LOW);
  pinMode(GREEN, OUTPUT); digitalWrite(GREEN, LOW);
  pinMode(BLUE, OUTPUT);  digitalWrite(BLUE, LOW);
}

void loop() {
  digitalWrite(RED, HIGH);
  delay(1000);

  digitalWrite(RED, LOW);
  digitalWrite(GREEN, HIGH);
  delay(1000);

  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, HIGH);
  delay(1000);

  digitalWrite(BLUE, LOW);
}

Aucun souci pour le code. J'avais lu les règles mais je n'étais pas aller aussi loin. Je connais la manip, cela devrait le faire désormais pour les suivants.

Pour les branchements, oui, j'ai bien lu et vu que la broche la plus longue est le commun, je vais vérifier mais normalement pas d'inversion à 90 °.
Pour le câblage, normalement oui, je m'explique et cela rejoint la réponse pour Jackson (mais je vais tester son programme bien sur) , pour cette leçon, le programme est beaucoup plus complet et fonctionne bien , c'est avec des boucles qui vont faire une évolution au cours du temps de la couleur observée.

C'est moi qui ai décidé non pas d'avoir une évolution de la couleur au cours du temps mais d'imposer les valeurs pour avoir une lumière donnée donc dans le guide, il est indiqué que le jaune correspond au rouge et vert , j'ai donc mis 255 pour chaque.
Après comme précisé dans ma présentation, je suis totalement néophyte, je découvre la programmation et l'électronique (j'avais bouffé du Turbo Pascal en fac mais cela remonte :slight_smile:

Ah oui, j'oubliais 220 ohms pour les résistances.

Une LED RGB à cathode commune se câble avec une résistance par couleur en effet (pour limiter le courant dans cette LED) mais sa valeur dépend de la couleur, car la chute de tension varie selon la longueur d’onde.

Une LED rouge a en général une chute plus faible que les vertes et bleues, ce qui implique une résistance un peu plus élevée pour obtenir le même courant.

Par exemple, si bleu et vert sont à 220 Ω, le rouge doit être plus élevé pour compenser sa chute de tension plus faible. Essayez avec une valeur autour de 330 Ω pour avoir un courant comparable et garder une luminosité équilibrée entre les trois couleurs.

Salut, j'ai vérifié mon câblage, pas d'erreur pour moi.
Jackson, je viens de tester ton programme qui marche nickel !
Merci pour l'astuce pour les résistances.

OK donc si le rouge, vert bleu fonctionne, Le jaune se fait en allumant rouge et vert en même temps.

#define BLUE 3
#define GREEN 5
#define RED 6

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);

  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, HIGH);
  digitalWrite(BLUE, LOW);
}

void loop() {}

PS/ c'est pas très beau des define pour les N° de pins, vaut mieux préférer des constantes et puis si vous parlez français, autant nommer ses variables en français :slight_smile:

const byte brocheBleue = 3;
const byte brocheVerte = 5;
const byte brocheRouge = 6;

void setup() {
  pinMode(brocheRouge, OUTPUT);
  pinMode(brocheVerte, OUTPUT);
  pinMode(brocheBleue, OUTPUT);

  digitalWrite(brocheRouge, HIGH);
  digitalWrite(brocheVerte, HIGH);
  digitalWrite(brocheBleue, LOW);
}

void loop() {}

➜ voyez vous du Jaune ??

Le kit propose une 330 ohm, j'ai donc changé la résistance, j'ai refait ensuite ton programme pour voir si j'ai bien rouge, vert , bleu, c'est bon et effectivement les trois ont bien la même luminosité :slight_smile:)

Je viens de tester tes deux programmes, et bien je vois du ..... vert ! J'ai même demandé à ma femme pour être sur que ce ne sont pas mes yeux, elle m'a dit du vert......

Je crois que le kit propose une autre LED, je vais tester avec une autre LED RGB pour voir.

Un grand MERCI pour votre aide à tous.

EDIT (5 mn après), changement de LED, même constat :frowning:

Pour les noms en français, c'est tiré des programmes du kit donc tout est annoté en anglais , seul le guide est en français (encore pas trop mal traduit, le kit Uno est de ce côté là une vraie horreur, c'est pour cela que j'ai choisi le kit Mega 2560).
Curieux de voir justement si le kit officiel vendu ici , sur la boutique, a les programmes en français ou c'est uniquement le livret proposé (ce qui est déjà beaucoup !).

Bon, comme on dit, demain est un autre jour. On testera demain soir si des idées nous viennent.
Merci pour l'accueil très cordial et pour toutes les aides et programmes proposés, c'est super sympa !

Des martiens, où ça ?

Plus sérieusement, la colorimétrie est complexe.
Il y a la théorie et les sources de lumière réelles qui font ce qu'elles peuvent.

Avant te lancer dans une chasse à une "éventuelle" meilleure diode, pourquoi ne ferais-tu pas quelques mesures et tests ?

Tu reprends la fonction analogWrite(pin, coef).
Cela te permettra de varier les proportions de rouge et de vert

Tu fixes le rapport cyclique du rouge à 50/50 soit analogWrite(diode_rouge, 127).
Tu fais un programme qui augmente tranquillement le vert en partant de 0 jusqu'à 255.
Tu peux aussi mettre le vert à 50/50 et faire varier le rouge.

Regarde si tu ne trouves pas un couple de valeur qui donne un jaune "acceptable".

Pour la représentation des couleurs, on utilise un diagramme appelé "Gamut".
Le gamut représente les couleurs que voit l'œil.
Les triangles dans le gamut représentent les couleurs que l'on peut réellement reproduire avec seulement 3 sources de lumière.
Les pointes des triangles représentent les sources R, V, B.

Tu peux voir qu'il y a plusieurs normes parce qu'il existe des sources de lumière différentes.

Si dans le bleu et le rouge les "pointes des triangles" sont peu dispersées, ce n'est plus le cas dans le vert.

Tu ne connais rien de tes diodes, tu n'en connaitra pas plus avec d'autres diodes.
C'est pour cela que je te conseille de faire des expérimentations.

L'œil est plus sensible au vert.
Si tu reprends le premier programme, tu peux jouer sur la valeur de greenValue pour essayer de faire du jaune. Commence par exemple en divisant par 2 sa valeur.
Après, tu pourras adapter la valeur de la résistance du vert pour corriger cet écart.

@fdufnews le premier programme, tu veux dire donc le mien de départ ? C'est bien cela ?
@68tjs je vais tester cela.

A suivre :slight_smile:

Voici le programme pour voir l'évolution des couleurs, bon surement perfectible.

Je comprends mieux, je m'attendais à un jaune canari, c'est un jaune très pâle.

Je vais essayer de voir en indiquant des valeurs en dur

//www.elegoo.com
//2016.12.8

// Define Pins
#define BLUE 3
#define GREEN 5
#define RED 6

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, LOW);
}

// define variables
int redValue;
int greenValue;

// main loop
void loop() {
#define delayTime 50  // fading time between colors

  redValue = 255;  // choose a value between 1 and 255 to change the color.
  greenValue = 0;

  // this is unnecessary as we've either turned on RED in SETUP
  // or in the previous loop ... regardless, this turns RED off
  // analogWrite(RED, 0);
  // delay(1000);

  for (int i = 0; i < 255; i += 1)  // fades out red bring green full when i=255
  {
    redValue -= 1;
    greenValue += 1;
    // The following was reversed, counting in the wrong directions
    // analogWrite(RED, 255 - redValue);
    // analogWrite(GREEN, 255 - greenValue);
    analogWrite(RED, redValue);
    analogWrite(GREEN, greenValue);
    delay(delayTime);
  }
}

Quelles sont les valeurs qui donne du jaune ?
Dans quelle condition de courant ?

Si le jaune est trop pâle, c'est probablement que le courant n'est pas assez fort en fonction des diodes que tu as.

Je n'aurais pas fait ça :

Puisque tu trouvais trop de vert, je serais parti du rouge max, et je n'aurais fait varier que le vert en partant de 0.

redValue   = 255 ;
greenValue = 0;

for (int i = 0; i < 255; i += 1)
  {
    greenValue += 1;
   .............
   ............
}

Je pense que le jaune serait plus vif.

J'ai repris mon premier programme qui marche donc très bien, maintenant je sais à quoi m'attendre.
Celui qui serait le mieux en jaune , c'est redValue = 100, greenValue = 25 mais comme dit, on oublie la couleur canari, jaune pétant !

Ma femme a bien confirmé le jaune :slight_smile:

Si tu mettais Rouge = 255 et vert = 25*(255/100) = 64, tu serais plus jaune plus pétant → a condition que la longueur d'onde ne change pas avec le courant...

As tu calculé les courants correspondants ?

Effectivement, je n'y avais pas pensé pour 255 et 64 ! La couleur est beaucoup plus chaude :slight_smile:

Pour les calculs correspondants, n'oubliez pas que je découvre totalement donc je dirais I= U/R donc 5/330 = 0.015 A pour le rouge et 5/220 = 0.022 A pour le vert.

Edit ; je viens de voir ton message édité plus haut, effectivement ton approche est plus pertinente que la mienne.

Donc pour le vert sachant que le courant n'est disponible qu'à 64/255 tu as un courant moyen de 22*64/255 = 5,6 mA

Et donc que la diode verte émet une longueur d'onde, mal positionnée sur le Gamut et pas très conforme pour de la restitution de couleur.
Ou que la diode rouge n'est pas très efficiante.

L'important est d'avoir réussi à faire le programme et à comprendre pourquoi le résultat n'était pas celui attendu.