back to top

Raspberry Pi ile DS18B20 Sıcaklık Sensörü Kullanımı

Merhabalar. Bu dersimizde Raspberry Pi’mize dijital sıcaklık sensörü bağlayarak sıcaklık ölçümü yapacağız. Gerekli malzemelerimiz:

Raspberry Pi’de, Arduino’nun aksine ADC (analog-to-digital converter, analogtan dijitale çevirici) bulunmamaktadır. Bu sebeple, LM35 gibi analog çıkış veren sıcaklık sensörlerini Raspberry Pi ile doğrudan kullanmamız mümkün değildir. Bu dersimizde dijital haberleşme yeteneğine sahip DS18B20 sıcaklık sensörü kullanacağız.

DS18B20

(*) DS18B20 sıcaklık sensörü, yukarıdaki resimde görüldüğü gibi TO92 kılıfta gelebileceği gibi su geçirmez yapıda veya devre kartına lehimlenmiş halde hazır modül olarak ta bulunmaktadır. Hazır modülden temin ederseniz, malzeme listesinde yer alan 4.7kΩ dirence ihtiyacınız kalmayacaktır, çünkü bu kartta direnç zaten bulunmaktadır. Su geçirmez ve TO92 kılıflarda ise bu direnci kullanmanız gereklidir.

Devremizi aşağıdaki şemada belirtilen şekilde kuruyoruz:

ders10_temp_bb

Bağlantıyı yaptıktan sonra Raspberry Pi’mizi çalıştırıyoruz. DS18B20 sensörü one-wire isimli bir protokol kullanmaktadır. Bu protokolü Raspberry Pi’mizde kullanmak için öncelikle

sudo nano /boot/config.txt

komutunu kullanarak açılan ekranda en alt kısmına

dtoverlay=w1-gpio

satırını eklememiz gerekiyor.

Alternatif olarak, one-wire protokol desteğini grafik arayüzü kullanarak da açabiliriz. 

config_

Bu satırı ekledikten sonra Raspberry Pi’mizi yeniden başlatıyoruz. Raspberry Pi’miz açılınca temp.py isimli bir dosya oluşturup içine aşağıdaki kodumuzu kopyalıyoruz:

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 
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 True: 
    print(read_temp()) 
    time.sleep(1)

Dosyamızı kaydettikten sonra

sudo

 python temp.py

komutu ile çalıştırıyoruz. Raspbian’ın güncel sürümünde Python komutlarından önce sudo yazmamıza gerek yoktur. Ekranda görülen ilk değer Celcius, ikincisi ise Fahrenheit cinsinden sıcaklık değeridir.

temp

Son Çıkan Yazılar

6 YORUMLAR

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz