پروژه دماسنج رزبری پای با سنسور DS18B20
سلام. پروژه دماسنج رزبری پای با سنسور DS18B20 را آماده کردیم.
محتویات
اندازه گیری دما با رزبری پای و DS18B20
Raspberry Pi به دلیل داشتن توان محاسباتی و کاربردهای گسترده در زمینه IoT ، خانه هوشمند و … بسیار محبوب است. سنسورهای زیادی برای این فرآیند ها استفاده می شوند و سنسور مورد نیاز بر اساس پارامتر مورد سنجش و کاربرد آن انتخاب می شود. در این پروژه رزبری پای می آموزیم که یک سنسور دما DS18B20 را به Raspberry Pi متصل کنیم.
در این پروژه سنسور DS18B20 را استفاده میکنیم که به طور گسترده در مکانهایی که محیط های سخت دارند مثل صنایع شیمیایی، کارخانجات، معدن ها و … استفاده میشود. ما مقدار دما را روی یک ال سی دی کاراکتری نمایش میدهیم. در صورتی که نیاز به یک دماسنج صنعتی ندارید از این پروژه دیدن فرمایید : پروژه انداره گیری دما و رطوبت با DHT11 و رزبری پای
فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است.
معرفی سنسور دما DS18B20
DS18B20 یک سنسور دما سه ترمینال است که در پکیج TO-92 (نوع ترانزیستور) موجود است. استفاده از آن بسیار آسان است و برای شروع کار فقط به یک مؤلفه خارجی نیاز دارد. همچنین برای ارتباط با آن تنها یک پین GPIO از میکروکنترلر نیاز داریم. یک سنسور دما معمولی DS18B20 با نام پین های آن در زیر نشان داده شده است.
همچنین اگر میخواهید الکترونیک را با فیلم های آموزشی یاد بگیرید، روی دوره آموزش الکترونیک کلیک کنید.
این سنسور همچنین دارای یک نسخه ضد آب است که در آن سنسور با یک محفظه فلزی پوشانده شده است. در اینجا ما از نوع معمولی آن استفاده میکنیم. مشخصات سنسور در زیر نشان داده شده است.
- ولتاژ : 3-5V
- دامنه اندازه گیری: -55 درجه سانتیگراد تا +125 درجه سانتی گراد
- دقت: 0.5 ± درجه سانتی گراد
- رزولوشن: 9 بیت تا 12 بیت
مدار دماسنج با رزبری پای و سنسور DS18B20
همانطور که قبلاً در این آموزش گفتیم، سنسور DS18B20 را به رزبری پای متصل میکنیم و مقدار دما را در یک ال سی دی کاراکتری نمایش میدهیم. بنابراین سنسور و ال سی دی را باید مطابق شماتیک مدار زیر به Raspberry pi متصل کنیم.
اتصالات را مانند تصویر بالا انجام دهید. LCD و سنسور هر دو با ولتاژ 5 کار میکنند و توسط پین 5 ولت رزبری پای تغذیه میشوند. ال سی دی در حالت 4 بیت از طریق پین های 18،23،24 و 25 GPIO برای داده و پین های 7 و 8 GPIO برای کنترل با Raspberry pi ارتباط برقرار میکند. از پتانسیومتر برای کنترل سطح کنتراست ال سی دی استفاده میشود. پین داده DS18B20 به پین 4 GPIO رزبری پای متصل میشود.
تصویر زیر به شما در درک نحوه اتصال قطعات کمک میکند.
قطعات مورد نیاز
- سنسور دما DS18B20
- رزبری پای
- ال سی دی کاراکتری 16*2
- پتانسیومتر 10 کیلو اهم
- مقاومت 10 کیلو اهم
نصب كتابخانه LCD Adafruit در Raspberry Pi
مقدار دما در یک نمایشگر ال سی دی 16*2 نمایش داده میشود. مقدار دما در یک نمایشگر LCD 16 * 2 نمایش داده می شود. Adafruit کتابخانه ای را در اختیار ما قرار می دهد تا بتوانیم این LCD را به راحتی در حالت 4 بیتی راه اندازی کنیم. بنابراین مراحل نصب این کتابخانه را مانند زیر انجام دهید.
مرحله 1: با استفاده از خط زیر git را روی Raspberry Pi نصب کنید. Git به شما امکان می دهد تا فایلهای پروژه را در Github کلون کنید و از آن در Raspberry pi استفاده کنید. كتابخانه ما روی Github است ، بنابراین برای بارگیری آن كتابخانه باید به نصب git بپردازیم.
apt-get install git
مرحله 2: خط زیر کتابخانه مورد نظر ما را از گیت هاب کلون میکند.
git clone git://github.com/adafruit/Adafruit_Python_CharLCD
مرحله 3: برای تغییر دایرکتوری ، از دستور زیر استفاده کنید تا وارد پرونده پروژه شوید که ما تازه بارگیری کرده ایم. خط فرمان در زیر آورده شده است
cd Adafruit_Python_CharLCD
مرحله 4: در داخل دایرکتوری فایلی به نام setup.py وجود دارد ، ما باید آن را نصب کنیم از خط زیر استفاده کنید.
sudo python setup.py install
حال به طور مشابه می خواهیم کتابخانه DHT را که از Adafruit نیز هست نصب کنیم.
فعال کردن ارتباط تک سیم در Raspberry pi
از آنجا که سنسور DS18B20 از طریق روش تک سیم ارتباط برقرار می کند، می بایست با دنبال کردن مراحل زیر ارتباط یک سیم را در رزبری پای فعال کنیم.
مرحله 1:از دستور زیر برای باز کردن پرونده استفاده کنید.
sudo nano /boot/config.txt
مرحله 2: در داخل پرونده پیکربندی خط “dtoverlay = w1-gpio” (مانند تصویر زیر) اضافه کنید و پرونده را مطابق شکل زیر ذخیره کنید.
مرحله 3: برای خروج از پرونده از Ctrl + X استفاده کرده و با فشار دادن “Y” آن را ذخیره کنید. در آخر Pi را با استفاده از دستور زیر ریستارت کنید.
sudo reboot
مرحله 4: پس از راه اندازی مجدد ، دوباره ترمینال را باز کنید و دستورات زیر را وارد کنید.
sudo modprobe w1–gpio sudo modprobe w1-therm. cd /sys/bus/w1/devices ls
پنجره های ترمینال شما چیزی شبیه به این را نشان می دهد.
مرحله 5: در پایان مرحله 4 وقتی وارد ls می شوید ، pi شما یک شماره منحصر به فرد را نمایش می دهد ، این تعداد براساس سنسور برای هر کاربر متفاوت خواهد بود ، اما همیشه با 28- شروع می شود. در مورد من شماره 28-03172337caff است.
مرحله 6: اکنون می توانیم با وارد کردن دستورات زیر سنسور کار کنیم
cd 28-XXXXXXXXXXXX cat w1_slave
این دو دستور داده های حسگر را می خوانند و مطابق شکل زیر آن را در ترمینال نمایش می دهند. مقدار دما در تصویر زیر با رنگ قرمز مشخص شده است. برای من مقدار دما 37 درجه سانتی گراد است.
برنامه نویسی رزبری پای برای پروژه دماسنج DS18B20
حالا باید برنامه نویسی پایتون برای اندازه گیری دما را شروع کنیم. ما رزبری پای را آماده کرده ایم که به ال سی دی متصل شود و داده های سنسور را بخواند. بنابراین باید برنامه نهایی را بنویسیم که در آن رزبری پای دما را از سنسور DS18B20 میخواند و روی LCD کاراکتری نمایش میدهد. برنامه کامل پایتون برای این پروژه در انتهای صفحه قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
مثل همیشه برنامه را با وارد کردن پرونده های هدر مورد نیاز برنامه شروع می کنیم. در اینجا زمان برای عملکرد delay، هدر LCD برای استفاده از LCD و هدر os برای مدیریت پرونده ها در سیستم عامل استفاده می شود.
import time #کتابخانه برای عملکرد تاخیر import Adafruit_CharLCD as LCD #کتابخانه برای ال سی دی import os import glob
سپس باید پین های ال سی دی که رزبری پای متصل هستند را معرفی کنیم. برای اطلاع از شماره پین های GPIO از تصاویر بالا استفاده کنید. وقتی پین ها را معرفی کردیم، تعداد ستون ها و ردیف های LCD را معرفی میکنیم.
lcd_rs = 7 #تعریف پین ها برای ال سی دی lcd_en = 8 lcd_d4 = 25 lcd_d5 = 24 lcd_d6 = 23 lcd_d7 = 18 lcd_backlight = 0 lcd_columns = 16 #تعداد ستون های ال سی دی lcd_rows = 2 #تعداد ردیف های ال سی دی lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) #ارسال اطلاعات به کتابخانه
بعد از تنظیم LCD ، یک متن نمونه را روی LCD چاپ می کنیم. کاراکتر‘\ n ‘برای ذکر خط جدید استفاده می شود. پس از نمایش مقدمه ، 2 ثانیه تأخیر را برنامه ریزی میکنیم تا کاربر بتواند متن را بخواند.
lcd.message('DS18B20 with Pi \n -IRENX') #نمایش پیام مقدمه time.sleep(2) #تاخیر 2 ثانیه
حال اگر مرحله 4 فعال کردن ارتباط تک سیم در Pi را به یاد بیاورید. ما باید همان خط کد را تکرار کنیم ، بنابراین از تابع os.system برای اجرای همان خطوط استفاده می کنیم. سپس مکان پرونده را از جایی که باید مقدار درجه حرارت خوانده شود را مشخص می کنیم. متغیر device_folder به پوشه ای که با که با -28 شروع میشد ارجاع داده میشود. نام آن را با نام مخصوص سنسور خود جایگزین کنید.
سپس از عملکردی به نام get_temp استفاده می کنیم که در آن دما را از پرونده ای که در بالا معرفی کردیم میخوانیم. مانند قبل دما را دریافت میکنیم اما در قالب زیر خواهد بود :
با توجه به این فرمت، دمای 37 درجه، 37000 نشان داده میشود. بنابراین ما باید آن را به 1000 تقسیم کنیم و آن را روی ال سی دی نمایش دهیم.
def get_temp(): #خواندن مقدار دما file = open(device_file, 'r') #باز کردن فایل lines = file.readlines() #خواندن خطوط فایل file.close() #بستن فایل trimmed_data = lines[1].find('t=') #خواندن خط "t=" if trimmed_data != -1: temp_string = lines[1][trimmed_data+2:] #جدا کردن مقدار دما temp_c = float(temp_string) / 1000.0 #تقسیم دما به 1000 return temp_c #برگرداندن مقدار برای نوشتن روی ال سی دی
از این خطوط بالا برای خواندن فایل استفاده میشود. سپس به دنبال خط “t=” میگردیم و سپس مقدار دما را پیدا میکنیم. آن را در 1000 تقسیم میکنیم و در پایان متغیر temp_c به عنوان نتیجه برمیگردد تا در ال سی دی نوشته شود.
در داخل حلقه بینهایت while loop، ما فقط باید عملکرد بالا را بدست آوریم تا مقدار دما را بدست آوریم و آن را در صفحه LCD نمایش دهیم. ما همچنین مقدار دما را هر 1 ثانیه بروز میکنیم.
while 1: #حلقه بی نهایت lcd.clear() #پاکسازی ال سی دی lcd.message ('Temp = %.1f C' % get_temp()) # نمایش مقدار دما time.sleep(1) #تاخیر 1 ثانیه ای برای بروز رسانی
فیلم عملکرد پروژه
مدار را مطابق با شماتیک متصل کنید، برنامه پایتون کامل را از انتهای صفحه دانلود کرده و آن را در رزبری پای بارگذاری کنید. سپس باید بتوانید متن مقدمه را در ال سی دی مشاهده کنید. فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.
موارد موجود در فایل : سورس کامل ، شماتیک