온도를 측정하는 방법? DHT-22 및 기타 1-

온도를 측정하기 위해 RPi에 무엇을 연결할 수 있습니까? I²C 또는 SPI에 연결된 장치 가 가장 적합 하다고 생각합니다 .

다음은 DHT-22 및 기타 1- 와이어 장치에 대한 질문 입니다. 그러나이 단계에서 중요한 타이밍으로 인해 RPi에서 1 선이 어려운 것으로 보입니다.



답변

MCP9804 를 연결하는 방법은 다음과 같습니다 .

다음과 같이 사용할 수 있습니다.

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을 온도로 변환하는 것은 약간 복잡합니다. MSB는 0xc1이고 LSB는 0x67입니다.

MSB의 첫 4 비트가 드롭되고 16도 온도가 유지됩니다.

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

Python 예제
위의 i2c 모듈을로드하는 것 외에도 python-smbus 패키지를 설치해야합니다. 판독 값 사이에서 MCP9804를 종료하면 자기 발열을 줄일 수 있습니다.

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

답변

직렬 포트에 내장 된 Raspberry Pi를 사용하여 디지털 온도계 IC (예 : DS1620 )에 연결할 수 있습니다

Raspberry Pi의 직렬 포트 인터페이스는 여기에서 확인할 수 있습니다.

  • P1 (왼쪽 하단)-3.3V
  • P6-GND
  • P8 GPIO14-TX
  • P10 GPIO15-RX

중요 : RPi UART는 TTL 3.3V에서 작동합니다.-고전압 5v / 12volt Uart를 RPi에 직접 사용하지 않도록주의하십시오. 손상의 원인이됩니다!


답변

온도 감지에 두 가지 접근 방식을 시도했습니다. I2C의 경우 gnibbler가 설명하는 것과 유사한 TMP102 모듈을 사용했습니다. 여기에 내 게시물 이 있습니다.

1 와이어의 경우, Adafruit는 최근 자체 이미지를 출시했으며 1 와이어 지원을 포함합니다. DS18B20 1- 와이어 온도 센서를 읽을 수있었습니다. 이 게시물대한 자세한 내용 :

마지막으로, 또 다른 방법은 아날로그 온도 센서와 외부 ADC를 사용하는 것입니다. Adafruit는 이에 대한 훌륭한 자습서 를 제공합니다.


답변

간단하고 저렴한 USB “HID TEMPer”온도계도 작동하며 아직 나와 같은 UART 또는 GPIO를 사용하지 않는 사람들을 위해 훨씬 쉽게 연결할 수 있습니다.

내 RPi는 허브없이 USB 포트에서 직접 구동 할 수있는 충분한 전원을 공급합니다.

Raspbian Wheezy와 함께 이것을 설정하기 위해, 나는 우분투를 위해 쓰여진 이 지침 을 따랐습니다 (면책 조항 : 링크는 내 블로그에 게시 된 글입니다). Raspberry Pi의 LIBUSB_LIBDIR경우 Device::USB펄 모듈을 설치할 때 작은 비틀기 만 설정 하면 libusb비표준 암 위치에서 찾을 수 있습니다. 전체 지침은 다음과 같습니다.

munin 자료 없이 간단한 판독 값을 얻으려면 다음과 같이 종속성을 루트로 설치하십시오.

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

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

그리고 출력을 보려면 루트로 실행하십시오. 제 경우에는 오늘 저녁 차고에서 약간 쌀쌀합니다.

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

답변

현재 사용중인 것은 DS18B20 입니다.

먼저 Pi를 열고 다음을 입력하십시오.

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

그런 다음 untested뒤에 단어를 추가하십시오 main.

그런 다음 다음을 입력하십시오.

sudo apt-get update
sudo apt-get upgrade

필자의 경우 Wi-Fi / 이더넷 속도에 따라 다르지만 시간이 오래 걸렸습니다. 그런 다음 재부팅합니다.

sudo reboot now

흰색 선을 GPIO4에 연결하고 빨간색 선을 3V3에 연결하고 검정색을 GND에 연결합니다. 또한 흰색 전선과 빨간색 전선 사이에 4.7K 저항을 연결합니다.

다음 명령을 수행하여 읽을 수 있습니다.

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

그런 다음 온도 센서의 일련 번호를 나열한 다음 w1_bus_master1

그런 다음 이동하십시오.

cd serial-number-here
cat w1_slave

그런 다음 두 줄의 코드를 표시해야합니다. 두 번째 줄의 끝에서 5 자리는 온도입니다.

이것은 “Dallas 1-Wire 온도 센서 프로토콜”또는 무언가를 사용합니다.


답변

나는 현재 읽고 있어요 이 책 과 같이합니다. 그 길을가는 것은 온도 센서, 아두 이노 및 xbee 라디오가 서로 붙어 있다는 것입니다. 그것이 홈 스테이션의 범위 안에있는 한 어디든있을 수있는 원격 센서입니다. 그런 다음 홈 스테이션에는 라스베리와 다른 xbee가 있습니다. 나는 arduino에 홈 스테이션 xbee를 가지고 있고 arduino와 rasberry가 서로 대화하는 것이 더 쉬울 수도 있다고 생각합니다. 이를 통해 여러 원격 센서와 다양한 유형의 센서를 사용할 수 있습니다.