HLab

Julien Hautefeuille

Capteur de température Dallas 1821

Le capteur de température DS1821

Description

Le capteur de température Dallas DS1821 est un capteur fonctionnant aussi bien en mode conversion qu’en mode thermostat.

Il utilise le protocole One-Wire pour assurer sa communication.

Il permet des mesures de températures de -55°C à +125 °C avec une précision de 8 bits.

Il nécessite l’utilisation d’une résistance de 4,7K Ohms entre Vdd (l’alimentation) et DQ (le câble de communication).

Ce capteur permet également des mesures d’une précision de 9 bits, la documentation est explicite sur le sujet.

Dans notre cas, nous utilisons la conversion sur 8 bits. Le premier bit, le bit de poids fort indiquant le signe de l’entier.

La carte micro-contrôleur PyMCU

Nous utilisons pour exploiter ce capteur la carte contrôleur PyMCU.

Elle permet de contrôler l’électronique à l’aide du langage de programmation Python.

Le code du programme

Exemple :

#-------------------------------------------------------------------
# Name:        pymcu lcd
# Purpose:     Dallas 1821 & PyMCU
#
# Author:      julien[]hautefeuille.eu
#
# Created:     13/04/2012
#-------------------------------------------------------------------

#!/usr/local/bin/python
#*-encoding:utf8-*

import pymcu
import time

def initLCD(sleep):
    mb.lcd()
    time.sleep(sleep)

def displayTemp(line, sleep, temp):
    mb.lcd(line, "Temp %s C @home  " % (str(temp).zfill(2)))
    time.sleep(sleep)

def startTemp(pin, command):
    mb.owWrite(pin, 1, command)

def checkBusy(pin):
    return mb.owRead(pin, 5, 1)

def readTemp(pin, command):
    mb.owWrite(pin, 1, command)
    return mb.owRead(pin, 2, 1)[0]

def getTemp():
    if checkBusy(5) != 0:
        t = readTemp(5, 0xAA)
        tt = None
        if t >> 7 == 1: # negative value
            r = t ^ 0xFF # bit inversion OR
            tt = r + 1 # add 1
        else: # positive value
            tt = t 
        startTemp(5, 0xEE)
    mb.pausems(500)
    return tt

if __name__ == "__main__":  

    mb = pymcu.mcuModule(port = 'COM9', baudrate = 9600)
    mb.mcuSetBaudRate(2)
    initLCD(sleep = 1)
    startTemp(5, 0xEE) # start DS1821 in conversion mode
    while mb.active:    
        displayTemp(line = 1, sleep = 0.1, temp = getTemp())
    exit()

Conclusion

L’exploitation de ce capteur est simple, il faut néanmoins faire attention à 2 choses : respecter les délais du capteur et effectuer la conversion de température proprement afin d’obtenir les températures négatives. La documentation donne des indications à ce sujet.