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 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:
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.
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.
Gereken malzemeleri tedarik ettikten waterprof kılıfbulmam lazım.
9. satırda hata veriyor
list index out of range yazıyor hata olarakta
9. satırda hata veriyor
super pi(bananapi) için gerçerlimi yukarıda belirtilen kodlama
Malesef değildir.
Super pi de python ile bu kodlamayı çalıştırdım teşekkürler.