samedi 8 octobre 2016

Capteur de lumière TSL2561 et Arduino

Je vous présente aujourd'hui une courte marche à suivre pour utiliser un module capteur de lumière TSL2561 avec une carte Arduino.

Lorsqu'on veut qu'un circuit électronique fasse la différence entre la lumière et l'obscurité (pour qu'une veilleuse s'allume automatiquement quand il fait noir, ou pour capter le signal pulsé d'une télécommande infrarouge, par exemple) l'utilisation d'une photorésistance ou d'un phototransistor est tout à fait appropriée.

Mais si vous désirez mesurer une intensité lumineuse, vous obtiendrez probablement de meilleurs résultats en utilisant un capteur plus sophistiqué.  Le TSL2561 est un capteur numérique (protocole I2C) qui indique l'intensité lumineuse en lux, de façon à imiter la réponse de l'oeil humain.  Pour ce faire, le TSL2561 comporte deux photodiodes: l'une d'entre elles mesure à la fois la lumière visible et l'infrarouge, alors que l'autre mesure exclusivement l'infrarouge.  Une équation empirique permet de calculer l'intensité lumineuse en lux à partir de ces deux mesures.

Le module

Le circuit intégré lui-même est liliputien:  ça vaut vraiment la peine de se procurer un module (breakout) auquel il suffira de souder une rangée de 5 pins.  Vous pouvez le trouver sur eBay pour $2 environ, à moins que vous préfériez vous procurer l'original développé par Sparkfun.

Les 5 connecteurs sont identifiés aux verso du module:

  • 3V3  et GND servent pour l'alimentation du module.
  • SCL et SDA servent à la communication i2C
  • INT peut être utilisée pour envoyer un "interrupt" au microcontrôleur, signifiant qu'une mesure a été prise.  Je n'ai pas utilisé cette option.
Connexions à l'Arduino

Rien de très surprenant ici, si vous avez déjà utilisé un périphérique i2c auparavant:  les pins i2c de l'Arduino Uno sont A4 (SDA) et A5 (SCL) (mais elles sont différentes sur d'autres modèle comme le Mega, par exemple)­.  Le breakout doit être alimenté en 3,3 V, mais il n'est pas nécessaire de convertir le signal de communication (qui sera, lui, à 5 V).
  • 3V3 du TSL2561 à 3V3 de l'Arduino Uno
  • GND du TSL2561 à GND de l'Arduino Uno
  • SCL du TSL2561 à A5 de l'Arduino Uno
  • SDA du TSL2561 à A4 de l'Arduino Uno

Installation de la bibliothèque

Sparkfun a mis au point une bibliothèque qui nous facilitera la tâche pour la phase de codage de l'Arduino.  Après avoir téléchargé la bibliothèque sur le site github, vous devrez l'installer manuellement (le menu "Ajouter une bibliothèque .zip" de l'IDE Arduino ne fonctionne pas pour ce fichier).   Vous devez donc décompresser le fichier "TSL2561_Luminosity_Sensor.zip", renommer son dossier "Librairies" à votre convenance, puis déplacer ce dossier à l'intérieur du dossier "Librairies" de votre sketchbook Arduino.

Utilisation du sketch d'exemple

Si votre bibliothèque a été convenablement installée, vous devriez voir dans le menu "Fichier / Exemples" une nouvelle catégorie intitulée "Sparkfun TSL2561", contenant un exemple intitutlé "SparkFunTSL2561Example".


Il s'agit d'ouvrir ce fichier, de le téléverser dans votre Arduino et d'activer le moniteur série pour voir apparaître les mesures.


"data0" et "data1" représentent respectivement les données brutes mesurées par chacun des deux capteurs, alors que le 3e nombre indique l'intensité lumineuse calculée en lux.  La mention "good" indique qu'aucun des deux capteurs n'était saturé.



Modifications au sketch d'exemple

Deux variables peuvent être modifiées pour que le sketch réponde mieux à vos besoins:

La variable booléenne "gain" est réglée par défaut à "0", ce qui est approprié pour mesurer des intensité lumineuses élevées.  Si vous désirez mesurer des intensités lumineuses plus faibles, vous pouvez régler cette variable à "1", ce qui multiplie le gain par 16.

L'entier "time" permet de régler le temps d'intégration (le temps pendant lequel le capteur compile une série de mesures qui seront utilisées dans le calcul).  Par défaut, ce temps d'intégration est de 402 ms, mais vous pouvez le régler à 13,7 ms (si time = 0), 101 ms (si time = 1),  402 ms (si time = 2) ou réglage manuel (si time = 3).

Vérifiez l'état de la variable booléenne "good":  si elle devient nulle, ça indique qu'au moins un des capteurs a saturé.  Il faut alors réduire le gain, ou diminuer le temps d'intégration.

Sources:  ce tutoriel rédigé par Sparkfun m'a été très utile.

Yves Pelletier   (TwitterFacebook)

1 commentaire: