Arduino Devreleri #46 Arduino ve 2 Eksenli Joystick İle Servo Motor Kontrolü
Merhabalar, bu yazımızda Arduino ve 2 Eksenli Joystick İle Servo Motor Kontrolü hakkında bilgi vereceğim. 2 Eksenli XY Joystick, bir başka adıyla kumanda kolu – oyun çubuğu kullanarak bir ve iki servo motoru nasıl kontrol edebiliriz? Joystick üzerindeki butonu nasıl kullanabiliriz? Bu soruların cevabını bu konuda işleyeceğiz.
Arduino programı ayrıntılı kod kısmı, devre bağlantı şeması, devre kurulumu detaylı anlatımı ve devre çalışma videosu şu şekildedir.
2 Eksenli XY Joystick Modülü
Joystick, içerisinde yatay ve dikey eksenlerde hareket edebilen iki potansiyometre bulunan bir modüldür. Potansiyometreyi yatay (X ekseninde) ve dikey (Y ekseninde) hareket ettirdiğimizde potansiyometreden okunan 0 – 1023 arasındaki analog değer sonucunda led yakma söndürme, servo motor kontrolü, robotik kol hareketleri, uzaktan kumandalı araba kontrolü gibi bir çok Arduino projesinde kullanılabilir.
Bu modül üzerinde bir adette buton bulunmaktadır. Bu buton joystick modülüne üstten bastığınızda aktif olmaktadır. Bu buton, diğer butonların tersine çalışan bir karakteristiğe sahiptir. Yani bir Pull-Up butondur. Butona basmadığımızda 1, bastığımızda ise 0 değerini okuruz. Bundan dolayı Arduino içerisinde pinMode kısmında buton tanımlanırken INPUT_PULLUP komutu kullanılmalıdır. Eğer INPUT_PULLUP komutu yerine sadece INPUT komutu kullanılacak ise butonun Arduino pin bağlantısı noktasına 10 kΩ direnç bağlanır. Direncin diğer bacağı ise Arduino +5 Volt giden noktaya bağlanır. (Pull-Up direnci görevi görmesi için.)
NOT: Pull-Up direnci, dijital pinleri giriş olarak kullandığımızda sinyalin bozulmamasını sağlar. Joystick modülünde buton basılı değilken dijital pinden okunan değer 5V yani lojik HIGH (1) seviyesidir. Pull-Up direnci, buton basılıp değer LOW yani (0)’ a çekilmediği sürece bu pindeki gerilimin 5V’ta sabit kalmasını sağlar.
Joystick modülünde 5 adet çıkış pini bulunmaktadır. Bunlar sırasıyla; Gnd, 5V, VRx, VRy ve SW pinleridir. Bu pinlerin Arduino bağlantısı yukarıdaki resimde verilmiştir.
NOT: Kod bölümü içerisinde yer alan ve // işareti ile başlayan satırlar açıklama satırlarıdır. O satırdaki kod bloğunun ne anlama geldiği ve nasıl çalıştığı ile ilgili bilgi verir. Arduino // işaretli alanı çalıştırmaz. Kod satırından isterseniz // işaret ile başlayan açıklama satırlarını silebilirsiniz.
İKİ EKSENLİ JOYSTİCK İLE 1 ADET SERVO MOTORU ÇALIŞTIRMA
KOD BÖLÜMÜ:
//Kumanda Kolu (Joystick) İle Tek Servo Motor Kontrolü
#include <Servo.h>
Servo motor;
int deger;
int derece;
void setup()
{
motor.attach(11);
Serial.begin(9600);
}
void loop()
{
deger = analogRead(A0);
derece = map(deger, 0, 1023, 0, 180);
motor.write(derece);
Serial.print("Servo Açısı: ");
Serial.println(derece);
delay(15); // 15 ms bekleme süresi ekliyoruz.
}
DEVRENİN ÇALIŞMASI:
Joystick kolunu X ekseni (yatay) konumda sağ ve sola hareket ettirdiğimizde servo motor 0 – 180 derece hareket edecektir.
DEVRE BAĞLANTI ŞEMASI:
DEVRE KURULUMU:
Malzemeler:
Arduino Uno
1 adet SG90 Servo Motor
1 adet 2 Eksenli XY Joystick Modülü
3 adet bir ucu dişi, bir ucu erkek jumper kablo
5 adet iki ucu erkek jumper kablo
Joystick modülünün +5V. pinine jumper kablo bağlanarak kablonun diğer ucu breadboard alt sırasındaki (+) artı şeridine bağlanır. Joystick modülünün GND pinine jumper kablo bağlanarak kablonun diğer ucu breadboard alt sırasındaki (-) eksi şeridine bağlanır. Joystick modülünün vRx pinine jumper kablo bağlanarak kablonun diğer ucu, Arduino’nun A0 numaralı pinine bağlanır.
Servo motorun kırmızı uç çıkışına (+) jumper kablo bağlanarak kablonun diğer ucu breadboard ‘un artı şeridine bağlanır. Servo motorun kahverengi uç çıkışına (-) jumper kablo bağlanarak kablonun diğer ucu breadboard’ un eksi şeridine bağlanır. Servo motorun turuncu uç çıkışına (data) jumper kablo bağlanarak kablonun diğer ucu Arduino’nun 11 numaralı PWM dijital pinine bağlanır. Breadboard artı şeridine kablo bağlanarak Arduino’nun +5 Volt pinine, breadboard eksi şeridine kablo bağlanarak Arduino’nun GND pinine bağlanarak devre tamamlanır.
İKİ EKSENLİ JOYSTİCK İLE 2 ADET SERVO MOTORU ÇALIŞTIRMA – JOYSTİCK BUTONU KULLANMA
KOD BÖLÜMÜ:
//Kumanda Kolu (Joystick) İle İki Servo Motor Kontrolü
#include <Servo.h>
Servo motor1;
Servo motor2;
int degerX; //Joystick X ekseni için değişken oluşturduk
int degerY; //Joystick Y ekseni için değişken oluşturduk
int derece1; // Servo 1 için dönme açısına ait değişken oluşturduk
int derece2; // Servo 2 için dönme açısına ait değişken oluşturduk
int SWbuton = 10; // SW pinini dijital pin 10'a bağladık
void setup()
{
motor1.attach(9);
motor2.attach(11);
Serial.begin(9600);
pinMode(SWbuton, INPUT_PULLUP);
}
void loop()
{
degerX = analogRead(A1);
degerY = analogRead(A0);
int SWdurum = digitalRead(SWbuton); // SW butonunun durumunu okuyoruz
// Eğer SW butonuna basılmadıysa joystick değerlerine göre motorları hareket ettir
if (SWdurum == HIGH) //Buton PULLUP butonu olduğu için butona basma durumunda 0 (LOW) değerini alır.
{
derece1 = map(degerX, 0, 1023, 0, 180);
derece2 = map(degerY, 0, 1023, 0, 180);
motor1.write(derece1);
motor2.write(derece2);
Serial.print("Servo 1 Açısı: ");
Serial.print(derece1);
Serial.print(" | Servo 2 Açısı: ");
Serial.println(derece2);
delay(100); // 100 ms bekleme süresi ekliyoruz.
}
else //Butona basıldığında ne yapacağını tanımlıyoruz.
{
motor1.write (0);
motor2.write (0);
Serial.print("Buton: Aktif");
Serial.println(" | Servo Açıları: 0");
delay(100); // 100 ms bekleme süresi ekliyoruz.
}
}
DEVRENİN ÇALIŞMASI:
Joystick kolunu X ekseninde (yatay) konumda sağ ve sola hareket ettirdiğimizde birinci servo motor 0 – 180 derece hareket edecektir. Joystick kolunu Y ekseninde (dikey) konumda yukarı ve aşağı hareket ettirdiğimizde ise ikinci servo motor 0 – 180 derece hareket edecektir. Joystick üzerindeki butona bastığımızda ise servo motorların ikisi de 0 (sıfır) derece açıya dönecektir.
DEVRE BAĞLANTI ŞEMASI:
DEVRE KURULUMU:
Malzemeler:
Arduino Uno
2 adet SG90 Servo Motor
1 adet 2 Eksenli XY Joystick Modülü
5 adet bir ucu dişi, bir ucu erkek jumper kablo
8 adet iki ucu erkek jumper kablo
Joystick modülünün +5V. pinine jumper kablo bağlanarak kablonun diğer ucu breadboard alt sırasındaki (+) artı şeridine bağlanır. Joystick modülünün GND pinine jumper kablo bağlanarak kablonun diğer ucu breadboard alt sırasındaki (-) eksi şeridine bağlanır. Joystick modülünün vRx pinine jumper kablo bağlanarak kablonun diğer ucu, Arduino’nun A1 numaralı pinine bağlanır. Joystick vRy pinine jumper kablo bağlanarak kablonun diğer ucu, Arduino’nun A0 numaralı pinine bağlanır. Joystick SW pinine jumper kablo bağlanarak kablonun diğer ucu, Arduino’nun 10 numaralı pinine bağlanır.
Birinci servo motorun kırmızı uç çıkışına (+) jumper kablo bağlanarak kablonun diğer ucu breadboard ‘un artı şeridine bağlanır. Servo motorun kahverengi uç çıkışına (-) jumper kablo bağlanarak kablonun diğer ucu breadboard’ un eksi şeridine bağlanır. Servo motorun turuncu uç çıkışına (data) jumper kablo bağlanarak kablonun diğer ucu Arduino’nun 9 numaralı PWM dijital pinine bağlanır.
İkinci servo motorun kırmızı uç çıkışına (+) jumper kablo bağlanarak kablonun diğer ucu breadboard ‘un artı şeridine bağlanır. Servo motorun kahverengi uç çıkışına (-) jumper kablo bağlanarak kablonun diğer ucu breadboard’ un eksi şeridine bağlanır. Servo motorun turuncu uç çıkışına (data) jumper kablo bağlanarak kablonun diğer ucu Arduino’nun 11 numaralı PWM dijital pinine bağlanır.
Breadboard artı şeridine kablo bağlanarak Arduino’nun +5 Volt pinine, breadboard eksi şeridine kablo bağlanarak Arduino’nun GND pinine bağlanarak devre tamamlanır.
Arduino ve 2 Eksenli Joystick İle Servo Motor Kontrolü
Devre hakkında yorumlarınızı aşağıdaki yorum kısmına yazabilirsiniz. Youtube kanalımızda da mBlock ve Arduino ile ilgili ders videoları bulabileceksiniz. Youtube kanalıma abone olmayı da unutmayınız.
https://www.youtube.com/@candemirahmet
Yorum Yap