2 Eksenli Joystick Nasıl Çalışır ve Arduino + İşleme
Donanıma Genel Bakış
Bu, PS2 (PlayStation 2) denetleyicilerindeki 'analog' oyun çubuklarına çok benzeyen bir kumanda koludur. Bu, kendi kendine merkezlenen yaylı bir joysticktir, yani joystick'i bıraktığınızda kendisini ortalayacaktır. Aynı zamanda baş parmak hissi veren rahat bir fincan tipi düğme / başlık içerir.
Joystick'in amacı, hareketi 2 boyutlu (2 eksenli) bir Arduino ile iletmektir. Bu, iki bağımsız 10K potansiyometre (eksen başına bir) barındırarak elde edilir. Bu potansiyometreler, kontrol çubuğu biçiminde 2 Eksenli analog giriş sağlayan çift ayarlanabilir voltaj bölücüler olarak kullanılır.
Potansiyometreler, joystick'in yanlarındaki iki mavi kutudur. Her bir potansiyometrenin merkez şaftını izlerken kumanda kolunu hareket ettirirseniz, potansiyometrelerin her birinin yalnızca bir yönde hareket algıladığını görürsünüz. Aslında nasıl çalıştıklarını biraz sonra tartışacağız.
Bu kumanda kolu ayrıca, kapağı aşağı doğru bastırdığınızda etkinleşen bir anahtar içerir. Anahtar, kumanda çubuğunun arkasındaki küçük siyah kutudur. Başlığı aşağı bastırırsanız, anahtarın başını aşağı doğru iten bir kol görebilirsiniz. Kol, kumanda kolu hangi konumda olursa olsun çalışır.
PS2 2 eksenli başparmak kumanda kolu modülü nasıl çalışır?
Bir joystick'in temel fikri, çubuğun konumunu iki eksende - X ekseni (soldan sağa) ve Y ekseni (yukarı ve aşağı) bir Arduino'nun işleyebileceği elektronik bilgilere çevirmektir. Bu biraz zor olabilir, ancak iki potansiyometre ve bir Gimbal Mekanizmasından oluşan kumanda kolunun tasarımı sayesinde .
Gimbal Mekanizması
Kumanda kolunu döndürdüğünüzde, başparmak kolu iki dönebilir yarıklı şafta (Gimbal) oturan dar bir çubuğu hareket ettirir. Millerden biri X ekseninde (sol ve sağ) harekete izin verirken, diğeri Y ekseninde (yukarı ve aşağı) harekete izin verir. Çubuğu ileri ve geri eğmek, Y ekseni milini bir yandan diğer yana döndürür. Soldan sağa eğildiğinde, X ekseni şaftını döndürür. Çubuğu çapraz olarak hareket ettirdiğinizde, her iki şaftı da döndürür.
Her bir kumanda kolu miline, çubuğun konumunu analog okumalar olarak yorumlayan bir potansiyometre bağlanır. Yarıklı millerin hareket ettirilmesi, potansiyometrenin kontak kolunu döndürür. Başka bir deyişle, çubuğu sonuna kadar iterseniz, potansiyometre temas kolunu rayın bir ucuna çevirir ve kendinize doğru geri çekerseniz, temas kolunu diğer yöne çevirir.
Joystick'ten analog değerleri okuma
Joystick'in fiziksel konumunu okumak için, bir potansiyometrenin direncindeki değişikliği ölçmemiz gerekir. Bu değişiklik, ADC kullanılarak bir Arduino analog pini ile okunabilir.
Arduino kartının 10 bitlik ADC çözünürlüğü olduğundan, her analog kanaldaki (eksen) değerler 0 ila 1023 arasında değişebilir. Dolayısıyla, çubuk X ekseni üzerinde bir uçtan diğerine hareket ettirilirse, X değerleri değişecektir. 0'dan 1023'e kadar ve benzer bir şey Y ekseni boyunca hareket ettirildiğinde gerçekleşir. Joystick merkez konumunda kaldığında değer 512 civarındadır.Aşağıdaki grafik, X ve Y yönlerini gösterir ve ayrıca joystick çeşitli yönlere itildiğinde çıkışların nasıl tepki vereceğini gösterir.
Bu başparmak kumanda kolunu kullanmak için, hangi yönün X ve hangi yönün Y olduğunu anlamak isteyeceksiniz. Ayrıca, X veya Y yönünde itildiği yönü de çözmeniz gerekecek.
GND Arduino üzerindeki GND pinini bağladığımız Ground Pin'tir.
VCCmodül için güç sağlar. Arduino'nuzdan 5V çıkışa bağlayabilirsiniz.
VRx joystick'in yatay yönde (X koordinatı), yani joystick'in sola ve sağa ne kadar itildiğini gösterir.
VRy joystick'in dikey yönde (Y koordinatı), yani joystick'in ne kadar yukarı ve aşağı itildiğini gösterir.
SWbutonun çıktısıdır. Normalde açıktır, yani SW pininden gelen dijital okuma YÜKSEK olacaktır. Düğmeye basıldığında, GND'ye bağlanarak DÜŞÜK çıkış verir.
Kablolama - Başparmak Joystick Modülünü Arduino UNO'ya Bağlama
Artık modül hakkında her şeyi bildiğimize göre, onları kullanmaya başlama zamanı!
Bildiğimiz gibi joystick'in X ve Y koordinatlarını belirlemek için her iki analog çıkışı da joystick'ten Arduino'daki analog pinlere bağlamamız gerekiyor. Arduino kartımız için, VRx'i Arduino'nun analog pin A0'a ve VRy'yi Arduino'nun analog pin A1'e bağlarız.
Bu kadar. Artık Joystick manipülasyon becerilerinizi göstermeye hazırsınız.
Arduino Kodu
Program çok basit. Ölçümü iki analog girişten ve bir dijital girişten okuyacağız. Ardından sonucu seri monitörde göstereceğiz.
Her şey yolundaysa, aşağıdaki çıktıyı seri monitörde görmelisiniz.
In setup()
fonksiyonu: Biz girdi olarak GB pimini başlatmak ve YÜKSEK saklayın. Bunun nedeni, SW pimi YÜKSEK olduğu sürece düğmeye basılmadığını biliyoruz. Ayrıca seri iletişimi de başlatıyoruz.
In loop()
fonksiyonu: Biz sadece kullanılarak GB pin değerini okumak digitalRead()
fonksiyonu, VRX & VRY kullanarak pimi analogRead()
seri monitörde ve ekranı.
IDE İşlemede Joystick Hareketlerini Canlandırma
İşleme IDE'de animasyonları kontrol etmek için basit bir 2 Eksenli Joystick modülünün nasıl kullanılabileceğini göstermek için hızlı bir Arduino projesi oluşturalım. Öncelikle Arduino'muzu x ekseni, y ekseni ve düğme durumu değerlerini seri port üzerinde yayınlayacak şekilde programlayacağız. IDE İşleminde seri porttan gelen bu değerleri alacağız. Bu değerler daha sonra oyun çubuğu konumunu canlandırmak için kullanılabilir. Harika! Sağ?
Çıktı böyle görünüyor.
Arduino Kodu
Başlangıç olarak, Arduino'muzu seri port üzerinde x ekseni, y ekseni ve düğme durumu değerlerini kullanacak şekilde programlamamız gerekir. Program, seri monitörde yazdırdığımız değerler virgülle ayrılmış olması dışında yukarıdakiyle tamamen aynıdır . Neden virgülle ayrılmış? Çünkü bu, bir uygulamadan diğerine veri aktarımı için popüler bir formattır. IDE işlenirken, gelen değerleri 'virgül' karakterine bölebilir ve verilerimizi geri alabiliriz.
Aşağıdaki çizimi Arduino'nuza yükleyin.
Kodu
Program Arduino'ya yüklendikten sonra, İşleme IDE'de Joystick konumunu canlandırmaya başlayabiliriz. Arduino'nuzu takılı tutun ve İşleme kodunu takip ederek çalıştırın.
Kod Açıklaması:
Hızlı bir arıza yapalım. Öncelikle seri porttan gelen değerleri okumak için seri kütüphaneyi içe aktarmamız gerekiyor.
Daha sonra, x ekseni, y ekseni ve düğme durumu değerlerini tutan değişkenler bildirilir.
Kurulum işlevinde, animasyonumuzu göstermek için 512 × 512 boyutunda bir pencere oluşturmamız gerekir. Daha sonra, parametreyi geçerek kullanılabilir bir seri port açıyoruz Serial.list()[0]
. Bu sizin için işe yaramazsa, Arduino'nun bağlı olduğu bağlantı noktasına değiştirin. Değerlerimizi pencerede animasyonla birlikte göstermek için bir yazı tipi oluşturmamız gerekiyor.
Çizim fonksiyonunda önce pencerenin arka planı siyah renkle doldurulur. Ardından, joystick'in konumunu temsil eden küçük bir daire çizmek için beyaz bir renk seçiyoruz. Şimdi, düğme durumuna bağlı olarak if ifadesini kullanarak küçük veya büyük bir daire çizeriz.
Ardından, pencerenin sol üst köşesine x ekseni ve y ekseni değerlerini yazdırıyoruz.
Yeni serialEvent(Serial myPort)
satır karakteri görünene kadar diziyi seri bağlantı noktasında okuyan özel bir işlevdir. Dize daha sonra 'virgül' karakteriyle bölünür ve ilgili değişkenlere atanır.
Analog Oyun Çubukları ile ilgili sorun
Analog joystick sistemiyle ilgili birkaç küçük ama önemli sorun var.
- Her şeyden önce, sistem gerçek bir analogdan dijitale dönüştürücüye sahip olmadığından, kaba analogdan dijitale dönüştürme süreci çok doğru değildir. Bu, joystick'in hassasiyetini bir şekilde tehlikeye atar.
- İkincisi, mikro denetleyici, çubuğun konumunu belirlemek için joystick sistemini düzenli olarak "sorgulamak" için çok fazla işlem gücü ayırmalıdır. Bu, diğer işlemlerden çok fazla güç alır.
Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook robotic.code
instagram @roboticcode
Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.