Sıcaklık nasıl ölçülür?


Yanıtlar:


40

İşte bir MCP9804'ü nasıl bağlayacağınız .

görüntü tanımını buraya girin

Bu şekilde kullanabilirsiniz:

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

0x67c1'in bir sıcaklığa dönüştürülmesi biraz sarmaldır. MSB 0xc1 ve LSB 0x67'dir

MSB'nin ilk 4 biti düşürülür ve sıcaklık bir derecenin 16'sında bırakılır.

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

Python Örneği
Yukarıdaki i2c modüllerini yüklemeye ek olarak, python-smbus paketini de kurmanız gerekir. MCP9804'ü okumalar arasında kapatarak kendinden ısıtmayı azaltabilirsiniz.

#!/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()

Bu IC'nin hangi sürümünü kullandınız? Benzer bir IC (MCP9808T) var, ancak yerel elektronik mağazasında yalnızca DFN paket sürümü var. Bunu hiçbir şeyi kısa kesmeden nasıl lehimleyeceğimi bilemiyorum.
ikku

@ikku, 8-pin MSOP vardı
John La Rooy

13

Seri portta yerleşik olan Raspberry Pi'yi kullanabilir ve bunu bir dijital termometre IC'sine bağlayabilirsiniz (örn. DS1620 )

Raspberry Pi'nin seri port arabirimini burada bulabilirsiniz

görüntü tanımını buraya girin

  • P1 (SOL ALT) - 3.3V
  • P6 - GND
  • P8 GPIO14 - TX
  • P10 GPIO15 - RX

Önemli : RPi UART'in TTL 3.3V'da çalıştığını unutmayın - Yüksek Voltaj 5v / 12volt Uart'ı doğrudan RPi'ye kullanmamaya dikkat edin. Zarar verir!


3 kablolu bir arayüz kullanıyor gibi görünüyor, bu yüzden sadece seri portu normal şekilde kullanmakla ilgili bir sorun değil, GPIO'larla da uyumlu görünüyor
John La Rooy

AFAIK, seri portun Tx, Rx ve CLK'ya sahip olması normaldir. SPI'nin SDO, SDO ve SCLK için 3 kabloya ihtiyacı olduğunu düşünüyorum. SPI varyantı - DS1722 bağlantısı için buna bakın .
JeeShen Lee,

Ancak DS1620! RST, CLK ve DQ’yu kullanır. ! RST tüm transfer için yüksek, CLK saat ve DQ çift yönlü veridir, bu yüzden bir UART
John La Rooy

3
Değiştirici cevabını beğendim ve senin için biraz iyileştirdim JeeSehn. Ayrıca teknik olmayan kullanıcıların RPI üzerindeki UART değerinin 3.3V TTL olduğuna ve Seri USB'nin 5v / 12v kullanabileceğine dikkat etmeleri konusunda uyarıda bulundum! RPI'ye zarar ver!
Piotr Kula

3

Sıcaklık algılamaya iki yaklaşım denedim. I2C için, gnibbler'in anlattıklarına benzer bir TMP102 modülü kullandım. İşte bu benim yazı :

1 telli için Adafruit kısa süre önce orada kendi imajını yayınladı ve 1 telli destek içeriyor. Onunla bir DS18B20 1 kablolu sıcaklık sensörü okuyamadım. Bu yazıda daha fazla detay :

Son olarak, başka bir yaklaşım analog sıcaklık sensörü ve harici bir ADC kullanmaktır. Adafruit'un bu konuda iyi bir rehberi var.


3

Basit, ucuz bir USB "HID TEMPer" termometresi de çalışır ve benim gibi UART'larla veya GPIO'larla oynamayı sevenler için bağlantı kurmak çok daha kolaydır.

HID TEMPer USB termometresi

RPi'm, hub olmadan doğrudan USB portundan sürmek için yeterli güç sağlar.

Bunu Raspbian Wheezy ile kurmak için Ubuntu için yazılmış olan talimatları izledim (sorumluluk reddi: bağlantı kendi blogumdaki bir yazı için). Ahududu Pi için, perl modülünü LIBUSB_LIBDIRkurarken standart dışı kol konumunda Device::USBbulabilmek için sadece küçük bir ayar yapmak zorunda kaldım libusb. Talimatların tamamı takip edilir.

Munin hiçbir şey olmadan basit bir okuma almak için, bağımlılıkları aşağıdaki gibi kurun (root olarak):

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

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

Ve çıktıyı görmek için bunu root olarak çalıştırın. Benim durumumda, bu akşam garajda biraz serin:

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

2

Şu anda kullanıyorum biri DS18B20 .

Önce Pi'yi açın ve şunu yazın:

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

Sonra sözcüğü untestedsonra ekleyin main.

Sonra şunu yazın:

sudo apt-get update
sudo apt-get upgrade

Benim durumumda wifi / ethernet hızına bağlı olmasına rağmen, uzun zaman aldı. Ondan sonra, yeniden başlatıyorsun:

sudo reboot now

Beyaz kabloyu GPIO4'e, Kırmızı kabloyu 3V3'e ve siyahı GND'ye bağlayın. Ayrıca beyaz ve kırmızı kablolar arasına 4,7K'lık bir direnç bağlayın.

Aşağıdaki komutları kullanarak okuyabilirsiniz:

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

Sonra sıcaklık sensörünün seri numarasını listelemeli, ardından w1_bus_master1

Sonra gidin:

cd serial-number-here
cat w1_slave

Ve sonra 2 satır kod göstermelidir, burada ikinci satırın sonundaki 5 hane sıcaklıktır.

Bu, "Dallas Tek Telli Sıcaklık Sensörü Protokolü" denilen bir şey veya başka bir şey kullanır.


1

Şu anda bu kitabı okuyorum ve beğendim. Bu rotaya gitmek, benim görüşüme göre, bir sıcaklık sensörü, bir arduino ve bir yapıştırılmış xbee radyoya sahip olmanız. Bu, ev istasyonunun menzili içinde olduğu sürece herhangi bir yerde olabilecek uzaktan kumanda sensörünüzdür. Sonra ev istasyonunda bir ahududu ve başka bir xbee var. Arduino'da ana istasyonun xbee'sini almanın ve arduino ile rasberry'nin birbiriyle konuşmasının daha kolay olacağını tahmin ediyorum. Bununla, birden fazla uzak sensöre ve farklı sensör türlerine sahip olabilirsiniz.


İlginç. Bununla ilgili daha fazla ayrıntı rica ediyorum. Soruma bak: raspberrypi.stackexchange.com/questions/38711/… ve lütfen orada cevap verin :-)
Davide
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.