اندازه گیری دما با استفاده از DS18B20 و برد رزبری پای

اندازه گیری دما با استفاده از DS18B20 و برد رزبری پای

 

 روند تنظیم این سنسور کاملاً ساده است و از یک مدار اساسی و برخی از کدها تشکیل شده است.

ما از یک سنسور ضد آب ds18B20 استفاده خواهیم کرد و این کاوشگر می تواند دما را از طریق رابط یک سیم فراهم کند. حتی بهتر است در صورت نیاز به استفاده از سنسور در محیط مرطوب ، ضدآب باشد.

بسیاری از سنسورهای دما وجود دارد که می توانید با Raspberry Pi خود استفاده کنید اما ما در این آموزش با سنسور ds18b20 کار خواهیم کرد.

سنسور دمای ds18b20 را در بسیاری از موارد کاربردی خواهید دید، به خصوص هنگامی که صحبت از نظارت بر دمای سطح و مایعات است.

 


تجهیزات مورد نیاز این پروژه

  • Raspberry Pi
  • Micro SD
  • سنسور دما DS18B20
  • مقاومت ۴.۷k

 

ساخت مدار با Raspberry Pi  و سنسور ds18b20

مداری که برای ساختن آن احتیاج داریم بسیار ساده است زیرا فقط به یک مقاومت و سنسور دما احتیاج داریم.

سنسوری که من در این آموزش از آن استفاده می کنم نسخه ضد آب سنسور DS18B20 است. اگر مدل ساده و بدون سیم و ضد آب این سنسور را دارید ، دقیقاً شبیه ترانزیستور است.

سنسور DS18B20 در دمای واقعی ۰.۰۵ درجه سانتی گراد کاملاً دقیق است. همچنین می تواند تا دمای ۱۲۵ درجه سانتیگراد (۲۶۰ درجه فارنهایت) را تشخیص دهد، اما توصیه می شود آن را زیر ۱۰۰ درجه سانتیگراد (۲۱۰ درجه فارنهایت) نگه دارید. این سنسور دارای مبدل آنالوگ به دیجیتال داخلی است، بنابراین ما می توانیم آن را به راحتی به یک پایه GPIO دیجیتال روی Raspberry Pi متصل کنیم.

به خاطر داشته باشید که همه سنسورهای دما یکسان نیستند. مثلا سنسوری مانند TMP36 در این آموزش جایگزین ds18b20 نخواهد شد.

TMP36 یک سنسور آنالوگ است که اتصال آن با Raspberry Pi را کمی سخت می کند.

جمع آوری این مدار بسیار ساده است، ما به سرعت برخی از دستورالعمل های زیر را مرور می کنم.

 

شروع کار

۱. ابتدا پین ۳v3 را از Raspberry Pi به بردبردتان متصل کنید

۲. حالا سنسور DS18B20 را روی برد قرار دهید.

۳. یک مقاومت ۴.۷k بین مثبت و پین خروجی سنسور قرار دهید.

۴- سیم را از سر خروجی به پین ​​شماره ۴ (در صورت استفاده از شماره گذاری فیزیکی شماره ۷) Raspberry Pi قرار دهید.

پس از اتمام ، مدار شما باید شبیه مدل زیر باشد. بخاطر داشته باشید که برخی از نسخه های سنسور دما ممکن است بیش از سه سیم داشته باشند. برای اطلاعات بیشتر برای هر یک از سیمها به صفحه دیتاشیت آن ها مراجعه کنید.

ds18b20

 

کد سنسور دما به زبان برنامه نویسی پایتون

کد برنامه سنسور دما کمی پیچیده تر از خود مدار است. این پیچیدگی فقط به دلیل روشی است که برای مدیریت داده های حاصل از حسگر نیاز داریم.

 

برای اضافه کردن ساپورت  از OneWire ، ابتدا باید فایل پیکربندی بوت را باز کنیم و این کار با اجرای دستور زیر انجام می شود.
sudo nano /boot/config.txt

 در پایین این فایل موارد زیر را وارد کنید.

dtoverlay=w1-gpio
پس از اتمام با فشار دادن ctrl x و سپس با کلید y ذخیره و خارج شوید. اکنون با اجرای دستور زیر برد را مجدداً راه اندازی کنید.
sudo reboot


هنگامی که Raspberry Pi دوباره بوت شد، ما باید modprobe را اجرا کنیم تا بتوانیم ماژول های صحیح را بارگیری کنیم.

sudo modprobe w1-gpio
sudo modprobe w1-therm

اکنون به پوشه devices بروید و تغییر وضعیت را با دستور  ls برای دیدن پوشه ها و پرونده های موجود در پوشه استفاده کنید.

cd /sys/bus/w1/devices
ls

حال دستور زیر را اجرا کنید، شماره بعد از cd را با استفاده از دستور ls به آنچه در فهرست شما ظاهر شده تغییر دهید. (اگر چندین سنسور داشته باشید ، بیش از یک فهرست وجود دارد)

cd 28-000007602ffa

حال دستور زیر را اجرا کنید.

cat w1_slave

 

w1

برای شروع اسکریپت پایتون ، ما سه پکیج os ، Glob و time را وارد می کنیم.

import os
import glob
import time
 
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
 
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

 

در تابع read_temp_raw ما فایلی را که حاوی دمای خروجی ما است باز می کنیم. تمام خطوط از این می خوانیم و سپس آن را برمی گردانیم fi کدی که این تابع را فراخوانی کرده است، بتواند از آن استفاده کند. در این حالت تابع read_temp این تابع را فراخوانی می کند.
def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines

 

سپس عدد را به دو درجه سانتیگراد و دمای فارنهایت تبدیل می کنیم. هر دوی اینها را به کدی که این تابع را فراخوانی کرده است برمی گردانیم. این عملکرد print است که در حلقه while قرار دارد.

def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f

 

حلقه while همیشه ۱ است بنابراین برای همیشه اجرا می شود تا زمانی که برنامه با خطا یا با لغو اسکریپت توسط کاربر قطع شود. این به سادگی read_temp را در عملکرد پرینت فراخوانی می کند. عملکرد پرینت به ما امکان می دهد خروجی را روی صفحه خود ببینیم. سپس اسکریپت هر بار که سنسور را خوانده است به مدت ۱ ثانیه به تاخیر می رود.

while True:
	print(read_temp())	
	time.sleep(1)

 

 


در ادامه می توانید مطالعه کنید

 


 

محمد صداقتی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *