Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı

Raspberry Pi Pico eğitim serimizi takip ediyorsanız, pico kartın ADC kanalından ADC değerini ölçtüğümüz bir OLED ekran modülünün bir pico kartıyla nasıl arayüzleneceğine ilişkin öğreticiyi okumuş olmalısınız. Bu öğreticide ise, bir ultrasonik sensörü pico kartımız ile arayüzleyeceğiz ve bir nesnenin mesafesini ölçeceğiz ve ardından MicroPython’u kullanarak OLED ekran modülünde mesafeyi göstereceğiz.

Gerekli Malzemeler

Bir Ultrasonik Sensörü Raspberry Pi Pico ile arayüzlemek için aşağıdaki bileşenlere ihtiyacımız var:

  • Raspberry Pi Pico
  • Ultrasonik Sensör
  • OLED Ekran
  • Bağlantı Kabloları

Ultrasonik Sensör Nedir ve Nasıl Çalışır?

Elektronik konusunda yeniyseniz, Ultrasonik sensör nedir gibi pek çok sorunuz olabilir. Herhangi bir nesnenin mesafesini nasıl ölçebilir? Bu bölümde bu tür soruların cevaplarını bulmaya çalışacağız. Gerekli tüm bileşenleri yanınızda bulundurduğunuzda, aşağıda belirtilen adımları takip edebilir ve proje üzerinde çalışabilirsiniz. Aşağıdaki ultrasonik sensörün resmine bakın. Solda, bir ultrasonik sensörün önden görünümüne sahibiz ve sağ tarafta, ultrasonik sensörün arkadan görünümüne sahibiz. Bu sensörün önünde ilk resimde görebileceğiniz iki transdüserimiz var.

Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı Raspberry Pi Pico Ultrasonik Mesafe,Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı,pico ultrasonik,pico mesafe sensörü

Bir transdüser, 40 kHz’de ultrasonik patlamayı iletmek için kullanılır ve diğeri, yansıyan ultrasonik patlamayı alır. Sensörü çalıştırmak için 2 pinimiz (Vcc ve GND) ve mesafeyi ölçmek için 2 pinimiz (Trigger ve Echo) var.

Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı Raspberry Pi Pico Ultrasonik Mesafe,Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı,pico ultrasonik,pico mesafe sensörü

Şimdi aşağıdaki zamanlama diyagramı yardımıyla çalışmayı anlamaya çalışalım. İlk olarak, ultrasonik sensörün tetikleme(trigger) pinini en az 10 mikro saniye(us) için YÜKSEK(5V) ayarlamamız gerekiyor. Bu, sensörün 40 kHz’de 8 döngülü bir ultrasonik patlama göndermesine ve yansıyan ultrasonik patlamayı beklemesine neden olacaktır. Sensör, alıcıdan yansıyan ultrasonik dalgayı algıladığında, yankı(echo) pinini yüksek (5V) olarak ayarlar ve mesafeyle orantılı bir süre (genişlik) geciktirir. Echo pininin bu genişliğini zaman içinde (mikro saniye cinsinden) ölçmemiz gerekiyor ve daha sonra bu süreyi mesafe formülünü kullanarak mesafeyi hesaplamak için kullanacağız. Burada sesin hızının saniyede 340 metre olduğunu biliyoruz. Bu, santimetre başına yaklaşık 29,412 mikrosaniyeye karşılık gelir. Mesafeyi santimetre cinsinden hesaplamak için, Mesafe ve Zaman birimlerinin sırasıyla Santimetre ve Mikro Saniye olduğu aşağıdaki formülü kullanmamız gerekir.

Mesafe = (zaman/2) / 29.412  

Yankı pininin aldığı süreyi 2’ye bölüyoruz çünkü ultrasonik dalganın nesneye doğru hareket ederek mesafeyi iki kez kat etmesi ve sensöre geri yansıması gerekiyor.

Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı Raspberry Pi Pico Ultrasonik Mesafe,Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı,pico ultrasonik,pico mesafe sensörü

Bağlantı Şeması

Bir Ultrasonik Sensörü Raspberry Pi Pico kartıyla arayüzlemek için aşağıdaki devre şemasını kullanabilirsiniz. Gördüğünüz gibi, ultrasonik sensör modülüne 5V güç sağlamak için pico kartının VBUS pinini kullandık ve OLED ekran modülü için Pico kartının 3.3V pinini kullandık. Ultrasonik sensörün tetik pini ve yankı pini sırasıyla GPIO3 ve GPIO2’ye bağlanır. OLED ekran modülünün SDA ve SCL pinleri sırasıyla GPIO16 ve GPIO17 pinlerine bağlanır. Ultrasonik sensörün GND pimi ve OLED ekran modülü, Raspberry Pi Pico kartının GND pinine bağlanır.

Ultrasonik SensörRaspberry Pi PicoOLED ekran modülü
VCCVBUS (PIN: 40)
Echo(Yankı)GPIO2 (PIN: 4)
Trigger(Tetik)GPIO3 (PIN: 5)
GNDGND (PIN: 38)GND
3.3v (PIN: 36)VCC
GPIO16 (PIN: 21)SDA
GPIO17 (PIN: 22)SCL
Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı Raspberry Pi Pico Ultrasonik Mesafe,Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı,pico ultrasonik,pico mesafe sensörü

Raspberry Pi Pico’yu MicroPython Kullanarak Programlama

İlk olarak, Raspberry Pi Pico için buradaki GitHub deposundan kod dosyalarını indirin. Ardından “T4_Interfacing_HC-SR04_Ultrasonic_sensor” klasörünü açın.

main.py’nin içinde, machine.py kitaplığına ve ssd1306.py kitaplığına sahibiz. Machine kitaplığı, temel işlemler için yerleşik MicroPython kitaplığıdır. I2C, ADC, SPI gibi 3 önemli sınıf kullanacağız. ssd1306.py kitaplığı, OLED ekran için kullanılır. OLED ekran modülünün Raspberry Pi Pico ile nasıl arabirim oluşturacağına ilişkin önceki eğiticimizde bu kitaplıktan zaten bahsetmiştik. Utime.py kitaplığı, programda zaman gecikmeleri vermek için kullanılır.

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import utime

“trigger” ve “echo” değişkeni, ilgili pin işlevleri için bir nesne olarak kullanılır. Trigger pini, pico kartının GPIO 3’üne bağlı pindir, pin.OUT kullanılarak ÇIKIŞ olarak ayarlanırken, yankı pini pin.INPUT kullanılarak GİRİŞ olarak ayarlanır.

trigger = Pin(3, Pin.OUT)
echo = Pin(2, Pin.IN)

Ultrasonik() işlevi, ultrasonik sensörün yankı pininin yanıt süresini hesaplamak için kullanılır. Fonksiyonun içinde, tetik pini DÜŞÜK olarak ayarlanmıştır. 2 mikro saniyelik bir gecikme sağladık ve tetik pinini 10 mikrosaniye için YÜKSEK olarak ayarladık. Sonra tekrar DÜŞÜK ayarladık. Daha sonra, yankı pininin sırasıyla YÜKSEK ve DÜŞÜK olduğu zamanı depolamak için kullanılan sinyal ve sinyal kapatma değişkenlerinin farkını yakaladık. Hem signalon ve signoff değişkeninin farkını döndürmek için zaman geçiren değişkeni kullandık.

def ultrasonic():
    timepassed=0
    trigger.low()
    utime.sleep_us(2)
    trigger.high()
    utime.sleep_us(5)
    trigger.low()
    while echo.value() == 0:
        signaloff = utime.ticks_us()
    while echo.value() == 1:
        signalon = utime.ticks_us()
    timepassed = signalon - signaloff
    return timepassed

Önceki eğitimlerimizde OLED ekranda bir metnin nasıl görüntüleneceğini tartışmıştık. Aşağıda verilen kod, I2C iletişimini ve OLED ekranı başlatmak için kullanılır. Aşağıdaki kodu anlamak için “MicroPython Kullanarak Raspberry Pi Pico’da ADC” içeriğimize bakabilirsiniz.

WIDTH  = 128                                          # oled display width
HEIGHT = 64                                            # oled display height
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=200000)       # Init I2C using pins GP8 & GP9 (default I2C0 pins)
print("I2C Address      : "+hex(i2c.scan()[0]).upper()) # Display device address
print("I2C Configuration: "+str(i2c))                   # Display I2C config
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)                  # Init oled display

oled.fill(0) yöntemi, aşağıdaki kodda OLED ekranı temizlemek için kullanılır. Ardından, oled.text() işlevini kullanarak karşılık gelen yerde bazı metinler gösteririz. Bu mesajlar oled.show() yöntemi kullanılarak OLED ekranda gösterilecektir. Ardından, 4 saniyelik gecikme sağlamak için utime.sleep(4) kullanılır.

oled.fill(0)
# Add some text
oled.text("devreyakan.com",5,8)
oled.text("OLED ekran",5,30)
oled.text("Ultrasonik",28,40)
oled.text("Sensor",50,50)
# Finally update the oled display so the image & text is displayed
oled.show()
utime.sleep(4)

Aşağıdaki while döngüsünde, bir tetikleme darbesi ile bir yankı darbesi arasındaki yanıt süresini döndürmek için ultrasonic() işlevinin çağrıldığını görebilirsiniz. Ardından, mesafe formülünü kullanarak mesafeyi hesaplamak için distance_cm değişkeni kullanılır. Round() işlevi, ölçülen mesafenin ondalık basamaklarını 2. ondalık basamağa kadar sabitlemek için kullanılır. Ardından, oled.text() işlevi kullanılarak OLED ekranda mesafe gösterilir.

while True:
    oled.fill(0)
    measured_time = ultrasonic()     
    distance_cm = (measured_time * 0.0343) / 2
    distance_cm = round(distance_cm,2)
    oled.text("ObjectDistance:",0,8)
    oled.text(">> "+str(distance_cm)+" cm",2,25)
    oled.show()
    utime.sleep(1)

Thonny IDE’de “main.py” ve “ssd1306.py” dosyalarını açın. Başlamak için, “ssd1306.py” dosyasını Pico kartına kaydetmek için klavyenizdeki “ctrl+shift+s” düğmelerine tıklayın. Verileri kaydetmeden önce Pico kartınızın bilgisayarınıza bağlı olduğundan emin olun. Kodu kaydettiğinizde aşağıdaki gibi bir pop-up pencere açılır. Önce Raspberry Pi Pico’yu seçmeli, ardından kodu “ssd1306.py” olarak kaydetmelisiniz. İşlemi “main.py” dosyası için tekrarlayın. Bu teknik, Pico’yu her açtığınızda yazılımı çalıştırmanıza izin verir.

Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı Raspberry Pi Pico Ultrasonik Mesafe,Raspberry Pi Pico Ultrasonik Mesafe Sensörü Kullanımı,pico ultrasonik,pico mesafe sensörü

Kodun Tamamı

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import utime

trigger = Pin(3, Pin.OUT)
echo = Pin(2, Pin.IN)

def ultrasonnic():
    timepassed=0
    trigger.low()
    utime.sleep_us(2)
    trigger.high()
    utime.sleep_us(5)

    trigger.low()

    while echo.value() == 0:

        signaloff = utime.ticks_us()

    while echo.value() == 1:
        signalon = utime.ticks_us()

    timepassed = signalon - signaloff

    return timepassed

WIDTH  = 128                                            # oled display width
HEIGHT = 64                                            # oled display height

i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=200000)       # Init I2C using pins GP8 & GP9 (default I2C0 pins)

print("I2C Address      : "+hex(i2c.scan()[0]).upper()) # Display device address
print("I2C Configuration: "+str(i2c))                   # Display I2C config
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)                  # Init oled display

oled.fill(0)

oled.text("devreyakan.com",5,8)
oled.text("OLED ekran",5,30)
oled.text("Ultrasonik",28,40)
oled.text("Sensor",50,50)

oled.show()
utime.sleep(4)

while True:
    oled.fill(0)
    measured_time = ultrasonnic()     
    distance_cm = (measured_time * 0.0343) / 2
    distance_cm = round(distance_cm,2)
    oled.text("<ObjectDistance>",0,8)
    oled.text(">> "+str(distance_cm)+" cm",2,25)
    oled.show()
    utime.sleep(1)

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.