2/11/2024

Code exemple : Capteur de luminosité TSL2561



Pour utiliser ce capteur et calculer les lux, il faut effectuer des calculs compliqués et peu agréables. Vous pouvez consulter les formules dans la fiche technique, mais en réalité, ce n'est ni intuitif ni éducatif - c'est simplement le fonctionnement du capteur. Nous avons donc pris soin de faire tous les calculs compliqués et de les regrouper dans une bibliothèque Arduino pratique. Installation de la bibliothèque Adafruit_TSL2561 Pour commencer à lire les données du capteur, vous devrez installer la bibliothèque Adafruit_TSL2561 (code disponible sur notre dépôt GitHub). Elle est disponible dans le gestionnaire de bibliothèques Arduino, nous vous recommandons donc de l'utiliser. Dans l'IDE, ouvrez le gestionnaire de bibliothèques... Et tapez "adafruit tsl2561" pour localiser la bibliothèque. Cliquez sur "Installer" Installez Adafruit_Sensor La bibliothèque TSL2561 utilise le backend de support Adafruit_Sensor afin que les lectures puissent être normalisées entre les capteurs. Recherchez le gestionnaire de bibliothèques pour Adafruit Unified Sensor et installez-le également (vous devrez peut-être faire défiler un peu) Maintenant, vous pouvez exécuter le programme d'exemple File->Examples->Adafruit_TSL2561->sensorapi qui lira et calculera les lectures de lux pour vous. Ouvrez le moniteur série à 9600 bauds pour voir les mesures. Utilisez une lampe ou votre main pour éclairer/ombrer le capteur afin de voir les valeurs changer. La bibliothèque est assez simple à utiliser. La première ligne de code dans l'exemple est le 'constructeur' où vous pouvez fournir l'adresse I2C (au cas où vous voudriez la changer), et un identifiant unique à attacher à ce capteur (vous pouvez simplement laisser la valeur par défaut de 12345 pour l'instant). En modifiant l'adresse I2C, nous pouvons connecter jusqu'à trois capteurs TSL2561 sur la même carte : // The address will be different depending on whether you leave // the ADDR pin float (addr 0x39), or tie it to ground or vcc. In those cases // use TSL2561_ADDR_LOW (0x29) or TSL2561_ADDR_HIGH (0x49) respectively Adafruit_TSL2561 tsl = Adafruit_TSL2561(TSL2561_ADDR_FLOAT, 12345); Ensuite, vous voudrez configurer le capteur avec le gain et le temps d'intégration. Vous pouvez choisir un gain de 0 (pas de gain supplémentaire, bon dans les situations de faible luminosité) ou un gain de 16 qui augmentera considérablement la lumière dans les situations sombres. Vous pouvez également changer le temps d'intégration, c'est-à-dire la durée pendant laquelle il collectera les données lumineuses. Plus le temps d'intégration est long, plus le capteur est précis lors de la collecte des échantillons de lumière. Nouveau dans la version 2.0 du pilote, il y a également une option de gain automatique qui est utile lors de la mesure dans des situations d'éclairage mixte. Cela activera ou désactivera automatiquement le gain en fonction du niveau de lumière. Il s'agit toujours d'une fonction expérimentale et les seuils de déclenchement pour changer peuvent nécessiter des ajustements, mais cela devrait être utile pour collecter la lumière à la fois à l'intérieur et à l'extérieur sans avoir à modifier le code vous-même. /**************************************************************************/ /* Configures the gain and integration time for the TSL2561 */ /**************************************************************************/ void configureSensor(void) { /* You can also manually set the gain or enable auto-gain support */ // 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 */ tsl.enableAutoRange(true); /* Auto-gain ... switches automatically between 1x and 16x */ /* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */ tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* medium resolution and speed */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit data but slowest conversions */ /* Update these values depending on what you've set above! */ Serial.println("------------------------------------"); Serial.print ("Gain: "); Serial.println("Auto"); Serial.print ("Timing: "); Serial.println("13 ms"); Serial.println("------------------------------------"); } Par défaut, le pilote renverra la lumière en unités lux SI standard, qui sont le résultat de calculs complexes basés sur les deux photodiodes sur le TSL2561 (une pour le spectre complet et une pour l'infrarouge). La sensibilité des deux photodiodes peut être vue dans le graphique ci-dessous : Lorsque vous êtes prêt à obtenir votre mesure en unités lux SI standard, appelez simplement getEvent avec une référence à l'objet 'sensors_event_t' où les données du capteur seront stockées. Cet exemple suppose que nous utilisons l'instance 'tsl' de Adafruit_TSL2561 en haut du code exemple : /* Get a new sensor event */ sensors_event_t event; tsl.getEvent(&event); /* Display the results (light is measured in lux) */ if (event.light) { Serial.print(event.light); Serial.println(" lux"); } else { /* If event.light = 0 lux the sensor is probably saturated and no reliable data could be generated! */ Serial.println("Sensor overload"); } Cette fonction renverra une lecture en unités lux SI, ce qui est probablement l'unité la plus facile à comprendre lorsqu'on travaille avec la lumière. Cependant, si vous souhaitez lire manuellement les photodiodes individuelles, vous pouvez toujours le faire dans la dernière bibliothèque en appelant la fonction getLuminosity, et en passant deux variables où les données du capteur seront stockées : uint16_t broadband = 0; uint16_t infrared = 0; /* Populate broadband and infrared with the latest values */ getLuminosity (&broadband, &infrared); Voilà ! L'exemple devrait être facile à comprendre et à intégrer dans vos propres projets à partir de maintenant !

Aucun commentaire:

Enregistrer un commentaire