Différences entre versions de « Arduino DS18B20 »
(Page créée avec « = Partie électronique = == Le composant == Le DS18B20 peut être trouvé tel quel ou déjà monté sur une platine. C'est sous cette deuxième forme que nous allons l'uti... ») |
|||
(15 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
= Partie électronique = | = Partie électronique = | ||
== Le composant == | == Le composant == | ||
− | Le DS18B20 peut être trouvé | + | Le DS18B20 peut être trouvé au format '''TO-92''' ou déjà monté sur une platine. |
{|align=center | {|align=center | ||
|- | |- | ||
− | | | + | |[[Fichier:DS18B20.jpg|centré|100px]] || [[Fichier:DS18B20_mounted.jpg|centré|150px]] |
− | [[Fichier:DS18B20.jpg|centré| | + | |- |
− | | | + | |align=center| Format '''TO-92''' ||align=center| Sur une platine avec la résistance de ''pull-up'' |
− | [[Fichier:DS18B20_mounted.jpg|centré|150px]] | ||
|} | |} | ||
− | Ce composant utilise le protocole 1-Wire propriétaire à Dallas, la firme qui le fabrique. L'avantage de ce protocole est de n'utiliser qu'un fil pour la communication (avec la masse) et que sur ce fil peuvent être | + | Ce composant utilise le protocole 1-Wire propriétaire à Dallas, la firme qui le fabrique. L'avantage de ce protocole est de n'utiliser qu'un fil pour la communication (avec la masse) et que sur ce fil peuvent être connectées plusieurs sondes de la marque Dallas (jusqu'à 127 exactement). |
Un autre avantage est que ce composant possède un registre qui permet de modifier la précision de la valeur renvoyée. | Un autre avantage est que ce composant possède un registre qui permet de modifier la précision de la valeur renvoyée. | ||
Ligne 23 : | Ligne 22 : | ||
|align=center| 12 bits ||align=center|0.0625°C ||align=center|750 ms | |align=center| 12 bits ||align=center|0.0625°C ||align=center|750 ms | ||
|} | |} | ||
+ | |||
== Le montage == | == Le montage == | ||
Le montage suivant prévoit une résistance de pull-up sur le lien 1-Wire. Si vous utilisez la version avec la platine, la résistance est déjà présente, il ne reste plus qu'à brancher la broche data directement à l'Arduino. | Le montage suivant prévoit une résistance de pull-up sur le lien 1-Wire. Si vous utilisez la version avec la platine, la résistance est déjà présente, il ne reste plus qu'à brancher la broche data directement à l'Arduino. | ||
[[Fichier:DS18B20 diagram.jpg|centré|400px]] | [[Fichier:DS18B20 diagram.jpg|centré|400px]] | ||
+ | |||
+ | = Partie logicielle = | ||
+ | == Import des librairies == | ||
+ | Avant de continuer, il faut importer la librairie nécessaire à l'utilisation du protocole 1-Wire ainsi que du capteur Dallas DS18B20. | ||
+ | {|align=center | ||
+ | |- | ||
+ | |[[Fichier:Arduino_IDE_1Wire_install.png|centré|400px]] || [[Fichier:Arduino_IDE_DallasTemperature_install.png|centré|400px]] | ||
+ | |- | ||
+ | |align=center| Librairie OneWire ||align=center| Librairie DallasTemperature | ||
+ | |} | ||
+ | |||
+ | == Récupérer la température == | ||
+ | Voila un exemple qui affiche le nombre de périphériques et qui récupère la température du premier | ||
+ | <source lang="c"> | ||
+ | #include <OneWire.h> | ||
+ | #include <DallasTemperature.h> | ||
+ | |||
+ | // La patte de l'Arduino sur laquelle est branchée la patte "data" du DS18B20 | ||
+ | #define ONE_WIRE_PIN 2 | ||
+ | // Créer une instance du protocole 1-Wire pour communiquer avec le DS18B20 | ||
+ | OneWire oneWire(ONE_WIRE_PIN); | ||
+ | // Création d'une instance de DallasTemperature pour "comprendre" le DS18B20 | ||
+ | DallasTemperature sensors(&oneWire); | ||
+ | // Les différentes résolutions de lecture de la température | ||
+ | int resolutions[] = { 9, 10, 11, 12 }; | ||
+ | |||
+ | void setup(void) | ||
+ | { | ||
+ | // Démarrage du port série | ||
+ | Serial.begin(9600); | ||
+ | // On démarre la communication avec le capteur | ||
+ | sensors.begin(); | ||
+ | // On compte le nombre de capteur | ||
+ | deviceNumber(); | ||
+ | isParasitePower(); | ||
+ | } | ||
+ | |||
+ | void loop(void) | ||
+ | { | ||
+ | Serial.println(F("-----------------")); | ||
+ | // On itére sur le tableau des résolutions | ||
+ | for(unsigned int i=0; i < 4; i++){ | ||
+ | // On applique la résolution | ||
+ | sensors.setResolution(resolutions[i]); | ||
+ | // On lit la température | ||
+ | readTemp(); | ||
+ | } | ||
+ | // On attend 2 seconde | ||
+ | delay(2000); | ||
+ | } | ||
+ | |||
+ | void readTemp(){ | ||
+ | // On demande au capteur de faire une lecture de la température | ||
+ | sensors.requestTemperatures(); | ||
+ | Serial.print(F("Temperature is ")); | ||
+ | // On récupére la valeur | ||
+ | Serial.print(sensors.getTempCByIndex(0)); | ||
+ | Serial.print(F(" at ")); | ||
+ | // On affiche la résolution du capteur | ||
+ | Serial.print(sensors.getResolution()); | ||
+ | Serial.println(F(" bits ")); | ||
+ | } | ||
+ | |||
+ | void deviceNumber(){ | ||
+ | Serial.print(F("Searching devices... ")); | ||
+ | // Compte les capteur OneWire sur le PIN | ||
+ | Serial.print(F("Found ")); | ||
+ | Serial.print(sensors.getDeviceCount()); | ||
+ | Serial.println(F(" devices.")); | ||
+ | } | ||
+ | |||
+ | bool isParasitePower(){ | ||
+ | Serial.print(F("Parasite power is: ")); | ||
+ | // Vérification de l'utilisation du mode parasite | ||
+ | if (sensors.isParasitePowerMode()){ | ||
+ | Serial.println(F("ON")); | ||
+ | } else { | ||
+ | Serial.println(F("OFF")); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | == Résultat == | ||
+ | On peut voir qu'un arrondi est effectué automatiquement par le capteur plus la résolution est faible. | ||
+ | [[Fichier:Arduino ds18b20 temp reading serial.png|centré|400px]] |
Version actuelle datée du 17 octobre 2016 à 19:21
Partie électronique
Le composant
Le DS18B20 peut être trouvé au format TO-92 ou déjà monté sur une platine.
Format TO-92 | Sur une platine avec la résistance de pull-up |
Ce composant utilise le protocole 1-Wire propriétaire à Dallas, la firme qui le fabrique. L'avantage de ce protocole est de n'utiliser qu'un fil pour la communication (avec la masse) et que sur ce fil peuvent être connectées plusieurs sondes de la marque Dallas (jusqu'à 127 exactement).
Un autre avantage est que ce composant possède un registre qui permet de modifier la précision de la valeur renvoyée.
Mode | Résolution | Temps de conversion |
---|---|---|
9 bits | 0.5°C | 93.75 ms |
10 bits | 0.25°C | 187.5 ms |
11 bits | 0.125°C | 375 ms |
12 bits | 0.0625°C | 750 ms |
Le montage
Le montage suivant prévoit une résistance de pull-up sur le lien 1-Wire. Si vous utilisez la version avec la platine, la résistance est déjà présente, il ne reste plus qu'à brancher la broche data directement à l'Arduino.
Partie logicielle
Import des librairies
Avant de continuer, il faut importer la librairie nécessaire à l'utilisation du protocole 1-Wire ainsi que du capteur Dallas DS18B20.
Librairie OneWire | Librairie DallasTemperature |
Récupérer la température
Voila un exemple qui affiche le nombre de périphériques et qui récupère la température du premier
#include <OneWire.h>
#include <DallasTemperature.h>
// La patte de l'Arduino sur laquelle est branchée la patte "data" du DS18B20
#define ONE_WIRE_PIN 2
// Créer une instance du protocole 1-Wire pour communiquer avec le DS18B20
OneWire oneWire(ONE_WIRE_PIN);
// Création d'une instance de DallasTemperature pour "comprendre" le DS18B20
DallasTemperature sensors(&oneWire);
// Les différentes résolutions de lecture de la température
int resolutions[] = { 9, 10, 11, 12 };
void setup(void)
{
// Démarrage du port série
Serial.begin(9600);
// On démarre la communication avec le capteur
sensors.begin();
// On compte le nombre de capteur
deviceNumber();
isParasitePower();
}
void loop(void)
{
Serial.println(F("-----------------"));
// On itére sur le tableau des résolutions
for(unsigned int i=0; i < 4; i++){
// On applique la résolution
sensors.setResolution(resolutions[i]);
// On lit la température
readTemp();
}
// On attend 2 seconde
delay(2000);
}
void readTemp(){
// On demande au capteur de faire une lecture de la température
sensors.requestTemperatures();
Serial.print(F("Temperature is "));
// On récupére la valeur
Serial.print(sensors.getTempCByIndex(0));
Serial.print(F(" at "));
// On affiche la résolution du capteur
Serial.print(sensors.getResolution());
Serial.println(F(" bits "));
}
void deviceNumber(){
Serial.print(F("Searching devices... "));
// Compte les capteur OneWire sur le PIN
Serial.print(F("Found "));
Serial.print(sensors.getDeviceCount());
Serial.println(F(" devices."));
}
bool isParasitePower(){
Serial.print(F("Parasite power is: "));
// Vérification de l'utilisation du mode parasite
if (sensors.isParasitePowerMode()){
Serial.println(F("ON"));
} else {
Serial.println(F("OFF"));
}
}
Résultat
On peut voir qu'un arrondi est effectué automatiquement par le capteur plus la résolution est faible.