Search Code

ESP32 Eğitimi 26/55 - Arduino ile Joystick Kullanarak Eylem Gerçekleştirme | SunFounder'ın ESP32 IoT Kiti

ESP32 Eğitimi 26/55 - Arduino ile Joystick Kullanarak Eylem Gerçekleştirme | SunFounder'ın ESP32 IoT Kiti

Bu eğitimde, SunFounder'dan XY joystick'i ESP32 mikrodenetleyicisine nasıl bağlayacağımızı öğreneceğiz; böylece konumunu algılayabileceğiz ve girişine göre harekete geçebileceğiz. Ayrıca joystick belirli bir konuma getirildiğinde etkinleşen bir buzzer entegre edeceğiz. Bu kombinasyon, kullanıcı girişine gerçek zamanlı yanıt veren etkileşimli projeler oluşturmamızı sağlayacak.

ESP32-26-xy-joystick-main

XY joystick, X ve Y konumlarına karşılık gelen iki analog çıkış ve bir eylemi tetiklemek için basılabilen bir anahtar sağlar. Joystick'ten değerleri okuyarak, projemizdeki buzzer'ı etkinleştirme veya ekranda değerleri görüntüleme gibi çeşitli öğeleri kontrol edebiliriz. Süreci tam olarak anlamak için ek bilgiler için videoyu kontrol ettiğinizden emin olun (videoda 00:00'da).

Donanım Açıklaması

Bu projenin ana bileşenleri ESP32 mikrodenetleyicisi, XY joystick ve bir buzzer içerir. ESP32, Wi-Fi ve Bluetooth destekleyen çok yönlü bir karttır ve IoT projeleri için idealdir. XY joystick, X ve Y eksenleri için iki değişken direnç ve ek giriş için bir buton anahtarından oluşur.

joystick_schematic
ESP32-26-xy-joystick-schematic

Joystick, konumuna karşılık gelen analog sinyaller çıkarır ve bunlar ESP32'nin analog pinleri tarafından okunur. Buton, basıldığında dijital bir sinyal sağlar. Buzzer, ESP32'deki bir dijital çıkış pinine bağlanır ve joystick'in konumuna göre etkinleştirilmesine veya devre dışı bırakılmasına olanak tanır.

Veri Sayfası Detayları

Üretici SunFounder
Parça numarası XY Joystick Modülü
Çalışma Voltajı 3,3 V – 5 V
Direnç Değeri 10 kΩ (her eksen)
Maksimum Akım 20 mA
Anahtar Türü Anlık buton
Boyutlar Yaklaşık 50 mm x 50 mm

 

  • ESP32 ile uyumluluk için joystick'in 3,3 V ile beslendiğinden emin olun.
  • Yüzen girişleri önlemek için anahtar için pull-up dirençleri kullanın.
  • Analog çıkışları ESP32'nin ADC pinlerine bağlayın (X için 34, Y için 35).
  • Yanlış tetiklemeyi önlemek için anahtar için bir debounce mekanizması kullanın.
  • Güvenli çalışma sınırları içinde kaldıklarından emin olmak için voltaj seviyelerini izleyin.

Bağlantı Talimatları

ESP32-26-xy-joystick-wiring

Joystick'i ESP32'ye bağlamak için, joystick'teki toprak pinini ESP32'deki bir toprak pinine bağlayarak başlayın. Ardından, joystick'in VCC pinini ESP32'deki 3,3 V pinine bağlayın. Joystick'in iki analog çıkış pini vardır: X ekseni çıkışını (VRX olarak etiketlenmiş) ESP32'deki 34 pinine ve Y ekseni çıkışını (VRY olarak etiketlenmiş) 35 pinine bağlayın.

Anahtar çıkışı için, anahtar pinini ESP32'deki 33 pinine bağlayın. Bu pin, buton basışını dijital bir giriş olarak okuyacaktır. Aralıklı sorunları önlemek için bağlantıların güvenli olduğundan emin olun. Bağlantınız videodakinden farklıysa (videoda 02:30'da), analog ve dijital bağlantılar için aynı ilkeleri izleyerek buna göre uyarlayın.

Kod Örnekleri ve Açıklama

Kodda, joystick pinleri için sabitler tanımlayarak başlıyoruz. xAxis, yAxis ve btn tanımlayıcıları sırasıyla 34, 35 ve 33 olarak ayarlanır. Bu, program boyunca bu pinlere başvurmayı kolaylaştırır.

#define xAxis 34
#define yAxis 35
#define btn 33

setup() fonksiyonunda, seri iletişimi başlatır ve buton pin modunu giriş olarak ayarlarız. Bu, ESP32'yi joystick'ten veri okumaya ve seri monitöre göndermeye hazırlar.

void setup() {
  Serial.begin(115200);
  pinMode(btn, INPUT);  
}

loop() içinde, joystick'in X ve Y eksenleri için analog değerleri analogRead() kullanarak okur ve xValue ve yValue içinde saklarız. Buton durumu digitalRead() kullanılarak okunur ve btnValue içinde saklanır. Son olarak, bu değerleri seri monitöre yazdırırız.

void loop() {
  int xValue = analogRead(xAxis);
  int yValue = analogRead(yAxis); 
  int btnValue = digitalRead(btn);
  
  Serial.printf("Joystick değeri %d , %d , %d \n",xValue,yValue,btnValue);
  delay(300);  // Okumalar arasında gecikme
}

Bu döngü, joystick hareketi ve buton basışları hakkında gerçek zamanlı geri bildirim sağlayarak değerleri sürekli günceller. Tam kod için lütfen makalenin altında yüklenen tam koda bakın.

Gösterim / Beklenecekler

Kurulum tamamlandığında ve kod yüklendiğinde, seri monitör X ve Y değerlerini buton durumuyla birlikte görüntülemelidir. Joystick'i hareket ettirdikçe, değerler konumunu yansıtarak buna göre değişecektir. Butona basmak, durumunu yüksek ve düşük arasında değiştirecektir.

Yaygın hatalar arasında yanlış bağlantı yer alır; bu, boşta kalan girişlere veya joystick'ten yanıt alınamamasına yol açabilir. Doğru pinlerin kullanıldığından ve anahtar için pull-up dirençlerinin uygulandığından emin olun. Bu davranışların pratik gösterimleri için videoyu izleyin (videoda 13:00'te).

Video Zaman Damgaları

  • 00:00 Başlangıç
  • 1:47 XY Joystick'e Giriş
  • 7:32 Joystick değerlerinin ölçülmesi
  • 8:40 Bağlantının açıklanması
  • 11:06 ESP32 ile Joystick için Arduino kodu açıklaması
  • 14:43 Arduino IDE'de ESP32 kartı ve COM portunun seçilmesi
  • 16:24 Joystick'in basit kullanımının gösterimi
  • 19:20 Buzzer ile joystick konumunu algılama kodu
  • 21:16 Konum algılamanın gösterimi

Görseller

joystick_schematic
joystick_schematic
ESP32-26-xy-joystick-schematic
ESP32-26-xy-joystick-schematic
ESP32-26-xy-joystick-wiring
ESP32-26-xy-joystick-wiring
ESP32-26-xy-joystick-main
ESP32-26-xy-joystick-main
826-ESP32 Tutorial 26/55- Arduino code for XY Joystick
Dil: C++
// Define constants for the x and y axis and the button pins
#define xAxis 34
#define yAxis 35
#define btn 33


void setup() {
  // Initialize serial communication at 115200 bits per second:
  Serial.begin(115200);

  // Set the mode of the button pin to input
  pinMode(btn, INPUT);  
}

void loop() {
  // Read the analog value for x,y axis
  int xValue = analogRead(xAxis);
  int yValue = analogRead(yAxis); 

  // Read the digital value from the button pin
  int btnValue = digitalRead(btn);
  
  // print out the values
  Serial.printf("Joystick value is %d , %d , %d \n",xValue,yValue,btnValue);
  
  delay(300);  // Delay between reads
}

Kaynaklar ve referanslar

Dosyalar📁

Dosya mevcut değil.