Bagaimana mengukur suhu?

Jawaban:

40

Berikut ini cara menghubungkan MCP9804 .

masukkan deskripsi gambar di sini

Anda bisa menggunakannya seperti ini:

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

Mengubah 0x67c1 ke suhu sedikit berbelit-belit. MSB adalah 0xc1 dan LSB adalah 0x67

4 bit pertama dari MSB dijatuhkan dan yang meninggalkan suhu dalam 16 derajat

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

Contoh Python
Selain memuat modul i2c di atas, Anda harus menginstal paket python-smbus. Anda dapat mengurangi pemanasan sendiri dengan mematikan MCP9804 di antara pembacaan.

#!/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()
John La Rooy
sumber
Versi IC ini apa yang Anda gunakan? Saya memiliki IC serupa (MCP9808T) tetapi toko elektronik lokal hanya memiliki versi paket DFN. Saya tidak tahu bagaimana menyolder itu pada apa pun tanpa membuatnya pendek.
ikku
@ikku, aku punya MSOP 8-pin
John La Rooy
13

Anda dapat menggunakan Raspberry Pi yang dibangun dalam porta serial, dan menghubungkannya ke IC termometer digital (mis. DS1620 )

Anda dapat mengetahui antarmuka port serial Raspberry Pi di sini

masukkan deskripsi gambar di sini

  • P1 (LEFT BOTTOM) - 3.3V
  • P6 - GND
  • P8 GPIO14 - TX
  • P10 GPIO15 - RX

Penting : Ingat bahwa UART RPi beroperasi pada TTL 3.3V - Berhati-hatilah untuk tidak menggunakan Uart Tegangan Tinggi 5v / 12 volt langsung ke RPi. Itu akan menyebabkan kerusakan!

Ya ampun Lee
sumber
Tampaknya menggunakan antarmuka 3-kawat, jadi bukan hanya masalah menggunakan port serial dengan cara biasa, tetapi tampaknya kompatibel dengan GPIO
John La Rooy
AFAIK, itu normal untuk port serial untuk memiliki Tx, Rx, dan CLK. Saya pikir SPI membutuhkan 3 kabel juga SDO, SDO, dan SCLK. Merujuk ini untuk varian SPI - DS1722 Link .
JeeShen Lee
Tapi DS1620 menggunakan! RST, CLK dan DQ. RST tinggi untuk seluruh transfer, CLK adalah jam dan DQ adalah data dua arah, jadi ini berbeda dengan UART
John La Rooy
3
Saya suka jawaban alternatif Anda dan menirunya sedikit untuk Anda JeeSehn. Saya juga menambahkan peringatan bagi pengguna non-teknis agar berhati-hati bahwa UART pada RPi adalah 3.3v TTL dan USB lain ke Serial mungkin menggunakan 5v / 12v! Damge the RPI!
Piotr Kula
3

Saya sudah mencoba dua pendekatan untuk penginderaan suhu. Untuk I2C, saya menggunakan modul TMP102 yang mirip dengan yang dijelaskan gnibbler. Inilah posting saya tentang itu:

Untuk 1-kawat, Adafruit baru-baru ini merilis gambar di sana sendiri, dan berisi dukungan 1-kawat. Saya bisa membaca sensor suhu 1-kawat DS18B20 dengannya. Lebih detail dalam posting ini :

Akhirnya, pendekatan lain adalah dengan menggunakan sensor temp analog dan ADC eksternal. Adafruit memiliki tutorial yang bagus tentang ini.

pdp7
sumber
3

Termometer USB "HID TEMPer" yang sederhana dan murah juga berfungsi, dan jauh lebih mudah terhubung bagi mereka yang belum mengutak-atik UART atau GPIO, seperti saya.

Termometer USB HID TEMPer

RPi saya menyediakan daya yang cukup untuk mengendarainya langsung dari port USB tanpa hub.

Untuk mengatur ini dengan Raspbian Wheezy, saya mengikuti instruksi ini yang ditulis untuk Ubuntu (disclaimer: tautan untuk posting di blog saya sendiri). Untuk Raspberry Pi, saya hanya perlu membuat satu tweak kecil untuk diatur LIBUSB_LIBDIRketika memasang Device::USBmodul perl sehingga bisa ditemukan libusbdi lokasi lengan yang tidak standar. Ikuti instruksi lengkapnya.

Untuk mendapatkan bacaan sederhana tanpa barang munin , instal dependensi sebagai berikut (sebagai root):

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

Buat 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();
}

Dan jalankan itu sebagai root untuk melihat hasilnya. Dalam kasus saya, agak dingin di garasi malam ini:

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

Yang saya gunakan saat ini adalah DS18B20 .

Pertama buka Pi dan ketik:

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

Kemudian tambahkan kata untestedsesudahnya main.

Kemudian ketik:

sudo apt-get update
sudo apt-get upgrade

Dalam kasus saya butuh waktu lama, meskipun itu tergantung pada kecepatan wifi / ethernet Anda. Setelah itu, Anda reboot:

sudo reboot now

Hubungkan kabel putih ke GPIO4, Kabel merah ke 3V3, dan hitam ke GND. Anda juga menghubungkan resistor 4,7K antara kabel putih dan merah.

Anda dapat membacanya dengan melakukan perintah berikut:

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

Maka harus daftar nomor seri sensor suhu, diikuti oleh w1_bus_master1

Lalu pergi:

cd serial-number-here
cat w1_slave

Dan kemudian harus menunjukkan 2 baris kode, di mana 5 digit di akhir baris kedua adalah suhu.

Ini menggunakan sesuatu yang disebut "Dallas One-Wire Temperature Sensor Protocol", atau sesuatu.

Kachamenus
sumber
1

Saya sedang membaca buku ini dan menyukainya. Dengan rute itu, visi saya adalah Anda akan memiliki sensor suhu, arduino, dan radio xbee yang direkatkan bersama. Itu sensor jarak jauh Anda yang bisa berada di mana saja asalkan berada di jangkauan stasiun rumah. Kemudian untuk stasiun rumah memiliki rasberry dan xbee lainnya. Saya menduga bahwa mungkin lebih mudah untuk memiliki xbee stasiun rumah pada arduino, dan kemudian arduino dan rasberry berbicara satu sama lain. Dengan itu Anda dapat memiliki beberapa sensor jarak jauh, dan berbagai jenis sensor.

lumpynose
sumber
Menarik. Saya ingin detail lebih lanjut tentang ini. Lihat pertanyaan saya: raspberrypi.stackexchange.com/questions/38711/… dan silakan balas di sana :-)
Davide