तापमान कैसे मापें?


44

तापमान मापने के लिए मैं आरपीआई से क्या कनेक्ट कर सकता हूं? मुझे लगता है कि I²C या SPI से जुड़े डिवाइस सबसे ज्यादा मायने रखते हैं।

यहां DHT-22 और अन्य 1-तार उपकरणों के बारे में एक प्रश्न है। लेकिन इस स्तर पर ऐसा लगता है कि महत्वपूर्ण समय के कारण आरपीआई पर 1-तार मुश्किल है


जवाबों:


40

यहाँ एक 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 

पायथन उदाहरण
ऊपर i2c मॉड्यूल को लोड करने के अलावा, आपको अजगर-स्मबस पैकेज स्थापित करना होगा। आप रीडिंग के बीच 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()

इस IC के किस संस्करण का आपने उपयोग किया? मेरे पास एक समान IC (MCP9808T) है, लेकिन स्थानीय इलेक्ट्रॉनिक्स स्टोर में केवल DFN पैकेज संस्करण है। मुझे नहीं पता कि कैसे मिलाप करना है कि किसी भी चीज पर इसे एक बड़ा छोटा किए बिना।
.क्कू

@ हक्कू, मेरे पास 8-पिन MSOP
जॉन ला

13

आप सीरियल पोर्ट में निर्मित रास्पबेरी पाई का उपयोग कर सकते हैं, और इसे एक डिजिटल थर्मामीटर IC (जैसे DS1620 ) से जोड़ सकते हैं

आप यहां रास्पबेरी पाई के सीरियल पोर्ट इंटरफेसिंग का पता लगा सकते हैं

यहाँ छवि विवरण दर्ज करें

  • पी 1 (बाएँ बूटम) - 3.3 वी
  • पी 6 - जीएनडी
  • P8 GPIO14 - TX
  • P10 GPIO15 - RX

महत्वपूर्ण : याद रखें कि आरपीआई UART TTL 3.3V पर चलती है - आरपीआई के लिए उच्च वोल्टेज 5v / 12volt Uart का उपयोग न करें। यह नुकसान का कारण होगा!


यह एक 3-तार इंटरफ़ेस का उपयोग करने के लिए लगता है, इसलिए सामान्य तरीके से सीरियल पोर्ट का उपयोग करने का सिर्फ एक मामला नहीं है, लेकिन GPIOs के साथ संगत लगता है
जॉन ला रोय

AFAIK, सीरियल पोर्ट के लिए Tx, Rx और CLK होना सामान्य है। मुझे लगता है कि SPI को 3 तारों की भी आवश्यकता है SDO, SDO और SCLK। SPI संस्करण - DS1722 लिंक के लिए इसे देखें ।
जीशान ली

लेकिन DS1620 का उपयोग करता है! RST, CLK और DQ। पूरे हस्तांतरण के लिए RST अधिक है, CLK घड़ी है और DQ द्विदिश डेटा है, इसलिए यह UART के लिए अलग है
जॉन ला रोय जूल

3
मुझे आपका परिवर्तनकारी उत्तर पसंद है और आपके लिए यह थोड़ा सा छोटा है। इसके अलावा, मैंने गैर तकनीकी उपयोगकर्ताओं के लिए चेतावनी जोड़ दी कि सावधान रहें कि आरपीआई पर UART 3.3v TTL है और अन्य USB से सीरियल में 5v / 12v का उपयोग किया जा सकता है! आरपीआई को नुकसान पहुंचाओ!
पायोटर कुला

3

मैंने तापमान संवेदन के लिए दो दृष्टिकोण आजमाए हैं। I2C के लिए, मैंने एक TMP102 मॉड्यूल का उपयोग किया जो कि gnibbler के समान है। यहाँ उस पर मेरी पोस्ट है:

1-तार के लिए, Adafruit ने हाल ही में अपनी छवि जारी की है, और इसमें 1-तार समर्थन शामिल है। मैं इसके साथ एक DS18B20 1-वायर टेम्प सेंसर को पढ़ने में सक्षम था। इस पोस्ट में अधिक जानकारी :

अंत में, एक अन्य दृष्टिकोण एनालॉग टेम्प सेंसर और एक बाहरी एडीसी का उपयोग करना है। Adafruit का इस पर एक अच्छा ट्यूटोरियल है।


3

एक सरल, सस्ता USB "HID TEMPER" थर्मामीटर भी काम करता है, और उन लोगों के लिए कनेक्ट करना बहुत आसान है, जो मेरे जैसे UART या GPIO के साथ जुड़ना चाहते हैं।

छिपाई टेम्पर USB थर्मामीटर

मेरी RPi बिना हब के सीधे USB पोर्ट से इसे चलाने के लिए पर्याप्त शक्ति प्रदान करती है।

रास्पियन व्हीज़ी के साथ इसे स्थापित करने के लिए, मैंने इन निर्देशों का पालन किया जो उबंटू के लिए लिखे गए थे (अस्वीकरण: लिंक मेरे अपने ब्लॉग पर एक पोस्ट के लिए है)। रास्पबेरी पाई के लिए, मुझे केवल एक छोटा सा ट्यूल बनाना था LIBUSB_LIBDIRजब Device::USBपर्ल मॉड्यूल को स्थापित किया जा सके ताकि यह libusbनॉन-स्टैंडर्ड आर्म लोकेशन में मिल सके । पूरा निर्देश का पालन करें।

किसी भी मुनिन सामान के बिना एक साधारण पढ़ने के लिए , निर्भरता को इस प्रकार स्थापित करें (रूट के रूप में):

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

2

मैं वर्तमान में DS18B20 का उपयोग कर रहा हूं ।

पहले पाई खोलें और टाइप करें:

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

इसके untestedबाद शब्द जोड़ें main

फिर टाइप करें:

sudo apt-get update
sudo apt-get upgrade

मेरे मामले में यह एक लंबा समय लगा, हालाँकि यह आपके wifi / ईथरनेट स्पीड पर निर्भर करता है। उसके बाद, आप रिबूट करें:

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

और फिर इसे कोड की 2 पंक्तियों को दिखाना चाहिए, जहां दूसरी पंक्ति के अंत में 5 अंक तापमान हैं।

यह कुछ "डलास वन-वायर तापमान सेंसर प्रोटोकॉल", या कुछ और का उपयोग करता है।


1

मैं फिलहाल इस किताब को पढ़ रहा हूं और इसे पसंद कर रहा हूं । उस मार्ग पर जाते हुए मेरी दृष्टि यह है कि आपके पास एक तापमान संवेदक, एक आर्डिनो और एक xbee रेडियो एक साथ चिपके होंगे। यह आपका रिमोट सेंसर है जो होम स्टेशन की रेंज में कहीं भी हो सकता है। फिर होम स्टेशन के लिए एक रास्पबेरी और दूसरा xbee है। मैं अनुमान लगा रहा हूं कि यह भी आसान हो सकता है कि होम स्टेशन xbee एक arduino पर हो, और फिर arduino और रास्पबेरी एक दूसरे से बात करें। इसके साथ आपके पास कई रिमोट सेंसर और विभिन्न प्रकार के सेंसर हो सकते हैं।


दिलचस्प। मुझे इस पर अधिक जानकारी चाहिए। मेरा प्रश्न देखें: raspberrypi.stackexchange.com/questions/38711/… और कृपया वहां उत्तर दें :-)
Davide
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.