myRaspberry

Mes aventures en Raspberry et Arduino

DS18B20 : Capteur temperature numérique

Posted on 11 octobre 2016  in Composants, Raspberry

.ds18b20Plus adapté à Raspberry car numérique, ce capteur permet la mesure de temperature.

Le montage s’effectue de la façon suivante.

plan

Ce capteur utilise le bus WIRE, c’est une liaison série asynchrone half‐duplex avec possibilité de transfert de l’alimentation sur la ligne de donnée développée par Dallas‐Semiconductors. La ligne DATA du capteur est connectée sur GPIO4 avec pull‐up VDD 3.3v (4.7KΩ).

Aprés avoir activé le protocole Wire, le noyau Linux du Raspberry recherche régulièrement de nouveaux esclave sur ce bus.

Test du capteur (sous linux)

sudo modprobe w1-gpio
sudo modprobe w1-therm

Si vous voulez charger ces modules directement au boot, éditez le fichier et ajoutez ces 2 lignes à la fin de:
/etc/modules

w1-gpio
w1-therm

 

Dans le repertoire “/sys/bus/w1/devices/ vous trouverez les fichiers de ces devices ajoutés.

Dans un sous repertoire nommé 28-XXXXXX vous trouverez les fichiers des capteurs.

L’action ls, cat sur le système généreront une action le lecture du capteur.

Ce programme Python lit les données

##############################################
# Hub.bosseur@gmail.com - 
#
# Programme qui li les donnees du capteur de temperature  DS18B20
# http://aubonsurf.free.fr
##############################################
#!/usr/bin/python

import glob #Unix style pathname pattern expansion
import time 
import os
 

#Fonction qui recherche les fichiers resultats
#l'ouverture du fichier provoque la lecture vers le capteur
def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines
 
#Fonction de traitement du fichier device.
def read_temp():
    lines = read_temp_raw()                 #les ture des fichiers devices
    while lines[0].strip()[-3:] != 'YES':   # lit les 3 derniers caracteres  de la ligne 0 et recommence si pas YES
        time.sleep(0.2)						#temps de reception des donnees
        lines = read_temp_raw()
        
    equals_pos = lines[1].find('t=')        #identification position du =
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]           #lecture de la position a la fin de ligne
        temp_c = round(float(temp_string) / 1000.0 , 2) # Arrondi a 2 chiffres apres la virgule
        return temp_c
        
	
if __name__ == "__main__":
	os.system('modprobe w1-gpio')  ## active le protocole 1WIRE 
	os.system('modprobe w1-therm') #identifie le peripherique 
	 
	base_dir = '/sys/bus/w1/devices/'
	try:
		device_folder = glob.glob(base_dir + '28*')[0]
		device_file = device_folder + '/w1_slave'
	except:
		print ("Fichier device introuvable")
		exit(0)
	#boucle de lecture de temperature
	while True:
		print('Temperature:'+read_temp())	
		time.sleep(1)
ReadDS10B20.py