راهنمای راه اندازی سنسور دما DS18B20 با استفاده از Raspberry Pi به زبان پایتون
هدف از این آموزش راه اندازی پروتکل 1-WIRE به زبان پایتون میباشد ( شما می توانید سنسور های مشابه که خروجی 1-WIRE دارند را به این روش راه اندازی نمایید )
لوازم مورد نیاز
- رزبری پای (رزبری پای مورد استفاده در این اموزش Raspberry Pi3 model B می باشد.)
- LCD2X16
- ماژول PCF8574
- DS18B20
- برد بورد
- سیم برد بورد
سنسور DS18B20
DS18B20 یک سنسور دما بوده که به طور گسترده در مکانهایی با محیطهای کار سخت مانند صنایع شیمیایی ، کارخانجات معدن و غیره درگیر هستند استفاده می شود .
تعریف پایه های سنسور DS18B20
سنسور DS18B20 توسط پروتکل یک سیمه امکان اتصال به میکروکنترلر را دارد. پایه شماره 1 زمین – پایه شماره 2 به رزبری – پایه شماره 3 به مثبت منبع وصل میشود .

نحوه اتصال بهرزبری پای
همانند تصویر زیر برای اتصال DS18B20 و رزبری پای مراحل زیر را دنبال می کنیم:
- اتصال پین مثبت ماژول DS18B20 به تغذیه 5 ولت برد رزبری پای (سیم قرمز)
- اتصال پین منفی سنسور به پین GND برد رزبری پای (سیم مشکی)



آماده سازی نرم افزاری Raspberry Pi
قبل از اسکریپت نویسی پایتون برای خواندن دیتا از سنسور باید 1-WIREرا در رزبری فعال کنیم:
[python]
sudo nano /boot/config.txt
[/python]

در ادامه عبارت dtoverlay=w1–gpio را در ابتدای فایل وارد کرده و بعد از ذخیره کردن ان با دستور زیر رزبری را راه انداری مجدد می کنیم :
[python]
sudo reboot
[/python]
حال دستورات زیر را به ترتیب وارد می کنیم:
[python]
sudo modprobe w1–gpio
sudo modprobe w1-therm.
cd /sys/bus/w1/devices
ls
[/python]
که با وارد کردن دستور LS ای دی سنسور خود را رویت خواهیم کرد:

اکنون با رفتن به ادرس با ای دی دریافتی و وارد کردن دستور زیر مقدار دما را در CLW مشاهده می کنیم:
[python]
cd 28-XXXXXXXXXXXX [use the name of your directory or use Tab key for auto complete)
cat w1_slave
[/python]

نوشتن کد پایتون برای نمایش دما بر روی LCD با I2C
حال در این بخش با اضافه کردن کتابخانه I2C_LCD_DRIVER و مشخص کردن محل و خط ذخیره شدن دما در حافظه رزبری ، دما را بر روی ال سی دی نمایش می دهیم:
[python]
import time #import time for creating delay
#import Adafruit_CharLCD as LCD #Import LCD library
import I2C_LCD_driver
import os #Import for file handling
import glob #Import for global
mylcd = I2C_LCD_driver.lcd()
#lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI
#lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI
#lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI
#lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI
#lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI
#lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI
#lcd_backlight = 0 #LED is not connected so we assign to 0
#lcd_columns = 16 #for 16*2 LCD
#lcd_rows = 2 #for 16*2 LCD
#lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
# lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to libra
mylcd.lcd_display_string(” Redronic”,1) #Give a intro message
time.sleep(2) #wait for 2 secs
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 get_temp(): #Fundtion to read the value of Temperature
file = open(device_file, ‘r’) #opent the file
lines = file.readlines() #read the lines in the file
file.close() #close the file
trimmed_data = lines[1].find(‘t=’) #find the “t=” in the line
if trimmed_data != -1:
temp_string = lines[1][trimmed_data+2:] #trim the strig only to the temoerature value
temp_c = float(temp_string) / 1000.0 #divide the value of 1000 to get actual value
return temp_c #return the value to prnt on LCD
while 1: #Infinite Loop
# lcd.clear() #Clear the LCD screen
mylcd.lcd_clear()
#lcd.message (‘Temp = %.1f C’ % get_temp()) # Display the value of temperature
mylcd.lcd_display_string(“DS18B20 with Pi”,1) #Give a intro message
mylcd.lcd_display_string(“Temp = %.1f C” % get_temp(), 2)
time.sleep(4) #Wait for 1 sec then update the values
[/python]
در پایان با اتمام نوشتن کد بالا و فشار دادن کلید های CTRL + X و سپس Y (در انتها زدن کلید Enter) اقدام به ذخیره اسکریپت نوشته شده می کنیم.
خروجی برنامه پایتون:
