Vous cherchez un moyen fiable de mesurer la température ambiante avec votre Arduino ? Le module capteur de température DS18B20 est un choix idéal : précis à ±0,5 °C, simple à câbler grâce au protocole 1-Wire, et capable de fonctionner sur une plage de -55 °C à +125 °C. Dans ce tutoriel, on va câbler le capteur, écrire le programme et afficher la température sur le moniteur série de l'IDE Arduino.



Matériel nécessaire

Voici la liste des composants utilisés dans ce projet. Tout le matériel est disponible chez Lextronic :

Composant    Quantité     Rôle dans le projet
Carte Arduino Uno Rev 3    1     Carte principale, lit les données du capteur
Module capteur de température DS18B20    1     Mesure la température ambiante
Straps flexibles M/F    3     Connexion entre l'Arduino et le capteur

Exemple de raccordement de module capteur de température DS18B20 OPENSE042 sur un Arduino

Schéma de câblage du module DS18B20 avec l'Arduino Uno



Schéma de câblage

Le module capteur DS18B20 dispose de trois broches et se connecte à l'Arduino Uno de la façon suivante :

  • Broche Signal (S) du module → broche numérique D3 de l'Arduino
  • Broche + (VCC) du module → broche 5V de l'Arduino
  • Broche − (GND) du module → broche GND de l'Arduino


Le code Arduino

Voici le sketch complet à téléverser dans votre Arduino Uno via l'IDE Arduino. Ce programme lit la température toutes les 2 secondes et l'affiche sur le moniteur série.

Avant de téléverser, installez les deux bibliothèques nécessaires via le Gestionnaire de bibliothèques (menu Outils > Gérer les bibliothèques) :

  • OneWire de Paul Stoffregen
  • DallasTemperature de Miles Burton

// ============================================
// Projet : Thermomètre numérique DS18B20
// Carte  : Arduino Uno
// Capteur: Module DS18B20 (protocole 1-Wire)
// ============================================
 
#include <OneWire.h>
#include <DallasTemperature.h>
 
// Broche de données du capteur DS18B20
#define BROCHE_CAPTEUR 3
 
// Création de l'instance OneWire sur la broche définie
OneWire bus1Wire(BROCHE_CAPTEUR);
 
// Passage du bus OneWire à la bibliothèque DallasTemperature
DallasTemperature capteurs(&bus1Wire);
 
// Variable pour stocker l'adresse unique du capteur
DeviceAddress adresseCapteur;
 
void setup() {
  // Initialisation de la communication série à 9600 bauds
  Serial.begin(9600);
  Serial.println("--- Thermometre DS18B20 ---");
  Serial.println("Initialisation du capteur...");
 
  // Démarrage de la bibliothèque DallasTemperature
  capteurs.begin();
 
  // Vérification du nombre de capteurs détectés
  int nbCapteurs = capteurs.getDeviceCount();
  Serial.print("Capteur(s) detecte(s) : ");
  Serial.println(nbCapteurs);
 
  if (nbCapteurs == 0) {
    Serial.println("ERREUR : aucun capteur DS18B20 trouve !");
    Serial.println("Verifiez le cablage et la resistance pull-up.");
    while (1); // Arrêt du programme
  }
 
  // Récupération de l'adresse du premier capteur
  if (capteurs.getAddress(adresseCapteur, 0)) {
    // Réglage de la résolution à 12 bits (précision max)
    capteurs.setResolution(adresseCapteur, 12);
    Serial.println("Resolution configuree : 12 bits");
  }
 
  Serial.println("Demarrage des mesures...");
  Serial.println();
}
 
void loop() {
  // Lancement d'une conversion de température
  capteurs.requestTemperatures();
 
  // Lecture de la température en degrés Celsius
  float temperatureC = capteurs.getTempCByIndex(0);
 
  // Vérification que la lecture est valide
  if (temperatureC == DEVICE_DISCONNECTED_C) {
    Serial.println("Erreur : capteur deconnecte !");
  } else {
    // Affichage de la température
    Serial.print("Temperature : ");
    Serial.print(temperatureC, 2);
    Serial.println(" C");
  }
 
  // Pause de 2 secondes avant la prochaine mesure
  delay(2000);
}



Explications du code

Le programme utilise deux bibliothèques complémentaires. OneWire gère le protocole de communication bas niveau du bus 1-Wire, tandis que DallasTemperature fournit des fonctions de haut niveau pour lire la température directement en degrés Celsius. C'est cette seconde bibliothèque qui fait tout le travail de conversion.

Dans la fonction setup(), le programme initialise le port série, démarre la bibliothèque et vérifie qu'au moins un capteur est détecté sur le bus. Si aucun capteur n'est trouvé, un message d'erreur s'affiche et le programme s'arrête — pas de panique, c'est généralement un souci de câblage ou de résistance pull-up. On configure aussi la résolution à 12 bits, ce qui donne la meilleure précision (0,0625 °C par pas).

La boucle loop() est assez directe : on demande au capteur de mesurer (requestTemperatures()), on récupère la valeur avec getTempCByIndex(0), on vérifie qu'elle est valide, puis on l'affiche. La constante DEVICE_DISCONNECTED_C vaut -127 °C — si vous voyez cette valeur, c'est que le capteur ne répond pas. Le delay(2000) espace les mesures de 2 secondes, ce qui est largement suffisant pour du monitoring ambiant.

Fonctionnement du capteur de température numérique DS18B20

Principe de fonctionnement du capteur DS18B20 : de la mesure analogique à la donnée numérique



Résultats et tests

Si tout est correctement câblé, vous devriez voir apparaître dans le moniteur série (à 9600 bauds) quelque chose comme ceci :


--- Thermometre DS18B20 ---
Initialisation du capteur...
Capteur(s) detecte(s) : 1
Resolution configuree : 12 bits
Demarrage des mesures...
 
Temperature : 22.75 C
Temperature : 22.81 C
Temperature : 23.00 C

À température ambiante (dans une pièce à ~20-25 °C), les valeurs affichées doivent être cohérentes et stables, avec de faibles variations de l'ordre de 0,1 à 0,3 °C entre chaque mesure. Si vous posez le doigt sur le capteur, la température devrait grimper progressivement vers 30-35 °C — c'est un bon test rapide pour vérifier que tout fonctionne.

⚠️ Attention : En résolution 12 bits, la conversion prend environ 750 ms. Le delay(2000) du programme est donc bien dimensionné. Si vous réduisez trop le délai, vous risquez de lire des valeurs avant que la conversion ne soit terminée.



Pour aller plus loin

Le projet de base fonctionne, mais il y a plein de façons de l'enrichir. Voici quelques pistes :

Afficher la température sur un écran OLED

Plutôt que de rester branché à l'ordinateur, ajoutez un afficheur OLED I2C 128x64 pixels pour afficher la température en temps réel. Deux fils supplémentaires (SDA et SCL) suffisent puisque l'OLED utilise le bus I2C.

Connecter plusieurs capteurs DS18B20

L'un des gros avantages du protocole 1-Wire, c'est la possibilité de connecter plusieurs capteurs sur la même broche de données. Chaque DS18B20 possède une adresse unique de 64 bits. Vous pouvez donc surveiller la température de plusieurs zones avec un seul fil de données.

Enregistrer les données sur carte SD

Pour du monitoring longue durée (serre, cave à vin, local technique), un module lecteur de carte SD permet d'enregistrer les relevés de température avec horodatage dans un fichier CSV. Parfait pour analyser les tendances sur plusieurs jours.

Créer une alerte température

Ajoutez un buzzer ou une LED pour déclencher une alarme quand la température dépasse un seuil. Quelques lignes de code supplémentaires dans la boucle loop() suffisent pour comparer la valeur lue à une limite et activer une sortie numérique.

Variantes et extensions du projet thermomètre DS18B20 Arduino

Quatre idées pour enrichir votre projet thermomètre DS18B20



Questions fréquentes

Ce projet fonctionne-t-il avec un Arduino Nano ou un Arduino Mega ?

Oui, le code est compatible avec toutes les cartes Arduino disposant d'au moins une broche numérique. Il suffit d'adapter la constante BROCHE_CAPTEUR si vous utilisez une broche différente. Sur un Arduino Mega, évitez les broches 20 et 21 (réservées à l'I2C) si vous prévoyez d'ajouter un écran OLED plus tard.

 

Ressources et documentation

Datasheet officielle du DS18B20

La documentation technique complète du DS18B20 par Analog Devices (ex-Maxim Integrated) détaille les spécifications électriques, les modes de fonctionnement et les protocoles de communication.

Consulter la datasheet (PDF)

Bibliothèque OneWire (GitHub)

Développée par Paul Stoffregen, cette bibliothèque gère le protocole 1-Wire pour Arduino. Indispensable pour communiquer avec le DS18B20 et d'autres composants 1-Wire.

Consulter le dépôt GitHub

Bibliothèque DallasTemperature (GitHub)

Créée par Miles Burton, cette bibliothèque simplifie la lecture des capteurs de température Dallas (DS18B20, DS18S20, DS1822). Elle s'appuie sur OneWire et fournit des fonctions prêtes à l'emploi.

Consulter le dépôt GitHub

Page produit DS18B20 sur Lextronic

Retrouvez le module capteur de température DS18B20 dans notre catalogue, avec ses caractéristiques détaillées et les produits associés.

Voir la fiche produit

Produit ajouté à ma liste