Capteur de température Dallas
Matériel testé : sonde Dallas DS18B20 (datasheet MaximIntegrated)
Bibliothèque nécessaire : OneWire
Le capteur DS18B20 est un capteur de température numérique intégrant :
- un capteur analogique
- un convertisseur analogique / numérique 12bits
- l’électronique de communication et alimentation.
Il communique via un bus 1-Wire qui permet de connecter (en série, parallèle ou en étoile) des composants avec seulement deux fils (un fil de données et un fil de masse).
Câblage
Il est possible de brancher plusieurs capteurs DS sur le même bus, c’est à dire sur le même fil de donnée !
Programmation
Cas d’un seul capteur de modèle DS18B20
// Inclusion de la bibliothèque #include <OneWire.h> // Connecteur numérique relié à DQ const byte DS_PIN = 7; // Création de l'objet associé au DS18B20 OneWire ds(DS_PIN); // // Fonction de lecture de la température // void getTemperature(float *temperature) { byte data[9], addr[8]; // Données et Adresse du module DS18B20 // Réinitialisation du bus ds.reset_search(); // Recherche du capteur if (!ds.search(addr)) return; // Vérification de l'adresse reçue if (OneWire::crc8(addr, 7) != addr[7]) return; // Vérification du modèle de capteur (DS18B20) if (addr[0] != 0x28) return; // Sélection du capteur ds.reset(); ds.select(addr); // Lancement de la mesure ds.write(0x44, 1); delay(800); // Resélection du capteur ds.reset(); ds.select(addr); // Envoie d'une demande de lecture ds.write(0xBE); // Lecture des données for (byte i = 0; i < 9; i++) { data[i] = ds.read(); } // Conversion des données en degrés Celcius *temperature = ((data[1] << 8) | data[0]) * 0.0625; } void setup() { Serial.begin(115200); } void loop() { float temperature; // Lecture de la température getTemperature(&temperature); // Affichage de la température Serial.print(F("Temperature : ")); Serial.print(temperature, 1); Serial.write(176); // Caractère degré Serial.write('C'); Serial.println(); }
Cas de plusieurs capteurs
Une solution est donnée sur le Carnet du Maker.
merci beaucoup, parfait