তাপমাত্রা কীভাবে পরিমাপ করা যায়?


44

তাপমাত্রা পরিমাপ করতে আমি আরপিআইয়ের সাথে কী সংযোগ করতে পারি? আমি সংযুক্ত ডিভাইস মনে I²C বা SPI সবচেয়ে ইন্দ্রিয় করতে হবে।

ডিএইচটি -২২ এবং অন্যান্য 1-তারের ডিভাইস সম্পর্কে এখানে একটি প্রশ্ন । তবে এই পর্যায়ে দেখে মনে হচ্ছে সমালোচনামূলক সময়গুলির কারণে আরপিআই-তে 1-তারের কাজ করা কঠিন


উত্তর:


40

একটি এমসিপি 9804 কীভাবে সংযুক্ত করবেন তা এখানে ।

এখানে চিত্র বর্ণনা লিখুন

আপনি এটি এর মতো ব্যবহার করতে পারেন:

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 কে একটি তাপমাত্রায় রূপান্তর করা কিছুটা বিশৃঙ্খলাযুক্ত। এমএসবি 0xc1 এবং এলএসবি 0x67 হয়

এমএসবির প্রথম 4 টি বিট বাদ দেওয়া হয় এবং যা তাপমাত্রা 16 ডিগ্রীতে ছেড়ে যায়

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

পাইথনের উদাহরণ
উপরের আই 2 সি মডিউলগুলি লোড করার পাশাপাশি, আপনাকে পাইথন-এসএমএস প্যাকেজ ইনস্টল করতে হবে। আপনি রিডিংগুলির মধ্যে এমসিপি 9804 বন্ধ করে স্ব-উত্তাপ হ্রাস করতে পারেন।

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

আপনি এই আইসি এর কোন সংস্করণ ব্যবহার করেছেন? আমার অনুরূপ আইসি রয়েছে (এমসিপি 9808 টি) তবে স্থানীয় ইলেকট্রনিক্স স্টোরটিতে কেবল ডিএফএন প্যাকেজ সংস্করণ রয়েছে। এটি কোনও বড় সংক্ষিপ্ত না করে যে কোনও কিছুতে কীভাবে সোল্ডার করবেন তা আমার কোনও ধারণা নেই।
ইক্কু

@ মিক্কু, আমার 8-পিন এমএসওপি ছিল
জন লা

13

আপনি সিরিয়াল বন্দরে নির্মিত রাস্পবেরি পাই ব্যবহার করতে পারেন এবং এটি একটি ডিজিটাল থার্মোমিটার আইসির সাথে সংযুক্ত করতে পারেন (যেমন ডিএস 1620 )

আপনি এখানে রাস্পবেরি পাইয়ের সিরিয়াল পোর্ট ইন্টারফেসিং সন্ধান করতে পারেন

এখানে চিত্র বর্ণনা লিখুন

  • পি 1 (বাম নীচে) - 3.3V
  • পি 6 - জিএনডি
  • পি 8 জিপিআইও 14 - টিএক্স
  • পি 10 জিপিআইও 15 - আরএক্স

গুরুত্বপূর্ণ : টিটিএল 3.3 ভি-তে আরপিআই ইউআরটি চলে তা মনে রাখবেন - আরপিআই-তে সরাসরি উচ্চ ভোল্টেজ 5 ভি / 12 ভোল্ট উয়ার্ট ব্যবহার না করার বিষয়ে সতর্ক থাকুন। এতে ক্ষতি হবে!


এটি 3-তারের ইন্টারফেসটি ব্যবহার করার মতো বলে মনে হচ্ছে, তাই কেবল সিরিয়াল বন্দরটি স্বাভাবিক উপায়ে ব্যবহার করার বিষয়টি নয়, তবে জিপিআইওগুলির সাথে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে
জন লা

আফাইক, সিরিয়াল বন্দরের পক্ষে টিএক্স, আরএক্স এবং সিএলকে রাখা স্বাভাবিক। আমি মনে করি এসপিআইয়ের জন্য 3 টি তারও দরকার এসডিও, এসডিও, এবং এসসিএলকে। এসপিআই ভেরিয়েন্টের জন্য এটি দেখুন - DS1722 লিঙ্ক
JeeShen লি

তবে ডিএস 1620! আরএসটি, সিএলকে এবং ডিকিউ ব্যবহার করে। পুরো স্থানান্তরটির জন্য! আরএসটি বেশি, সিএলকে হ'ল ঘড়ি এবং ডিকিউ দ্বি নির্দেশমূলক ডেটা, সুতরাং এটি কোনও ইউআরটির থেকে আলাদা
জন লা রুয়ে

3
আমি আপনার পরিবর্তিত উত্তর পছন্দ করি এবং এটি আপনার জন্য JeeSehn কিছুটা বর্ধিত। এছাড়াও আমি অ প্রযুক্তিগত ব্যবহারকারীদের সতর্কতা যুক্ত করেছি যাতে সতর্কতা অবলম্বন করা যায় যে RPI- র ইউআরটি 3.3v টিটিএল এবং সিরিয়ালের অন্যান্য ইউএসবি 5v / 12v ব্যবহার করতে পারে! আরপিআই ড্যামেজ!
পাইটর কুলা

3

আমি তাপমাত্রা সংবেদনের দুটি পদ্ধতির চেষ্টা করেছি। আই 2 সি-র জন্য আমি একটি টিএমপি 102 মডিউল ব্যবহার করেছি যা গিনিবলারের বর্ণনা অনুসারে। এটিতে আমার পোস্টটি এখানে :

1-তারের জন্য, অ্যাডাফ্রুট সম্প্রতি সেখানে নিজস্ব ইমেজ প্রকাশ করেছে এবং এতে 1-তারের সমর্থন রয়েছে। আমি এটির সাথে একটি DS18B20 1-তারের টেম্প সেন্সরটি পড়তে সক্ষম হয়েছি। এই পোস্টে আরও বিশদ :

শেষ অবধি, আরেকটি পদ্ধতি হ'ল এনালগ টেম্প সেন্সর এবং একটি বাহ্যিক এডিসি ব্যবহার করা। অ্যাডাফ্রুট এর একটি দুর্দান্ত টিউটোরিয়াল আছে।


3

একটি সহজ, সস্তা ইউএসবি "এইচআইডি টেম্পার" থার্মোমিটারটিও কাজ করে এবং যারা আমার মতো ইউআআআরটি বা জিপিআইওর সাথে ঝাঁকুনিতে পড়েননি তাদের জন্য সংযোগ করা অনেক সহজ।

HID টেম্পার ইউএসবি থার্মোমিটার

আমার আরপিআই হাব ছাড়াই ইউএসবি পোর্ট থেকে সরাসরি এড়াতে যথেষ্ট শক্তি সরবরাহ করে।

এটি রাস্পবিয়ান হুইজির সাথে সেট আপ করার জন্য, আমি এই নির্দেশাবলী অনুসরণ করেছিলাম যা উবুন্টুর জন্য লেখা ছিল (অস্বীকৃতি: লিঙ্কটি আমার নিজের ব্লগে পোস্টের জন্য)। রাস্পবেরি পাইয়ের জন্য, পার্ল মডিউলটি 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

আমার ক্ষেত্রে এটি দীর্ঘ সময় নিয়েছে, যদিও এটি আপনার ওয়াইফাই / ইথারনেটের গতির উপর নির্ভর করে। এর পরে, আপনি রিবুট করুন:

sudo reboot now

জিপিআইও 4-এর সাথে সাদা তারের সংযোগ করুন, লাল তারটি 3V3 এবং কালোটি জিএনডি-তে যুক্ত করুন। আপনি সাদা এবং লাল তারের মধ্যে একটি 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

আমি বর্তমানে এই বইটি পড়ছি এবং এটি পছন্দ করি। এই পথে যেতে আমার দৃষ্টিভঙ্গি হ'ল আপনার কাছে একটি তাপমাত্রা সেন্সর, একটি আরডুইনো এবং একটি এক্সবি রেডিও একসাথে আটকানো থাকে। এটি আপনার দূরবর্তী সেন্সর যা বাড়ির স্টেশনের সীমার মধ্যে যতদূর হতে পারে। তারপরে হোম স্টেশনের জন্য একটি রসবি এবং আরেকটি এক্সবি রয়েছে। আমি অনুমান করছি যে একটি আর্দুইনোতে হোম স্টেশন এক্সবি করা আরও সহজ হতে পারে এবং তারপরে আরডুইনো এবং রাসবিয়ের সাথে একে অপরের সাথে আলাপ করে। এটির সাথে আপনার একাধিক রিমোট সেন্সর এবং বিভিন্ন ধরণের সেন্সর থাকতে পারে।


মজাদার. আমি এই সম্পর্কে আরও বিশদ চাই। আমার প্রশ্নটি দেখুন: raspberrypi.stackexchange.com/questions/38711/… এবং দয়া করে সেখানে উত্তর দিন :-)
ডেভিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.