Dans cet article, nous allons voir comment mesurer la température grâce à une sonde de température DS18B20 et afficher le résultat sur un afficheur LCD.
La sonde de température.
Nous allons utiliser une sonde de température numérique DS18B20 :
- Numérique : elle retourne une valeur numérique représentant la température
- Bus 1-Wire. Elle a 3 fils : VCC, GND, DATA.
- On la trouve sous différent format : boitier TO-92 (type transistor), sonde étanche..
- La plage de mesure est de -55°C à + 125°C
- La précision est réglable (de 9 à 12 bits). Plus la précision est grande, plus le délai de prise de mesure est important (à 12 bits : 750ms).
Précision en bits 9 10 11 12 Précision en température 0,5°C 0,25°C 0,125°C 0,0625°C Délai de mesure 93,75 ms 187,5 ms 375 ms 750 ms
- Le fil rouge correspond au VCC (+5V)
- le fil noir correspond au GND
- le fil bleu ou jaune correspond à la donnée (Data ou DQ)
La liaison 1-wire
La liaison 1 wire est un bus qui permet la communication entre circuit (par exemple une sonde de température avec microprocesseur). Il fonctionne sur le principe maitre / esclave.
- Chaque circuit possède une adresse pour pouvoir communiquer.
- Un seul maitre communique avec 1 ou plusieurs esclaves.
- Branchement en série, parallèle ou étoile
Le schéma.
Voici le schéma de la partie Sonde. Pour soucis de clareté, la partie LCD a été volontairement tronquée.
Pour plus d'information sur le branchement du LCD, je vous invite à consulter l'article 9/ l'afficheur LCD.
Le branchement
Le programme.
On va avoir besoin des librairies :
- 1 wire (Télécharger ici).
- Dallas temperature (Télécharger ici)
N'oubliez pas de redémarrer votre IDE, pour prendre en compte les nouvelles librairies.
//on charge les librairies
#include "OneWire.h"
#include "DallasTemperature.h"
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
// On définit sur quel broche on a branché le capteur de température.
#define ONE_WIRE_BUS 6
// On définit l'adresse de notre LCD (0x3F), puis le nombre de caractère par ligne (16).
// Puis le nombre de ligne (2).
LiquidCrystal_I2C lcd(0x3f, 16, 2);
// On définit le OneWire
OneWire oneWire(ONE_WIRE_BUS);
// Et on le passe en réfence de la librairie Dallas temperature
DallasTemperature sensors(&oneWire);
void setup() {
// On initialise le LCD
lcd.begin();
// On allume le rétroéclairage
lcd.backlight();
lcd.clear();
// on initialise la librairie Dallas
sensors.begin();
}
void loop() {
//On demande la température
sensors.requestTemperatures();
// On affiche le résultat sur le LCD.
lcd.clear();
lcd.print("Mesure de temp :");
lcd.setCursor(0,1);
lcd.print(sensors.getTempCByIndex(0));
// Symbole degré
lcd.write(223);
lcd.print("C");
// on attend 1 seconde
delay(1000);
}
Bonus température Mini / Maxi.
Voici une modification du programme précédent pour afficher les températures mini / maxi.
//on charge les librairies
#include "OneWire.h"
#include "DallasTemperature.h"
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
// On définit sur quel broche on a branché le capteur de température.
#define ONE_WIRE_BUS 6
// On définit l'adresse de notre LCD (0x3F), puis le nombre de caractère par ligne (16).
// Puis le nombre de ligne (2).
LiquidCrystal_I2C lcd(0x3f, 16, 2);
// On définit le OneWire
OneWire oneWire(ONE_WIRE_BUS);
// Et on le passe en réfence de la librairie Dallas temperature
DallasTemperature sensors(&oneWire);
// On définit les variables
float tmin,tmax,tnow,tlast;
// Flèche haut
byte upArrow[8]={
B00100,
B01110,
B10101,
B00100,
B00100,
B00100,
B00100,
B00100
};
// Flèche bas
byte downArrow[8]={
B00100,
B00100,
B00100,
B00100,
B00100,
B10101,
B01110,
B00100
};
void setup() {
// On initialise le LCD
lcd.begin();
// On allume le rétroéclairage
lcd.backlight();
lcd.clear();
lcd.createChar(0, upArrow);
lcd.createChar(1, downArrow);
// on initialise la librairie Dallas
sensors.begin();
// on initialise la température max et min.
tmin = 125;
tmax = -55;
tlast = 0;
}
void loop() {
//On demande la température
sensors.requestTemperatures();
tnow = sensors.getTempCByIndex(0);
if(tnow!=tlast) {
tlast=tnow;
if(tnow<tmin)
tmin=tnow;
if(tnow>tmax)
tmax=tnow;
// On affiche le résultat sur le LCD.
lcd.clear();
lcd.print(" ");
lcd.print(tnow);
lcd.write(223);
lcd.print("C");
// Température mini
lcd.setCursor(0,1);
lcd.write(1);
lcd.print(tmin);
lcd.write(223);
lcd.print(" ");
// Température maxi
lcd.write(0);
lcd.print(tmax);
lcd.write(223);
}
// on attend 1 seconde
delay(1000);
}
J'ai besoin de :
1 X Kit Breadboard
1 X Câble Femelle / Femelle 10 cm.
1 X Résistances
1 X Arduino UNO
1 X Cable USB Arduino
1 X Sonde de température Dallas DS18B20
1 X LCD 16X2 - I2C