Arduino Basit Robot Kol Yapımı

0
4480
Arduino Basit Robot Kol Yapımı
Arduino Basit Robot Kol Yapımı

Arduino Basit Robot Kol Yapımı

Sanayide yaşanan gelişmeler, insan gücü maliyetlerinin düşürülmesi ve kalite arttırılmasının amaçlanması, insanları robot kol kullanmaya zorunlu kılmıştır. Günümüzde hemen hemen her fabrikanın üretim bandında, robot kollar insanların yerini almıştır ve almaya da devam edecektir. Kullanım yerine ve amacına göre farklı mekanik düzeneklere sahip robot kol çeşitleri bulunmaktadır.

Kullanılan Malzemeler

  • Bir adet Joystick Shield,
  • Bir adet Robot Kol Seti,
  • Bir adet 16 kanallı servo kontrolcüsü,
  • Bir adet göstergeli LM2596 Regülatör,
  • JST dişi konektör,
  • 4 volt Li-Po Batarya,
  • Şarj cihazı.

TASARIM

Montaj aşamasına geçmeden önce malzemelerin özelliklerini yakından tanıyalım:

  1. a) Joystcik Shield

Oyun konsolu diye Türkçe’ye çevirdiğimiz, Arduino ile uyumlu olarak robotumuzu kontrol edecek, üzeri butonlu parçadır. Arayüz olarak nRF24L01 kullanmaktadır ve Nokia 5110 LCD göstergesi vardır. Bluetooth ve I2C bağlantı şekilleri bulunmaktadır. Çalışma voltajı 3.5V veya 5V’dur.

  1. b) Robot Kol Seti

6 adet birbirinden bağımsız derecede dönüş açısına sahiptir. 6 adet Servo MG996R motoru vardır. Gövde parçaları alüminyumdan yapılmıştır. 5 adet servo dirsek, 4 adet U şeklinde destek, 3 adet U şekilli taban braket, 1 adet L şeklinde destek, 4 adet rulman kupası, 1 adet pençe, 1 adet vida ve somun seti ve 3 adet servo uzatma kablosu bulunan bu seti ülkemizde kısa bir araştırma yaparak bulabilirsiniz.

  1. c) 16 Kanallı Servo Kontrolcüsü

16 Kanallı Servo Kontrolcüsü ToRobot firması tarafından geliştirilmiş 32 bit mikroişlemciye, hız, hassasiyet ve kararlılığa sahip bir kotrolcüdür. Sistem herhangi bir yazılım veya UART (TTL) ile kolayca kontrol edilebilmektedir. Robot kolu denetlemek için kullanılacaktır.

Özellikler:

  • 32-bit mikroişlemci,
  • Çalışma voltajı: Kullanım kılavuzundaki referans voltaja göre ayarlanır,
  • USB, Seri (TTL, USART, bluetooth) bağlantı uyumlu,
  • Arduino uyumlu,
  • Baud rate (hızı): 9600, 19200, 38400, 57600, 115200, 12800 (otomatik olarak ayarlanır)
  • Hafıza: 512KB Flash.
  1. d) Göstergeli LM2596 Regülatör

40 volt 2A anahtar moduna sahip voltaj düzenleyicidir.

Özellikler:

  • Giriş Gerilim Aralığı: 4-40V,
  • Çıkış Voltaj Aralığı: 1.25-37V (potansiyometre ile ayarlanabilir),
  • Maksimum Çıkış Akımı: 3A,
  • Çalışma Frekansı: 150KHz,
  • Aşırı Isı Kapatma,
  • Aşırı Akım Koruma.

Robot kol montajı için kutunun İçinden çıkan kılavuzu veyahut www.elabpeers. com/robotic-arm.html adresindeki pdf kitabı inceleyebilirsiniz. Joystick bağlantısı ise gayet basit, Arduino ile uyumlu olduğu için direkt Uno kartının pinlerinin üzerine oturtma şeklinde bağlayabilirsiniz.

  1. e) Bağlantlar

16 kanallı servo kontrolcüsü robot kol setinin arka paneline bağlanmaktadır. Robot kol setinden 3 adet kablo servo kontrolcüsüne gider. Bunlar kırmızı, kahverengi ve turuncu renktedir. Kırmızı kablo, servo kontrolcüsünün pozitif beslemesine, kahverengi kablo GND ucuna ve turuncu kablo sinyal girişine bağlanır. Kaç adet kablo üçlüsü kullanılacaksa o kadar bağlama yapılır. Servo kontrolcüsü 24 kablo setine kadar destek verir ama biz bu robot kolunda 6 servo motoru için 6 kablo üçlüsü kullanacağız.

7.4 Volt Li-Po bataryasının kırmızı kablosu Göstergeli LM2596 Regülatör’ün pozitif giriş (IN+) ucuna, siyah kablosu ise negatif giriş (IN-) ucuna bağlanacaktır.

Göstergeli LM2596 Regülatör ün pozitif çıkış (OUT+) ucu 16 kanallı servo kontrolcüsünün VS ucuna, negatif çıkış (OUT-) ucu 16 kanallı servo kontrolcüsünün GND ucuna bağlanır.

Robot kolun arka panelinde bulunan servo kontrolcüsü ile joystick arasındaki bağlantı şu şekilde olacaktır. Kontrolcünün GND pini oyun çubuğunun – pini ile, 5V pini + pini ile, kontrolcünün RXD pini oyun çubuğunun 0. pini ile ve TXD pini 1. pini ile eşleşecektir.

Kodlama

Oyun çubuğu üzerindeki A buton’u robot kolun pençesini hareket ettirmek içindir. A butonuna basıldığında dijital sinyal değişip 0 olacak ve pençe kapanacaktır. A buton’u üzerinden parmağımızı çektiğimizde yani buton serbest kaldığında dijital sinyal değişip 1 olacak ve pençe açılacak.

Kodu Arduino’ya yüklemeden önce mutlaka oyun çubuğunun 0. ve 1, pinlerin bağlantısını kesin. Aksi halde yükleme hatası alırsınız. Yükleme olduktan sonra tekrar kabloları pinlere bağlayabilirsiniz.

int A_buton = 2;



int B_buton = 3;



int C_buton = 4;



int D_buton = 5;



int E_buton = 6;



int F_buton = 7;



int Analog = 8;



int x_eksen = A0;



int y_eksen = A1;



void setup() 



{



  Serial.begin(9600);



  pinMode(A_buton, INPUT);



  pinMode(B_buton, INPUT);



  pinMode(C_buton, INPUT);



  pinMode(D_buton, INPUT);



  pinMode(E_buton, INPUT);



  pinMode(F_buton, INPUT);



  pinMode(Analog, INPUT);



}



void loop() 



{



  int A_buton_durum = digitalRead(A_buton);



  int B_buton_durum = digitalRead(B_buton);



  int C_buton_durum = digitalRead(C_buton);



  int D_buton_durum = digitalRead(D_buton);



  int E_buton_durum = digitalRead(E_buton);



  int F_buton_durum = digitalRead(F_buton);



  int Analog_durum = digitalRead(Analog);



  int x_eksen_durum = analogRead(x_eksen);



  int y_eksen_durum = analogRead(y_eksen);



  if (A_buton_durum == 1)



  {



  move(6, 900, 1500);



  }



  if (A_buton_durum == 0)



  {



  move(6, 1700, 1500);



  }



}



void move(int servo, int position, int time) 



{



  Serial.print("#");



  Serial.print(servo);



  Serial.print("P");



  Serial.print(position);



  Serial.print("T");



  Serial.println(time);



  delay(time);



}
int A_button = 2;



int B_button = 3;



int C_button = 4;



int D_button = 5;



int E_button = 6;



int F_button = 7;



int Analog = 8;



int x_axis = A0;



int y_axis = A1;



int value6 = 1000;



int value5 = 1000;



int value4 = 1000;



int value3 = 1000;



int value2 = 1000;



int value1 = 1000;



void setup() 



{



  Serial.begin(9600);



  pinMode(A_button, INPUT);



  pinMode(B_button, INPUT);



  pinMode(C_button, INPUT);



  pinMode(D_button, INPUT);



  pinMode(E_button, INPUT);



  pinMode(F_button, INPUT);



  pinMode(Analog, INPUT);



}



void move(int servo, int position, int time) 



{



  Serial.print("#");



  Serial.print(servo);



  Serial.print("P");



  Serial.print(position);



  Serial.print("T");



  Serial.println(time);



  delay(time);



}



void loop() 



{



  int A_button_state = digitalRead(A_button);



  int B_button_state = digitalRead(B_button);



  int C_button_state = digitalRead(C_button);



  int D_button_state = digitalRead(D_button);



  int E_button_state = digitalRead(E_button);



  int F_button_state = digitalRead(F_button);



  int Analog_state = digitalRead(Analog);



  int x_axis_state = analogRead(x_axis);



  int y_axis_state = analogRead(y_axis);



  x_axis_state = map(x_axis_state, 0, 1000, -1, 1);



  y_axis_state = map(y_axis_state, 0, 1000, -1, 1);



  if (A_button_state == LOW)



  {



    if (value6 < 1700)



    {



      value6 = value6 + 100;



      move(6, value6, 100);



    }



    else



    {



      move(6, value6, 100);



    }



  }



  if (B_button_state == LOW)



  {



    if (value6 > 900)



    {



      value6 = value6 - 100;



      move(6, value6, 100);



    }



  }



  if (C_button_state == LOW)



  {



    if (value5 < 2500)



    {



      value5 = value5 + 100;



      move(5, value5, 100);



    }



    else



    {



      move(5, value5, 100);



    }



  }



  if (D_button_state == LOW)



  {



    if (value5 > 500)



    {



      value5 = value5 - 100;



      move(5, value5, 100);



    }



  }



  if (E_button_state == LOW)



  {



    if (value4 < 2500)



    {



      value4 = value4 + 100;



      move(4, value4, 100);



    }



    else



    {



      move(4, value4, 100);



    }



  }



  if (F_button_state == LOW)



  {



    if (value4 > 500)



    {



      value4 = value4 - 100;



      move(4, value4, 100);



    }



  }



  if (Analog_state == LOW)



  {



    if (value3 < 2500)



    {



      value3 = value3 + 100;



      move(3, value3, 100);



    }



    else



    {



      move(3, value3, 100);



    }



  }  



  if (y_axis_state == -1)



  {



    if (value2 < 2500)



    {



      value2 = value2 + 100;



      move(2, value2, 100);



    }



    else



    {



      move(2, value2, 100);



    }



  }



  if (y_axis_state == 1)



  {



    if (value2 > 500)



    {



      value2 = value2 - 100;



      move(2, value2, 100);



    }



  }



  if (x_axis_state == -1)



  {



    if (value1 < 2500)



    {



      value1 = value1 + 100;



      move(1, value1, 100);



    }



    else



    {



      move(1, value1, 100);



    }



  }



  if (x_axis_state == 1)



  {



    if (value1 > 500)



    {



      value1 = value1 - 100;



      move(1, value1, 100);



    }



  }



}

 

CEVAP VER

Please enter your comment!
Please enter your name here