Comment mesurer la température?


Réponses:


40

Voici comment connecter un MCP9804 .

entrez la description de l'image ici

Vous pouvez l'utiliser comme ceci:

root@raspberrypi:~# modprobe i2c-dev
root@raspberrypi:~# modprobe i2c-bcm2708 
root@raspberrypi:~# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1f 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
root@raspberrypi:~# i2cget -y 0 0x1f 0x5 w
0x67c1

La conversion de 0x67c1 en température est un peu compliquée. Le MSB est 0xc1 et le LSB est 0x67

Les 4 premiers bits du MSB sont abandonnés et ce qui laisse la température au 16ème de degré

(0xc1&0xf)*16+0x67/16.0 = 22.4375 degrees 

Exemple Python
Outre le chargement des modules i2c ci-dessus, vous devez également installer le paquet python-smbus. Vous pouvez réduire l’auto-échauffement en éteignant le MCP9804 entre les lectures.

#!/usr/bin/env python
import time
from smbus import SMBus

class MCP9804(object):
    def __init__(self, bus, addr):
        self.bus = bus
        self.addr = addr

    def wakeup(self):
        self.bus.write_word_data(self.addr, 1, 0x0000)

    def shutdown(self):
        self.bus.write_word_data(self.addr, 1, 0x0001)

    def get_temperature(self, shutdown=False):
        if shutdown:
            self.wakeup()
            time.sleep(0.26) # Wait for conversion

        msb, lsb =  self.bus.read_i2c_block_data(self.addr, 5, 2)

        if shutdown:
            self.shutdown()

        tcrit = msb>>7&1
        tupper = msb>>6&1
        tlower = msb>>5&1

        temperature = (msb&0xf)*16+lsb/16.0
        if msb>>4&1:
            temperature = 256 - temperature
        return temperature



def main():
    sensor = MCP9804(SMBus(0), 0x1f)
    while True:
        print sensor.get_temperature()
        time.sleep(1)


if __name__ == "__main__":
    main()

Quelle version de ce CI avez-vous utilisé? J'ai un IC similaire (le MCP9808T), mais le magasin d'électronique local ne dispose que de la version du package DFN. Je ne sais pas comment souder ça sur quoi que ce soit sans en faire un gros court.
ikku

@ikku, j'ai eu le MSOP 8 broches
John La Rooy le

13

Vous pouvez utiliser le port série intégré du Raspberry Pi et le connecter à un thermomètre numérique (par exemple, DS1620 ).

Vous pouvez trouver l’interface du port série de Raspberry Pi ici

entrez la description de l'image ici

  • P1 (BAS DE GAUCHE) - 3.3V
  • P6 - GND
  • P8 GPIO14 - TX
  • P10 GPIO15 - RX

Important : N'oubliez pas que le RPi UART fonctionne à TTL 3.3V - Veillez à ne pas utiliser le câble haute tension 5v / 12 volts directement sur le RPi. Cela causera des dégâts!


Il semble utiliser une interface à 3 fils, donc pas seulement une question d'utiliser le port série de manière habituelle, mais semble compatible avec les GPIO
John La Rooy

Autant que je sache, il est normal que le port série ait Tx, Rx et CLK. Je pense que SPI a besoin de 3 fils aussi SDO, SDO et SCLK. Reportez-vous à cela pour le lien variante SPI - DS1722 .
JeeShen Lee

Mais le DS1620 utilise! RST, CLK et DQ. La! RST est élevée pour l'ensemble du transfert, CLK est l'horloge et DQ, des données bidirectionnelles, donc c'est différent d'un UART
John La Rooy

3
J'aime votre réponse alterantive et je l’apprécie un peu pour vous, JeeSehn. Aussi, j'ai ajouté un avertissement pour les utilisateurs non techniques à faire attention que le UART sur RPi est 3.3v TTL et que d'autres USB à série pourraient utiliser 5v / 12v! Damge le RPI!
Piotr Kula

3

J'ai essayé deux approches de détection de la température. Pour I2C, j’ai utilisé un module TMP102 similaire à celui décrit par gnibbler. Voici mon post à ce sujet:

Pour 1 fil, Adafruit a récemment publié sa propre image et contient un support 1 fil. J'ai pu lire un capteur de température DS18B20 à 1 fil. Plus de détails dans ce post :

Enfin, une autre approche consiste à utiliser un capteur de température analogique et un CAN externe. Adafruit a un bon tutoriel à ce sujet.


3

Un thermomètre USB "HID TEMPer" simple et bon marché fonctionne également, et est beaucoup plus facile à connecter pour ceux qui ne sont pas encore capables de manipuler des UART ou des GPIO, comme moi.

Thermomètre USB HID TEMPer

Mon RPi fournit suffisamment d’énergie pour le piloter directement à partir du port USB sans concentrateur.

Pour configurer cela avec Raspbian Wheezy, j'ai suivi ces instructions qui ont été écrites pour Ubuntu (disclaimer: le lien concerne un article sur mon propre blog). Pour le Raspberry Pi, il me suffisait de faire un petit ajustement LIBUSB_LIBDIRlors de l’installation du Device::USBmodule Perl afin qu’il puisse se trouver libusbà l’emplacement du bras non standard. Les instructions complètes suivent.

Pour obtenir une lecture simple sans aucun élément commun , installez les dépendances comme suit (en tant que root):

apt-get install libusb-dev
export LIBUSB_LIBDIR=/usr/lib/arm-linux-gnueabihf
cpan Inline::MakeMaker
cpan Device::USB::PCSensor::HidTEMPer

Créer readtemp.pl:

#!/usr/bin/perl
use strict;
use Device::USB::PCSensor::HidTEMPer;

my $pcsensor = Device::USB::PCSensor::HidTEMPer->new();
my @devices = $pcsensor->list_devices();
foreach my $device (@devices) {
    print $device->internal()->celsius()."\n" if defined $device->internal();
}

Et lancez ça en tant que root pour voir le résultat. Dans mon cas, il fait un peu froid dans le garage ce soir:

day@pi:~$ sudo ./readtemp.pl 
16.5

2

Celui que j'utilise actuellement est le DS18B20 .

Commencez par ouvrir le Pi et tapez:

sudo leafpad /etc/apt/sources.list.d/raspi.list

Ajoutez ensuite le mot untestedaprès main.

Puis tapez:

sudo apt-get update
sudo apt-get upgrade

Dans mon cas, cela a pris beaucoup de temps, bien que cela dépende de votre vitesse wifi / ethernet. Après cela, vous redémarrez:

sudo reboot now

Connectez le fil blanc à GPIO4, le fil rouge à 3V3 et le noir à GND. Vous connectez également une résistance de 4,7K entre les fils blanc et rouge.

Vous pouvez le lire en effectuant les commandes suivantes:

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/
ls

Ensuite, devrait indiquer le numéro de série du capteur de température, suivi de w1_bus_master1

Alors vas y:

cd serial-number-here
cat w1_slave

Et puis il devrait montrer 2 lignes de code, où les 5 chiffres à la fin de la deuxième ligne sont la température.

Cela utilise quelque chose appelé "le protocole de capteur de température Dallas One-Wire", ou quelque chose.


1

Je suis en train de lire ce livre et je l'aime bien. Mon objectif est de créer un capteur de température, un arduino et une radio xbee collés ensemble. C'est votre capteur à distance qui peut être n'importe où pourvu qu'il soit à portée de la station d'origine. Ensuite, pour la station de base ont une framboise et un autre xbee. J'imagine qu'il serait peut-être plus facile d'avoir également la station d'accueil xbee sur un arduino, puis de permettre à l'arduino et à la framboise de se parler. Avec cela, vous pouvez avoir plusieurs capteurs à distance et différents types de capteurs.


Intéressant. Je voudrais plus de détails à ce sujet. Voir ma question: raspberrypi.stackexchange.com/questions/38711/… et répondez-y s'il vous plaît :-)
Davide
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.