Skyduino:~#
Articles
arduino, Corrigé, programmation, tutoriel

[Tuto] Capteur température & humidité DHT11

Le contenu de cet article a été entièrement réécrit et mis à jour sur le site Carnet du Maker.

Liens vers les nouveaux articles :

N.B. Les commentaires de l’article ont été pris en compte lors de la rédaction des nouveaux articles 😉

Discussion

82 réflexions sur “[Tuto] Capteur température & humidité DHT11

  1. Salut merci pour ce beau tuto hasard je l ai commandé vendredi Après midi sur semageek je test ton tuto des réception

    Publié par Mcolive | 27 avril 2013, 12 h 52 min
  2. Est-il possible de faire tourner le programme sur un Attiny 45 a 8Mhz ou faut-il changer les vitesses de celui-ci.

    Publié par albertrand | 28 avril 2013, 9 h 13 min
    • Si tu utilises le plugin « tiny-core » pour l’ide Arduino tu n’as rien à modifier 😉

      Publié par skywodd | 28 avril 2013, 14 h 06 min
      • Salut,
        Si l’on utilise un arduino UNO en ISP pour charger le Attiny45/85 avec ton programme ça ne fonctionnera pas?
        Bien entendu et prenant soin de modifier la valeur de la broche de branchement du DHT11.
        Moi j’attends de recevoir le DHT11, dans le but de le connecter sur un Attiny85 avec un LCD en I2C.

        Publié par tsim79 | 1 Mai 2013, 19 h 48 min
      • L’outil de programmation ne fait pas tout … si tu ne compile pas le code pour un ATtiny45/85 ça ne marchera pas comme par magie dessus …

        Publié par skywodd | 2 Mai 2013, 11 h 31 min
  3. Heu je demande pardon d’avance…
    Mais plutôt que DHT11 + Attiny85 + I2C + LCD HD44780 1602, y a t il une possibilité de faire:
    DHT11 + Attiny85 + LCD Nokia 5110 avec ou sans module I2C?
    DSL d’être débutant…

    Je suis conscient que le lcd5110 demande 6 broches de commande, mais j’ai cherché des modules de conversion I2C Lcd5110, mais j’ai rien trouvé.

    Publié par tsim79 | 1 Mai 2013, 20 h 19 min
    • C’est possible mais je peut te garantir que tu va galérer surtout si tu débutes 😉
      Pourquoi vouloir un ATtiny à tout prix ?

      Publié par skywodd | 2 Mai 2013, 11 h 33 min
      • Ben parceque g 2 Attiny85 en stock. Sachant que le but serait de réaliser un ptit montage pour mesurer la temperature et le taux d’humidité de la chambre de mes enfants, je pense q’un attiny85 + dht11 + lcd hd44780 + batterie rechargeable est plus compacte qu’un montage autour d’un carte arduino UNO!?
        De ce que j’ai vu sur le net, pour des montages nécessitant moins de 6 entrées/sorties les attiny45/85 font largement l’affaire. Mais je n’ai trouvé aucun site proposant ce que moi je veux faire.
        Après pour le lcd nokia 5110, je m’y interessais pour un soucis d’esthétisme, présentation et miniaturisation. Mais au vu du nombre de broche pour commander ce lcd, je pense que tu seras d’accord pour me dire qu’un atmega 328 utilisé comme un arduino standalone avec le dht11 sera plus adéquat!.. N’est ce pas!!? Avec la possibilité d’y rajouter un DS1307 j’obtiendrais une petite horloge d’appoint (peut etre avec alarme) et mesure de temperature et humidité pour la chambre des enfants. Avec le plaisir du DIY lol. Mais le débutant que je suis devra devenir utilisateur avancé avant.

        Publié par tsim79 | 2 Mai 2013, 19 h 34 min
      • C’est faisable mais rappelle toi qu’un ATtiny45 n’as que 4Ko de mémoire et un ATtiny85 8Ko.
        Alors qu’une carte arduino classique en a 32Ko.

        N’espère pas non plus utiliser la librairie Serial pour le debug, ou Wire pour l’i2c (mais TinyWire : http://playground.arduino.cc/Code/USIi2c).

        Si tu maitrises en programmation tu peut y aller sans probléme mais si tu débutes ça va être beaucoup moins facile 😉
        Prépare toi à devoir mettre les mains de le code des divers librairie pour les adapter.

        Avant de partir dans un projet miniaturisé tu devrais déja faire une version fonctionnelle sur une carte classique 😉
        Quand ton code sera solidement testé tu pourras commencer à le migrer sur ATtiny.

        Publié par skywodd | 2 Mai 2013, 19 h 54 min
  4. Ok merci pour la sensibilisation, les conseils et les infos.
    Effectivement je n’avais pas pensé a l’espace memoire necessaire pour le programme et donc apres essai et prototypage va falloir s’ atteler a la migration et optimisation du code pour attiny si s’ est faisable.

    Mais surtout merci pour ce tuto lol

    Publié par tsim79 | 2 Mai 2013, 22 h 30 min
  5. Bonjour,
    Merci pour votre Tuto DHT11, J’en retiens surtout la différence entre le 11 et le 22 : la précision.
    J’ai aussi trouver un SSP pour la température de rosée :
    // Calculates dew point in degrees C
    float Dewpoint(float humi, float temp) {
    float k;
    k = log(humi/100) + (17.62 * temp) / (243.12 + temp);
    return 243.12 * k / (17.62 – k);
    }

    et puis j’en ai écrit un pour avoir l’humidité absolue:

    // Calcul de l’humidité absolue en degré °C
    // http://www.vaisala.fi/Vaisala%20Documents/Application%20notes/Humidity_Conversion_Formulas_B210973EN-E.pdf
    float Humidity(float humi, float temp) {
    float A,Pws,Pw;
    Pws = 6.1162 * pow(10,(7.5892 * temp / (temp + 240.71))); // pow = élévation à la puissance
    Pw= Pws * humi; // en Pascal
    A = 2.16679 * Pw /(273.16 + temp); // en gr / m3
    A = A * 1.204 -2.38; // en gr par kilo (à 20°C)
    return A;
    }

    J’en profite pour vous demander si vous connaissez un montage des DS18B20 sur un 1Wire en mode NON parasite ?

    Publié par Barrois | 3 Mai 2013, 16 h 24 min
  6. C’est possible de récupérer la température et de l’afficher sur une page en PHP en passant par l’USB de l’arduino ? Merci ! 🙂

    Publié par Ira | 3 Mai 2013, 22 h 25 min
  7. Salut skywodd,
    J’ai reçu mon dht11 mais sans la platine de branchement. Mon soucis est le suivant:
    Dans le datasheet et dans ton tuto il est dit que pour un raccordement inférieur a 20 mètres, il faut mettre une résistance de 5K entre le +Vcc et la ligne data.
    Avec les moyens que j’ai, je peux me permettre d’utiliser que des résistances de la série E12 ou E24. Donc pas évident de trouver la valeur de 5K. J’ai le choix entre 4,7K ou 5,1K (2 résistance en parallèle) ou 5,6K.
    Tu me conseilles quoi?
    Merci

    Publié par tsim79 | 18 Mai 2013, 0 h 10 min
    • C’est une simple résistance de tirage, prend 4k7 si tu as ou sinon 5k6, ça ne fera aucune différence 😉

      Publié par skywodd | 18 Mai 2013, 14 h 29 min
      • Juste si on met plusieurs DHT11 en parallèle, il faut mettre la même valeur de résistance pour chacune des sondes.

        Publié par Barrois | 18 Mai 2013, 15 h 10 min
  8. Ok merci skywodd. Je posais la question des fois qu’une mauvaise adaptation d’impedance soit source de probleme de transmission.
    Par contre Barrois, a quoi cela sert de placer plusieurs capteurs en parallèles sur une meme ligne si ils ne sont pas adressable individuellement?
    Merci.

    Publié par tsim79 | 18 Mai 2013, 19 h 41 min
    • Bon, je m’occupe de salles informatiques, et je monte des stations de mesures pour des tests en vue de faire des économies d’énergie : j’ai monté 5 sondes AM2302 ( = DHT11) pour démontrer les gains que nous pourrions faire en faisant du freecooling air…. (long combat : convaincre) Je les monte en parallèle : toutes sur le même 5V et la même masse mais avec chacune un port Arduino, alors il est nécessaire que toutes aient la même résistance,sinon l’Arduino bugge . Le must serait d’avoir des DHT11 sur One Wire (comme des DS18B20), mais bon maintenant qu’on trouve des Méga à 15€, le port Arduino coûte vraiment pas cher (30 cts)

      Publié par Barrois | 18 Mai 2013, 21 h 07 min
  9. Bonjour skywodd,
    très bon tutoriel, mais je suis débutant et je n’arrive pas à trouver comment lire 2 DHT11 en même temps, plus précisément à faire le programme de lecture en distinguant les 2 DHT11. J’ai fait des recherches sur internet mais personne n’a d’exemple de lecture de ces sondes dans un même programme. Si tu pouvais me communiquer des exemples ça serais très sympathique et ça pourrais m’aider à mieux comprendre la programmation.
    Gaetan

    Publié par gaetan | 5 novembre 2013, 13 h 19 min
    • Sérieusement tu as cherché avant de demander ?
      C’est pourtant pas compliqué, il suffit d’appeler deux fois la fonction sur deux broches différentes.

      /* Variables d’usage */
      byte temperature, humidity;

      /* Lecture de la température et de l’humidité n°1 + gestion des erreurs */
      switch (readDHT11(DHT11_PIN_1, &temperature, &humidity)) {
      case DHT11_SUCCESS:

      /* Affichage de la température et du taux d’humidité */
      Serial.print(F("Humidite 1 (%): "));
      Serial.println((int) humidity);
      Serial.print(F("Temperature 1 (^C): "));
      Serial.println((int) temperature);
      break;

      case DHT11_TIMEOUT_ERROR:
      Serial.println(F("Temps d’attente dépassé !"));
      break;

      case DHT11_CHECKSUM_ERROR:
      Serial.println(F("Erreur de checksum !"));
      break;
      }

      /* Lecture de la température et de l’humidité n°2 + gestion des erreurs */
      switch (readDHT11(DHT11_PIN_2, &temperature, &humidity)) {
      case DHT11_SUCCESS:

      /* Affichage de la température et du taux d’humidité */
      Serial.print(F("Humidite 2 (%): "));
      Serial.println((int) humidity);
      Serial.print(F("Temperature 2 (^C): "));
      Serial.println((int) temperature);
      break;

      case DHT11_TIMEOUT_ERROR:
      Serial.println(F("Temps d’attente dépassé !"));
      break;

      case DHT11_CHECKSUM_ERROR:
      Serial.println(F("Erreur de checksum !"));
      break;
      }

      Publié par skywodd | 6 novembre 2013, 13 h 36 min
      • Merci pour cette réponse rapide, j’ai enfin réussi, j’ai pu constater que mes deux DHT11 avaient 4% de différence en humidité et 1°en température, peut être qu’un jour je prendrais des DHT22.
        Je vais essayer de continuer mon projet de gestion chauffage j’attends encore mes platines relais et mes DS18B20 pour les programmer pour faire d’autres essais et j’ai comme projet de pouvoir par la suite y accéder par internet.
        Pour information mon module est un Nanode Gateway donc assez complet mais surement légèrement différent des Arduino Ethernet dont j’ai vu des articles du blog qui en parlent et aussi ta vidéo youtube.
        Donc je te remercie encore et je te félicite pour ce blog qui est très utile pour les débutants qui n’y connaissent pas grand chose comme moi.

        Publié par gaetan | 6 novembre 2013, 17 h 46 min
      • Bonjour!
        j’ai essayé de compiler le code ci-dessus (en faisant le copier – coller) mais quand j’ouvris le Moniteur Série, on y vu seulement « Temps d’attente dépassé!’. Que dois-je faire pour atteindre l’affichage de température et d’humidité dans le Moniteur Série? Je pense que quelqu’un pourra m’aider! Merci beaucoup

        Publié par Hery | 7 Mai 2016, 8 h 09 min
  10. Bonjour,
    J’ai réalisé le programme mais aucune page «  »COM.. » » avec un tableau ne s’affiche. auriez vous une idée du problème ?
    Merci d’avance

    Publié par M | 13 février 2014, 12 h 30 min
    • Surement un problème de drivers.
      http://arduino.cc/en/guide/windows

      Publié par skywodd | 22 février 2014, 16 h 08 min
    • Perso, j’avais des caractères chinois dans la console, j’ai juste changé le débit en bauds pour l’adapter (au passage le 9600 fonctionne). Pour le reste, je ne connaissais pas les fonctions bas niveau des avr. Intéressant mais il faut s’accrocher et trouver d’autres articles pour comprendre. Cela mériterait un sujet à part entière (que tu as peut-être déjà fait). Merci en tous cas, ça fonctionne pour moi. Je vais pouvoir résoudre mes problèmes de sinusites dans la chambre à cause d’une mauvais ventilation ;-).

      Publié par yanoukdesign | 12 janvier 2016, 23 h 17 min
  11. ça m’affihce « q, S, … » fin je pige pas pourquoi ça fonctionne pas :-\
    tu peux m’aider stp ?

    Publié par bloudman | 14 mars 2014, 18 h 20 min
  12. Bonjour, je suis en Terminale SI. Je fais un projet scolaire sur l’ouverture automatisée d’une serre, qui s’ouvre en fonction de la température et de l’ humidité intérieure et extérieure à la serre. Je dois programmer en Arduino (j’ai la Uno) j’ai donc acheté deux capteurs DHT11. Je cherche à faire un test pour voir comment communiquer avec ces capteurs, mais je n’y arrive pas.

    Voici le programme :

    /** Broche « DATA » du DHT11 */
    const byte DHT11_PIN = 5;
    byte VMLI;
    byte BP1=2;
    byte BP2=7;
    byte Sens1=3;
    byte Sens2=4;
    byte MLI=11;
    /** Code d’erreur de la fonction readDHT11() */
    enum {
    DHT11_SUCCESS, //!< Pas d'erreur
    DHT11_TIMEOUT_ERROR, //!< Temps d'attente dépassé
    DHT11_CHECKSUM_ERROR //!< Données reçues erronées
    };

    /** Fonction setup() */
    void setup() {

    /* Initialisation du port série */
    Serial.begin(115200);
    Serial.println(F("DHT11 DEMO"));
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(MLI,OUTPUT);
    pinMode(BP1,INPUT_PULLUP);
    pinMode(BP2,INPUT_PULLUP);
    }

    /** Fonction loop() */
    void loop() {

    /* Variables d'usage */
    byte Te, He;

    /* Lecture de la température et de l'humidité + gestion des erreurs */
    switch (readDHT11(DHT11_PIN, &Te, &He)) {
    case DHT11_SUCCESS:

    /* Affichage de la température et du taux d'humidité */
    Serial.print(F("Humidite exterieure (%): "));
    Serial.println((int) He);
    Serial.print(F("Temperature exterieure (^C): "));
    Serial.println((int) Te);
    break;

    case DHT11_TIMEOUT_ERROR:
    Serial.println(F("Temps d'attente depasse !"));
    break;

    case DHT11_CHECKSUM_ERROR:
    Serial.println(F("Erreur de checksum !"));
    break;
    }

    /* Pas besoin de rafraichir l'affichage très souvent */
    delay(500);

    VMLI=255;
    analogWrite(MLI,VMLI);
    digitalWrite(Sens1,LOW);
    digitalWrite(Sens2,LOW);
    if(digitalRead(He) buffer contenant les données du cpateur
    * counter -> compteur permettant de savoir quel bit est reçu (bitwise)
    * index -> compteur permettant de savoir quel octet est reçu (bitwise)
    * timeout -> compteur pour le timeout
    */
    byte data[5] = { 0 }, counter = 7, index = 0;
    unsigned int timeout;

    /* Conversion du numéro de broche Arduino en ports/masque binaire « bas niveau » */
    /* Utiliser les registres du microcontrôleur est bien plus rapide que digitalWrite() */
    uint8_t bit = digitalPinToBitMask(pin);
    uint8_t port = digitalPinToPort(pin);
    volatile uint8_t *ddr = portModeRegister(port); // Registre MODE (INPUT / OUTPUT)
    volatile uint8_t *out = portOutputRegister(port); // Registre OUT (écriture)
    volatile uint8_t *in = portInputRegister(port); // Registre IN (lecture)

    /* Réveil du capteur */
    *ddr |= bit; // OUTPUT
    *out &= ~bit; // LOW
    delay(18); // Temps d’attente à LOW causant le réveil du capteur
    *out |= bit; // HIGH
    delayMicroseconds(40);
    *ddr &= ~bit; // INPUT

    /* Attente de la réponse du capteur */
    timeout = 0;
    while(!(*in & bit)) /* Attente d’un état LOW */
    if (++timeout == 10000)
    return DHT11_TIMEOUT_ERROR;
    timeout = 0;
    while(*in & bit) /* Attente d’un état HIGH */
    if (++timeout == 10000)
    return DHT11_TIMEOUT_ERROR;

    /* Lecture des données du capteur (40 bits) */
    for (byte i = 0; i 40)
    data[index] |= (1 << counter); // "1"
    // Le tableau data[] est initialisé à "0" par défaut

    /* Si le compteur de bits atteint zéro */
    if (counter– == 0) {
    counter = 7; /* On passe à l’octet suivant */
    ++index;
    }
    }

    /* Format des données :
    * [0] = humidité en %
    * [1] = zéro
    * [2] = température en degrés Celsius
    * [3] = zéro
    * [4] = checksum (humidité + température)
    */
    *humidity = data[0];
    *temperature = data[2];

    /* Vérifie la checksum */
    if (data[4] != (data[0] + data[2]))
    return DHT11_CHECKSUM_ERROR; /* Erreur de checksum */
    else
    return DHT11_SUCCESS; /* Pas d’erreur */
    }

    Je me suis beaucoup inspiré du programme donné au dessus, malgré cela je n’y arrive pas. Dans ce test j’ai un motoréducteur, deux boutons poussoirs (BP1 et BP2), un pont en H (permettant de faire tourner le moteur dans deux sens : Sens1 et Sens2) et bien évidement une carte Arduino Uno.
    La variable He correspond à l’humidité et Te à la température (inutile pour ce test puisque que je prend uniquement en compte le taux d’humidité).
    Le programme fonctionne, mais à moitié… Quand j’appuie sur BP1, le moteur tourne mais tout le temps, et pas comme voulu, c’est-à-dire quand le taux d’humidité est inférieur à 45%. Quand j’appuie sur BP2 le moteur ne tourne pas quelque soit le taux d’humidité…

    Le câblage est bien réalisé cela vient donc du programme. Je pense que cela vient surtout du « if(digitalRead(He)<45)".

    J'espère que quelqu'un pourra m'aider.

    Merci d'avance!

    Publié par Aurélien | 19 mars 2014, 15 h 56 min
    • Bonjour
      je suis aussi cette année en terminale SI et pour le projet je travaille aussi sur la serre et je dois aussi mettre en place deux capteurs dht11 à l’intérieur et l’extérieur de la serre. c’était pour savoir au finale comment ça c’était pour vous et finalement quelle solution aviez-vous adopter?
      merci

      Publié par Félix | 23 novembre 2015, 16 h 33 min
    • L’humidité indiquée est fonction de la température (voir le datasheet)

      Publié par yanoukdesign | 12 janvier 2016, 23 h 19 min
  13. Merci
    je debute avec Arduino et après avoir passé pas mal de temps à chercher un code sur le net pour ce petit capteur, c’est votre code qui marche le mieux , sans erreur
    Granatum

    Publié par Granatum | 27 Mai 2014, 23 h 14 min
  14. j’ai un DHT11 à 4 pin et j’ai utilisé votre programme, mais au-lieu de m’afficher la T° et l’humidité, mon moniteur série m’affiche des signes incompréhensibles, comme : çè;£~é<=&.

    Publié par gabriel | 1 juillet 2014, 10 h 58 min
  15. Bonjour, et merci pour ce prog… Pour ma part je rencontre un problème de » temps d’attente dépassé.. »
    j’ai resté avec un scnd capteur ..mais j’ai la même réponse..
    Auriez-vous une piste .. ??

    Publié par Damien | 9 juillet 2014, 18 h 15 min
    • Si ça ne marche pas avec deux capteurs différents je pense qu’il y a un problème dans le câblage.

      Publié par Skywodd | 10 juillet 2014, 9 h 23 min
      • effectivement… dans la précipitation j’avais branché le fil (DATA) sur la PIN 3 … 😦 maintenant. c’est OK .!
        😉

        Publié par Damien | 10 juillet 2014, 13 h 00 min
  16. je voudrais affichez les données du DHT11 sur mon écran nokia 5110, auriez vous quelques tuyaux ?

    Publié par quant | 30 août 2014, 14 h 18 min
  17. Hello Skywood,

    Merci pour ce tuto qui m’a donné envie de me lancer. D’ailleurs ceux qui cherche un kit de démarrage, celui que j’ai acheté sur http://www.sainsmart.com/starter-kits/uno-r3-smartkits.html est très bon.

    Bref je suis en galère avec une sonde DHT22. J’ai voulu ne pas reprendre ton code (bien que je m’en sois inspiré) ou une Lib sur le NET et faire les choses par moi-même. Du coup, j’ai tout (ou presque) fait en langage Arduino mais voilà ça ne fonctionne pas. Je pense savoir pourquoi; question de temps d’exécution.

    Je voudrais simplement savoir si c’est possible d’écrire un code de niveau Arduino (pas bas niveau ou assembleur donc) pour une sonde DHT. Coder au niveau Arduino faire « perdre » du temps d’exécution (par ex. delayMicroseconds() implique un délai d’exécution de 2 microsecondes contre 65,2 nanosecondes en assembleur http://playground.arduino.cc/Main/AVR). Du coup mon code de haut niveau prend du retard au cours de son exécution et plus rien ne fonctionne.

    Mon code est lisible ici https://github.com/Kaboofa/arduino-dht22/blob/master/DHT22.ino. Après c’est peut-être tout le code qui est moisi 🙂

    Merci d’avance pour tes réponses, conseils…

    KaB

    Publié par BOURGUIGNON Romain | 14 septembre 2014, 15 h 49 min
    • Je viens de regarder ton code, ça ne peut pas marcher avec les fonctions Arduino de haut niveau.
      Les boucles sont codés pour compter des cycles d’instructions processeurs, les fonction haut niveau sont beaucoup trop haut niveau.
      Le temps que tu sortes d’un digitalRead() le signal aura déjà fait deux impulsions.

      Publié par Skywodd | 14 septembre 2014, 19 h 38 min
  18. « index » n’est pas déclaré?! C’est ce que arduino me dit.

    Publié par Villers | 28 novembre 2014, 13 h 50 min
    • Bonjour,
      J’ai installé le code dans un Arduino Due, j’ai beaucoup d’erreurs, le code est-il compatible avec cette carte.
      D’avance, merci.

      Publié par Janno | 2 décembre 2014, 22 h 14 min
      • Le code de cet article utilise des fonctions bas niveaux qui sont liés au matériel. Il est fort probable que ces fonctions n’existent pas sur l’arduino Due vu que le matériel est complètement différent d’une carte classique.

        Publié par Skywodd | 10 décembre 2014, 11 h 24 min
    • Copié collé foireux 😉

      Publié par Skywodd | 10 décembre 2014, 11 h 09 min
  19. bonjour ,
    je suis debutante et j’ai un projet de fin d’etude qui porte sur l’utilisation du raspberry pi et le dht11 pour afficher la temperature .j’ai reussi a demarrer mon raspberry pi et aussi j ‘ai obtenu ne connexion al’aide d’un cable ethernet branché a ma box(modem) et mon pi et maintenant je suis bloqué a cette etape 😦 svp vous pouvez m’orienter qu’est ce que je doit faire par la suite ;vous pouvez m’expliquer les etapes que je pourrai les suivre pour reussir mon travail, sachant que ‘ai utilisé comme systéme d’axploitation rasbian wheezy???

    Publié par sandra | 4 décembre 2014, 9 h 22 min
    • Je n’utilise pas de Raspberry pi …

      Publié par Skywodd | 10 décembre 2014, 11 h 27 min
    • Le problème de rpi est que ce n’est pas un système en temps réel (certains prog peuvent interrompre l’exécution), donc il risque d’y avoir pertes de données. L’idéal est que le rpi récupère des données en sortie du arduino… (programmation en python sur le rpi).

      Publié par yanoukdesign | 12 janvier 2016, 23 h 23 min
  20. génial cela a fonctionné de suite.
    j’ai pas tout compris le comment tu as fait mais en tout cas merci.
    Certain capteur sont montés dans l’autre sens : le ground à la place du serial data.
    c’est pour ça que j’ai eu aussi le message : temps d’attente dépassé.

    Publié par boissin laurent | 10 décembre 2014, 21 h 05 min
  21. je vous remercie infiniment pour cet article!!!
    j’ai compris bien le principe de fonctionnement du dht11 ,mais j’ai une petite question ,j’ai pas compris pourquoi les octet 2 et 4 sont a ZERO???

    Publié par sandra | 18 décembre 2014, 16 h 04 min
    • Octet 1 : partie entière, octet 2 : partie décimale.
      Comme le capteur ne donne qu’une précision en nombre entier la partie décimale est toujours à zéro.

      Publié par Skywodd | 31 décembre 2014, 12 h 57 min
  22. Génial ! J’ai un arduino depuis ce midi et je me lance à peine.

    Après avoir tenté le classique clignotement de LED, ben j »ai pris ce code. Fonctionnement au 1er coup !
    J’ai modifié la partie serial.print pour avoir tout sur une ligne et le symbole degré °, ce qui donne :
    Serial.print(F(« Humidite : « ));
    Serial.print((int) humidity);
    Serial.print(F(« % Temp. : « ));
    Serial.print((int) temperature);
    Serial.print((char)176); /* Symbole du degré ° en ASCII */
    Serial.println(« C »);/* Avec retour chariot et saut ligne */

    D’autre part, pensez éventuellement à calibrer le capteur… Extrait de la datasheet :
    Step one: Keep the DHT sensor at the condition of Temperature 50~60Celsius, humidity 70%RH for 5 hours.

    Publié par patrickmx | 10 janvier 2015, 2 h 55 min
  23. bonsoir,
    un grand merci pour ton tuto et ton code, grace à tes photos de bonne qualité, j’ai pu voir que mon capteur qui ressemble tres fortement au tien, est en fait monté à l’envers de sorte que j’ai la masse à droite et la sortie à gauche. La capa ne figure pas sur mon CI, mais visiblement cela fonctionne tres bien sans. Merci aussi aux personnes qui ont laissé des commentaires, me permettant de corriger tres rapidement l’erreur de vitesse du moniteur serie et de l’inversion du brochage (temps d’attente trop long) ne provenant pas dans mon cas d’une erreur sur l’entree mais du capteur monté completement à l’envers. Ton code fonctionne tres bien, je crois que je vais le garder comme librairie pour ce capteur plutot que la version officielle.
    Encore un grand merci, je reviendrais voir tes autres articles.

    Publié par viala | 3 mars 2015, 23 h 55 min
  24. Encore un grand Merci pour ce code ! Après un instant d’hésitation, j’ai compris que mon signal et mon Vcc étaient intervertis sur ma petite carte. Mais, après correction, ça fonctionne à la perfection. j’ai même rajouté un ecran lcd en i2c. Encore merci.

    Publié par kikipicho | 9 mars 2015, 9 h 34 min
    • Merci aussi à Viala. c’est grâce à lui qui j’ai compris que ma carte (made in china) était branchée à l’envers.

      Publié par kikipicho | 9 mars 2015, 9 h 45 min
  25. bonjour,
    Je suis passé sur la version 1.6.1 de l’IDE Arduino, et depuis lorsque je veux utiliser ton code (compiler) j’ai une erreur:
    collect2.exe: error: ld returned 5 exit status

    avec message microsoft me disant que id.exe est planté.
    j’ai recopié le code de ton site mais rien n’y fait. Je precise que mon PC est sous XP.
    Est ce que d’autres parmi vous ont le meme probleme?
    merci et bon courage pour la fin des travaux, la V2 du site…

    Publié par viala | 7 avril 2015, 2 h 22 min
    • Je j’utilise pas la version 1.6.1, essaye la nouvelle version 1.6.3, ça réglera peut être ton problème.
      Sinon, il serait bon de prévoir un passage à Windows 7 / 8.1 ou 10, XP c’est mort depuis presque un an 😉

      Publié par Skywodd | 9 avril 2015, 13 h 58 min
      • J ai installé la version 1.6.3 mais c est pas mieux. je ne comprends pas, c est toujours la même erreur, or ça a deja fonctionné.

        Publié par viala | 13 avril 2015, 22 h 11 min
      • en copiant le code bout par bout, l’erreur apparait lors de l’utilisation des ports:
        uint8_t port = digitalPinToPort(pin);

        Publié par viala | 14 avril 2015, 10 h 51 min
      • Tu utilises quel carte ?
        Le code de l’article ne fonctionne qu’avec les cartes classiques (pas avec la Due).

        Publié par Skywodd | 14 avril 2015, 12 h 42 min
      • C est une Uno v3 SainSmart. Mais le code a déjà fonctionné. La c est la compilation qui ne passe pas.

        Publié par Viala | 14 avril 2015, 18 h 43 min
      • ça ressemble à un bug du compilateur … ça vient pas du code (marche avec l’ancien ide en version 1.0.5)

        Publié par Skywodd | 14 avril 2015, 18 h 51 min
      • Je confirme, moi aussi j ai essayé sur un autre ordi la version 1.6.3 ne fonctionne pas. Version 1.5 la compilation se fait sans problème. Je vais être reduit à tourner sur une vieille version… A moins qu’il ne soit possible de détourner le probleme avant que le bug ne soit fixé. Est ce qu’il est possible de déclarer le port comme un nouvel objet? Est ce la fonction utilisée qui est mal compilée. Je vais faire quelques recherches mais c est pas trop mon domaine.
        En tout cas merci de tes retours

        Publié par Viala | 15 avril 2015, 21 h 43 min
  26. Bonjour,
    Surper explications.
    Je suis débutant à la retraite et je me pose des questions.
    J’ ai une carte arduino yun avec Linux . de la wifi pour dialoguer avec windows.
    J’ ai branché un DHT11 et j’ ai copié bêtement votre procédure sous windows je vais lai vérifié dès demain
    je vais tenter un test, ma question est simple: faut il un port quelconque sous linux ou ailleurs? si oui comment le définir.
    J’ ai installé mysql et PHP sous linux j’ ai rajouté de l’espace et je voudrais enregistrer les températures dans une table sql auriez vous des exemples ou un fil conducteur.
    J’ ai souvent lu qu’ il fallait les librairies : ‘ARDUINO » et ‘ LIBRAIRIES’ sous linux pour faire fonctionner DHT11 pourquoi?

    Merci d’ avance

    Publié par Guy MADIONA | 9 avril 2015, 22 h 45 min
  27. Bonjour,
    Je viens d’ essayer votre procédure et elle fonctionnne trés bien avec une alimentation par cable usb sur mon ordi mais quand le branche la carte arduino yun sur une prise de courant à l’ aide d’ un cable de chargeur de téléphone qui alimente la carte en 5v , la wifi fonctionne mais je n’ ai plus de port . dans ce cas le programme ne fonctionne plus d’ ou ma question comment rajouter un port et ou?

    Je vous remercie car déja ça marche avec un cable

    Publié par Guy MADIONA | 10 avril 2015, 11 h 07 min
  28. Fonctionne impec du 1er coup.
    Merci beaucoup SKYWODD

    Publié par Jean-jean | 29 septembre 2015, 23 h 25 min
  29. Mon premier essai sous arduino :
    Test sur mac avec un carte funduino.
    aprés avoir mis la bonne vitesse de baud, ça marche mais les températures et humidité sont farfelues : 24 degrés et 30%
    Certainement qu’il va falloir la rôder

    avez pensé à faire afficher sur un ecran type e-link ?

    Publié par sevelindavid | 10 janvier 2016, 20 h 16 min
  30. Bonjour,
    Pour faire un relevé de température dans une pièce sur une journée, j’ai juste rajouté un « delay » au fond du programme. Je fais une mesure toute les 10s qui s’affiche bêtement dans le moniteur série. Un copier coller dans un tableur et on en tire une courbe. Super.
    Questions (il en faut bien quelques unes !)
    – Est-il possible de calibrer le dht11 (+1°) autrement que par une soustraction sur la valeur d’affichage (temp = temp-1)?
    – Est-il possible de faire afficher des demi-degrés (ou des dixièmes d’ailleurs) ?

    Merci.
    Cordialement.

    Publié par Eschallier | 26 janvier 2016, 17 h 29 min
    • >> Est-il possible de calibrer le dht11 (+1°) autrement que par une soustraction sur la valeur d’affichage (temp = temp-1)?

      Non. La calibration du DHT11 est faite en sortie d’usine. Le plus simple est d’utiliser un DHT22 pour avoir une meilleure précision.

      >> Est-il possible de faire afficher des demi-degrés (ou des dixièmes d’ailleurs) ?

      Afficher oui, mesurer non.

      Publié par Skywodd | 26 janvier 2016, 20 h 06 min
  31. le programme ne fonctionne pas pour moi (affichage de temps d’attente dépassé).
    mais j’aimerai avoir de l’aide pour programmer ce capteur sans utiliser la librairie si c’est possible.

    Publié par théo69 | 3 février 2016, 16 h 24 min
  32. Je suis un débutant en programmation arduino!J ai acheté un capteur de température le DHT11! Mais jusque ici il n affiche que 0° et 0%. Pourtant j ai tout essayer avec beaucoup de librairie et beaucoup de programme venant d’un site différent.Pouvez-vous m’aider un peu!!!

    Publié par Houssen | 15 février 2016, 8 h 39 min
  33. bonjour , svp ça ve dire quoi integral data ? , merci de bien vouloir répondre a ma question

    Publié par morsli | 14 Mai 2016, 19 h 41 min
  34. Bonjour j’ai un projet scolaire sur le choix d’une sonde permettant de déterminer la température et l’humidité du sol et qui à partir de ces données nous permettra d’automatiser un système d’arrosage.

    Publié par N'DRI toussaint Jaures | 2 novembre 2017, 22 h 26 min

Rétroliens/Pings

  1. Pingback: [Tuto] Capteur température & humidit... - 23 Mai 2013

  2. Pingback: Arduino | Pearltrees - 12 octobre 2014

  3. Pingback: Sion | Pour quelques lignes de plus... - 18 novembre 2014

  4. Pingback: Electronique | Pearltrees - 21 novembre 2014

  5. Pingback: Arduino | Pearltrees - 12 juin 2016

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.