MicroPython - capter les couleurs avec le TCS34725
Cela faisait un moment qu'il n'avait plus été question de pilote pour MicroPython... commençons avec un capteur plutôt insolite, le TCS34725 qui permet de capturer "des couleurs".... sur que ce n'est pas commun!
Nous avons donc un nouveau pilote MicroPython tcs34725 (GitHub, backport CircuitPython) est maintenant disponible vos cartes MicroPython.
A brancher très simplement sur le port I2C de votre PyBoard (ou autre carte MicroPython).
Le code est assez simple à mettre en oeuvre
Lecture en Kelvin
Il faut savoir qu'une couleur à aussi une température s'exprimant en degrés Kelvin, c'est par ailleurs l'unité exploitée sur pour les phares Xenon des voitures pour indiquer la couleurs du feux (sachant que les jeunes apprécient le blanc froid... avec une nette tendance vers le bleu).
Il existe par ailleurs des tableaux de conversions Kelvin <-> RGB comme ici
Lecture de la couleur en RGB
Une lecture en Kelvin, ce n'est pas très pratique... surtout pour nous les Makers qui avons l'habitude de travailler en RGB888 (avec des valeurs de 0 à 255 pour chaque couleur).
Voici donc un autre script permettant d'obtenir la valeur en RGB.
Alors il y a quelques petites choses à savoir:
Capteur TCS34725 (sur Arduino dans le cas présent) |
Nous avons donc un nouveau pilote MicroPython tcs34725 (GitHub, backport CircuitPython) est maintenant disponible vos cartes MicroPython.
A brancher très simplement sur le port I2C de votre PyBoard (ou autre carte MicroPython).
Source: pilote MicroPython tcs34725 |
Lecture en Kelvin
import time from machine import I2C from tcs34725 import TCS34725 # Pyboard - SDA=Y10, SCL=Y9 i2c = I2C(2) # ESP8266 sous MicroPython # i2c = I2C(scl=Pin(5), sda=Pin(4)) sensor = TCS34725(i2c) # boucle principale lisant les ° Kelvin et les imprimants toutes les secondes. while True: # Lire la température de la couleur et luminosité en lux. temp = sensor.color_temperature lux = sensor.lux print('Temperature: {0}K Lux: {1}'.format(temp, lux) ) time.sleep(1)
Il faut savoir qu'une couleur à aussi une température s'exprimant en degrés Kelvin, c'est par ailleurs l'unité exploitée sur pour les phares Xenon des voitures pour indiquer la couleurs du feux (sachant que les jeunes apprécient le blanc froid... avec une nette tendance vers le bleu).
Il existe par ailleurs des tableaux de conversions Kelvin <-> RGB comme ici
Lecture de la couleur en RGB
Une lecture en Kelvin, ce n'est pas très pratique... surtout pour nous les Makers qui avons l'habitude de travailler en RGB888 (avec des valeurs de 0 à 255 pour chaque couleur).
Voici donc un autre script permettant d'obtenir la valeur en RGB.
import time from machine import I2C from tcs34725 import TCS34725 # Pyboard - SDA=Y10, SCL=Y9 i2c = I2C(2) # ESP8266 sous MicroPython # i2c = I2C(scl=Pin(5), sda=Pin(4)) sensor = TCS34725(i2c) sensor.integration_time = 200 # Temps d'intégration plus grand = plus d'information collectée def gamma_255( x ): """ Appliquer une correction gamma sur une valeur entre 0 - 255 """ x /= 255 x = pow(x, 2.5) x *= 255 return int(x) if x < 255 else 255 def gamma_color( color ): """ Appliquer la correction gamma à un tuple de couleur rgb. """ return gamma_255(color[0]), gamma_255(color[1]), gamma_255(color[2]) while True: # Lecture de la couleur sur le capteur rgb = sensor.color_rgb_bytes # color_rgb_bytes gamma_rgb = gamma_color( rgb ) # Appliquer correction Gamma print( "rgb : %s gamma_rgb : %s" % (rgb, gamma_rgb) ) time.sleep(1)
Alors il y a quelques petites choses à savoir:
- Position de l'objet: Il faut bien positionner l'objet pour renvoyer de la lumière colorée vers le capteur. C'est vraiment un point très sensible.
- Temps d'intégration: J'ai augmenter le temps d'intégration (pour collecter plus de donnée avec le capteur)... sans cela, les couleurs sont assez fade... je pense qu'il faudrait encore essayer des temps d'intégration plus important.
- Le gain: Modifier le gain n'a pas vraiment apporter de changement au résultat.
- Correction Gamma: enfin, l'oeil ne percevant pas la lumière de façon linéaire, la fonction gamma a été ajoutée pour corriger chacune des couleurs de base.
- Le breakout TCS34725 est disponible de stock chez MCHobby
- La Pyboard originale et Pyboard-D aussi
Écrire un commentaire