Différences entre versions de « TSL2561-Utiliser »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{TSL2561-NAV}}
 
{{TSL2561-NAV}}
 +
 +
== Installer les librairies ==
  
 
{{bloc-etroit|text=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. [http://mchobby.be/PrestaShop/TSL2561.pdf 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.
 
{{bloc-etroit|text=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. [http://mchobby.be/PrestaShop/TSL2561.pdf 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.
Ligne 10 : Ligne 12 :
 
Redémarrez l'IDE Arduino
 
Redémarrez l'IDE Arduino
  
Now you can run the '''File->Examples->Adafruit_TSL2561->sensorapi''' example program which will read and calculate the lux readings for you.
+
== Les exemples ==
  
Open up the serial monitor at 9600 baud to see the measurements. Use a lamp or your hand to illuminate/shade the sensor to see the values change.
+
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.
  
 
[[Fichier:tsl2561-utiliser-01.png]]
 
[[Fichier:tsl2561-utiliser-01.png]]
  
The library is fairly simple to use. The first line of code in the example is the 'constructor' where you can supply the '''I2C ADDR''' (in case you want to change it), and a unique ID to attach to this sensor (you can just leave this to the default value of 12345 for now). By modifying the I2C address we can have up to three TSL2561 sensors connected on the same board:
+
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:
  
  <nowiki>// The address will be different depending on whether you leave
+
  <nowiki>// L'adresse sera différent selon que vous laissez
// the ADDR pin float (addr 0x39), or tie it to ground or vcc. In those cases
+
// la broche ADDR flottante (addr 0x39), ou raccordée sur la
// use TSL2561_ADDR_LOW (0x29) or TSL2561_ADDR_HIGH (0x49) respectively
+
// 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);</nowiki>
 
Adafruit_TSL2561 tsl = Adafruit_TSL2561(TSL2561_ADDR_FLOAT, 12345);</nowiki>
  
Next up, you will want to configure the sensor with the '''gain''' and '''integration time'''.
+
Ensuite, vous aurez besoin de configurer le senseur avec '''gain''' et '''integration time''' (temps d'intégration).
  
You can have either a gain of 0 (no extra gain, good in low light situations) or a gain of 16 which will boost the light considerably in dim situations.
+
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.
  
You can also change the integration time, which is how long it will collect light data for. The longer the integration time, the more precision the sensor has when collecting light samples.
+
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.
  
New to v2.0 of the driver, there is also an '''auto-gain''' option that is useful when measuring in mixed lighting-situations. This will automatically enable or disable the gain depending on the light level. This is still an experimental feature and the trigger levels to switch may need to be tweeked, but this should be useful to collect light both indoors and outdoors without having to change the code yourself.  
+
== 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.  
  
  <nowiki>   /**************************************************************************/
+
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.
    /*
+
 
    Configures the gain and integration time for the TSL2561
+
  <nowiki>/**************************************************************************/
    */
+
/*
    /**************************************************************************/
+
Configurer le gain et temps d'intégration pour le TSL2561
    void configureSensor(void)
+
*/
    {
+
/**************************************************************************/
     /* You can also manually set the gain or enable auto-gain support */
+
void configureSensor(void)
     // tsl.setGain(TSL2561_GAIN_1X); /* No gain ... use in bright light to avoid sensor saturation */
+
{
     // tsl.setGain(TSL2561_GAIN_16X); /* 16x gain ... use in low light to boost sensitivity */
+
     /* Vous pouvez également activer manuellement le gain ou activer le support auto-gain */
     tsl.enableAutoGain(true); /* Auto-gain ... switches automatically between 1x and 16x */
+
     // tsl.setGain(TSL2561_GAIN_1X); /* pas de gain ... a utiliser avec le lumière brillante pour éviter la saturation du senseur */
     /* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */
+
     // tsl.setGain(TSL2561_GAIN_16X); /* gain de 16x ... a utiliser en situation de faible luminosité pour booster la sensibilité */
     tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */
+
     tsl.enableAutoGain(true); /* Auto-gain ... passe automatiquement le gain entre 1x et 16x */
     // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* medium resolution and speed */
+
     /* Changer le temps d'intégration permet d'augmenter la résolution du senseur (402ms = 16-bit de données) */
     // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit data but slowest conversions */
+
     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 */
 
      
 
      
     /* Update these values depending on what you've set above! */
+
     /* N'oubliez pas de modifier les textes ci-dessous en fonction de la configuration
 +
      utilisée ci-dessus! */
 
     Serial.println("------------------------------------");
 
     Serial.println("------------------------------------");
 
     Serial.print ("Gain: "); Serial.println("Auto");
 
     Serial.print ("Gain: "); Serial.println("Auto");
     Serial.print ("Timing: "); Serial.println("13 ms");
+
     Serial.print ("Temps: "); Serial.println("13 ms");
 
     Serial.println("------------------------------------");
 
     Serial.println("------------------------------------");
    }</nowiki>
+
}</nowiki>
  
By default, the driver will return light in standard SI lux units, which are a result of some complex calculations based on both photo diodes on the TSL2561 (one for full spectrum and one for IR). The sensitivity of the two diodes can be seen in the chart below:
+
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:
  
 
[[Fichier:TSL2561-Intro-02.jpg|350px]]
 
[[Fichier:TSL2561-Intro-02.jpg|350px]]
  
When you're ready to get your measurement in standard SI lux units, simply call getEvent with a reference to the 'sensors_event_t' object where the sensor data will be stored. This example assumes we are using the 'tsl' instance of Adafruit_TSL2561 at the top of the example code:  
+
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':  
  
  <nowiki>    /* Get a new sensor event */
+
  <nowiki>    /* Obtenir un nouvel évènement du senseur */
 
     sensors_event_t event;
 
     sensors_event_t event;
 
     tsl.getEvent(&event);
 
     tsl.getEvent(&event);
     /* Display the results (light is measured in lux) */
+
     /* Affiche le résultat (la lumière est mesurée en lux) */
 
     if (event.light)
 
     if (event.light)
 
     {
 
     {
    Serial.print(event.light); Serial.println(" lux");
+
        Serial.print(event.light); Serial.println(" lux");
 
     }
 
     }
 
     else
 
     else
 
     {
 
     {
    /* If event.light = 0 lux the sensor is probably saturated
+
        /* Si event.light = 0 lux alors le senseur est probablement saturé
    and no reliable data could be generated! */
+
          et aucune donnée fiable ne peut être obtenu! */
    Serial.println("Sensor overload");
+
        Serial.println("Sensor saturé");
 
     }</nowiki>
 
     }</nowiki>
  
This function will return a reading in SI lux units, which is probably the easiest unit to understand when working with light.
+
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.
  
If you wish to manually read the individual photo diodes, though, you can still do this in the latest library by calling the '''getLuminosity''' function, and passing in two variables where the sensor data will be stored:
+
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:
  
 
  <nowiki>    uint16_t broadband = 0;
 
  <nowiki>    uint16_t broadband = 0;
 
     uint16_t infrared = 0;
 
     uint16_t infrared = 0;
 
      
 
      
     /* Populate broadband and infrared with the latest values */
+
     /* Collecte les dernières valeurs dans kes variables broadband et infrared */
 
     getLuminosity (&broadband, &infrared);</nowiki>
 
     getLuminosity (&broadband, &infrared);</nowiki>
  
That's it! The example should be easy to understand and work into your own projects from here!
+
Voila! L'exemple devrait être facile a comprendre et facile à intégrer dès maintenant dans vos propres projets!
  
 
{{TSL2561-TRAILER}}
 
{{TSL2561-TRAILER}}

Version actuelle datée du 26 mai 2013 à 21:55

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.

Tsl2561-utiliser-01.png

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:

TSL2561-Intro-02.jpg

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.