Bonjour,
J'ai un capteur TCS34725 qui est censé capter les couleurs avec une LED intégrée.
Seulement le problème est que les couleurs sont fausses !
J'ai présenté devant le capteur (avec LED allumée) un papier complètement blanc et le capteur m'a renvoyé le code HEX #426856, ce qui est un vert assez foncé (assez loin de la réalité !!)
le code (trouvé sur le forum arduino) :
#include <Wire.h>
#include "Adafruit_TCS34725.h"
// Pick analog outputs, for the UNO these three work well
// use ~560 ohm resistor between Red & Blue, ~1K for green (its brighter)
#define redpin 3
#define greenpin 5
#define bluepin 6
// for a common anode LED, connect the common pin to +5V
// for common cathode, connect the common to ground
// set to false if using a common cathode LED
#define commonAnode false
// our RGB -> eye-recognized gamma color
byte gammatable[256];
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);
void setup() {
Serial.begin(9600);
Serial.println("Color View Test!");
if (tcs.begin()) {
Serial.println("Found sensor");
} else {
Serial.println("No TCS34725 found ... check your connections");
while (1); // halt!
}
// use these three pins to drive an LED
pinMode(redpin, OUTPUT);
pinMode(greenpin, OUTPUT);
pinMode(bluepin, OUTPUT);
// thanks PhilB for this gamma table!
// it helps convert RGB colors to what humans see
for (int i=0; i<256; i++) {
float x = i;
x /= 255;
x = pow(x, 2.5);
x *= 255;
if (commonAnode) {
gammatable[i] = 255 - x;
} else {
gammatable[i] = x;
}
//Serial.println(gammatable[i]);
}
}
void loop() {
uint16_t clear, red, green, blue;
tcs.setInterrupt(false); // turn on LED
delay(60); // takes 50ms to read
tcs.getRawData(&red, &green, &blue, &clear);
tcs.setInterrupt(true); // turn off LED
Serial.print("C:\t"); Serial.print(clear);
Serial.print("\tR:\t"); Serial.print(red);
Serial.print("\tG:\t"); Serial.print(green);
Serial.print("\tB:\t"); Serial.print(blue);
// Figure out some basic hex code for visualization
uint32_t sum = clear;
float r, g, b;
r = red; r /= sum;
g = green; g /= sum;
b = blue; b /= sum;
r *= 256; g *= 256; b *= 256;
Serial.print("\t");
Serial.print((int)r, HEX); Serial.print((int)g, HEX); Serial.print((int)b, HEX);
Serial.println();
//Serial.print((int)r ); Serial.print(" "); Serial.print((int)g);Serial.print(" "); Serial.println((int)b );
analogWrite(redpin, gammatable[(int)r]);
analogWrite(greenpin, gammatable[(int)g]);
analogWrite(bluepin, gammatable[(int)b]);
}
Tout est bien branché, le 5V, le GND, le SCL et le SDA. Ma carte est une Arduino MEGA.
@fdufnews, j'ai retesté dans une pièce à l'obscurité. Le résultat est le même. Je ne pense pas que d'autres lumières ou la table aient interféré dans le résultat de la mesure.
@lesept, j'ai acheté ce module sur AliExpress. Il y a des informations en descendant un peu.
J'ai cherché un peu sur Internet, et je n'ai pas bien compris, qu'est ce que le temps d'intégration (integration time) et le gain ? Peut-être c'est cela qui est mal reglé ?
J'ai testé avec la bibliothèque que tu m'a proposé, et ça donne à peu près les mêmes résultats :
Interval : 502
Color Temp : 6557.99
Lux : 3277.43
R : 7.85
G : 27.91
B : 16.81
Raw R : 292
Raw G : 485
Raw B : 396
Raw C : 1175
On est bien d'accord que ici, ce sont les 3 premières valeurs de RGB qui sont sur 255, et donc utilisables? A quoi correspondent les valeurs RGB raw en dessous ?
Le tableau que j'ai reçu avait TCS34727 monté dessus, pas TCS34725. Par conséquent, la bibliothèque TCS34725 de Arduino n'a pas pu y accéder. J'ai modifié la partie ID de la librairie, et ça a bien fonctionné.
Dans le fichier /h de la bibliothèque, il y a ces lignes :
Merci pour tes réponses.
J'ai essayé de changer par 0x44 ou 0x4D, mais dans les 2 cas ça ne trouvait pas le capteur, alors j'ai laissé à 0x12.
En fait, je crois que le capteur marche, mais toutes les couleurs lues sont beaucoup trop sombres. Lorsque je met du bleu clair, ça me lit du RGB(0,26,46) et lorsqu'on descend un peu sur cette page, on trouve le bon bleu (+50% de lumière)...
Pareil pour le rouge : RGB(65,7,5) qui correspond à la lumière à 40%.
Et pour le rose RGB(26,9,18)
Je pense qu'il faudrait juste trouver un moyen d'augmenter la luminosité, pourtant la led du capteur est bien éclairée à fond. Ce n'est pas normal, toutes les vidéos et tutos que je vois sur internet montrent un capteur qui capte la bonne couleur...
En même temps, à 1.30€ le capteur, il ne faut pas s'attendre à une très haute qualité. La vidéo du vendeur semble montrer que l'objet doit être placé assez près du capteur. Le résultat dépend de la distance.