Le capteur de température DS1821
Image may be NSFW.Clik here to view.

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).
Image may be NSFW.Clik here to view.

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.
Image may be NSFW.Clik here to view.

Le code du programme
#-------------------------------------------------------------------
# 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.