La sonde DS18B20 en acier inoxydable est le thermomètre numérique étanche le plus utilisé en électronique : la puce DS18B20 est scellée dans un tube inox, à l’extrémité d’un câble, ce qui permet de mesurer une température là où un composant nu ne survivrait pas — dans l’eau, dans la terre, dans une chambre froide ou dans la gaine d’une chaudière.
Trois fils suffisent pour la brancher, et sa sortie est numérique : l’Arduino lit directement une température en degrés Celsius, sans conversion ni étalonnage. Comme chaque puce porte une adresse unique de 64 bits gravée en usine, on peut même placer plusieurs sondes sur la même broche et lire chacune séparément.
À quoi sert une sonde de température étanche ?
- Aquarium et piscine — surveiller l’eau sans ouvrir le bassin ni plonger un composant nu.
- Chambre froide, frigo, congélateur — enregistrer la température et déclencher une alarme si elle remonte.
- Chaudière et chauffe-eau — mesurer le départ et le retour d’eau chaude.
- Terre et serre — suivre la température du sol pour déclencher un arrosage ou un chauffage.
- Fermentation et bain-marie — maintenir une consigne à un demi-degré près.
- Imprimante 3D et châssis — contrôler une enceinte chauffante, un moteur, un dissipateur.
Caractéristiques techniques
| Capteur | DS18B20 — thermomètre numérique 1-Wire, scellé dans un tube inox |
|---|---|
| Plage de mesure | −55 °C à +125 °C |
| Précision | ±0,5 °C de −10 °C à +85 °C |
| Résolution | 9 à 12 bits, configurable (0,5 °C à 0,0625 °C) |
| Alimentation | 3,0 à 5,5 V — donc utilisable en 3,3 V comme en 5 V |
| Interface | 1-Wire : un seul fil de données, en plus de l’alimentation |
| Identifiant | Adresse unique de 64 bits gravée en usine |
| Capteurs sur une broche | Plusieurs, chacun reste identifiable par son adresse |
| Temps de conversion | Jusqu’à 750 ms en résolution 12 bits |
| Consommation | Environ 1,5 mA pendant la conversion, quelques microampères au repos |
| Tube | Acier inoxydable, diamètre 6 mm |
| Câble | Trois conducteurs, environ un mètre, gaine étanche |
| Fils | Rouge : alimentation — Noir : masse — Jaune : données |
Sur la version la plus courante de cette sonde, les trois fils sont repérés par leur couleur. Si votre sachet porte des couleurs différentes, la convention reste la même : le rouge est toujours l’alimentation et le noir toujours la masse ; le troisième fil est celui des données.
Le câblage : trois fils et une résistance
La seule pièce à ajouter est une résistance de tirage (on dit aussi pull-up) de 4,7 kΩ, placée entre le fil de données et l’alimentation. Ce n’est pas une option : sans elle, le bus 1-Wire n’a pas de niveau haut défini et la lecture renvoie une valeur d’erreur. Une résistance de 4,7 kΩ convient pour une longueur de câble usuelle ; si vous tirez les fils sur plus de vingt mètres, il faut au contraire la réduire, autour de 2,2 kΩ.
| Sonde — fil rouge | → Arduino 5V (ou 3V3) |
|---|---|
| Sonde — fil noir | → Arduino GND |
| Sonde — fil jaune | → Arduino D2 |
| Résistance 4,7 kΩ — patte 1 | → fil jaune (même broche D2) |
| Résistance 4,7 kΩ — patte 2 | → fil rouge (ou 5V) |
Une variante existe : l’alimentation dite « parasite », où la sonde se nourrit par le fil de données et où deux fils seulement sont nécessaires. Elle fonctionne, mais devient instable dès que le câble s’allonge ou que la conversion tourne en continu. Sur un montage fixe, gardez les trois fils : c’est plus sûr et cela ne coûte rien.
Mini-projet : un thermomètre avec alarme
Un montage d’une vingtaine de minutes : la température s’affiche sur un écran LCD, et au-delà du seuil réglé une LED s’allume et un buzzer retentit.
Ce qu’il faut
| La mesure | La sonde DS18B20 étanche — celle de cette page, avec sa résistance de tirage de 4,7 kΩ |
|---|---|
| Le cerveau | Uno R3 + câble USB |
| L’affichage | Afficheur LCD 16×02 I2C — deux fils de commande seulement |
| L’alarme visuelle | Une LED rouge 5 mm |
| Sa protection | Résistance 1/4w 470 ohm |
| L’alarme sonore | Un buzzer actif 5 V |
| Le support | Plaque d’essai 400 points |
| Les liaisons | 10 × fil mâle-femelle |
Le câblage
| Sonde — rouge | → 5V |
|---|---|
| Sonde — noir | → GND |
| Sonde — jaune | → D2 |
| Résistance 4,7 kΩ | entre D2 et 5V |
| LCD I2C — VCC | → 5V |
| LCD I2C — GND | → GND |
| LCD I2C — SDA | → A4 |
| LCD I2C — SCL | → A5 |
| LED — patte longue | → D8, en passant par la résistance de 470 Ω |
| LED — patte courte | → GND |
| Buzzer — fil rouge | → D9 |
| Buzzer — fil noir | → GND |
Les bibliothèques
Deux bibliothèques sont nécessaires, à installer depuis le gestionnaire de bibliothèques de l’IDE Arduino : OneWire (le protocole du bus) et DallasTemperature (la lecture de la température et la gestion des adresses). Une troisième, LiquidCrystal_I2C, sert uniquement à l’écran ; si vous n’avez pas d’afficheur, retirez les lignes qui le concernent et surveillez la valeur sur le moniteur série.
Le programme
À copier dans l’IDE Arduino, puis à téléverser sur la carte :
/*
* Thermometre DS18B20 sur sonde etanche, avec alarme
* Carte : Arduino Uno R3
* Montage : sonde DS18B20 en 1-Wire sur D2 avec resistance de tirage,
* afficheur LCD 16x02 I2C, LED rouge et buzzer sur le seuil
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "OneWire.h"
#include "DallasTemperature.h"
#include "LiquidCrystal_I2C.h"
const byte PIN_ONEWIRE = 2; // fil de donnees de la sonde
const byte PIN_LED = 8; // LED d'alarme, via 470 ohms
const byte PIN_BUZZER = 9; // buzzer actif
const float SEUIL = 30.0; // degres Celsius
const float SONDE_ABSENTE = -127.0;
OneWire bus(PIN_ONEWIRE);
DallasTemperature sonde(&bus);
LiquidCrystal_I2C lcd(0x27, 16, 2); // adresse 0x27 ; essayer 0x3F sinon
void setup() {
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BUZZER, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.print("Sonde DS18B20");
sonde.begin();
delay(1000); // laisse le bus s'initialiser
Serial.print("Sondes detectees : ");
Serial.println(sonde.getDeviceCount());
lcd.clear();
}
void loop() {
sonde.requestTemperatures(); // lance la conversion, attend la fin
float t = sonde.getTempCByIndex(0); // premiere sonde du bus
if (t == SONDE_ABSENTE) {
lcd.setCursor(0, 0);
lcd.print("Sonde non lue");
lcd.setCursor(0, 1);
lcd.print("Verifier le fil");
digitalWrite(PIN_LED, LOW);
digitalWrite(PIN_BUZZER, LOW);
delay(1000);
return;
}
lcd.setCursor(0, 0);
lcd.print("Temperature");
lcd.setCursor(0, 1);
lcd.print(t, 2); // deux decimales
lcd.print((char)223); // symbole degre
lcd.print("C ");
Serial.print("Temperature : ");
Serial.println(t);
if (t > SEUIL) {
digitalWrite(PIN_LED, HIGH);
digitalWrite(PIN_BUZZER, HIGH);
} else {
digitalWrite(PIN_LED, LOW);
digitalWrite(PIN_BUZZER, LOW);
}
delay(1000); // une mesure par seconde suffit largement
}Comment ça marche
sonde.begin()explore le bus et compte les puces présentes. Le nombre affiché dans le moniteur série est le premier contrôle à faire : s’il vaut zéro, le problème est dans le câblage ou la résistance, pas dans le programme.requestTemperatures()demande la conversion et attend qu’elle soit terminée — soit jusqu’à 750 ms en 12 bits.getTempCByIndex(0)renvoie ensuite la valeur en degrés Celsius, sous forme de nombre décimal.- La valeur −127 °C est le code d’erreur de la puce : elle signifie « aucune réponse sur le bus ». Le programme l’intercepte pour éviter d’afficher une température crédible alors que rien n’est lu.
lcd.print(t, 2)affiche deux décimales ; à 12 bits, la puce descend jusqu’à quatre décimales, inutiles pour une alarme.
Pour aller plus loin
- Plusieurs sondes sur la même broche. Branchez les trois fils de la seconde sonde en parallèle sur les mêmes points (rouge avec rouge, noir avec noir, jaune avec jaune) : une seule résistance de 4,7 kΩ suffit pour tout le bus. Dans le programme, remplacez l’index par la boucle de lecture des adresses et appelez
getTempCByAddress(); le moniteur série affiche l’adresse de chaque puce à identifier une fois pour toutes. - Un relevé horodaté. Ajoutez une horloge temps réel DS3231 pour écrire chaque mesure avec sa date et son heure, sans dépendre de l’heure de mise sous tension.
- Un seuil qui commande du 230 V. Remplacez la LED par un module 1 relais 5 V et le buzzer par un ventilateur ou une résistance chauffante. Coupez le disjoncteur avant toute intervention sur le circuit de puissance, et enfermez le relais dans un boîtier isolant.
- Une mesure consultable à distance. Confiez la lecture à une carte WiFi : la liaison 1-Wire se câble de la même façon, et la température part sur un écran ou une page web.
Questions fréquentes
Ma lecture vaut toujours −127 °C, que faire ?
Trois causes, dans cet ordre de fréquence : la résistance de tirage de 4,7 kΩ manque, ou elle est branchée entre les mauvais fils ; le fil jaune est sur une autre broche que celle déclarée dans le programme ; le fil de données est mal enfoncé dans la plaque d’essai. Vérifiez ensuite la couleur des fils : certains lots n’utilisent pas le jaune pour les données. Le nombre de sondes détectées affiché au démarrage, dans le moniteur série, tranche immédiatement entre un problème de câblage et un problème de programme.
Puis-je la plonger dans l’eau ?
La sonde elle-même est prévue pour cela : le tube inox est scellé et supporte un séjour permanent dans l’eau. La précaution porte sur la jonction entre le câble et le tube : c’est le point faible si le montage est immergé sur une longue période. Évitez également de descendre la sonde dans un liquide très chaud au-delà de la température maximale de la puce, et ne dépassez pas 100 °C en usage continu.
Fonctionne-t-elle en 3,3 V ?
Oui, la puce accepte de 3,0 à 5,5 V. Ce point la distingue de nombreux capteurs analogiques : elle se branche sans adaptation sur un ESP32 ou un ESP8266, et la même mesure reste juste sur les deux tensions d’alimentation.
Quelle différence avec un LM35 ou un DHT11 ?
Le capteur LM35 délivre une tension analogique, proportionnelle à la température, mais il n’est pas étanche et sa précision dépend du convertisseur de l’Arduino. Le DHT11 ajoute l’humidité relative, mais dans une précision de ±2 °C et dans un boîtier percé qui craint l’eau. La sonde DS18B20, elle, ne mesure que la température — mais elle le fait en numérique à ±0,5 °C, avec un câble de un mètre et un tube inox qui vont là où les deux autres ne peuvent pas aller.
Faut-il une bibliothèque ?
Oui. Le protocole 1-Wire est assez complexe pour ne pas être réécrit à la main : la bibliothèque OneWire le gère et DallasTemperature se charge de la conversion et des adresses. Les deux s’installent en deux clics depuis l’IDE Arduino et fonctionnent sans réglage.
Le câble peut-il être rallongé ?
L’information reste numérique sur toute la longueur, donc elle ne se dégrade pas comme un signal analogique. En pratique, restez sous une vingtaine de mètres avec une résistance de 4,7 kΩ ; au-delà, diminuez la résistance de tirage et évitez de faire cheminer le fil de données à côté d’un câble de puissance.
À combiner avec
Pour un premier montage, le KIT Starter fournit la carte Uno R3, la plaque d’essai, les fils mâle-femelle, des LED et un buzzer : il ne manque que la sonde et l’afficheur pour reproduire exactement le projet de cette page. Si vous voulez d’emblée comparer deux technologies de mesure, le DHT22 mesure l’humidité en plus de la température et se code sur la même carte.









