اندازه گیری دما با استفاده از DS18B20 و برد رزبری پای
روند تنظیم این سنسور کاملاً ساده است و از یک مدار اساسی و برخی از کدها تشکیل شده است.
ما از یک سنسور ضد آب ds18B20 استفاده خواهیم کرد و این کاوشگر می تواند دما را از طریق رابط یک سیم فراهم کند. حتی بهتر است در صورت نیاز به استفاده از سنسور در محیط مرطوب ، ضدآب باشد.
بسیاری از سنسورهای دما وجود دارد که می توانید با Raspberry Pi خود استفاده کنید اما ما در این آموزش با سنسور ds18b20 کار خواهیم کرد.
سنسور دمای ds18b20 را در بسیاری از موارد کاربردی خواهید دید، به خصوص هنگامی که صحبت از نظارت بر دمای سطح و مایعات است.
تجهیزات مورد نیاز این پروژه
- Raspberry Pi
- Micro SD
- سنسور دما DS18B20
- مقاومت ۴.7k
ساخت مدار با Raspberry Pi و سنسور ds18b20
مداری که برای ساختن آن احتیاج داریم بسیار ساده است زیرا فقط به یک مقاومت و سنسور دما احتیاج داریم.
سنسوری که من در این آموزش از آن استفاده می کنم نسخه ضد آب سنسور DS18B20 است. اگر مدل ساده و بدون سیم و ضد آب این سنسور را دارید ، دقیقاً شبیه ترانزیستور است.
سنسور DS18B20 در دمای واقعی ۰.۰۵ درجه سانتی گراد کاملاً دقیق است. همچنین می تواند تا دمای ۱۲۵ درجه سانتیگراد (۲۶۰ درجه فارنهایت) را تشخیص دهد، اما توصیه می شود آن را زیر ۱۰۰ درجه سانتیگراد (۲۱۰ درجه فارنهایت) نگه دارید. این سنسور دارای مبدل آنالوگ به دیجیتال داخلی است، بنابراین ما می توانیم آن را به راحتی به یک پایه GPIO دیجیتال روی Raspberry Pi متصل کنیم.
به خاطر داشته باشید که همه سنسورهای دما یکسان نیستند. مثلا سنسوری مانند TMP36 در این آموزش جایگزین ds18b20 نخواهد شد.
TMP36 یک سنسور آنالوگ است که اتصال آن با Raspberry Pi را کمی سخت می کند.
جمع آوری این مدار بسیار ساده است، ما به سرعت برخی از دستورالعمل های زیر را مرور می کنم.
شروع کار
۱. ابتدا پین 3v3 را از Raspberry Pi به بردبردتان متصل کنید
۲. حالا سنسور DS18B20 را روی برد قرار دهید.
۳. یک مقاومت ۴.7k بین مثبت و پین خروجی سنسور قرار دهید.
۴- سیم را از سر خروجی به پین شماره ۴ (در صورت استفاده از شماره گذاری فیزیکی شماره ۷) Raspberry Pi قرار دهید.
پس از اتمام ، مدار شما باید شبیه مدل زیر باشد. بخاطر داشته باشید که برخی از نسخه های سنسور دما ممکن است بیش از سه سیم داشته باشند. برای اطلاعات بیشتر برای هر یک از سیمها به صفحه دیتاشیت آن ها مراجعه کنید.
کد سنسور دما به زبان برنامه نویسی پایتون
کد برنامه سنسور دما کمی پیچیده تر از خود مدار است. این پیچیدگی فقط به دلیل روشی است که برای مدیریت داده های حاصل از حسگر نیاز داریم.
sudo nano /boot/config.txt
در پایین این فایل موارد زیر را وارد کنید.
dtoverlay=w1-gpio
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
برای شروع اسکریپت پایتون ، ما سه پکیج 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'
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)
در ادامه می توانید مطالعه کنید
- مقدمه ای بر Embedded Linux (بخش اول) - آذر ۲۰, ۱۴۰۳
- تفاوت بین روتر و فایروال - مهر ۱۰, ۱۴۰۳
- مسیریابی استاتیک در ویندوز - مهر ۸, ۱۴۰۳