[Tuto] Le capteur de température DS18B20

Dans ce tutoriel, je vais vous montrer la marche à suivre afin de faire fonctionner le capteur de température DS18B20.

Matériel nécessaire :
– 1 arduino UNO 
– 1 capteur de température DS18B20
– 3 jumpers mâle-mâle
1 résistance de 4,7kOhm
1 breadboard

Commençons par le montage :

DS18B20
Pins DS18B20
Branchements
Branchements

Il vous faudra câbler les différents composants de la même manière que l’image ci-dessus.

C’est à dire :

  • Vcc & GND du capteur –> Le GND de l’Arduino
  • Signal du capteur (pin du milieu) –> Pin 2 de l’arduino
  • La résistance de 4,7K entre la pin 2 du capteur et le 5V

Le code maintenant :

#include <OneWire.h> //Librairie du bus OneWire
#include <DallasTemperature.h> //Librairie du capteur

OneWire oneWire(2); //Bus One Wire sur la pin 2 de l'arduino
DallasTemperature sensors(&oneWire); //Utilistion du bus Onewire pour les capteurs
DeviceAddress sensorDeviceAddress; //Vérifie la compatibilité des capteurs avec la librairie

void setup(void){
 Serial.begin(9600); //Permet la communication en serial
 sensors.begin(); //Activation des capteurs
 sensors.getAddress(sensorDeviceAddress, 0); //Demande l'adresse du capteur à l'index 0 du bus
 sensors.setResolution(sensorDeviceAddress, 12); //Résolutions possibles: 9,10,11,12
}

void loop(void){
 sensors.requestTemperatures(); //Demande la température aux capteurs
 Serial.print("La température est: ");
 Serial.print(sensors.getTempCByIndex(0)); //Récupération de la température en celsius du capteur n°0
 Serial.println(" C°");
}

La librairie « DallasTemperature.h » à été spécialement conçue pour ce capteur et nous propose donc des fonctions simplifiées. Ce qui permet de simplifier au maximum le code.

Envoyez ce code sur votre arduino et ouvrez l’écran serial de L’IDE, si tout est bon vous devriez avoir la température qui s’affiche comme ci-dessous.

témperature
Température en serial

A vous de jouer !

21 réflexions sur « [Tuto] Le capteur de température DS18B20 »

  1. bonjour,

    Merci pour votre tuto. C’est tres clair, meme pour un debutant … comme moi. Quelle modif du code dois t’on faire pour mettre 1 autre sonde de t° ?

    merci

    • Bonjour,

      Assez rapidement: il vous faudra rajouter les lignes suivantes:

      – DeviceAddress sensorDeviceAddress1; // Pour déclarer un nouveau capteur

      – sensors.getAddress(sensorDeviceAddress, 1); //Demande l’adresse du capteur à l’index 1 du bus
      sensors.setResolution(sensorDeviceAddress1, 12); //Résolutions possibles: 9,10,11,12

      – Serial.print(sensors.getTempCByIndex(1)); // Affiche la température du capteur à l’index 1 du bus

      Bonne journée !

  2. Bonjour, merci pour ce tutto qui fonctionne très bien.

    J’ai un petit projet de station température qualité de l’air.

    Chaque code fonctionne très bien indépendamment ( température avec une ds18B20 , Grove Air Quality Sensor ). Mais quand je compile les deux codes ensembles j’ai un max d’erreur. Je débute dans la programmation avec un arduino. Je ne sais pas si il une sorte de code pour faire travailler l’arduino d’abord sur la sonde et ensuite sur le grove ou inversement …

    J’utilise donc ton code pour la DS18B20 et voici le code pour le grove Air Quality Sensor.
    Je ne sais pas ce que tu en pense et si tu peux me donner un petit coup de pouce.

    Merci d’avance et bonnes fêtes de fin d’année.

    Dimitri

    voici le code du grove.

    /*
    AirQuality Demo V1.0.
    connect to A0 to start testing. it will needs about 20s to start
    * By: http://www.seeedstudio.com
    */
    #include »AirQuality.h »
    #include »Arduino.h »
    AirQuality airqualitysensor;
    int current_quality =-1;
    void setup()
    {
    Serial.begin(9600);
    airqualitysensor.init(14);
    }
    void loop()
    {
    current_quality=airqualitysensor.slope();
    if (current_quality >= 0)// if a valid data returned.
    {
    if (current_quality==0)
    Serial.println(« High pollution! Force signal active »);
    else if (current_quality==1)
    Serial.println(« High pollution! »);
    else if (current_quality==2)
    Serial.println(« Low pollution! »);
    else if (current_quality ==3)
    Serial.println(« Fresh air »);
    }
    }
    ISR(TIMER1_OVF_vect)
    {
    if(airqualitysensor.counter==61)//set 2 seconds as a detected duty
    {

    airqualitysensor.last_vol=airqualitysensor.first_vol;
    airqualitysensor.first_vol=analogRead(A0);
    airqualitysensor.counter=0;
    airqualitysensor.timer_index=1;
    PORTB=PORTB^0x20;
    }
    else
    {
    airqualitysensor.counter++;
    }
    }

    • Bon j’ai réussi a compiler mon code. Je ne suis pas certain que ça soit du propre propre par contre.
      Mais si de ton coté tu as aussi une solution je veux bien la voir pour comparer avec la mienne et voir si j’ai pas fait un code tirer par les cheveux ^^
      Merci 🙂
      Prochaine étape ajouter le dust sensor 🙂

      • Hello Dimitri !

        Content que tu es pu résoudre ton problème. 🙂

        Comme ca, j’aurais pensé aux variables qui doivent être déclaré globalement ( c’est à dire au même niveau que « int current_quality =-1; ») si tu les utilisent dans les deux fonctions mais tu sembles l’avoir fait. Ton code semble correct, il n’y a pas forcément plus propre dans l’absolu. 🙂

        Bonne fêtes à toi !

        • Oui voilà j’ai ajouter les variables de la sonde ds18b20 à ce niveau 🙂

          Par la suite j’aimerai bien récupérer les données via un raspberry et les exploiter pour en faire un graphique.

          Merci beaucoup en tout cas pour ta réponse rapide.

          🙂

  3. Bonjour. Merci pour le programme. Jr voudrais faire aussi un moteur. Avec une ventilateur. Pouvez vous m’aider svp dans se programme. Merci pour la deuxième. Fois.

  4. Bonjour Merci pour le programme.
    Le programme est bon mais je voudrais que vous m’expliquez pourquoi le GND de la carte Arduino est branché au GND et VCC du capteur.
    Merci
    Cdlt

  5. Bonjour,
    j’ai un projet de récupération de la température via ce capteur et un Arduino. Dans votre code, vous utilisez la librairie « DallasTemperature.h », où l’avez vous récupéré? Merci

  6. Bonjour, j’ai un petit problème :
    dans le moniteur série, il me marque : La température est: -127.00 C°
    Merci d’avance pour votre aide !
    PS : Je débute en programmation !

      • mdrr il faut changer à la ligne :
        Serial.print (« la température est: »)
        et mettre Serial.print « la temperature est »

        il faut changer aussi la ligne :

        Serial.println (« °C ») et mettre Serial.println (degC)
        voilà 😉

  7. Bonjour,
    J’ai un projet en tête qui consiste à alimenter, par un panneau solaire qui délivre une tension variable 0-20V 10W, une pompe 12V 0,7A lorsque la température d’un capteur thermique et supérieure à celle d’un autre capteur thermique.
    Je compte associer
    – deux régulateurs de tension Matek 5V 12V Adjustable Voltage Dual BEC Output Board (5V pour l’arduino et les capteurs, 12V pour la pompe),
    – deux capteurs DS18B20,
    – une pile rechargeable (si nécessaire pour garder live le code arduino). La pompe ne fonctionnera pas si les panneau solaire manque de luminosité et c’est normal, ce n’est pas le but.
    Croyez vous ce projet accessible à un débutant ?
    Puis-je solliciter votre aide pour le câblage et pour le code ?
    Que prévoir d’autres comme composants ?
    Merci d’avance pour toute l’aide que vous accepteriez de m’apporter. Sinon désolé d’encombrer votre forum.
    Olivier

  8. Bonjour,

    Dans la vue de principe de ce tuto (la planche d’essai), il semble que la broche VDD du capteur soit mise à la masse au lieu d’être alimentée :
    1 – Est ce l’un des modes de fonctionnement possibles ?
    2 – Dans l’affirmative, comment le circuit peut il opérer sans alimentation ?
    Merci,

  9. Bonjour, j’ai un petit problème :
    dans le moniteur série, il me marque : La température est: -127.00 C°
    Merci d’avance pour votre aide !
    PS : Je débute en programmation !

  10. Bonjour, j’ai un petit problème :
    dans le moniteur série, il me marque : La température est: -127.00 C°
    Merci d’avance pour votre aide !

Répondre à Tony Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *