Partage
  • Partager sur Facebook
  • Partager sur Twitter

ARDUINO ET DS18B20 UTILISER SUR UN CONGELATEUR

PROBLEME AVEC MON PROGRAMME

    10 novembre 2020 à 15:25:19

    J'utilise le programme suivant que j'ai modifié pour etre utilise comme thermostat de congélateur, lorsque je l'utilise dans des temperatures positives comme par exemple dans un réfrigérateur (+4°C) il fonctionne bien, mais dés qu'il s'agit de le faire fonctionner à -18°C pas possible de mettre a zero  D13. Si vous pouvez me donner votre avis je vous en serais reconnaissant.

    #include <OneWire.h>        // pour le ds18b20

    #include <LiquidCrystal.h>  // pour l'afficheur LCD

    const int seuil = -2;

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    OneWire  ds(8);  // l'entrée 8 de l'Arduino recevra

                     // les messages du ds18b20 mettre sur le lcd la broche K au - et K au+

    byte i;

    byte present = 0;

    byte data[12];

    byte addr[8];

    int HighByte, LowByte, SignBit, Whole, Fract, TReading, Tc_100, FWhole;

    void setup(void) {

      // initialisation de l'afficheur:

      lcd.begin(16, 2);   

      lcd.clear();       

      lcd.setCursor(0,0);   

      // initialisation du ds18b20:

        if ( !ds.search(addr)) {

          lcd.clear(); 

          lcd.print("Erreur addr");

          delay(500);

          ds.reset_search();

          return;

      }

    }

    void getTemp() {

      int bar;

      ds.reset();

      ds.select(addr);

      ds.write(0x44,1);

      delay(800);

      present = ds.reset();

      ds.select(addr);    

      ds.write(0xBE);

      for ( i = 0; i < 9; i++) {

        data[i] = ds.read();

      }

      LowByte = data[0];

      HighByte = data[1];

      TReading = (HighByte << 8) + LowByte;

      SignBit = TReading & 0x8000;  // test most sig bit

      if (SignBit) {

        TReading = -TReading;

      }

      Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

      Whole = Tc_100 / 100;          // separate off the whole and fractional portions

      Fract = Tc_100 % 100;

      if (Fract > 49) {

        if (SignBit) {

          --Whole;

        } else {

          ++Whole;

        }

      }

      if (SignBit) {

        bar = -1;

      } else {

        bar = 1;

      }

    }

    void printTemp(void) {

      lcd.clear();

      lcd.setCursor(0,0);

     // lcd.print("Temperature: ");

     //   

      if (SignBit) {  

         lcd.print("-");

      }

      lcd.print(Whole);

      lcd.print(" C");

      lcd.setCursor(0,1);

    }

    void loop(void) {

      getTemp();

      printTemp();

      delay(500);

       if (Whole>seuil){

        digitalWrite ( 13,HIGH);

      }

      if (Whole<seuil){

      digitalWrite(13,LOW);

      }

    }

    • Partager sur Facebook
    • Partager sur Twitter
      10 novembre 2020 à 15:44:13

      Bonjour, Merci de retirer de votre titre toutes les lettres en capitales.

      Majuscules abusives

      L'écriture en majuscules est considérée comme une parole criée et diminue autant la lisibilité du texte que sa compréhension. Les majuscules abusives sont donc interdites aussi bien dans les titres que dans les messages.

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: jscript;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        12 novembre 2020 à 0:37:58

        Bonjour,

        Le code que tu utilises stocke le signe de la température dans la variable "bar", if taut donc multiplier Whole (la température arrondie à l'entier supérieur)  ou Tc_100 (la température en centièmes de degrés) par bar avant de la comparer au seuil:

        getTemp();
        ...
        float temperature = bar * Tc_100 / 100.0;
        ... 
        if (temperature < seuil) 

        Tu peux aussi repartir sur l'exemple plus propre de la bibliothèque OneWire, DS18x20_Temperature, qui se trouve normalement dans le menu Fichier -> Exemples -> OneWire de l'IDE arduino et qui te donne directement la température sous forme de flottant signé.

        • Partager sur Facebook
        • Partager sur Twitter
          13 novembre 2020 à 16:06:16

          Je vous remercie  alexisdim pour ces précisions,je vais modifier mon programme en conséquence
          • Partager sur Facebook
          • Partager sur Twitter

          ARDUINO ET DS18B20 UTILISER SUR UN CONGELATEUR

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown