Raspberry Pi ile HC-SR04 Sensör Uygulaması

Merhaba arkadaşlar, bu yazımda daha önce Arduino’da kullandığım HC-SR04 Ultrasonik Mesafe Sensörü ile basit bir uygulama yapacağım. HC-SR04 sensörünün nasıl çalıştığını merak ediyorsanız, daha önceden yazmış olduğum C#.NET-Arduino Uygulamaları: HC-SR04 Ultrasonik Mesafe Sensörü Uygulaması yazıma göz atabilirsiniz.

HC-SR04 sensörü ile ilgili böyle temel bir uygulama yapmak istememin asıl amacı, bu sensörü rPi ile birlikte kullandığımızda çok önemli bir noktaya dikkat etmemiz gerektiğidir. Bu önemli nokta; Gerilim Bölücü kuralıdır. Dilerseniz uygulamaya geçmeden önce Gerilim Bölücü kuralının ne olduğunuz ve uygulamamızda neden ihtiyaç duyduğumuzdan bahsedelim.

Gerilim Bölücü Kuralı Nedir?

Aslında adında anlaşılacağı üzere amaç gerilimi bölmektedir. Bu işlem en basit haliyle devremize direnç eklemek veya var olan direnç değerleri üzerinde oynamalar yapmamız ile gerçekleşir. En temel haliyle basit bir gerilim bölücü devreyi yan taraftaki gibi tanımlayabiliriz;

Yandaki resimde de görüldüğü üzere elimizde bulunan Vin değerini R1 ve R2 dirençleri yardımıyla bölerek Vout üzerinden daha düşük bir değer ile alabiliyoruz. Her zaman olduğu gibi matematik burada da işimizi kolaylaştırıyor ve sahip olduğumuz gerilimi istediğimiz gerilime bölebilmek için bizlere iki direnç üzerinden bir denklem üretiyor. Aşağıda temel bir gerilim bölücü için geçerli olan formül bulunmaktadır.

Vout = Vin x ( (R2) / (R1 + R2) ) , denklemi biraz daha düzenlersek;

Vout / Vin = ( (R2) / (R1 + R2) ) sonucuna ulaşırız.

Gelelim, bu uygulamada neden böyle bir çalışmaya ihtiyaç duyduğumuza. rPi üzerinde kullanmış olduğumuz GPIO pinleri max. 3.3V çıkışa izin vermektedir ve kullanmış olduğumuz HC-SR04 sensörümüzün ECHO pini 5V çıkış vermektedir. Bu yüzden bizim bu 5V’luk ECHO çıkışını 3.3V’a düşürerek rPi’ye giriş yapmamız gerekmektedir. Yukarıdaki denklemde; Vin: 5V, Vout: 3.3V ve R1: 1K değerlerini yerine yazıp, denklemi çözdüğümüzde kullanabileceğimiz R2 değerini yaklaşık olarak 2K buluyoruz. Artık geriye devremizi kurmak ve kodlarımızı yazmak kalıyor.

Uygulamaya ait devre bağlantıları aşağıdaki gibidir.

Uygulamaya ait kodlara geçmeden önce kısaca devrenin çalışmasından bahsedelim. Yazdığımız kodlarda da görüldüğü üzere mesafe ölçüm aralığımız 5 – 100 cm aralığındadır. Cisim 5 cm’den yakın veya 100 cm’den uzak olduğunda ekrana mesafe ölçülemediği yazısı basılmaktadır. Ayrıca devrede bulunan kırmızı ve yeşil ledler bir nevi bu mesajları temsil etmektedir. Yine cisim 5 cm’den yakın veya 100 cm’den uzak olduğunda kırmızı led yanmaktadır. Mesafe ölçümü başarılı bir şekilde gerçekleştirildiği sürece yeşil led yanmaya devam etmektedir. Kodlar aşağıdaki gibidir.


#-*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

TRIG=16
ECHO=18
ledK=22
ledY=32

print "Mesafe Ölçüm İlerlemesi"

GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(ledK, GPIO.OUT)
GPIO.setuo(ledY, GPIO.OUT)

while True:

GPIO.output(TRIG, False)
print "Sensör Hesaplaması Bekleniyor"
time.sleep(1)
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)

while GPIO.input(ECHO) == 0:
pulse_start = time.time()

while GPIO.input(ECHO) == 1:
pulse_finish = time.time()

pulse_time = pulse_finish - pulse_start

distance = pulse_time * 17150
distance = round(distance, 2)

if distance > 5 and distance < 100:
print "Mesafe:",distance, "cm"
GPIO.output(ledK, False)
GPIO.output(ledY, True)

else:
print "Mesafe Hesaplanamıyor!"
GPIO.output(ledK, True)
GPIO.output(ledY, False)


Kod yazma aracındaki problemler nedeniyle girinti işlemleri başarılı bir şekilde gerçekleşmedi. Lütfen Python syntax kurallarını göz önünde bulundurarak kodları kullanın. (Kısaca girintilere dikkat! 🙂 )

Kod içerisinde bulunan mesafe hesaplama konularına bir sonraki HC-SR04 uygulamasında değineceğim şimdilik o konuya girmiyorum. Son olarak uygulamaya ait videoyu aşağıda bulabilirsiniz.

Bir sonraki yazımda görüşmek dileğiyle, hoşçakalın..

 

Eren UYANIK

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir