Raspi – Capteur de temperature DS18B20

Raspberry Pi – Sommaire

  1. Raspberry Pi – Présentation
  2. Raspberry Pi – Et c’est parti !
  3. Raspberry Pi – Lire un capteur de température DS18B20

Bonjour à tous.

Allez hop, on va enfin pouvoir tester un peu des capteurs de températures. Pour le moment, il va nous falloir :

- Un capteur DS18B20 (~1 euro)

- Un résistance de 4300 Omhs (~1 centime :p)

Photo du capteur DS18B20

Capteur DS18B20

J’ai enfin reçu mes résistances de 4300 Ohms, 2 semaines après avoir reçu mes capteurs de températures DS18B20. J’ai acheté 5 capteurs sur ebay. Ce qui fait au total 8,15€ frais de port compris. Vous trouverez sûrement moins cher ailleurs, mais ayant déjà eut affaire à ce vendeur (qui est en France en plus), j’ai préféré passer par lui. Pour les résistances, je suis passé par http://www.hobbyelectro.fr où j’ai pu choisir les résistances à l’unité (car c’est sympa de recevoir les résistances par 100, mais bon …)

Si vous n’êtes pas anglophobes, vous pouvez vous référer au très bon tutoriel d’adafruit et aux explications sur le site de cambridge. La plupart des informations que je vais donner sont disponibles sur ces deux sites voir sur plusieurs autres sites anglais.

Sachez aussi qu’il existe une version étanche de ce capteur, si vous avez envie de vous en servir pour mesurer la température de l’eau dans un aquarium par exemple.

Le Montage

Le montage est assez simple et bien expliqué par adafruit. Voici d’ailleurs le montage qu’ils proposent avec leur breadboard.

Montage du capteur DS18B20

Montage du capteur DS18B20

Il faut par contre absolument faire attention au sens de connexion des pins du capteur. Si vous le placez dans le mauvais sens, il va très rapidement chauffer et claquer. Donc, attention :) Si vous avez un doute, touchez le capteur juste après avoir mis votre circuit sous tension. Si il chauffe, coupez tout ! Et attendez dix ou quinze minutes qu’il refroidisse. Mais la meilleure des sécurités pour ne pas cramer votre capteur, c’est encore de le mettre dans le bon sens dès le début.

Pensez aussi à éteindre votre RasPi avant d’y brancher le montage, question de sécurité.

ds18b20

A part cela le principe est simple :

- Connectez le port 1 (Ground) sur le pin 6 du Raspberry Pi (Ground)

- Connectez le port 2 (Data) sur le pin 7 du Raspberry Pi

- Connectez le port 3 (VDD) au pin 1 du Raspberry Pi (Alimentation 3,3V)

- Et enfin, entre les ports 2 et 3, connectez une résistance de 4300 Ohms.

Et hop, le montage est terminé ! Facile non ?

Certains ajoutent en plus une led (et une petite résistance pour la protéger) afin de voir quand le courant passe.

Attention aussi, sur certains exemples glanés sur le web, j’ai trouvé le montage inverse, qui du coup grille le capteur.

Coté Raspberry pi

Avant toute chose, il vous faut vérifier que votre système est bien à jour et à même de faire fonctionner le port 1-Wire. L’étape 1 du tutoriel de Cambridge nous fait d’ailleurs mettre à jour le kernel.

Une fois le kernel mis à jour, il faut taper les deux commandes suivantes dans votre terminal :

sudo modprobe w1-gpio
sudo modprobe w1-therm

Ces deux commandes vont vous permettre de communiquer avec la sonde.

Il faut ensuite retrouver la sonde, pour cela, exécuter la commande suivante pour localiser la sonde et récupérer son identifiant :

cd /sys/bus/w1/devices/
ls

Par exemple chez moi elle s’appelait 28-00000458412b. Tapez ensuite :

cd 28-xxxxxx

(remplacez bien évidemment 28-xxxxxx par l’identifiant que vous avez dans le dossier /sys/bus/w1/devices/ puis tapez :

cat w1_slave

Vous obtiendrez alors un affichage sur 2 lignes dans ce genre :

Affichage de la temperature via la sonde DS18B20

Affichage de la température via la sonde DS18B20

L’information importante se situe en bout de deuxième ligne. t=20312 signifie que que la température relevée est de 20,312 degrés Celsius (oui il fait bon à la maison :) )

Et voila, le tour est joué !

Ce n’est pas compliqué non ?

Si vous ne trouvez rien dans le dossier /sys/bus/w1/devices/ c’est que votre montage est incorrect. Ce fut mon cas, j’ai dû m’y reprendre à plusieurs fois dans mes branchements sur le breadboard pour que cela fonctionne (et à tout hasard, j’avais changé de capteur). Donc n’hésitez pas à tout démonter et remonter ensuite. Vérifiez aussi que le capteur est dans le bon sens ! Sinon, il aura bien chauffé (dès l’allumage du Raspberry Pi) et aura surement cramé.

Récupération de la température à intervalle régulier.

Adafruit, dans son tutoriel, met à disposition un script python permettant de lire à intervalle régulier la température.

Créez donc un fichier temperature.py dans lequel vous mettrez le code suivant :

import os
import glob
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
 f = open(device_file, 'r')
 lines = f.readlines()
 f.close()
 return lines

def read_temp():
 lines = read_temp_raw()
 while lines[0].strip()[-3:] != 'YES':
   time.sleep(0.2)
   lines = read_temp_raw()
 equals_pos = lines[1].find('t=')
 if equals_pos != -1:
   temp_string = lines[1][equals_pos+2:]
   temp_c = float(temp_string) / 1000.0
   temp_f = temp_c * 9.0 / 5.0 + 32.0
   return temp_c, temp_f

while True:
 print(read_temp())
 time.sleep(1)

Exécutez ensuite le script via la ligne de commande suivante :

python temperature.py

Vous obtiendrez alors la température relevée toutes les secondes de cette manière :

Lecture de la température

Lecture de la température, image Adafruit

La température retournée est donnée en Celius puis en fahrenheit (vous pouvez modifier votre code pour ne prendre en compte que l’unité désirée). Si vous souhaitez rallonger la durée entre 2 mesure il suffit de modifier la dernière ligne (time.sleep(1)) et de remplacer le 1 par le nombre de seconde que vous souhaitez entre chaque lecture.

Et ensuite ?

L’idée suivante, c’est de faire sauter le sleep de X secondes à la fin, et de faire un cronjob qui appelle votre script à la fréquence désirée. Vous rajoutez ensuite un enregistrement en base de donnée, et hop, vous avez vos stats de températures ! Si votre Raspberry Pi est connecté au Web, vous pouvez aussi envoyer ces informations à des services de stats du genre Highcharts.

Autre utilisation intéressante, pourquoi ne pas déclencher une action quand votre température atteint un certain seuil ? Par exemple, déclencher le ventilo si la température de la salle principale dépasse 30 degrés, ou le couper quand elle descend sous les 25 degrés ?

Bref, ensuite, c’est à vous d’exploiter vos données et de vous amuser !

Voila voila, c’est tout pour aujourd’hui. N’hésitez pas si vous avez la moindre question ! J’essayerais de vous répondre, ou au pire vous renvoyez vers les ressources nécessaires.

Ressources utiles.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>