Robotique-Projet
Bonjour et bienvenu sur le forum ROBOTIQUE-PROJET

Merci de nous rejoindre, pour avoir accès aux forum en entier,

il suffis juste de s'inscrire sa prends 2 minutes, et bien sur de faire sa

présentation, au plaisir de se croisé sur le forum.
Robotique-Projet

Forum sur la Robotique & Informatique & Programmation


Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

Voir le sujet précédent Voir le sujet suivant Aller en bas  Message [Page 1 sur 1]

1 Capteur de température DS18B20 le Lun 13 Mai - 19:31

Seb03000

avatar
Fondateur
Fondateur
Aujourd’hui je vous ai préparé un article qui va vous faire monter en température

On va parler du DS18B20 !





J’avais complètement zappé de faire un tutoriel sur ce composant tout
ce qui a de plus classique, je me rattrape donc avec cet article

Le DS18B20 est un capteur de température du fabricant Dallas, il
communique via un bus 1-Wire (du même fabricant) et possède une
précision de 12 bits sur une plage de -55°C à +125°C.

Si vous voulez les détails voici le datasheet de la bête :
http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf



Le hardware requis pour ce tutoriel :



Une carte arduino,
Une protoboard,
Une résistance de 4K7,
Un capteur Dallas DS18B20,
Des fils



Pourquoi la résistance de 4K7 me direz vous ?
Tout simplement parce que c’est précisé dans le datasheet du fabricant,
et qu’en bon électronicien le fabricant a toujours raison

Au passage vous aurez besoin du pinout du DS18B20 :



Remarque : Dans ce tutoriel je vais alimenter le DS18B20 normalement et mode non parasite.

Le montage :





Arduino -> DS18B20
D7 -> Data
VCC -> VCC
GND -> GND

Data -> résistance de 4K7 -> VCC



Le fonctionnement interne du DS18B20 :

Comme tout module Dallas 1-Wire, le DS18B20 contient un "scratchpad"
qui est une sorte de mémoire tampon sécurisé ou l’on peut venir lire
et/ou écrire.

Voici comment se structure le scratchpad du DS18B20 :



On peut voir que les deux premiers octets contiennent la température
mesurée, c’est sur ces deux octets que nous allons venir lire avec notre
programme.

Le détail de ces deux registres :





Pas facile à comprendre hein
La température étant une valeur à virgule celle ci est stockée sous la
forme d’un flottant avec un exposant, une mantisse et un signe.

Pour avoir la température en degré Celsius il faut appliquer la formule suivante :
temp = ((MSB << 8) + LSB) * 0.0625;

Mais cela ne fera pas tout !

Pour pouvoir lire la température il faut tout d’abord lancer une mesure de température (logique).
Pour ce faire il faut envoyer la commande 0×44, puis faire une demande de lecture du scratchpad (0xBE).

Sauf que …



La conversion analogique -> numérique n’est pas instantanée !
Elle prend même beaucoup de temps ! Presque une seconde !



Bien maintenant que nous avons tous les morceaux, il suffit de rassembler les pièces du puzzle !
Code:



#include <OneWire.h> // Inclusion de la librairie OneWire
 
#define DS18B20 0x28    // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 7 // Broche utilisée pour le bus 1-Wire
 
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
 
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp){
  byte data[9], addr[8];
  // data : Données lues depuis le scratchpad
  // addr : adresse du module 1-Wire détecté
 
  if (!ds.search(addr)) { // Recherche un module 1-Wire
    ds.reset_search();    // Réinitialise la recherche de module
    return false;        // Retourne une erreur
  }
 
  if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
    return false;                        // Si le message est corrompu on retourne une erreur
 
  if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
    return false;        // Si ce n'est pas le cas on retourne une erreur
 
  ds.reset();            // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
 
  ds.write(0x44, 1);      // On lance une prise de mesure de température
  delay(800);            // Et on attend la fin de la mesure
 
  ds.reset();            // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
  ds.write(0xBE);        // On envoie une demande de lecture du scratchpad
 
  for (byte i = 0; i < 9; i++) // On lit le scratchpad
    data[i] = ds.read();      // Et on stock les octets reçus
 
  // Calcul de la température en degré Celsius
  *temp = ((data[1] << 8) | data[0]) * 0.0625;
 
  // Pas d'erreur
  return true;
}
 
// setup()
void setup() {
  Serial.begin(9600); // Initialisation du port série
}
 
// loop()
void loop() {
  float temp;
 
  // Lit la température ambiante à ~1Hz
  if(getTemperature(&temp)) {
   
    // Affiche la température
    Serial.print("Temperature : ");
    Serial.print(temp);
    Serial.write(176); // caractère °
    Serial.write('C');
    Serial.println();
  }
}
Et voici le résultat dans le Serial Monitor :
(J’ai collé le capteur devant mon ventilateur d’ordinateur)
Temperature : 34.63°C
Temperature : 34.63°C
Temperature : 34.63°C
Temperature : 34.63°C
Temperature : 34.63°C
Temperature : 34.63°C


_________________
Voici ma chaîne YouTube: Drone-250-Time https://www.youtube.com/channel/UC3ArL72UR4AjpaF5r-pXpSg
Voici ma chaîne YouTube: Dark-Best https://www.youtube.com/channel/UCqHLYZ9IJyfguosa8_rz9Jg
Faite passé l'information les amies , merci a vous tous.
http://jarvise.atspace.cc/

Voir le sujet précédent Voir le sujet suivant Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum