پروژه نحوه اتصال سنسور دما DS18B20 به برد رزبری پای + کد پایتون

اتصال سنسور دما DS18B20 به برد رزبری پای

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

سنسور دمای DS18B20 عالیترین انتخاب برای پروژه هایی مثل ایستگاه هواشناسی، یا سیستم مانیتورینگ خانه های هوشمند است و از معدود سنسورهایی است که اتصال آن به برد رزبری پای بسیار ساده است. از لحاظ ابعاد به اندازه ی ترانزیستور بوده و فقط از یک سیم برای انتقال دیتا استفاده میکند. علاوه بر این دقت و سرعت اندازه گیری بالایی دارد. تنها المان دیگری که نیاز داریم،‌ مقاومتی به اندازه 7/4 کیلو اهم یا 10 کیلو اهم است. در این آموزش نحوه اتصال این سنسور را به برد رزبری پای، و نمایش اطلاعات دمایی خوانده شده را بر روی LCD، خواهیم آموخت.

 

ادوات مورد نیاز:

  • سنسور دمای دیجیتال DS18B20
  • برد رزبری پای مدل 3B+ و یا بالاتر
  • نمایشگر 16×2 LCD

 

مقایسه سنسورهای دمای دیجیتال و آنالوگ

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

سنسورهای دمای دیجیتال، عمدتا قطعات آی سی ساخته شده بر پایه نیمه هادی سیلیکان هستند. قسمتهای مختلف داخل این آی سی ها عبارت است از سنسور دما، مبدل آنالوگ به دیجیتال (ADC)، حافظه برای ذخیره موقت دمای خوانده شده، و رابط دیتا بین این آی سی و برد میکرو کنترلر است. برخلاف سنسورهای آنالوگ محاسبات مربوط به دما داخل خود سنسور دیجیتال انجام میشود و اطلاعات خروجی مستقیما دما را نشان میدهد. بنابراین نیاز به محاسبات توسط میکرو کنترلر نیست.

 

معرفی سنسور دمای دیجیتال DS18B20

اطلاعات خروجی این سنسور بر اساس پروتکل انتقال سریال و فقط از یک سیم قابل دسترس است. نکته جالبتر اینکه این سنسور میتواند تمام انرژی مورد نیاز خود را از همین سیم دیتا دریافت کند و بنابراین هر دو پایه GND و VCC آن را میتوان به زمین وصل کرد. به این قابلیت parasite power mode گفته میشود. در حالت نرمال این آی سی با سه سیم VCC، GND، و سیم دیتا کار میکند،‌ اما در حالت parasite mode، تغذیه آی سی از طریق دو سیم دیتا و GND تامین میشود.

علاوه بر این، سنسور DS18B20 دارای سیستم هشدار است که میتواند در مواقع خاصی استفاده شود،‌ مثلا وقتی بخواهیم افزایش یا کاهش دما را از مقادیر ماکزیمم یا مینیمم خاصی بررسی کنیم.

شماره سریال مخصوص به هر سنسور در یک حافظه ROM 64 بیتی ذخیره شده است. در شرایطی که بیش از یک سنسور به طور همزمان به یک پین میکرو کنترلر متصل باشد،‌ میکرو با بررسی این سریال میتواند تشخیص دهد که دمای خوانده شده مربوط به کدام سنسور است.

 

مشخصات فنی سنسور دما DS18B20:

رنج دمایی کاری بین منفی 55 درجه تا 125 درجه سانتیگراد

رنج ولتاژ کاری بین 3 تا 5 ولت

زمان نمونه برداری 750 میلی ثانیه

رزولوشن 12 بیت برای تشخیص 0.0625°C

کد 64 بیتی مخصوص هر سنسور

پروتکل ارتباط تکی سیمه سریال

برای اطلاعات بیشتر از قبیل زمانبندی،‌ تنظیمات و … در مورد این سنسور، میتوانید دیتا شیت این قطعه را از لینک زیر دریافت کنید.

دیتاشیت سنسور دما DS18B20

 

اتصال سنسور دما DS18B20 به برد رزبری پای

همانطور که گفتیم این سنسور دارای سه پایه است دو تا برای تغذیه و یکی برای ارتباط دیتای سریال:

سیم بندی سنسور دما

 

سیم بندی سنسور به خروجی SSH

مطابق شکل زیر متیوانید اتصالات سنسور به برد رزبری را انجام دهید:

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

سیم بندی LCD

 

سیم بندی LCD

برای اتصال نمایشگر به برد از تصویر زیر کمک بگیرید:

فعالسازی ارتباط سریال

باید قبل از ارسال اطلاعات توسط سنسور، تنظیمات مربوط به ارتباط سریال را روی برد رزبری پای انجام دهیم. بعد از اتصال سنسور و منبع تغذیه برد، log in کرده و مراحل زیر را دنبال کنید:

  • در صفحه فرمان (Command Prompt) عبارت زیر را وارد کنید:

sudo nano /boot/config.txt

سپس عبارت  dtoverlay=w1-gpio را به انتهای فایل اضافه کنید.

  • از محیط خارج شده و رزبری پای را در حالت sudo reboot ریستارت کنید.
  • دوباره log in کرده و در صفحه فرمان عبارت زیر را وارد کنید:

sudo modprobe w1-gpio

  • سپس عبارت زیر را وارد کنید:

sudo modprobe w1-therm

  • مسیر را به صورت زیر تغییر دهید:

cd /sys/bus/w1/devices

  • حالا 1s را وارد کنید که لیست ادوات را نشان دهد:

برای نمونه در مورد سیستم ما آدرس  28-000006637696 w1_bus_master1  نمایش داده شد.

  • حالا عبارت cd 28-XXXXXXXXXXXX را وارد کنید (دقت کنید که به جای xها آدرس مربوط به رزبری خودتان را جایگزین کنید). برای مثال ما باید عبارت زیر را بنویسیم:

cd 28-000006637696

  • با وارد کردن دستور زیر اطلاعات دمایی خوانده شده توسط سنسور نمایش داده خواهد شد:

cat w1_slave

برای مثال در اینجا عدد t=28625 خوانده شده که به معنای 625/28   درجه سلسیوس است.

  • با وارد کردن root میتوانید به شاخه اصلی برگردید.

با انجام این مراحل به سادگی اطلاعات سنسور به صورت سریال دریافت میشود. با استفاده از یکی از برنامه های زیر میتوانید خروجی سنسور را روی ترمینال SSH یا LCD نمایش دهید.

 

خروجی سنسور روی ترمینال SSH

در ادامه کد پایتون ساده ای خواهید دید که با استفاده از ان اطلاعات سنسور روی ترمینال SSH قرار میگیرد.

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

نمایش دما در ssh

خروجی سنسور روی LCD

برای ارتباط با LCD از کتابخانه RPLCD استفاده میکنیم. با استفاده از pip میتوانید این کتابخانه را به راحتی نصب کنید. اگر pip روی برد رزبری پای شما نصب نشده باشد، با استفاده از دستور زیر میتوانید آنرا نصب کنید:

sudo apt-get install python-pip

بعد از نصب pip، دستور زیر را وارد کنید تا کتابخانه RPLCD نصب شود:

sudo pip install RPLCD

بعد از نصب کتابخانه، با اجرای کد زیر میتوانید خروجی سنسور را روی LCD مشاهده کنید:

 

import os

import glob

import time

from RPLCD import CharLCD

lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])

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

#CELSIUS CALCULATION

:()def read_temp_c

    ()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 = int(temp_string) / 1000.0 # TEMP_STRING IS THE SENSOR OUTPUT, MAKE SURE IT’S AN INTEGER TO DO THE MATH

        temp_c = str(round(temp_c, 1)) # ROUND THE RESULT TO 1 PLACE AFTER THE DECIMAL, THEN CONVERT IT TO A STRING

        return temp_c

#FAHRENHEIT CALCULATION

:()def read_temp_f

    ()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_f = (int(temp_string) / 1000.0) * 9.0 / 5.0 + 32.0 # TEMP_STRING IS THE SENSOR OUTPUT, MAKE SURE IT’S AN INTEGER TO DO THE MATH

        temp_f = str(round(temp_f, 1)) # ROUND THE RESULT TO 1 PLACE AFTER THE DECIMAL, THEN CONVERT IT TO A STRING

        return temp_f

:while True

    lcd.cursor_pos = (0, 0)

    lcd.write_string(“Temp: ” + read_temp_c() + unichr(223) + “C”)

    lcd.cursor_pos = (1, 0)

    lcd.write_string(“Temp: ” + read_temp_f() + unichr(223) + “F”)

به این ترتیب میتوانید سنسور دما را به برد رزبری متصل کرده و خروجی آنرا مشاهده کنید!

 

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

منبع: https://www.circuitbasics.com/

 

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

آخرین مقالات

مقالات مرتبط