DEV Community

Ali Orhun Akkirman
Ali Orhun Akkirman

Posted on

PyBricks ile ileri geri ve sağa sola dönme

Lego'nun Technic Large Hub'ı için varsayılan firmware yerine PyBricks firmware'ü kullanarak Lego cihazınızda MicroPython kullanabiliyoruz.

Bu yazımızda Lego'nun uzaktan kumandası ile, _2 motor_lu bir düzeneğin çalıştırılması anlatılmıştır.

Image description

PyBricks firmware yükleme

Bunun için öncelikle Firmware'ü sisteme yüklemek gerekiyor ki, bunun için Lego Technic Hub üzerindeki bluetooth tuşuna basılı tutarken cihaza USB kablosunu takarak, ışıkların birkaç kere yanıp sönmesini bekledikten sonra sisteme giriş yapılması sağlanır.

Bu adımdan sonra aşağıdaki adreste bulunan güncel Firmware seçilerek kurulum gerçekleştirilir.

https://code.pybricks.com/

Bu kısımda bazı detaylar bulunabiliyor fakat bunlarla ilgili internette bir çok makaleye rastlanabilmekte.

PyBricks kullanımı

PyBricks firmware kurulduysa ve yeniden başlattıktan sonra artık cihazınızı bluetooth ile kullanabilirsiniz. Bunun için yine yukarıdaki adresten Bluetooth işaretine basarak firmware kurulumda verdiğiniz ismi seçerek cihazına bağlanabilirsiniz.

Image description

Cihazınıza bağlantı kurabildiyseniz (eşleştiyseniz) bluetooth ikonu aşağıdaki gibi olacaktır.

Image description

Bu adımdan sonra kodunuzu yazdıktan sonra çalıştır ve durdur butonları ile kodunuzu göndermeye başlayacaksınız.

Image description

Uzaktan kullanımlı iki motorlu örnek

Temel belgelendirmesi oldukça güzel olan PyBricks için, Technic Large Hub üzerindeki A ve C portlarına 2 adet motor bağlıdır.

Aşağıdaki kodda öncelikle gerekli kütüphaneler eklenmiş ve sonrasında Hub üzerindeki hem 5x5'lik matris ışıklandırması hem de güç tuşunun ışığını kapatmaktayız.

Sonrasında A ve C girişine bağlı 2 motor tanımlanmaktadır. Eğer motorlar takılı değilse kodunuz hata verecek ve çalışmayacaktır. Sonrasındaki kısımda Lego'nun uzaktan kumandası eklenmiş oldu.

Image description

İşlemler diye yorumlanmış kısım ise tamamen uzaktan kumandadaki tuşların durumlarına göre yazılmıştır. Tüm süreç bir while döngüsü içerisinde hazırlanmıştır ve döngü sırasında ilk öncelikle eğer herhangi bir tuşa basılı değilse motorları durduracak şekilde bir kod bloğu bulunmaktadır.

Sonrasında ise tek tek ve birden fazla tuşların basılması durumlarını ifade eden şekilde ileri-geri, sağ-sol anlamlarını kazanacak 2 motor için durum yer almaktadır. 360 değerleri, saniyede 360 derecelik açıyı tarayacak ve ters yönde 360 derece olacak şekilde hazırlanmıştır.

from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait

from pybricks.pupdevices import Remote
from pybricks.parameters import Button, Color

from pybricks.hubs import PrimeHub
from pybricks.tools import wait
from pybricks.parameters import Icon

# Hub üzerindeki ışıkları kapatma
hub = PrimeHub()
hub.display.off()
hub.light.off()

# A girişindeki motoru tanımlama (motor01)
motor01 = Motor(Port.A)

# C girişindeki motoru tanımlama (motor02)
motor02 = Motor(Port.C)

# Kumandayı tanımlama
remote = Remote()

# işlemler
while True:
    pressed = ()

    # tıklanılmadığında
    while not pressed:
        pressed = remote.buttons.pressed()
        motor01.reset_angle(0)
        motor02.reset_angle(0)

    # Sağdaki tuşları motor01'e atama
    if Button.RIGHT_PLUS in pressed:
        motor01.run(360)
    elif Button.RIGHT_MINUS in pressed:
        motor01.run(-360)

    # Soldaki tuşları motor02'ye atama
    elif Button.LEFT_PLUS in pressed:
        motor02.run(360)
    elif Button.LEFT_MINUS in pressed:
        motor02.run(-360)

    elif Button.RIGHT_PLUS and Button.LEFT_PLUS in pressed:
        motor02.run(360)
        motor01.run(360)

    elif Button.RIGHT_PLUS and Button.LEFT_MINUS in pressed:
        motor02.run(-360)
        motor01.run(360)

    elif Button.RIGHT_MINUS and Button.LEFT_PLUS in pressed:
        motor02.run(360)
        motor01.run(-360)

    elif Button.RIGHT_MINUS and Button.LEFT_MINUS in pressed:
        motor02.run(-360)
        motor01.run(-360)


    while pressed:
        pressed = remote.buttons.pressed()
Enter fullscreen mode Exit fullscreen mode

Top comments (0)