Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probléme de programmation température relais.

    13 mars 2014 à 20:35:55

    Bonjour,

    Je débute dans le monde de l'arduino.

    J'ai acheter un arduino mega, un shiel et un DHT11.

    Aprés avoir connecter tout ça un petit probléme s'ouvre à moi la programmation.

    Voici mon probléme :

    J'ai télécharger la librarie dht.

    Le but de mon programme et de ouvrir le relais quand  Temp < 15° et fermer quand temp>20.

    Voici le programme pour l'instant :

    #include "DHT.h"
    
    #define DHTPIN 2
    #define DHTTYPE DHT11 
    
    
    
    DHT dht(DHTPIN, DHTTYPE);
    const int relais = 1;
    void setup ()
    {
      pinMode(relais,OUTPUT);
      
    }
    void loop()
    {
        float h = dht.readHumidity();
      float t = dht.readTemperature();
      if (t > 25 )
      {
        digitalWrite(relais,LOW);
      } else {
        digitalWrite(relais,HIGH);
      }
      
    }

    Donc à mon c'est le début qui foire j'ai pas trop compris le truc avec les :  #

    Merci à ceux qui m'aideront .

    Blind.

    • Partager sur Facebook
    • Partager sur Twitter
    ETH: 0x6a63f09aEc9776aBE7c7148De2Fdae4ED1F95f74
      13 mars 2014 à 21:45:27

      essaie de brancher le relais sur une autre broche que la 1 et profite en pour afficher dans la voie série la valeur de t

      (Pour imprimer un float voici une fonction pratique :

      void printDouble( double val, byte precision){
        // prints val with number of decimal places determine by precision
        // precision is a number from 0 to 6 indicating the desired decimial places
        // example: printDouble( 3.1415, 2); // prints 3.14 (two decimal places)
      
        Serial.print (int(val));  //prints the int part
        if( precision > 0) {
          Serial.print("."); // print the decimal point
          unsigned long frac;
          unsigned long mult = 1;
          byte padding = precision -1;
          while(precision--)
             mult *=10;
             
          if(val >= 0)
            frac = (val - int(val)) * mult;
          else
            frac = (int(val)- val ) * mult;
          unsigned long frac1 = frac;
          while( frac1 /= 10 )
            padding--;
          while(  padding--)
            Serial.print("0");
          Serial.print(frac,DEC) ;
        }
      }
      
      • Partager sur Facebook
      • Partager sur Twitter

      Retrouvez moi sur mon blog et ma chaine Youtube !

        13 mars 2014 à 23:08:02

        Concernant les #define, c'est juste une directive pré-processeur pour remplacer du texte.

        En claire, si tu écris #define FOO 3, alors à chaque fois que tu écris FOO dans ton code, le compilateur va automatiquement remplacer ça par 3 avant de compiler.

        Du coup, c'est comme si tu avais le code suivant :

        #include "DHT.h"
        
        DHT dht(2, DHT11);
        const int relais = 1;
        
        void setup ()
        {
          pinMode(relais,OUTPUT);
           
        }
        
        void loop()
        {
          float h = dht.readHumidity();
          float t = dht.readTemperature();
          if (t > 25)
          {
            digitalWrite(relais,LOW);
          } else {
            digitalWrite(relais,HIGH);
          }
           
        }



        -
        Edité par lorrio 13 mars 2014 à 23:09:03

        • Partager sur Facebook
        • Partager sur Twitter
          13 mars 2014 à 23:23:06

          Merci pour vos réponse, j'ai reussi à mieux comprendre et du coup reussir :)

          Mais j'ai déjà un autre probléme ... 

          Cette fois ci avec le temps je n'ai pas acheter d'horloge mais j'aimerais quand même utiliser le temps dans mon programme, j'ai donc trouver la libraris time .

          Mais je ne comprend pas comment je peut l'introduire dans mon programme ? 

          Merci encore pour vos réponse si rapide.

          Blind.

          • Partager sur Facebook
          • Partager sur Twitter
          ETH: 0x6a63f09aEc9776aBE7c7148De2Fdae4ED1F95f74
            14 mars 2014 à 14:03:31

            Tu as en effet la librairie Time pour arduino.

            Celle dont je parle est celle ci : http://www.pjrc.com/teensy/td_libs_Time.html

            Tu y trouveras un zip avec tout ce qu'il faut dedans ;)

            =====

            Concrètement, il te suffit juste d'ajouter ces 3 fichiers à ton projet pour utiliser cette lib.

            Une fois que cela est fait, tu as des fonctions simple à utiliser :

            int     hour();            // the hour now 
            int     minute();          // the minute now 
            int     second();          // the second now 
            int     day();             // the day now 
            int     month();           // the month now  (Jan is month 1)
            int     year();            // the full four digit year: (2009, 2010 etc) 

            Ou alors, la fonction now() qui te renvoie une structure très complète.

            =====

            Par contre, l'arduino ne possède pas de système RTC.

            Cela signifie qu'il est incapable de retenir l'heure lorsqu'il est éteind.

            Bref, à chaque fois que tu reset ta carte, tu devras la remettre à l'heure (avec des boutons ou le port COM).

            Cela se fait à l'aide de la fonction :

            void setTime(int hr, int min, int sec, int day, int month, int yr);




            • Partager sur Facebook
            • Partager sur Twitter

            Probléme de programmation température relais.

            × 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