Quantcast
Channel: AFPy's Planet
Viewing all articles
Browse latest Browse all 3409

[hautefeuille] Capteur de température Dallas 1821

$
0
0

Le capteur de température DS1821

pictures/dallas_.jpg

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).

pictures/ds1821.jpg

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.

pictures/lcd_dallas_pymcu.jpg

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.


Viewing all articles
Browse latest Browse all 3409

Trending Articles