Başa dön

Arduino ile Joystick Kontrollü Robot Kol

Arduino ve joystick ile robot kol kontrolü projemizde öncelikle joystick modül kullanımından bahsedelim. joystik modülü x ve y olmak üzere iki farklı düzlemde 0 ile 1023 arası değer veren ve üzerinde bir adet buton olan sistemdir. Elimizde olan 4 servolu robot kol için 2 farklı joystick modül ile sistemi kontrol edebiliriz. Bir joystick modül 2 farklı servoyu kontrol edebilirken 4 servo için 2 farklı joystick yeterli olacaktır.

Herşeyden önce kullanılacak malzemelerin listesini yapalım.

 

Robot Kol Kontrolü için Gerekli Malzemeler

  1. Pleksiglas robot kol
  2. Arduino Uno
  3. Joystik modül  X2
  4. mini breadboard
  5. dişi erkek jumper
  6. lipo pil
  7. voltaj regülatörü

 

Buradaki listede lipo pil ve voltaj regülatörü yerine 5V dc voltaj verebilen adaptörlerde kullanılabilir. Arduino nano yerine arduino uno veya arduino mega da kullanılabilir. Buradaki değişiklikler tamamen sizin kullanmak istediğiniz ürünlere göre değişir.

Öncelikle joystik modülün kontrolllerini yapalım.

 

Arduino Joystick Bağlantı Şeması

Arduino Joystick Bağlantı Şeması

 

Robot Kol Kontrolü için joystick Kodları

Fritzing üzerinde pin bağıntıları gözüken joystik modülün şimdi de kod bloğunu görelim.

int xPin = A0; // A0-A5 analog pinlerinden herhangi birine bağlanabilir.
int yPin = A1; // A0-A5 analog pinlerinden herhangi birine bağlanabilir.
int butonPin = 2; // Joystick buton pini arduino bağlantısı (Joystick SW çıkışı)
 
int xPozisyonu = 0;
int yPozisyonu = 0;
int butonDurum = 0;
 
void setup() {
Serial.begin(9600);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(butonPin, INPUT_PULLUP);
 
 
}
 
void loop() {
xPozisyonu = analogRead(xPin);
yPozisyonu = analogRead(yPin);
butonDurum = digitalRead(butonPin);
 
Serial.print("X Pozisyonu: ");
Serial.print(xPozisyonu);
Serial.print(" | Y Pozisyonu: ");
Serial.print(yPozisyonu);
Serial.print(" | Buton Durum: ");
Serial.println(butonDurum);
 
delay(100);
}

 

Kod bloğuna baktığımızda x,y ve buton olarak pozisyonlarını ve verdiği değer aralıklarını görebiliyoruz. X ve Y neden analog pinlere atandığı konusuna değinecek olursak. Analog değerler ile işlem yapmamız gerektiği için yani 1 veya 0 değil 0 ile 1023 arası değer ile işlem yapmamız gerektiğinden bu şekilde kullanıyoruz. Buton ise sadece basında 1 çekince 0 olması gerektiği için dijital pine bağlayabiliriz.

Şimdi joystik modül çalışma mantığını öğrendiğimize göre kendi sistemimizi kurabiliriz. Buradaki sistemde 2 josytik modül ile fritzing üzerinden bağlantı şemamızı gösterelim.

 

Arduino motor ve joystick bağlantısı

Arduino motor ve joystick bağlantısı

 

 

Fritzing üzerinde gösterildiği gibi bağlantılarını yaptığımız robot kol ile joystik modülün 5V dc ile dışarıdan bir beslemeye ihtiyacı vardır. 5V DC için 7.4 veya 11.1 lipo pil alıp voltaj regülatörü ile ayarlayabilirsiniz. Yada direkt 5V adaptör ile yapabilirsiniz.

 

Robot Kol Kod Bloğu

Bağlantı şemasını da verdiğimize göre artık kod bloğuna başlayabiliriz.

// Robocombo Teknoloji
// Erdem YILMAZ 
// Mekatronik Mühendisi

#include <Servo.h>

Servo alt,ileri,yukari,grip ; //servoları tanıtıyoruz.


int xPin1 = A0; // A0-A5 analog pinlerinden herhangi birine bağlanabilir.
int yPin1 = A1; // A0-A5 analog pinlerinden herhangi birine bağlanabilir.
int xPin2 = A3;
int yPin2 = A4;
int buton1 = 2; // Joystick buton pini arduino bağlantısı (Joystick SW çıkışı)
int buton2 = 3;

int xPozisyonu1,yPozisyonu1,xPozisyonu2,yPozisyonu2,butonD1,butonD2;
 
void setup() {
Serial.begin(9600);
pinMode(xPin1, INPUT);
pinMode(yPin1, INPUT);
pinMode(buton1, INPUT_PULLUP);
pinMode(xPin2, INPUT);
pinMode(yPin2, INPUT);
pinMode(buton2, INPUT_PULLUP);
alt.attach(11);   // Servolarımızı Arduino'nun pwm(~) çıkışlarına bağlamamız gerekir bu pinler 3,5,6,9,10,11dir.
ileri.attach(10);
yukari.attach(9);
grip.attach(6);

}
 
void loop() {
xPozisyonu1 = analogRead(xPin1);
yPozisyonu1 = analogRead(yPin1);
butonD1 = digitalRead(buton1);
xPozisyonu2 = analogRead(xPin2);
yPozisyonu2 = analogRead(yPin2);
butonD2 = digitalRead(buton2);
 
//Serial.print("X Pozisyonu: ");
//Serial.print(xPozisyonu1);
//Serial.print(" | Y Pozisyonu: ");
//Serial.print(yPozisyonu1);
//Serial.print(" | Buton Durum: ");
//Serial.println(butonD1);
//Serial.println("2.joystik");
//Serial.print("X Pozisyonu: ");
//Serial.print(xPozisyonu2);
//Serial.print(" | Y Pozisyonu: ");
//Serial.print(yPozisyonu2);
//Serial.print(" | Buton Durum: ");
//Serial.println(butonD2);
//delay(100);
    if (xPozisyonu1 >= 0 && xPozisyonu1 <= 1023) // SAG/SOL
{ 
  
  int servo1 = xPozisyonu1; // gelenVeriyi bir değişkene tanımlayıp servo açısı olarak yazdırıyoruz.
  servo1 = map(servo1, 0, 1023, 0, 180);
  alt.write(servo1); // servoya açısal değer olarak gelen veri yazdırılıyor.
  delay(10); // servonun hareketini belirli ölçekde yavaşlatmak için delay
//    Serial.println("alt gelen veri"); // deneme amaçlı sistemimiz sorunsuz çalışıyormu diye kontrol ediyoruz.
//    Serial.println(servo1); // yolladğımız değerin doğruluğuna bakıyoruz.

}
   else   if (yPozisyonu1 >= 0 && yPozisyonu1 <= 1023) // asagı/yukarı
{ 
  
  int servo2 = yPozisyonu1; // gelenVeriyi bir değişkene tanımlayıp servo açısı olarak yazdırıyoruz.
  servo2 = map(servo2, 0, 1023, 0, 180);
  ileri.write(servo2); // servoya açısal değer olarak gelen veri yazdırılıyor.
  delay(10); // servonun hareketini belirli ölçekde yavaşlatmak için delay
//    Serial.println("ileri gelen veri"); // deneme amaçlı sistemimiz sorunsuz çalışıyormu diye kontrol ediyoruz.
//    Serial.println(servo2); // yolladğımız değerin doğruluğuna bakıyoruz.

}
  else if (xPozisyonu2 >= 0 && xPozisyonu2 <= 1023) // ileri/geri
{
  int servo3 = xPozisyonu2;
  servo3 = map(servo3, 0, 1023, 0, 180);
  yukari.write(servo3);
  delay(10);
//  Serial.println("ileri geri gelen veri");
//  Serial.println(servo3);

}
  else if (yPozisyonu2 >= 0 && yPozisyonu2 <= 1023) // Gripper
{
  int servo4 = yPozisyonu2;
  servo4 = map(servo4, 0, 1023, 0, 180);
  grip.write(servo4);
  delay(10);
//  Serial.println("gripper gelen veri");
//  Serial.println(servo4);

}
}

 

 

Robot kola ait kod bloğu ile birlikte projemiz bitmiştir. Gerekli olan dokümanlar için robot kol joystik tıklayabilirsiniz.

Robocombo’dan ürünleri almak için Tıklayınız.