quiet bee.Le labo ESP32 ↗LE LABO AU LYCÉE

SÉQUENCE 04 / Première → Terminale · Capteur numérique

Acquérir une température.

Comprendre la conversion et les erreurs.

Le défi

Lire une température réelle sans bloquer pendant la conversion. Le DS18B20 est numérique : D4 échange des messages 1-Wire ; elle ne lit pas une tension proportionnelle à la température.

Matériel : DS18B20, résistance de rappel 4,7 kΩ, UNO R4 et fils. Le boîtier TO-92 rend le brochage visible ; une sonde à câble exige la documentation de ses fils.

Schéma de branchement : Acquérir une température
Cliquer pour agrandir · SVG · PNG. Connecteurs déployés pour la lisibilité : suivez les noms des broches de votre carte.

Branchement

DS18B20, face plate vers soi, pattes en basUNO R4
1 / GNDGND
2 / DQD4
3 / VDD5V
Résistance 4,7 kΩEntre DQ et 5V

Alimentation en trois fils, pas en mode parasite. Le DS18B20 accepte cette tension ; tous les capteurs n’acceptent pas 5 V.

Installer OneWire de Paul Stoffregen et DallasTemperature de Miles Burton dans le gestionnaire de bibliothèques. Versions utilisées pour la vérification : OneWire 2.3.8 et DallasTemperature 4.0.6.

Le programme complet

04_temperature.ino

Projet complet ↓
#include <OneWire.h>
#include <DallasTemperature.h>
#include <math.h>

constexpr uint8_t BROCHE_DQ = 4;
constexpr unsigned long MESURE_MS = 5000;
constexpr unsigned long CONVERSION_MS = 800; // Marge au-dela des 750 ms a 12 bits.
OneWire bus(BROCHE_DQ);
DallasTemperature capteurs(&bus);
DeviceAddress adresse;
bool conversion = false;
bool adresseConnue = false;
bool mesureValide = false;
float temperatureC = 0.0f;
unsigned long debutConversion = 0;
unsigned long dernierCycle = 0;
unsigned long derniereMesure = 0;

void lancerMesure() {
  // Recherche du premier capteur : reconnexion possible apres debranchement.
  adresseConnue = capteurs.getAddress(adresse, 0);
  if (!adresseConnue) {
    mesureValide = false;
    Serial.println("Erreur : DS18B20 absent");
    return;
  }
  capteurs.setResolution(adresse, 12);
  capteurs.requestTemperatures();
  debutConversion = millis();
  conversion = true;
}

void gererMesure() {
  const unsigned long maintenant = millis();
  if (conversion && maintenant - debutConversion >= CONVERSION_MS) {
    conversion = false;
    const float t = capteurs.getTempC(adresse);
    mesureValide = isfinite(t) && t != DEVICE_DISCONNECTED_C && t >= -55 && t <= 125;
    if (mesureValide) {
      temperatureC = t;
      derniereMesure = millis();
      Serial.print("Temperature : "); Serial.print(t, 2); Serial.println(" deg C");
    } else {
      Serial.println("Erreur : lecture DS18B20 impossible");
    }
  }
  if (!conversion && maintenant - dernierCycle >= MESURE_MS) {
    dernierCycle = maintenant;
    lancerMesure();
  }
}

void setup() {
  Serial.begin(115200);
  capteurs.begin();
  capteurs.setWaitForConversion(false); // Pas d'attente delay(750).
  dernierCycle = millis();
  lancerMesure();
}

void loop() {
  gererMesure(); // La boucle reste disponible pendant la conversion.
}

Une petite machine à états

LANCERDemander la conversion→ATTENDREContinuer la boucle→LIREValider puis afficher

À 12 bits, la conversion peut durer jusqu’à 750 ms. Le code laisse 800 ms et démarre un cycle toutes les 5 s. setWaitForConversion(false) évite cette attente dans la bibliothèque ; les transactions 1-Wire restent synchrones et prennent un temps court.

Le programme recherche un capteur, demande la conversion puis lit son adresse. Il rejette l’absence, les valeurs non finies et hors plage. Le premier capteur suffit pour la maquette ; plusieurs sondes demandent des adresses explicites.

Deux décimales ne garantissent pas une précision de 0,01 °C. Une valeur de 85 °C n’est pas systématiquement fausse ; une valeur de démarrage persistante invite à vérifier conversion et câblage.

À VOUS DE JOUER / PREMIÈRE

Réchauffer doucement le capteur entre les doigts. Observer le délai. Débrancher le capteur hors tension, redémarrer et vérifier le message d’erreur.

PLUS LOIN / TERMINALE

Comparer plusieurs températures stables à une référence. Distinguer conversion et inertie thermique.

Pistes de correction

Conversion terminée ne signifie pas équilibre thermique. Relever plusieurs points après stabilisation, noter l’incertitude de référence et placer les capteurs dans des conditions comparables.

Étape suivante : La ruche connectée →

SOURCES ET PROLONGEMENTS

Vérifier dans la documentation.

Contenus originaux Quiet Bee. Progression proposée pour travailler la chaîne d’information, le prototypage et la validation ; elle ne remplace pas le programme ni les consignes de votre professeur.