TCS3200 colorimètre

DIDIER17

Active member
Bonjour à tous,
Peintre du dimanche, j’ai parfois du mal a retrouver la couleur de tel ou tel élément. Pour m’aider,
je souhaitai réaliser un colorimètre (à-peu-prés-mètre ou pifomètre) à partir du TCS3200 (j’utilise le montage Gotronic sur une petite carte) .

actuellement indisponible

l’objectif que je me suis fixé est de comparer deux échantillons de couleur, l’appareil pourrait
indiquer la dérive de l’un par rapport à l’autre, plus de jaune moins de bleu par exemple .
En s’expriment bien sûr en %CMJN

Hélas les résultats sont assez décevant !
Je pensais pouvoir faire mieux qu’un trieur de smarties ? Mais ce n’est pas gagner.

Tous d’abord le composant ne fonctionne pas dans les fréquences attendues , je relève 6Khz max contre 10 à 12khz sur le datasheet. Je ne sais pas dire s’il s’agit d’un défaut de fabrication ou de mise en œuvre. Toutefois l’amplitude de mesure est considérable selon la couleur (de 150 points pour du noir à 6700 pour du blanc).
Je compte les front montant avec la fonction « count ».

On trouve pas mal de chose dans le monde Arduino mais presque rien en Picaxe en dehors du trieur de smarties.

Dans les divers programmes Arduino la méthode consiste a faire une lecture des 3 couleurs RVB puis à l’aide de la fonction « map » faire une mise à l’échelle 0 à 255, cela fonctionne plus ou moins.
Vous remarquerez que dans les vidéos qui circulent sur le net, presque toujours, le capteur est à l’air libre (ou la lumière libre)


il me semble que pour avoir un minimum de précision il faut maîtriser l’illuminent c-à-d
la couleur de la lumière qui éclaire l’échantillon.

pour ma part je fonctionne comme ça :
j’ai encapsuler le capteur et réaliser deux bouchons étalon : un blanc, un noir.
Ce blanc est bien sur une référence arbitraire :un bout de canson blanc en l’occurrence.
je fais deux première mesure par les photosites blanc : une avec le bouchon blanc et une avec le bouchon noir.
je mesure aussi chaque couleur ( RVB ) avec le bouchon blanc.

la mesure des photosites blanc doit être la somme des trois autre couleur (si la lumiere des leds était équilibrée ce serait le cas).
si par exemple pour le blanc, je mesure 3000 points ( fronts montants) dans un espace de temps d’une seconde
je divise le résultat par 3. chaque couleur devra mesurer 1000 point pour l’étalon blanc

(du reste elles n'en sont pas loin: mesure brutes = R 33% V 32% B 36%)

j’équilibre la mesure des trois autres couleurs en ajustant le temps de mesure pour enlever les dominantes,en l’occurrence bleu de éclairage par led.
Une fois cet étalonnage réaliser, je mesure des échantillons colorés dans le domaine RVB
j’effectue une mise à échelle de 0 à 255 (soustrait de la valeur noir) pour une sortie sur l’afficheur et je compare avec "rapidtable" le résultat





Conclusion :
quand je mesure par exemple du mauve je trouve bien un mauve ressemblant en RVB mais cela reste tout de même imprécis.
Il me semble que je perds beaucoup de précision dans les conversions de grand nombre pour éviter les virgules sans sortir de la valeur d’un word ( 65735)

soyez indulgent pour le programme car je l’écris à la volée sans réflexion de fond pour l’instant.

voila un bon sujet pour les grosses têtes du forum, je suis preneur expérience dans le domaine ?

je vous tiens au courant de l’avancement de mes travaux .
Vous noterez esthétique du boîtier à mi chemin entre Playmobile et les forges du Creusot !

2325023251








Désolé pour l’orthographe aussi approximatif que la couleur
 

Attachments

PieM

Senior Member
Bonjour Didier,
Aïe ! le problème des couleurs...
Je ne suis ni grosse tête ni pro de la chose, mais heurté au problème en photo, avec les rendus RVB écran et CMJN impression (ou peinture).
Concernant le capteur, je ne pense pas qu'il permette d'obtenir des résultats précis, la résolution de la mesure limitée à 16 bits n'étant pas en cause.
Déjà sa réponse spectrale est loin d'être parfaite:
Image 012.png
D'autre part, la neutralisation de la couleur de lumière "dite blanche" incidente ne peut se faire à mon avis par soustraction des valeurs lues par réflexion sur du "a peu près blanc".
En exagérant, si j'éclaire en bleu un objet jaune, ou inversement, il parait noir! Je ne peux rien en déduire sur sa couleur réelle et effectuer une compensation.
Finalement, il ne faut peut être pas demander à ce capteur autre chose que de trier des smarties...
Les résultats obtenus avec Ardui. ne semblent pas très cohérents !
Image 013.png
Le TCS34725 serait sans doute plus indiqué.
 
Last edited:

DIDIER17

Active member
Bonjour Piem,
Aïe ! le problème des couleurs...
Aïe! c'est presque un euphémisme, j'aurais dis HAAaarg!
je vous remercie d'avoir pris le temps de regarder les documentations d'AMS et vous remercie aussi
d'avoir pris le temps de me répondre. Vous avez probablement raison sur les limites de ce capteur.

En ce qui concerne la neutralisation de l'illuminent, je regarde comment procède les spectrocolorimètre ou spectrophotomètre du commerce (c'est parait-il le vrai nom de ce type d'appareil), par exemple les modèles pas trop chers, Color Muse ou NIX.
Pour calibrer l'appareil, il faut placer un échantillon de référence ( souvent le bouchon arrière) , je pense qu'ils s’étalonnent soit par ajustement de éclairage ( D51 le plus souvent) soit par compensation logiciel. En gros, ils font une balance des blancs.

Certains amateurs modifient très légèrement la charte (blanc bleu ou blanc ambre) pour modifier la réponse colorimétrique ce qui laisse a penser
que le logiciel interne agit réellement. ce n'est pas la simple vérification d'une valeur attendue et pré enregistrée.

Les appareils du commerce donnent une réponse en colorimétrie absolue avec un référentiel standard (Panthone, RGB, etc).
L'objet de mon montage est de rechercher une réponse relative d'un échantillon à l'autre.

Ces appareils ressemblent furieusement à mon bricolage, des leds éclairages, une cellule et un gros background mathématique que je n'ai pas.

Concernent les mesures, une fois que l'appareil est stabiliser (5 bonnes minutes), la répétabilité est assurée. je note sous les échantillons leurs valeurs, c'est très stables.

j'ai placer à l'arriere du boitier une sortie série, je vais pour le moment effectuer les calcules, à extérieur, sur une feuille Excel.

c'est un sujet sans conséquence, au pire, je fais des portrait bleu comme dans Avatar ou je peint avec des chiffres...

Merci Bonne soirée
 

PieM

Senior Member
Bonsoir,
Colorimètre et spectrophotomètre sont deux choses différentes. Pas le même prix non plus.
Mais vu l'utilisation, cad une comparaison de couleurs, votre système est sans doute suffisant.
Attention toutefois que le capteur TCS3200 voit les infrarouges comme une couleur !! Je pense qu'il est abandonné en raison de cela, au profit du TCS34725.
 

DIDIER17

Active member
Bonsoir,
Merci Piem pour vos conseils toujours avisé.
Je regarde ce capteur ( TCS34725). Au catalogue AMS ce n'est pas ce qui manque.
Bonne soirée
 

DIDIER17

Active member
Bonjour a tous j'ai fait une erreur en postant le programme, voici une version plus juste
Rich (BB code):
'colorimetre V6.0
'le 08 novembre 2019

'affectation des pins

symbol mesure = C.7 ; entree picaxe des frequence/couleur
symbol S2 = C.4 ;selecteur de couleur de capteur
Symbol S3 =C.5 ; selecteur de couleur de capteur
symbol aff = B.7 ; envoie sur afficheur lcd
symbol eclaire = B.5 ; led blanche eclairage mesure
symbol led = B.3 ;led rouge defaut
symbol buzz = B.4 ; buzzer
symbol BP_rouge = B.0 ;bouton poussoir rouge
symbol BP_vert = B.1 ;bouton poussoir vert
symbol BP_bleu = B.2 ;bouton poussoir bleu


;declaration de variable word
symbol noir = W2 ; mesure au noir
symbol tier_blanc = W3 ;division de la mesure blanc par 3
symbol tps_rouge = W4 ;temps de mesure rouge
symbol tps_vert= W5 ;temps de mesure vert
symbol tps_bleu = W6 ;temps de mesure bleu
symbol blanc = W7 ;comptage des fronts frequence blanc
symbol red = W8;comptage des fronts frequence rouge
symbol green = W9;comptage des fronts frequence vert
symbol blue = W10;comptage des fronts frequence bleu
symbol etapeA = W11 ; etape calcule
symbol coefA = W13 ; etape calcule

;calage moyen du temps de mesure
tps_rouge = 1010 ;les valeurs ci-contre
tps_vert = 1040;permettent de gagner du temps
tps_bleu = 920; de calage car elles approche les temps relever par essais


'sequence de mesure initiale noir****************

high eclaire
pause 500 ;chauffe led 0,5S
'affichage des mesures
        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"bouchon noir ")
    serout aff,T2400,(254,192,"presse BP ROUGE")
    
;attente d'action sur BP rouge pour poursuivre
do
if pinB.0 = 1 then exit
loop;_________________________________________


high S2 low S3 ;lire les photosites blanc avec l'echantillon; de reference noir
pause 20
count mesure,1000,noir


'sequence de mesure initiale du blanc*********************


        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"bouchon blanc ")
    serout aff,T2400,(254,192,"press BP Rg ")
    


;attente d'action sur BP rouge pour poursuivre
do
if pinB.0 = 1 then exit
loop;_________________________________________


pause 20
count mesure,1000,blanc


;mesure initiale rouge bleu vert

low S2 low S3
pause 20
count mesure,tps_rouge,red



low S2 high S3
pause 20
count mesure,tps_bleu,blue



high S2 high S3
pause 20
count mesure,tps_vert,green


tier_blanc = blanc/3 ; definit la valeur RVB comme le tier de la mesure


low S2 low S3
low eclaire


    'affichage des mesures
        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"blanc ",#tier_blanc)
    serout aff,T2400,(254,192,"noir ",#noir,"BpR=suit")
    

;attente d'action sur BP rouge pour poursuivre
do
if pinB.0 = 1 then exit
loop;_________________________________________



;sous prog linearisation
;l'illuminent est toujours le meme
; il s'agit des leds blanche
;pour harmoniser la mesure le programme agit sur la duree de comptage
;de chaque couleur afin
;de modifier la derive colorimetrique des led d'eclairage
;le blanc est compose part egale RVB
;la mesure est arbitrairement divise par 3
;les valeurs RVB doivent etre equilibrer sur
;tier_blanc


pause 500 ;chauffe led 0,5S
'affichage des mesures
        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"bouchon BLANC ")
    serout aff,T2400,(254,192,"press BP Rg")
    


;attente d'action sur BP rouge pour poursuivre
do
if pinB.0 = 1 then exit
loop;_________________________________________



;___________________________________
;equilibrage du rouge
high eclaire
do
if red < tier_blanc then inc tps_rouge endif
if red > tier_blanc then dec tps_rouge endif

low S2 low S3
pause 20
count mesure,tps_rouge,red
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"1/3 ",#tier_blanc,"CR ",#red)
    serout aff,T2400,(254,192,"tps R ",#tps_rouge)
loop while red <> tier_blanc
;________________________________________
;equilibrage du bleu
do
if blue < tier_blanc then inc tps_bleu endif
if blue > tier_blanc then dec tps_bleu endif

low S2 high S3
pause 20
count mesure,tps_bleu,blue
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"1/3 ",#tier_blanc,"CB ",#blue)
    serout aff,T2400,(254,192,"tps B ",#tps_bleu)
loop while blue <> tier_blanc
;________________________________________
;equilibrage du vert
do
if green < tier_blanc then  inc tps_vert endif
if green >= tier_blanc then dec tps_vert endif

high S2 high S3
pause 20
count mesure,tps_vert,green
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"1/3 ",#tier_blanc,"CV ",#green)
    serout aff,T2400,(254,192,"tps V ",#tps_vert)
loop while green <> tier_blanc

low eclaire

;________________________________________
;fin programme equilibrage


        
;calcule des constantes
 
tier_blanc= tier_blanc - noir ; (ou tier noir ?)
coefA = 25500/tier_blanc ;mise ? l'echelle approximative
    
    
    
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"mesure ")
    serout aff,T2400,(254,192,"presse BP Vert")
do
if pinB.1 = 1 then exit;bouton vert
loop;

;boucle mesure

do


high eclaire
pause 100 ;chauffe led

low S2 low S3 ;S2 L S3 L = mesure par photosite rouge
count mesure,tps_rouge,red
red =red*coefA
red=red/100 max 255

high S3 ;S2 L S3 H = mesure par photosite bleu
pause 20
count mesure,tps_bleu,blue
blue = blue*coefA
blue = blue/100 max 255


high S2 ; S2 H S3 H = mesure par photosite vert
pause 20
count mesure,tps_vert,green
green = green*coefA
green = green/100 max 255




pause 10
low eclaire

    'affichage des mesures
        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"blanc ",#etapeA,"CR ",#red)
    serout aff,T2400,(254,192,"CG ",#green," CB ",#blue)
    pause 100
    sertxd (#red,59,#green,59,#blue,13,10) ; transmission de la valeur b0
; 13 permet un retour chariot et 10 un saut de ligne
    pause 100

red = 0
green = 0
blue = 0
;pause  lecture des donnees
do
if pinB.1 = 1 then exit
loop

loop
 

DIDIER17

Active member
je cherche des moyens d'améliorer la mesure , en effet, comme le fait remarque Piem, la sensibilité thermique est réelle.
les mesures sont un peu meilleures quand le composant est froid.
l'autre problème relève du calcul et de la mise à l'échelle. en externalisant sur une feuille excel les calculs je gagne en précision
faut-il passer par un uM-FPU, ça fait lourds?
 

PieM

Senior Member
Bonjour, vu le capteur il ne faut pas se faire d'illusions! On ne gagne pas le tiercé avec un âne.
Un capteur qui voit les infrarouges comme des couleurs, il ne faut pas en attendre grand chose de sérieux. Si la fabrication est abandonnée, ce n'est pas un hasard.
Un FPU ? mais le peu de précision est liée au capteur. Faire des calculs sur 32 bits n'apportera rien du tout.
Je ne comprends pas trop le problème: en RVB, on définit les couleurs par 3 octets ce qui représente 16 millions de couleurs. (et l'oeil humain n'en discerne que 2 millions) . La valeur mesurée par count est sur 16 bits. je ne vois donc pas le problème de calcul qui peut se poser.

"le blanc est compose part égale RVB" : Non on passe par des filtres sur les photodiodes. La réponse en fonction des longueurs d'onde n'est pas une droite horizontale. (voir la courbe de réponse spectrale), et en outre le blanc de la led n'est pas du blanc pur.
Puisque votre problème consiste à comparer deux echantillons de couleur, je ne vois pas l'intérêt de vouloir faire une mesure pseudo précise en RVB étalonné.
Faites vos mesures comparatives en conservant les donnée brutes. De toute façon, la correction de couleur ne pourra se faire que pifométriquement en ajoutant un peu de cyan, de magenta ou de jaune...
On est dans une comparaison. On a pas besoin d'une balance juste pour savoir si on a grossi par rapport à la veille!
 
Last edited:

DIDIER17

Active member
Vous avez raison, j’essaie de faire voler une enclume !
j’espère que mon fil ne va pas se terminer comme le débit-mètre à douche...

"Question idiote: est-il bien nécessaire d'actualiser un affichage tous les 0.1l pour quelqu'un qui prend une douche ....
Parce que prendre une douche en ayant les yeux fixés sur un compteur, fallait l'inventer!"



Si j’insiste sur ce capteur c’est que j’en ai pas d’autre… pour l’instant.
Je vous exhorte, Pierre, a ne pas perdre votre temps à me répondre.



Tentative d’explication désespérer :

Sur ce capteur nous pouvons lire quatre informations distinctes de manière indépendante :
les photos site blanc, les rouges, les verts, les bleus.
Selon la configuration hi/lo de S2 et S3
plus le temps de lecture d’une gamme de photo-site est grand plus je capte d’impulsion.
Pour étalonner l’éclairage le programme effectue une mesure d’une seconde sur un réflecteur blanc par les photo-sites blanc.
Je lis environ 6000 impulsions.

Même manœuvre sur un réflecteur noir par les photo-site blanc.
je lis environ 500 impulsions, je les garde sous le coude.


Pour neutraliser la coloration de l’éclairage Led, je divise les 6000 impulsions par 3.
soit 2000. (c’est la faute à jean Delmas )

Ensuite j’agis sur le temps de lecture de chaque gamme colorée pour obtenir 2000 points
sur mon échantillon blanc de référence. Ce qui donne par rapport au temps de référence 1000

tps_rouge = 1010
tps_vert = 1040
tps_bleu = 920

ces valeurs sont constantes jusqu’au prochain étalonnage

les valeurs ( 6000,2000, 500) sont choisi pour simplifier l’explication

au final, je pense (in petto) compenser la dominante bleue de l’éclairage led, car je
lis moins longtemps les photo-sites bleu et ce quelle que soit la couleur de l’ échantillon ?
Ce qui m’indique que je suis, peut-être, dans la bonne direction c’est une charte
grise (Scuadra True Color) qui me sert d’étalon intermédiaire ?


Pour la mesure d’une
couleur :
je compte les impulsions des photo-sites rouges normalement comprise entre 0 et 2000 point.
(je passe sous silence ce que je fais de la mesure au noir)

23278

a = (Ymax-Ymin)/(Xmax-Xmin)
Y = X - Xmin * a + Ymin

ensuite je fais une mise a l’échelle 0-2000 vers 0-255, si je ne me trompe pas ?

Soit dans mon cas :
a = 255 – 0 / 2000 – 0 C’est là que le picaxe complique les choses

ensuite

Yrouge = X ( lecture photo-site rouge) – 0 multiplier par le coefficient a + 0

idem pour vert et bleu

ce qui me donne une sortie de 0 à 255 (normalement) RVB


pour conclure :

les résultats ne sont pas complètement mauvais, ni complètement aléatoire, mais pour l’instant je fais mieux à l’œil et je ne risque pas de électrocuter en peignant, c’est ballot.
(j’utilise une petite APK pour smartphone pour vérifier mes mesures avec des led identique à celle du montage gotronic.)


Bonne soirée

Désole pour orthographe la grammaire etc
 

PieM

Senior Member
a = (Ymax-Ymin)/(Xmax-Xmin)
Y = X - Xmin * a + Ymin
Voui... "pourquoi faire simple quand on peut faire compliqué" est une devise que vous avez adoptée ? ;)
le changement d'échelle est ici sans changement d'origine, donc une simple règle de trois fait la balle!
nouvelle valeur = ancienne * 255/2000
ce qui se simplifie en ancienne /8 à 2% près.
2% étant négligeable puisque toutes les mesures "RVB" avec ce capteur sont entachées d'une approximation entre 10 et 20% !

Même manœuvre sur un réflecteur noir par les photo-site blanc.
je lis environ 500 impulsions, je les garde sous le coude.
Non! pour le noir le capteur donne entre 2 et 10 Hz. Donc la cible n'est pas noire.
Pour neutraliser la coloration de l’éclairage Led, je divise les 6000 impulsions par 3.
Non, la réponse d'une photodiode n'est pas celle théorique de la lumière blanche. Et la lumière de la led n'est pas du blanc pur.
les mesures sont un peu meilleures quand le composant est froid.
Le capteur est sensible aux infra rouges, indépendamment de toute chaleur. Votre télécommande IR de la TV n'attend pas que ça chauffe à l'arrivée.
Ce gadget voit en couleur un fer à repasser chaud dans le noir total.

Je souscris à votre conclusion "mais pour l’instant je fais mieux à l’œil ". Un œil de peindre (non daltonien) sera toujours supérieur à ce gadget.
Après si c'est pour le fun, ou correspond à une croyance chevillée au corps, en tant qu'athée convaincu et assidu, je respecte mais ne partage pas...:)
 

DIDIER17

Active member
Bonjour PeiM et bonjour à tous.

Voui... "pourquoi faire simple quand on peut faire compliqué" est une devise que vous avez adoptée ?
Si vous saviez! Vous avez raison, zéro plus zéro égale la tête à toto: je voulais bien décomposer mes explications, je suis souvent confus,
mais vous avez raison votre méthode est la bonne.
Je pourrais faire encore plus simple en agissant sur le temps de lecture des photo-sites pour avoir des sorties égales à max 255.

Non! pour le noir le capteur donne entre 2 et 10 Hz. Donc la cible n'est pas noire.

Mince, la cible est noire, noir d'ivoire, noir de Mars. Plus noir, à part mon âme j'vois pas!
plus sérieusement comment dire?
la valeur que j'obtiens est la réponse quand le montage c-à-d, capteur + led+ museau en plastique voit un échantillon noir.
ce sera ma référence au noir local ou du montage si je puis dire, par rapport à une référence au noir général (Pantone).
C'est vrai que compte tenu de la lumière ambiante dans un si petit volume ça a tout de suite une valeur.
Si j'expose un bleu très sombre, difficile à distinguer du noir, (genre Prusse violacé) j'obtiens une variation de réponse.

Non, la réponse d'une photodiode n'est pas celle théorique de la lumière blanche. Et la lumière de la led n'est pas du blanc pur.
Oui, vous avez raison, du reste, le capteur l'indique, le programme le mesure puis il le compense.
Oui la réponse du groupe led/ réflecteur canson / photo site blanc est altérée, mais peu importe. si je veux reproduire le blanc de mon bouchon de référence sur la toile, je mélange soigneusement du blanc de titane a du blanc de blanc de plomb jusqu’à ce que j'obtienne les même mesure sur l'afficheur. Cela risque de ne pas avoir un grand intérêt sauf dans un monochrome de Whitemann?


enfin moi c'que constate c'est qu'avant mon colorimètre je peignais comme ça


Caravaggio30.jpg


et depuis que je regarde ce machin plutôt que la toile je peins comme ça



pollock30.jpg






quoi qu’il en soit le TCS3472 que vous préconisez est plus adapté.




Merci pour votre bienveillance et votre humour!

Bonne journée
 

Attachments

DIDIER17

Active member
juste un petit post scriptum:

Décidément je m’accroche à mon gadget. j’ai compris ce qui manquait comme explication
à l’instant, c’est le côté BI DIRECTIONNEL ou réversible.

Sans parler de calibrage, de température ou autre, dans une exploitation brute du capteur.

si je présente un échantillon, avec un illuminant constant ( et c'est le cas) je vais avoir un résultat numérique RVB certes erroné mais constant.
Pour retrouver les mêmes (fausses) valeurs, il faudra que je présente le même échantillons, que je retrouve la même couleur.
c’est peut-être ce phénomène que j’ai mal expliqué.

23284



23285

rassurez vous je ne veux pas en vendre... Bonne fin de soirée
 

PieM

Senior Member
D'où mon post en #8 :
Puisque votre problème consiste à comparer deux echantillons de couleur, je ne vois pas l'intérêt de vouloir faire une mesure pseudo précise en RVB étalonné.
Faites vos mesures comparatives en conservant les donnée brutes. De toute façon, la correction de couleur ne pourra se faire que pifométriquement en ajoutant un peu de cyan, de magenta ou de jaune...
On est dans une comparaison. On a pas besoin d'une balance juste pour savoir si on a grossi par rapport à la veille!
;) J'irai vous voir au Grand Palais ...
 

DIDIER17

Active member
Hum? plutôt à la déchetterie de mon quartier, quand je viderai les étagères de mes inventions futiles.
C'est important d'avoir un détracteur tyrannique / bienveillant ( rayer les mentions inutiles), c'est ce qui fait progresser.
Bonne soirée PieM.
"pour m'entrainer, (aux jeu d’échecs )je joue contre moi même, je gagne souvent, mais je progresse peu" Bobby Fischer
 

DIDIER17

Active member
Bon sang qui a remis un franc dans le juke-box...

Bonjour à tous,

Boudiou ! le colorimètre fonctionne, tout du moins dans l’évaluation des valeurs RVB,
avec une erreur maximale et très occasionnel de ± 1 point par rapport a un scanner HP

j’ai d’abord étalonné mes yeux ( je blague) faites le test ça ne coûte rien


j’ai peint une petite charte avec quelques couleurs un peu au pif. Puis je me suis mis en quête d’une
entreprise susceptible de posséder un colorimètre pour en faire la mesure afin que cette charte perso me serve de référence helas ,les imprimeurs que j’ai contactés travail avec des appareils dédier à leurs systèmes d’impression. Hors de question de mesurer autre chose que leurs chartes Greta Mc Beth, ce que je comprends.

Les marchands de peinture bâtiment utilisent des nuanciers papier relatifs aux marques qu’ils vendent ou aux couleurs que leurs machines à mélange sont capable de produire. j’aurai dû m’en douter.

Finalement j’ai scanné ma charte avec deux scanner ( hp et Espon ) ainsi que deux driver différent. (un Twain officiel Epson et un générique linux).
Avec le logiciel Inkscape j’ai effecteur des mesures pondérés (moyenne de zone)

les valeurs données par le colorimètre sont pratiquement les mêmes que le scan HP , j’en suis le premier surpris, en fait un « montage qui tombe en marche » ( j'ai juste un peu modifié mon programme )

J’ai regardé la doc de l’AMS TCS34725, lui aussi à des trous dans la raquette si je puis dire?

En ce qui concerne le problème des infra rouges :
j’ai lu la doc AMS relative à ce sujet (un peu vite fait avec mon anglais top budget) j’y trouve une dérive au final de 200PPM/° c’est-à-dire pas grand-chose.

Pour en avoir le cœur net j’ai fais chauffer ma charte (authentique) à l’aide d’un petit bloc thermique régulé : de 20° a 80° aucune variation de mesure perceptible.

23335


Voila je mettrai en ligne le programme quand je l’aurais mis au propre ainsi que les fichiers pour l’impression 3D. Toutefois le sujet n’est pas clôt, car il me reste la conversion CMJN et il me faut trouver une méthode pour quantifier les écarts échantillons et le moyen de les faire converger.
j'aurais certainement besoin de vous pour ce sujet car, tout de suite je suis à court de place?

Bonne soirée à tous ( encore désolé pour mon orthographe et mon expression en générale, dyslexique, dysorthographique et un peu ... sur les bords)
 

PieM

Senior Member
Bonjour,

En ce qui concerne le problème des infra rouges :
j’ai lu la doc AMS relative à ce sujet (un peu vite fait avec mon anglais top budget) j’y trouve une dérive au final de 200PPM/° c’est-à-dire pas grand-chose.
Oui, bien sûr puisque cette valeur 200 ppm est donnée pour un rayonnement <700nm donc hors infrarouges !
La sensibilité du capteur est surtout dans une gamme d'infra rouges proches qu'on peut rencontrer dans une lumiere led.
Mais j'avoue ne pas comprendre la suite, avec la conversion RVB > CMJN, déjà particulièrement complexe lors des conversions couleurs écran > imprimantes.
L'objectif sera de savoir combien de microgrammes de cyan ou de magenta il faut ajouter sur la palette pour obtenir la couleur cible ?
J'en étais resté à #13...
 
Last edited:

DIDIER17

Active member
Bonsoir et merci PieM,
Je crois bien que vous êtes le seul a vous intéresser à ce projet et vous en remercie.
je suis tout de même étonné de la qualité résultats et j'espere que vous n’êtes pas dubitatif?
Mon propos est simplement de faire partager mes bricolages sans ambitions.
ceux d'un vieux bonhomme en retraite .

En effet c'est sur le poids de couleur que je vais travailler mais le microgramme, pas sûr. Initialement je voulais faire une machine à peinture
vous m'avez démasquer. mais ça me parait compliquer

je ne vois pas trop de difficulté dans le mode de convertion RGB > CMJN
mais vous m'inquiétez, je serais passé a coté de quelque chose?


The R,G,B values are divided by 255 to change the range from 0..255 to 0..1:
R' = R/255
G' = G/255
B' = B/255
The black key (K) color is calculated from the red (R'), green (G') and blue (B') colors:
K = 1-max(R', G', B')
The cyan color (C) is calculated from the red (R') and black (K) colors:
C = (1-R'-K) / (1-K)
The magenta color (M) is calculated from the green (G') and black (K) colors:
M = (1-G'-K) / (1-K)
The yellow color (Y) is calculated from the blue (B') and black (K) colors:
Y = (1-B'-K) / (1-K)




Encore merci de l’intérêt que vous portez à mon bidouillage
Bonne soirée.
 

PieM

Senior Member
je ne vois pas trop de difficulté dans le mode de convertion RGB > CMJN
Si on reste dans un registre purement théorique! Mais en pratique on est loin du compte... De plus l'espace colorimétrique en CMJN n'a pas la même étendue.
Regardez les courbes de réponses relatives du capteur (#3), et ce que donne la lecture par l'ardui par exemple . Le jaune (vert+rouge) est vu avec du bleu en complément du vert. Ci après le tableau des réponses du capteur; pas bien reluisant!
23337
En photo par exemple, la conversion RVB > CMJN, à partir d'un écran calibré, se fait en appliquant un profil de couleur.
Sur photoshop, j'ai une liste de plus de 70 profils, en fonction non seulement de profils standards (qui sont communiqués par l'imprimeur) mais auxquels s'ajoutent les profils liés aux imprimantes, et qui dépendent aussi du type de papier utilisé.
Quand vous imprimez chez vous un document, si vous précisez quel type de papier vous utilisez, ce n'est pas par curiosité, mais simplement pour modifier le profil de conversion...
Ce problème de restitutions de couleurs est assez complexe, et s’accommode mal de mesures très approximatives faites par un capteur gadget .
Pour ce qui me concerne, je ne peux que me forger une opinion à partir des caractéristiques donnée par le fabricant du capteur.
C'est évidemment un a priori! L'essentiel est que vous soyez satisfait du résultat pour votre utilisation.
 

DIDIER17

Active member
Bonsoir PieM et merci pour vos réponses toujours bien étayées.
Je continu mon bidouillage avec ce capteur bancale (j'ai une Led HS depuis hier) bien conscient des limites que vous rappelez.
j'aurais certainement besoin de vous pour corriger ma programmation , je pense pouvoir compter sur votre
expertise sans faille.
Du reste, j’ai le sentiment de dévoyer la mission première de ce forum centré, à juste titre, sur la programmation de micro contrôleur et non sur les turpitudes technophiles de vieux sénile:)

Bonne soirée.
 

PieM

Senior Member
j'aurais certainement besoin de vous pour corriger ma programmation , je pense pouvoir compter sur votre
expertise sans faille.
Du reste, j’ai le sentiment de dévoyer la mission première de ce forum centré, à juste titre, sur la programmation de micro contrôleur et non sur les turpitudes technophiles de vieux sénile
Pas de soucis ! Vous trouverez toujours quelqu'un ici pour vous aider, et l'utilisation de ce capteur spécifique rentre tout à fait dans les objectifs de ce forum. On a connu pire ! ;)
 

MGU

Senior Member
Bonsoir et merci PieM,
Je crois bien que vous êtes le seul a vous intéresser à ce projet et vous en remercie.
Bonjour,
On voudrait bien, mais c'est simplement que l'on a pas les compétences de PieM dans ce domaine.
Les seules que j'ai viennent des TV couleurs....
MM
 

DIDIER17

Active member
On voudrait bien, mais c'est simplement que l'on a pas les compétences de PieM dans ce domaine.
Ni moi...

Bonsoir et Merci MGU, merci pour l'encouragement
c'est projet qui tient plus de expérience que de l'utile mais ça mange pas d'pain.
je voudrai résoudre le PB des valeurs qui match bien sur le scan HP mais moins bien sur le scan Epson avant d'envoyer
le programme. j'ai une led HS sur le capteur et j'ai preté mon petit fers à souder, je devrai le recuperer cette semaine.

La TV couleurs analogique, c'est sacrément technique. là aussi Luminance, Chrominance, consécutif sur la trame avec une gate sur une ligne à
retard pour arriver en phase sur les canons! pas simple! ça date...

Bonne soirée
 

DIDIER17

Active member
Bonsoir,
voici le code pour la lecture RVB, je suis parvenu a changer la LED:eek:.
Les mesures en RVB faites avec le colorimètre sont pratiquement identiques à celle que je mesure avec Inkscape.

Au crayon de papier les valeurs indiquées sont:
la série de valeurs en 1 c'est avec le scanner Epson
la série en 2 c'est avec l'HP.
Si vous mesurez la charte chez vous , vous ne trouverez pas forcement les mêmes valeurs car le scan d'origine est en PNG et il pèse lourds (6MB),
mais je le tiens à votre dipsosition par WETRANSFER
je dois modifier le fichier 3D car la fenêtre pour l'afficheur n'est pas bien calé.
je joins aussi quelques photos
Bonne soiré

23342233432334423345



Rich (BB code):
'colorimetre V6.0 Didier17
'le 29 novembre 2019

'affectation des pins

symbol mesure = C.7 ; entree picaxe des frequences/couleurs
symbol S2 = C.4 ;selecteur de couleur du capteur
Symbol S3 =C.5 ; selecteur de couleur du capteur
symbol aff = B.7 ; envoie sur afficheur lcd
symbol eclaire = B.5 ; led blanche eclairage mesure
symbol led = B.3 ;led rouge defaut
symbol buzz = B.4 ; buzzer
symbol BP_rouge = B.0 ;bouton poussoir rouge
symbol BP_vert = B.1 ;bouton poussoir vert
symbol BP_bleu = B.2 ;bouton poussoir bleu


;declaration de variable word
symbol noir = W2 ; mesure au noir
symbol tier_blanc = W3 ;division de la mesure blanc par 3
symbol tps_rouge = W4 ;temps de mesure rouge
symbol tps_vert= W5 ;temps de mesure vert
symbol tps_bleu = W6 ;temps de mesure bleu
symbol blanc = W7 ;comptage des fronts frequence blanc
symbol red = W8;comptage des fronts frequence rouge
symbol green = W9;comptage des fronts freq vert
symbol blue = W10;comptage des fronts freq bleu
symbol constA = W11 ; etape calcule
symbol constB = W13 ; etape calcule

;calage moyen du temps de mesure
tps_rouge = 940 ;les valeurs ci-contre
tps_vert = 970;permettent de gagner du temps
tps_bleu = 853; de calage car elles approche les temps relever par essais
constB = 20; dix initialement

'sequence de mesure initiale noir****************

high eclaire
pause 500 ;chauffe led 0,5S
'affichage des mesures
        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"bouchon noir ")
    serout aff,T2400,(254,192,"presse BP VERT")
    
;attente d'action sur BP vert pour poursuivre
do
if pinB.1 = 1 then exit
loop;_________________________________________


high S2 low S3 ;lire les photosites blanc avec l'echantillon de ref noir
pause 20
count mesure,1000,noir


'sequence de mesure initiale du blanc*********************


        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"bouchon blanc ")
    serout aff,T2400,(254,192,"pressz BP VERT")
    


;attente d'action sur BP vert pour poursuivre
do
if pinB.1 = 1 then exit
loop;_________________________________________


pause 20
count mesure,1000,blanc


;mesure initiale rouge bleu vert

low S2 low S3
pause 20
count mesure,tps_rouge,red



low S2 high S3
pause 20
count mesure,tps_bleu,blue



high S2 high S3
pause 20
count mesure,tps_vert,green

noir = noir /3; je divise la valeur mesuree au noir par 3
tier_blanc = blanc/3 ; definit la valeur RVB comme le tier de la mesure
tier_blanc = tier_blanc-noir; soustrait le tier de la valeur noir

low S2 low S3



    'affichage des mesures
        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"1/3 blanc-N ",#tier_blanc)
    serout aff,T2400,(254,192,"1/3noir ",#noir,"presVert")
    

;attente d'action sur BP vert pour poursuivre
do
if pinB.1 = 1 then exit
loop;_________________________________________



;sous prog linearisation
;l'illuminent est toujours le meme
; il s'agit des leds blanche
;pour harmoniser la mesure le programme agit sur la duree de comptage
;de chaque couleur afin
;de modifier la derive colorimetrique des led d'eclairage
;le blanc est compose part egale RVB
;la mesure est arbitrairement divise par 3
;les valeurs RVB doivent etre equilibrer sur
;tier_blanc




;___________________________________
;equilibrage du rouge

do
if red < tier_blanc then inc tps_rouge endif
if red > tier_blanc then dec tps_rouge endif

low S2 low S3
pause 20
count mesure,tps_rouge,red
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"1/3 ",#tier_blanc," CR ",#red)
    serout aff,T2400,(254,192,"tps R ",#tps_rouge)
loop while red <> tier_blanc
;________________________________________
;equilibrage du bleu
do
if blue < tier_blanc then inc tps_bleu endif
if blue > tier_blanc then dec tps_bleu endif

low S2 high S3
pause 20
count mesure,tps_bleu,blue
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"1/3 ",#tier_blanc," CB ",#blue)
    serout aff,T2400,(254,192,"tps B ",#tps_bleu)
loop while blue <> tier_blanc
;________________________________________
;equilibrage du vert
do
if green < tier_blanc then  inc tps_vert endif
if green >= tier_blanc then dec tps_vert endif

high S2 high S3
pause 20
count mesure,tps_vert,green
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"1/3 ",#tier_blanc," nCV ",#green)
    serout aff,T2400,(254,192,"tps V ",#tps_vert)
loop while green <> tier_blanc

high buzz
pause 10
low buzz; fin de chauffe

;________________________________________
;fin programme equilibrage


        
;calcule des constantes################
do
constA = tier_blanc*10

constA = constA /constB
if constA > 255 then inc constB endif
serout aff,T2400,(254,1)'effacement de l'ecran
serout aff,T2400,(254,128,"A",#constA,"B",#constB)
pause 500
loop while constA > 255

    
serout aff,T2400,(254,1)'effacement de l'ecran
serout aff,T2400,(254,128,"A",#constA,"B",#constB)
high buzz
pause 10
low buzz; fin de chauffe
do
if pinB.1 = 1 then exit;bouton vert
loop;   
    
    
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"mesure ")
    serout aff,T2400,(254,192,"presse BP VERT")
do
if pinB.1 = 1 then exit;bouton vert
loop;

;boucle mesure

do



pause 100 ;chauffe led

low S2 low S3 ;S2 L S3 L = mesure par photosite rouge
count mesure,tps_rouge,red
red = red *10
red = red / constB


high S3 ;S2 L S3 H = mesure par photosite bleu
pause 20
count mesure,tps_bleu,blue
blue = blue*10
blue = blue/ constB


high S2 ; S2 H S3 H = mesure par photosite vert
pause 20
count mesure,tps_vert,green
green = green*10
green = green /constB




pause 10


    'affichage des mesures
        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"contsB ",#constB,"CR ",#red)
    serout aff,T2400,(254,192,"CG ",#green," CB ",#blue)
    pause 100
    sertxd (#red,59,#green,59,#blue,13,10) ; transmission de la valeur b0
; 13 permet un retour chariot et 10 un saut de ligne
    pause 100

red = 0
green = 0
blue = 0
;pause  lecture des donnees
do
if pinB.1 = 1 then exit
loop

;sequence modif chaud froid



    'affichage
        
    serout aff,T2400,(254,1)'effacement de l'ecran
    serout aff,T2400,(254,128,"modif chaud/froid" )
    serout aff,T2400,(254,192,"rge=ch/Ble=frd")
    pause 100
    

do
    if pinB.0=1 then gosub chaud
    if pinB.2 =1 then gosub froid
    if pinB.1 = 1 then exit

loop




loop

chaud:
tps_rouge = tps_rouge+1
tps_bleu = tps_bleu-1

high buzz
pause 10
low buzz; fin de chauffe



return

froid:
tps_bleu  = tps_bleu+1
tps_rouge = tps_rouge-1

high buzz
pause 20
low buzz; fin de chauffe
high buzz
pause 10
low buzz; fin de chauffe

return
 

PieM

Senior Member
l’objectif que je me suis fixé est de comparer deux échantillons de couleur, l’appareil pourrait
indiquer la dérive de l’un par rapport à l’autre, plus de jaune moins de bleu par exemple .
En s’expriment bien sûr en %CMJN
Je ne me prononcerai pas sur le fond, car comme déjà dit, une comparaison peut s'effectuer avec un instrument qui n'est pas juste: il est inutile de traduire en kg les résultats d'une balance graduée en pounds et fausse, pour savoir s'il faut rajouter ou enlever du poids.
De plus concernant les mesures faites, on ne sait pas ce qui est mesuré, ni sur votre capteur, ni sur les scanners.
Sur vos échantillons, le rouge par exemple, selon les zones, la valeur rouge des pixels, (exprimée en % bien sûr), varie de 59% à 80% !
Et entre deux écrans, la même valeur RVB ne restitue pas visuellement les mêmes couleurs .

Sur la forme, concernant le programme, je pense que vous auriez intérêt à le structurer sous une forme programme principal faisant appel à des sous programmes. Il y gagnerait en logique et en clarté. Vous différencieriez les phases d'étalonnage et celles de mesures.

C'est très bien de nommer des variables mais utilisez les ! (if pinB.1 = 1 )
Vous êtes souvent en attente de l'appui sur ce bouton; utilisez alors une directive de substitution placée en début de programme (après la définition des variables) ce qui permet de remplacer
do
if pinB.1 = 1 then exit
loop;

par
attente_BPvert

en ayant défini
#define attente_BPvert do loop while BP_vert = 0

Je ne suis pas entré dans les détails, et je laisse à d'autres le soin d'apporter leur contribution ! :)
 

DIDIER17

Active member
Bonsoir BESQUEUT , Bonsoir PieM et merci pour vos contributions.

Microscopique remarque :
Oui vous avez raison, c'est vraiment très mal écrit, de plus j'empile les fonctions comme des cubes.
c'est juste un programme pour faire des essais.

Sur vos échantillons, le rouge par exemple, selon les zones, la valeur rouge des pixels, (exprimée en % bien sûr), varie de 59% à 80% !
Et entre deux écrans, la même valeur RVB ne restitue pas visuellement les mêmes couleurs .
j'utilise la fonction moyenne de zone dans Inkscape, il y a le même outil dans photoshop. avec un "clic and drag" on trace un cercle de mesure
le programme fait la moyene de la zone: somme de chaque canal (R,V,B) diviser par le nombre de pixel contenu dans la zone.

Merci pour vos retours toujours instructif
Bonne soirée
 
Top