TSL2561-Utiliser
Installer les librairies
Pour utiliser ce senseur, il faut mettre en oeuvre beaucoup de fonctions mathématiques pour calculer les Lux. Il faut avouer que cela n'est pas franchement marrant. Vous pouvez prendre connaissance de ces transformations mathématiques dans la fiche technique mais ce n'est ni vraiment intuitif, ni très éducatif - c'est juste la façon dont le senseur fonctionne. AdaFruit a donc écrit une librairie Arduino pour prendre soin de toute cette complexité à notre place.
Vous pouvez trouver la librairie Arduino ici sur github pour l'installer. Cliquez sur le bouton "ZIP" pour télécharger l'archive ZIP compressée et installez la. Notre tutoriel vous aidera à installer une telle librairie si vous n'avez jamais installé un librairie Arduino.
Vous aurez également besoin de la librairie des senseurs AdaFruit (Adafruit Sensor Library). Si vous ne l'avez pas encore installée, vous pouvez télécharger l'archive compressée "ZIP" depuis le GitHub d'AdaFruit. Installez là comme vous l'avez fait pour l'autre librairie.
Redémarrez l'IDE Arduino
Les exemples
Vous pouvez maintenant exécuter le programme d'exemple File->Examples->Adafruit_TSL2561->sensorapi qui lit et calcule le nombre de Lux pour vous.
Ouvrez le moniteur série à 9600 baud pour voir les mesures. Utilisez une lampe (ou votre main) pour illuminer (ou ombrager) le senseur et voir la valeur changer.
La librairie est vraiment très simple à utiliser. La première ligne du code d'exemple c'est le constructeur (constructor) où il est possible d'indiquer l'adresse I2C I2C ADDR (dans le cas où vous voudriez la modifier), et un identificateur unique (ID) à attacher au senseur (vous pouvez laisser la valeur par défaut de 12345 pour le moment). Il est possible de brancher jusqu'à 3 senseur TSL2561 sur un même carte en modifiant l'adresse I2C:
// L'adresse sera différent selon que vous laissez // la broche ADDR flottante (addr 0x39), ou raccordée sur la // masse ou vcc. Dans ces cas, utilisez respectivement // TSL2561_ADDR_LOW (0x29) ou TSL2561_ADDR_HIGH (0x49) respectively Adafruit_TSL2561 tsl = Adafruit_TSL2561(TSL2561_ADDR_FLOAT, 12345);
Ensuite, vous aurez besoin de configurer le senseur avec gain et integration time (temps d'intégration).
Vous pouvez avoir soit un gain de 0 (pas de gain supplémentaire, excellent pour les situations de fortes/moyennes luminosités) ou un gain de 16 qui boostera considérablement la lumière dans les situation de lumière très diffuse.
Vous pouvez également modifier le temps d'intégration qui représente le temps utilisé pour collecter les données de luminosité. Plus le temps d'intégration est grand et meilleur sera la précision du senseur lorsqu'il échantillonnera la lumière.
Auto-gain
La version v2.0 introduit une nouvelle fonctionnalité qui est l'option auto-gain. Elle est vraiment utile lorsque les mesures sont effectuées dans des situations mélangeant des cas de luminosités diffuse et luminosité normale.
Auto-gain activera/désactivera automatiquement le gain en fonction du niveau d'illumination. Il s'agit toujours d'une fonctionnalité expérimentale et utilise différents niveaux de luminosités pour activer (adapter) le gain. Cela devrait être utile pour échantillonner la lumière en intérieur et extérieur sans devoir adapter/modifier le code.
/**************************************************************************/ /* Configurer le gain et temps d'intégration pour le TSL2561 */ /**************************************************************************/ void configureSensor(void) { /* Vous pouvez également activer manuellement le gain ou activer le support auto-gain */ // tsl.setGain(TSL2561_GAIN_1X); /* pas de gain ... a utiliser avec le lumière brillante pour éviter la saturation du senseur */ // tsl.setGain(TSL2561_GAIN_16X); /* gain de 16x ... a utiliser en situation de faible luminosité pour booster la sensibilité */ tsl.enableAutoGain(true); /* Auto-gain ... passe automatiquement le gain entre 1x et 16x */ /* Changer le temps d'intégration permet d'augmenter la résolution du senseur (402ms = 16-bit de données) */ tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* Rapide mais faible résolution */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* vitesse et résolution moyenne */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit de donnée mais conversion la plus lente */ /* N'oubliez pas de modifier les textes ci-dessous en fonction de la configuration utilisée ci-dessus! */ Serial.println("------------------------------------"); Serial.print ("Gain: "); Serial.println("Auto"); Serial.print ("Temps: "); Serial.println("13 ms"); Serial.println("------------------------------------"); }
Par défaut, le pilote retour la lumière en Lux (le Lux est une unité SI du standard internationale). Ce résultat est le résultat de calculs complexes basés sur les deux photo diodes du TSL2561 (une pour le spectre lumineux entier et l'autre pour le spectre infrarouge). La sensibilité des deux diodes peut être examiné sur le graphe ci-dessous:
Lorsque vous êtes prêt à effectuer vos mesures en Lux, appelez simplement getEvent avec la référence vers un objet 'sensors_event_t' où les données du senseur seront stockées. Cet exemple part du principe que nous utilisons une instance Adafruit_TSL2561 déjà initialisée et nommée 'tsl':
/* Obtenir un nouvel évènement du senseur */ sensors_event_t event; tsl.getEvent(&event); /* Affiche le résultat (la lumière est mesurée en lux) */ if (event.light) { Serial.print(event.light); Serial.println(" lux"); } else { /* Si event.light = 0 lux alors le senseur est probablement saturé et aucune donnée fiable ne peut être obtenu! */ Serial.println("Sensor saturé"); }
Cette fonction retourne une lecture en unité internationale (SI). Le Lux est probablement l'unité la plus facule à comprendre lorsque l'on travaille avec la lumière.
Si vous désirez lire manuellement les valeurs individuelles des photo diodes, vous pouvez le faire dans la dernière version de la librairie en appelant la fonction getLuminosity et en passant deux variables où les données du senseur seront stockées:
uint16_t broadband = 0; uint16_t infrared = 0; /* Collecte les dernières valeurs dans kes variables broadband et infrared */ getLuminosity (&broadband, &infrared);
Voila! L'exemple devrait être facile a comprendre et facile à intégrer dès maintenant dans vos propres projets!
Réalisé par LadyAda Pour AdaFruit Insdustries.
Source: [1]
Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.