MOSFET pour des capteurs de température

Bonjour,

Je suis sur un projet permettant de récupérer des températures grâce au couple MAX31850K et Thermocouple type K. J'en ai 4 en série, lorsqu'il y en a que 2 ou 3 les valeurs semblent normale. Mais dès qu'il y a en a 4, les valeurs ont une différence de 1 voir 2 degré de la première sonde à la 4ème. Je pense qu'utiliser un MOSFET IRF540 pourrait être utile pour lisser les valeurs... Or, je n'arrive pas à l'implémenter dans le circuit. Voici mon code concernant la partie température:

void lireMesTemp()
{
  byte cpt;
  String affichOrdi;
  
  for (cpt = 0; cpt < NbCapT ; cpt++)                   // Parcourir un à un les capteurs
  { 
    if(MAX31850K.isConnected(IDsTemp[cpt]) == true)    
    {
      MesTemp[cpt] = MAX31850K.getTempC(IDsTemp[cpt]);
      
      /* Affichage Ordinateur */
      affichOrdi = "Capteur Temp-" + cpt; 
      affichOrdi = " " + affichOrdi + " : " + MesTemp[cpt];   
      Serial.print(affichOrdi);                   
      Serial.println(" °C");                      
    }
    else
    {
      MesTemp[cpt] = 0.0;

      /* Affichage Ordinateur */
      affichOrdi = "Capteur Temp-" + cpt; 
      affichOrdi = affichOrdi + " déconnecté !";      
      Serial.println(affichOrdi);                   // Affichage Ordinateur
    }
  }

Je pense que mon soucis est au niveau des branchements, j'ai du mal à comprendre où implémenter le MOSFET et comment l'alimenter...

J'ai vraiment besoin d'aide, merci d'avance!

Qu'est ce que tu veux faire avec ton Mosfet exactement? Je vois pas comment lisser des valeurs avec un transistor qui est utile pour de la commutation

Je pensais que cela pouvait donner un décalage, excusez-moi je suis vraiment novice dans le domaine de l'électronique... Auriez-vous une solution ?

Je pensais que cela pouvait donner un décalage,

Cela ne s'appelle pas résoudre un problème mais cacher la poussière sous le tapis :grin:
et en plus cela ne marchera pas.
Revenons à l'origine du pb : mauvais fonctionnement quand trop de MAX31850K sont connectés.

Le MAX31850K utilise le bus ONEWIRE de la société Dallas (rachetée avec son bus par Maxim).
Je pense a un problème de gestion du bus qui est connu pour être un bus lent.
Je n'en dirai pas plus parce que je n'en sais pas plus sur ce bus.

Néanmoins tu peux commencer à chercher de la documentation sur les bonnes pratiques pour utiliser ce bus et peut-être que notre grand spécialiste de ce bus se connectera au forum :grin:

Merci pour cette analyse. En effet, j'ai effectué des tests : chaque MAX31850K et chaque Thermocouple fonctionne très bien seul, peu importe dans quel ordre et avec quel composant. Donc le problème ne vient pas du Hardware il s'agit de la transmission de donnée...

Je n'y connais absolument rien en bus de transmission,
Quel genre de solution pensez-vous qu'il existe ?

Et qui est ce grand spécialiste ? :smiley:

Merci encore,

Un indice : un très joli lac des Pyrénées porte son nom.
T'inquiète pas il n'est jamais très loin :grin:.

Mais en attendant sa venue google ou qwant.com sont déjà présent.

ça fait un moment que je bloque sur ce soucis malheureusement google et qwant ne m'ont pas aidé à trouver une solution :frowning:

68tjs:
Un indice : un très joli lac des Pyrénées porte son nom.

:grin:
Et c'est aussi le nom d'une gamme de turbine d'helicoptere

keaume:
ça fait un moment que je bloque sur ce soucis malheureusement google et qwant ne m'ont pas aidé à trouver une solution :frowning:

Bonsoir
Alimentation en direct ou "parasitic power" ?

Bonsoir M.LeLacAliasLHelicoptere,

Je suis en alimentation directe, mais j'ai également testé en parasitic power et cela ne change pas grand chose. Que me conseillez-vous ? J'ai lu que l'external power pouvait être plus précis et sûr

keaume:
Je suis en alimentation directe, mais j'ai également testé en parasitic power et cela ne change pas grand chose. Que me conseillez-vous ? J'ai lu que l'external power pouvait être plus précis et sûr

OK , alim prise où ?
les adresses des max sont en decouverte à chaque boucle ou elles sont enregistrées ?
poste ton programme
IL n'y a bien qu'une seule R 4.7K entre VCC et les DQ ?

Tu trouveras en pièce jointe mon branchement. J'espère que ce sera clair

Voici les global values concernant les MAX :

#define ONE_WIRE_BUS 48 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature MAX31850K(&oneWire);

byte NbCapT;
float MesTemp[4];
byte IDsTemp[5][8];

Voici mon setup concernant les MAX:

  MAX31850K.begin();
  
  NbCapT = MAX31850K.getDeviceCount();                  // Récupérer le nombre des capteurs fonctionnels sur le bus
  
  for(cpt = 0; cpt < NbCapT; cpt++)                   // Récupérer et stocker les IDs des capteurs par index
  {
    if(MAX31850K.getAddress(IDsTemp[cpt], cpt) == true)
    {
      Serial.print("OK pour l'adresse du capteur Temp-");       // Affichage Ordinateur 
      Serial.println(cpt);                                      // Affichage Ordinateur 
    }
    else
    {
      Serial.print("NOK pour l'adresse du capteur Temp-");      // Affichage Ordinateur 
      Serial.println(cpt);
    }
  }
  MAX31850K.setWaitForConversion(false);                  // Ne pas bloquer le programme pendant la conversion de la température en nombre par MAX31850K
  delay(200);
  MAX31850K.requestTemperatures();                        // Ordonner aux MAX31850K de procéder à la conversion des températures
  delay(200);

Voici mon code concernant les MAX :

void lireMesTemp()
{
  byte cpt;
  String affichOrdi;
  
  for (cpt = 0; cpt < NbCapT ; cpt++)                   // Parcourir un à un les capteurs
  { 
    if(MAX31850K.isConnected(IDsTemp[cpt]) == true)    
    {
      MesTemp[cpt] = MAX31850K.getTempC(IDsTemp[cpt]);
      
      /* Affichage Ordinateur */
      affichOrdi = "Capteur Temp-" + cpt; 
      affichOrdi = " " + affichOrdi + " : " + MesTemp[cpt];   
      Serial.print(affichOrdi);                   
      Serial.println(" °C");                      
    }
    else
    {
      MesTemp[cpt] = 0.0;

      /* Affichage Ordinateur */
      affichOrdi = "Capteur Temp-" + cpt; 
      affichOrdi = affichOrdi + " déconnecté !";      
      Serial.println(affichOrdi);                   // Affichage Ordinateur
    }
  }

  MAX31850K.requestTemperatures();                        // Ordonner aux MAX31850K de procéder à la conversion des températures
  delay(200);            

}

keaume:
Tu trouveras en pièce jointe mon branchement. J'espère que ce sera clair

Pas vraiment :grin:

  • il n'y a a pas le breadboard, ni la mega en totalité
  • je ne vois pas où est la R de 4.7K

Oups !

Je dois la mettre où ?

Et à chaque MAX31850? C'est possible de me montrer sur un schéma ou sur la photo que je t'ai envoyé ?

Est-ce que l'implémentation de cette R de 4,7K ca changer la donne ?

keaume:
Oups !

Je dois la mettre où ?

Et à chaque MAX31850? C'est possible de me montrer sur un schéma ou sur la photo que je t'ai envoyé ?

Est-ce que l'implémentation de cette R de 4,7K ca changer la donne ?

une seule R 4.7K entre VCC et DQ
par exemple là

Voilà ! Je vais test mais je ne sais pas si cela va changer quelque chose.

L'autre partie du breadboard il y a un capteur de courant, un débitmètre et un capteur de pression pour ça que je l'ai pas mentionné

Voilà le branchement en PJ

max2.jpg

keaume:
Voilà ! Je vais test mais je ne sais pas si cela va changer quelque chose.

Perso , j'ai plutot tendance à penser que si c'est une préconisation impérative du constructeur , c'est que ça doit quand même être quelque part ...un peu... important :grin:

EUUUUUUUUUH JE REVE OU CA VIENS DE TOUT REGLER ?????

Faut que je vois ça sur le long terme mais on dirait bien que ça a aidé à stabiliser la plupart des sondes

keaume:
EUUUUUUUUUH JE REVE OU CA VIENS DE TOUT REGLER ?????

Faut que je vois ça sur le long terme mais on dirait bien que ça a aidé à stabiliser la plupart des sondes

:grin:
ça n'a pas aidé à stabiliser quoique ce soit ...
tu a simplement "oublié/omis/etc" de mettre un composant obligatoire pour le fonctionnement des MAX

  • une simple lecture du datasheet et le probleme etait réglé

en gros tu a déjà eu de la chance que ça "marchotte" avec 3 modules :smiley:

par curiosité , tu veux gerer quoi avec ta mega ?

Okay pour l'instant les 4 mesures tiennent dans des valeurs à peu près égal (à 1degré près)

Est-ce que tu pourrais expliquer le changement ?

J'ai aussi des soucis de virgules, cela ne m'affiche pas valeurs avec arrondissement on va dire. Par exemple :
28,61 ou bien 21,28 tu vois, j'aimerais qu'il y ait que des 21,1 ; 21,2 ; 21,3 ; 21,4 ect...

Comment pourrais-je faire ça ?

Pour te répondre j'aimerais récupérer les données de ma machine géothermique à mon domicile et l'envoyer un serveur Thingspeak via un ESP8266. Pour les mesures j'ai 4 MAX31850K-Thermocouple K, deux SCT-013-000 pour le courant (dont j'ai également un problème lol), un débitmètre Digiten G1, et un un capteur de pression. Dans mon circuit j'ai également un Logic level converter pour gérer plus facilement l'ESP8266, voilà ! :slight_smile: