Evde oyun oynayacakken bir Joystick’inizin olmadığını veya onun bozulduğunu mu fark ettiniz? Hadi bu soruna Arduino UNO ve Joystick Shield ile çözüm bulalım.
Günümüzde birçok firma çeşitli modellerde Joystick’ler tasarlamakta ve pazarlamakta. Biz de Maker olarak neden kendi Joystick’imizi yapmayalım dedik. Arduino’nun bu tür projeler için geliştirdiği ve Arduino’yu bilgisayara klavye, mouse veya başka aygıtlar olarak tanıtmamıza olanak sağlayan Arduino Leonardo modeli var. Fakat neden ek bir ürün alıp elimizdeki Arduino UNO’yu değerlendirmeyelim diye düşündük sonunda bu çalışmayı yapmaya karar verdik ve Python üzerinden Firmata adlı bir protokol kullanarak Arduino UNO’muza da aynı işlevi kazandırmayı başardık.
Yaptığımız projeden bir video.
Evde oyun oynayacakken bir Joystick’inizin olmadığını veya onun bozulduğunu mu fark ettiniz? Hadi bu soruna Arduino UNO ve Joystick Shield ile çözüm bulalım.
Günümüzde birçok firma çeşitli modellerde Joystick’ler tasarlamakta ve pazarlamakta. Biz de Maker olarak neden kendi Joystick’imizi yapmayalım dedik. Arduino’nun bu tür projeler için geliştirdiği ve Arduino’yu bilgisayara klavye, mouse veya başka aygıtlar olarak tanıtmamıza olanak sağlayan Arduino Leonardo modeli var. Fakat neden ek bir ürün alıp elimizdeki Arduino UNO’yu değerlendirmeyelim diye düşündük sonunda bu çalışmayı yapmaya karar verdik ve Python üzerinden Firmata adlı bir protokol kullanarak Arduino UNO’muza da aynı işlevi kazandırmayı başardık.
Yazımızda Neler Var:
- Gerekli Malzemeler
- Python Nedir?
- Firmata Protokolü Nedir?
- PyFirmata Kütüphanesi Nedir?
- Pynput Kütüphanesi Nedir?
- Kendi Joystick’imizi Yapalım!
Malzemeler:
Python Nedir?
Hollanda’da yaşayan Guido Van Rossum tarafından 90’lı yıllarda geliştirilen bir programlama dilidir. Öğrenmesi oldukça kolay, modülerliği, okunabilirliği destekleyen, platform bağımsız nesne yönelimli yorumlanabilir bir script dilidir. Kolay olması ve işlevselliği sayesinde programlama alanlarında çok sık olarak tercih edilmektedir.
Firmata Protokolü Nedir?
Firmata, bilgisayardaki yazılımların mikrodenetleyicilerle iletişim kurması için geliştirilmiş bir protokoldür. Protokol, herhangi bir mikrodenetleyici ile kullanılabilir. Biz de bu sebeple çalışmamızda bu protokol üzerinden ilerleyeceğiz.
PyFirmata Kütüphanesi Nedir?
PyFirmata, Firmata protokolü için geliştirilmiş bir Python kütüphanesidir.
Pynput Kütüphanesi Nedir / Ne İşe Yarar?
Pynput, Python kodunun diğer uygulamalarla olan etkileşimlerini otomatize etmek için fare ve klavyenin kontrol edilmesini sağlar. Kütüphane, kolayca kullanılabilecek şekilde tasarlanmıştır.
Kendi Joystick’imizi Yapalım!
1) Python’u yüklüyoruz.
İlk aşamada Python’u resmi sitesinden indiriyoruz
İnen dosyayı çalıştırıyor ve yüklüyoruz.
2 ) Kütüphanelerimizi indiriyoruz.
Komut İstemi’ni açıp gerekli kütüphaneleri yüklemek için aşağıdaki komudu yazıyoruz.
pip3 install pynput pyfirmata
3) Arduino’ya kodumuzu yüklüyoruz.
Şimdi Arduino’muzun Python ile haberleşmesini sağlayacak kodu yüklememiz gerekiyor. Bu koda ulaşmak için Arduino IDE uygulamasını başlatıp Örnekler>Firmata>Standart Firmata isimli dosyayı Arduino’muza yüklüyoruz.
4) Python kodumuzu hazırlayıp çalıştırıyoruz.
Şimdi Python ile beraber gelen IDLE uygulamasını çalıştırıp yeni bir dosya oluşturuyoruz ve aşağıdaki kodu yeni dosyamıza yapıştırıyoruz.
NOT: Ben kodu Asphalt 8 oyununa göre düzenledim. Siz kod üzerindeki yönlendirmeleri dikkate alarak oyunuz için gerekli tuşları modülde istediğiniz butonlara atayabilirsiniz.
# -- coding: utf-8 --
import pyfirmata, pyfirmata.util
import time
from pynput.keyboard import Key, Controller
keyboard = Controller()
# Arduino UNO'nun takılı olduğu portu aşağıdaki '/dev/ttyUSB0' yazdığım yere yazınız.
# NOT: Ben Linux işletim sistemi kullandığım için bende '/dev/ttyUSB0' şeklinde başlıyor. Windows için COM şeklinde başlıyordur.
# Portunuzu Arduino IDE uygulamasını açıp port kısmından bulabilirsiniz.
board = pyfirmata.Arduino('/dev/ttyUSB0', baudrate=57600)
iterator = pyfirmata.util.Iterator(board)
iterator.start()
# Joystick'lerin değerlerine göre klavyedeki uygun tuşlara basacak fonksiyonu tanımlıyoruz.
# x değişkeni Joystick değerinin, y değişkeni Joystick'in yüksek değerinde (Joystick'in sağa yatık durumu veya yukarı yatık durumu),
# z değeri Joystick'in düşük değerinde (Joystick'in sola yatık durumu veya aşağı yatık durumu) klavyede basılacak tuşun ayarlanmasını sağlar.
def klavyekontroljoy(x,y,z):
if x > 70:
keyboard.press(f"{y}")
print(f"{y} tuşu basılı")
if x < 70:
keyboard.release(f"{y}")
if x < 30:
keyboard.press(f"{z}")
print(f"{z} tuşu basılı")
if x > 30:
keyboard.release(f"{z}")
# Butonların değerlerine göre klavyedeki uygun tuşlara basacak fonksiyonu tanımlıyoruz.
# x değişkeni Buton değerininin, y değişkeni Butonun yüksek değerinde (yani basıldığında) klavyede basılacak tuşun ayarlanmasını sağlar.
def klavyekontrolbut(x,y):
if x == 0:
keyboard.press(f"{y}")
print(f"{y} tuşu basılı")
if x == 1:
keyboard.release(f"{y}")
time.sleep(1)
# Joystick'in x ekseni
analog_x = board.get_pin('a:0:i')
analog_x.enable_reporting()
# Joystick'in y ekseni
analog_y = board.get_pin('a:1:i')
analog_y.enable_reporting()
# A butonu
button_a = board.get_pin('d:2:i')
button_a.enable_reporting()
# B butonu
button_b = board.get_pin('d:3:i')
button_b.enable_reporting()
# C butonu
button_c = board.get_pin('d:4:i')
button_c.enable_reporting()
# D butonu
button_d = board.get_pin('d:5:i')
button_d.enable_reporting()
# E butonu
button_e = board.get_pin('d:6:i')
button_e.enable_reporting()
# F butonu
button_f = board.get_pin('d:7:i')
button_f.enable_reporting()
time.sleep(1)
while True:
x = int(analog_x.read() * 100)
y = int(analog_y.read() * 100)
A = int(button_a.read())
B = int(button_b.read())
C = int(button_c.read())
D = int(button_d.read())
E = int(button_e.read())
F = int(button_f.read())
klavyekontroljoy(x,"d","a")
klavyekontroljoy(y,"w","s")
klavyekontrolbut(A,"f")
klavyekontrolbut(B,"b")
klavyekontrolbut(C,"v")
klavyekontrolbut(D,"r")
klavyekontrolbut(E,"C")
# F tuşu basıldığında döngüyü bitirerek,
# Joystick'i devre dışı bırakacak komut.
if F == 0:
break
board.exit()
Artık kodumuzu kaydedip çalıştırdıktan sonra Joystick’imiz hazır hale geliyor!!!
Yazımızda Neler Var:
- Gerekli Malzemeler
- Python Nedir?
- Firmata Protokolü Nedir?
- PyFirmata Kütüphanesi Nedir?
- Pynput Kütüphanesi Nedir?
- Kendi Joystick’imizi Yapalım!
Malzemeler:
Python Nedir?
Hollanda’da yaşayan Guido Van Rossum tarafından 90’lı yıllarda geliştirilen bir programlama dilidir. Öğrenmesi oldukça kolay, modülerliği, okunabilirliği destekleyen, platform bağımsız nesne yönelimli yorumlanabilir bir script dilidir. Kolay olması ve işlevselliği sayesinde programlama alanlarında çok sık olarak tercih edilmektedir.
Firmata Protokolü Nedir?
Firmata, bilgisayardaki yazılımların mikrodenetleyicilerle iletişim kurması için geliştirilmiş bir protokoldür. Protokol, herhangi bir mikrodenetleyici ile kullanılabilir. Biz de bu sebeple çalışmamızda bu protokol üzerinden ilerleyeceğiz.
PyFirmata Kütüphanesi Nedir?
PyFirmata, Firmata protokolü için geliştirilmiş bir Python kütüphanesidir.
Pynput Kütüphanesi Nedir / Ne İşe Yarar?
Pynput, Python kodunun diğer uygulamalarla olan etkileşimlerini otomatize etmek için fare ve klavyenin kontrol edilmesini sağlar. Kütüphane, kolayca kullanılabilecek şekilde tasarlanmıştır.
Kendi Joystick’imizi Yapalım!
1) Python’u yüklüyoruz.
İlk aşamada Python’u resmi sitesinden indiriyoruz
İnen dosyayı çalıştırıyor ve yüklüyoruz.
2 ) Kütüphanelerimizi indiriyoruz.
Komut İstemi’ni açıp gerekli kütüphaneleri yüklemek için aşağıdaki komudu yazıyoruz.
pip3 install pynput pyfirmata
3) Arduino’ya kodumuzu yüklüyoruz.
Şimdi Arduino’muzun Python ile haberleşmesini sağlayacak kodu yüklememiz gerekiyor. Bu koda ulaşmak için Arduino IDE uygulamasını başlatıp Örnekler>Firmata>Standart Firmata isimli dosyayı Arduino’muza yüklüyoruz.
4) Python kodumuzu hazırlayıp çalıştırıyoruz.
Şimdi Python ile beraber gelen IDLE uygulamasını çalıştırıp yeni bir dosya oluşturuyoruz ve aşağıdaki kodu yeni dosyamıza yapıştırıyoruz.
NOT: Ben kodu Asphalt 8 oyununa göre düzenledim. Siz kod üzerindeki yönlendirmeleri dikkate alarak oyunuz için gerekli tuşları modülde istediğiniz butonlara atayabilirsiniz.
# -- coding: utf-8 --
import pyfirmata, pyfirmata.util
import time
from pynput.keyboard import Key, Controller
keyboard = Controller()
# Arduino UNO'nun takılı olduğu portu aşağıdaki '/dev/ttyUSB0' yazdığım yere yazınız.
# NOT: Ben Linux işletim sistemi kullandığım için bende '/dev/ttyUSB0' şeklinde başlıyor. Windows için COM şeklinde başlıyordur.
# Portunuzu Arduino IDE uygulamasını açıp port kısmından bulabilirsiniz.
board = pyfirmata.Arduino('/dev/ttyUSB0', baudrate=57600)
iterator = pyfirmata.util.Iterator(board)
iterator.start()
# Joystick'lerin değerlerine göre klavyedeki uygun tuşlara basacak fonksiyonu tanımlıyoruz.
# x değişkeni Joystick değerinin, y değişkeni Joystick'in yüksek değerinde (Joystick'in sağa yatık durumu veya yukarı yatık durumu),
# z değeri Joystick'in düşük değerinde (Joystick'in sola yatık durumu veya aşağı yatık durumu) klavyede basılacak tuşun ayarlanmasını sağlar.
def klavyekontroljoy(x,y,z):
if x > 70:
keyboard.press(f"{y}")
print(f"{y} tuşu basılı")
if x < 70:
keyboard.release(f"{y}")
if x < 30:
keyboard.press(f"{z}")
print(f"{z} tuşu basılı")
if x > 30:
keyboard.release(f"{z}")
# Butonların değerlerine göre klavyedeki uygun tuşlara basacak fonksiyonu tanımlıyoruz.
# x değişkeni Buton değerininin, y değişkeni Butonun yüksek değerinde (yani basıldığında) klavyede basılacak tuşun ayarlanmasını sağlar.
def klavyekontrolbut(x,y):
if x == 0:
keyboard.press(f"{y}")
print(f"{y} tuşu basılı")
if x == 1:
keyboard.release(f"{y}")
time.sleep(1)
# Joystick'in x ekseni
analog_x = board.get_pin('a:0:i')
analog_x.enable_reporting()
# Joystick'in y ekseni
analog_y = board.get_pin('a:1:i')
analog_y.enable_reporting()
# A butonu
button_a = board.get_pin('d:2:i')
button_a.enable_reporting()
# B butonu
button_b = board.get_pin('d:3:i')
button_b.enable_reporting()
# C butonu
button_c = board.get_pin('d:4:i')
button_c.enable_reporting()
# D butonu
button_d = board.get_pin('d:5:i')
button_d.enable_reporting()
# E butonu
button_e = board.get_pin('d:6:i')
button_e.enable_reporting()
# F butonu
button_f = board.get_pin('d:7:i')
button_f.enable_reporting()
time.sleep(1)
while True:
x = int(analog_x.read() * 100)
y = int(analog_y.read() * 100)
A = int(button_a.read())
B = int(button_b.read())
C = int(button_c.read())
D = int(button_d.read())
E = int(button_e.read())
F = int(button_f.read())
klavyekontroljoy(x,"d","a")
klavyekontroljoy(y,"w","s")
klavyekontrolbut(A,"f")
klavyekontrolbut(B,"b")
klavyekontrolbut(C,"v")
klavyekontrolbut(D,"r")
klavyekontrolbut(E,"C")
# F tuşu basıldığında döngüyü bitirerek,
# Joystick'i devre dışı bırakacak komut.
if F == 0:
break
board.exit()
Artık kodumuzu kaydedip çalıştırdıktan sonra Joystick’imiz hazır hale geliyor!!!
Süper bir proje :)) Tebrikler, teşekkürler…
microsoft flight simulator de kullanılacak özel bir joystick yapılabilir mi? 4 ekim 2020
Selamlar,
Evet, yapılabilir ama uyumluluk konusunda oldukça dikkat edilmelidir.
İyi çalışmalar dileriz 🙂
projedeki ayarları tam olarak nasıl yapıyoruz
Emilatör PUBG MOBİL e uyyumlayabilirmiyiz
Traceback (most recent call last):
File “C:\Users\aaaa\Desktop\deneme.py”, line 3, in
import pyautogui
ModuleNotFoundError: No module named ‘pyautogui’
böylebi hata aldım
pyautogui kütüphanesi yüklenmediği için böyle bir hata aldınız, bu sorunu Komut İstemi’ne pip3 install pyautogui yazaraktan çözebilirsiniz.
Sağ olun keşke sizlerle tanışabilsem
Sağolun
İlge ipek sayesinde Arduino ya başladım çok sağolun daha ortaokuldayım
kodu bilgisayardan yükleyip tele fonda oynaya bilir miyiz?
telefonda kullanıllabilir midir
Şu anlık Arduino için geçerli. Belki ilerleyen zamanlarda bununla alakalı bir içerik gelebilir 🙂
ben arduino ya kodu yükleyip bir dönüstürücü ile takpoyunu oynayamaz mıyım?
asphalt 8 i
Traceback (most recent call last):
File “D:\Ardiuno Projeler\joystick.py”, line 3, in
import pyfirmata, pyfirmata.util
Modu_No moduleleNot named ‘pyfirmata’
Bu hatanın neden olduğunu bilen var mı?
benim bilgisayarın işlemcisini çok zorluyor i7 10750h 5ghz neden zorluyo
İşlemcimi inanılmaz yoğun kullanıyor, i5-7300HQ işlemcimin kullanımı direk %100 oluyor bu normal midir?
Windows işletim sistemlerinde, maalesef bu bazen normal bazen ise anormaldir 🙂
Space tuşunu nasıl girebilirim örnek paylaşırmısınız