Convertir un capteur de luminosité TSL2561 en capteur IR Infra Rouge

Bonjour,
J’avais demandé de l’aide pour convertir le capteur de luminosité TSL2561 en capteur Infra rouge. En effet, ce capteur contient 2 capteurs : l’un capte la lumière visible mais également l’IR, un autre ne capte que l’IR. Il y a tout un calcul dans la librairie permettant de rendre une estimation de la luminosité débarrassée de la partie IR.

Pour un projet de terminale STI2D, j’ai cherché à utiliser ce capteur pour évaluer les émissions IR d’un radiateur rayonnant. Voici ce que j’ai fait :

  • concernant le fichier .h , j’ai mis la ligne " uint16_t ch0, ch1; " dans la rubrique “Public” alors qu’elle était dans la rubrique “Private” (ce qui empêchait de pouvoir lire les données ch0 et ch1 depuis le pgm Arduino).
  • pour ne pas risquer de polluer cette librairie, j’en ai créé une autre que j’ai appelée TSL2561IR, en changeant systématiquement TSL2561 par TSL2561IR à l’intérieur des fichiers de la librairie ainsi que leur nom.
  • j’ai chargé cette nouvelle librairie.
  • et voici ce que j’ai mis dans le pgm Arduino (ch0 : représenter la somme de la luminosité et de l’énergie IR, ch1 concerne seulement l’IR):

#include"Arduino.h" // Librairie Arduino standard
#include <Wire.h> // LCD Librairie pour l’afficheur LCD 16x2
#include <Digital_Light_TSL2561IR.h> // Capteur de lumière digital

void setup() // setup initial
{
Wire.begin();
Serial.begin(9600); // Taux de transmission des données
TSL2561IR.init();
}

void loop()
{
TSL2561IR.readVisibleLux();
Serial.print(TSL2561IR.ch0);
Serial.print("\t");
Serial.print(TSL2561IR.ch1);
Serial.println("\t");
}

Pour information, si cela intéresse d’autres.

En programmation objet, l'usage veut que plutôt que d'exposer les variables publiquement on fasse des méthodes qui permettent de récupérer les valeurs ce qui évite de modifier lesdites variables accidentellement.
Typiquement:

uint16_t TSL2561IR::getch1(void){
     return(ch1);
}

Autre chose, ton capteur infrarouge est centré sur 800nm environ (infrarouge proche). La chaleur d'un radiateur qui est relativement basse émet dans l'infrarouge lointain plutôt dans les 10µm. Tu ne "verras" pas la chaleur rayonnée par un radiateur avec ce type de capteur. Sauf si le radiateur était chauffé à quelques milliers de degrés.


Source de l'image

Je suppose que tu veux parler de ceci : GitHub - Seeed-Studio/Grove_Digital_Light_Sensor: TSL2561 & ISL29035

Cette librairie est mal foutue. Si les deux attributs ch0 et ch1 étaient "protected" au lieu de "private" il t'aurait suffit de dériver la classe et d'ajouter deux méthodes pour retourner les valeurs de ces attributs.

Mais dans l'état, il faudrait :

  • dériver la classe
  • ajouter deux attributs _ch0 et _ch1
  • surcharger les méthodes getLux, readVisibleLux, calculateLux pour utiliser ces nouveaux attributs
  • ajouter deux méthodes pour retourner les valeurs de ces attributs

Dériver une classe est toujours une meilleure solution que de dupliquer la librairie.

Oui, je parle du "Grove Digital Light Sensor".

Pour les radiateurs, je voulais parler de radiateurs "radiants" (j'avais écrit "rayonnant", ce qui n'est pas le bon terme). Ces radiateurs utilisés parfois en extérieur pour réchauffer les clients des bars ou restaurants, ou utilisés en salle de bain, afin de chauffer le corps mais pas l'air. Ce site explique bien les différents types de rayonnement IR : Types of Infrared Heating – Infrared Heaters | Tansun

Pour mon usage (je souhaitais qu'un élève évalue le rayonnement dans diverses directions, sans soucis de savoir si il captait l'ensemble du rayonnement émis ou pas).

Pour la modification des librairies, merci de vos précisions. Je ne suis pas informaticien et n'ai encore jamais créé de librairie; j'ai seulement cherché à trouver un truc pour m'en sortir. Vos remarques aideront certainement à faire mieux et proprement ce que j'ai fait de façon malhabile.

Cordialement,