A) Fonctionnement du système :
Le capteur contient en réalité un émetteur (la led RGB) et un récepteur (la photorésistance). Il faut aussi savoir que la liaison entre les deux (pièce 3D) influe beaucoup sur les mesures, par exemple au début notre pièce imprimée était noire ce qui faussait toutes les valeurs car la plupart de la lumière était absorbée par la pièce. La version actuelle est donc transparente, au début ça ne fonctionnait pas non plus puis l’ajout d’un revêtement d’aluminium autour de la photorésistance et de la led a totalement réglé le problème. Pour expliquer de façon synthétique le fonctionnement du capteur il y aura quelques détails qui seront ignorés (mais disponible dans le code ici).
La calibration:
Tout d’abord, le capteur se met route au bout de quelques secondes après avoir appuyé sur le bouton de calibration la led RGB va émettre du vert, du bleu et du rouge. A chaque couleur émise par la led, la photorésistance va effectuer 10 mesures à la suite et faire une moyenne des résultats allant de 0 à 1023 (si elle prend plusieurs mesures c’est pour éviter les problèmes si il y a une erreur sur une mesure) . La carte Arduino enregistre ces 3 valeurs pour chaque couleur dans 3 variables différentes. Ces variables vont alors être étalonnées de 0 à 100 grâce à une fonction du code pour obtenir un pourcentage. Selon le même principe, il faut ensuite placer le capteur sur une surface noire. Ce processus a permis au capteur de connaître les valeurs minimales et maximales d’absorption (noir et blanc) de l’environnement ambiant pour les 3 couleurs primaires. Si on change d’environnement il faut impérativement recalibrer l’appareil.
La mesure :
Le principe est semblable a la calibration mais plus rapide. Une fois le bouton appuyé le capteur allume la led avec les 3 couleurs primaires et prend les valeurs de la photorésistance pour chacune des couleurs. Puis la carte Arduino fait le calcul suivant :
si on prend le bleu par exemple :
(valeurBleu-maxNoirDuBleu)/(maxBlancBleu-maxNoirBleu)*255
= valeur du bleu lors de cette mesure allant de 0 à 255.
Ce code bleu de 0 à 255 est fréquemment utilisé en informatique. Dans ce cas, on le convertit en pourcentage, c’est plus significatif pour une personne. Puis la procédure est répétée deux fois supplémentaire pour le rouge et le vert. En fonction des valeurs RGB en pourcentage, le programme défini si la valeur est plutôt rouge, jaune, verte, bleu, etc..
Le seul problème dans le cas ou le programme va dire une couleur est que le programmeur défini dans quels cas une mesure est d’une certaine couleur. Vous devez sans doute penser “mais du coup le capteur voit comme l’humain ?” Sauf que la calibration modifie cette vision. Le fonctionnement n’est pas le même que pour l’humain car le capteur émet ses propres couleurs pour pouvoir se repérer. Il faut s’imaginer que à la base le capteur est aveugle et qu’il se repère sur ce qu’il émet. Parfois les valeurs affichées en pourcentage indiquent des nuances de couleurs, mais le programme ne va pas reconnaître la couleur car il fois que la couleur soit plus prononcée.
B) Fonctionnement du point de vue utilisateur :
1) Calibration
Lorsque l’on souhaite prendre des mesures de couleurs, on doit tout d’abord calibrer le capteur de couleurs. Pour cela, il faut appuyer sur un bouton destiné à la calibration et suivre les instructions de l’écran LCD (poser le capteur sur une feuille blanche). Au bout de quelques secondes il s’illumine et prend les mesures d’intensités lumineuses maximales. On répète le processus une deuxième fois sur une feuille noire cette fois ci pour obtenir les valeurs d’intensités lumineuses minimales (car l’absorption est maximale). Le capteur est désormais calibré et prêt à prendre des mesures.
2) Mesures
Après la calibration du capteur dans un certain environnement, il est enfin prêt pour pouvoir analyser des couleurs. Il suffit donc d’appuyer sur l’autre bouton, celui qui permet de lancer la procédure de mesure. L’arduino se charge d’allumer la led RGB et de prendre les mesures d’intensité de lumière et de les interpréter.