El Hareketleriyle kontol edilen robot kol

16 6.868

Robot kolu kontrol etmek için birçok yöntem vardır.Bu projede el hareketiyle kontrol edilmesi, kolu daha rahat ve hassas şekilde kontrol etmemizi sağlamıştır.

Projede kullanılan komponetler:

  1. Arduino Nano
  2. Arduino Uno
  3. 2 Adet Adxl-345  3 eksen  ivmeölçer
  4. 5 Adet 9 gr Servo motor
  5. mekanik kısmı için 2 Adet A4 boyutunda mika

 

Devre Şeması:

İvme Ölçer İki Servo Kontrol

// ADXL345 ivmeölçer 2 Servo Motor kontrolü 
#include <Wire.h>
#include <Servo.h> 
Servo myservox; 
Servo myservoy; 
#define DEVICE (0x53) 
#define TO_READ (6) 
#define TRIGGER 16 
byte buff[TO_READ] ; 
int i;
 
void setup()
{
 pinMode(TRIGGER,OUTPUT);
 digitalWrite(TRIGGER,HIGH);
 Wire.begin(); 
 myservox.attach(9); 
 myservoy.attach(10); 
 myservox.write(90); 
 delay(25); 
 myservoy.write(90); 
 delay(25); 
 
 writeTo(DEVICE, 0x2D, 0); 
 writeTo(DEVICE, 0x2D, 16);
 writeTo(DEVICE, 0x2D, 8);
}
 
void loop()
{
 int regAddress = 0x32; 
 int x, y, z;
 digitalWrite(TRIGGER,LOW);
 delay(10);
 digitalWrite(TRIGGER,HIGH); 
 readFrom(DEVICE, regAddress, TO_READ, buff);
 
 x=0;
 y=0;
 z=0;
 for(i=1;i<=5;i++){
 x += (((int)buff[1]) << 8) | buff[0]; 
 y += (((int)buff[3])<< 8) | buff[2];
 z += (((int)buff[5]) << 8) | buff[4];
 delay(10);
 }
 x/=5;
 y/=5;
 z/=5;
 if(x<-255)x= -255; else if (x>255)x=255;
 if(y<-255)y= -255; else if (y>255)y=255;
 x=map(x, -255, 255, 0, 180); 
 y=map(y, -255, 255, 0, 180); 
 myservox.write(x); 
 delay(25); 
 myservoy.write(180-y); 
 delay(25); 
 
 delay(200);
}
 
 
void writeTo(int device, byte address, byte val) {
 Wire.beginTransmission(device); 
 Wire.write(address); 
 Wire.write(val); 
 Wire.endTransmission(); 
}
 
 
void readFrom(int device, byte address, int num, byte buff[]) {
 Wire.beginTransmission(device); 
 Wire.write(address); 
 Wire.endTransmission();
 
 Wire.beginTransmission(device); 
 Wire.requestFrom(device, num); 
 
 int i = 0;
 while(Wire.available()) 
 { 
 buff[i] = Wire.read(); 
 i++;
 }
 Wire.endTransmission(); 
}

3 Servo Kontrol

// ADXL345 ivmeölçer 3 Servo Motor kontrolü 
#include <Wire.h>
#include <Servo.h> 
Servo myservox; 
Servo myservoy;
Servo myservoz; 
#define DEVICE (0x53) 
#define TO_READ (6) 
#define TRIGGER 16 
byte buff[TO_READ] ; 
int i;
 
void setup()
{
 pinMode(TRIGGER,OUTPUT);
 digitalWrite(TRIGGER,HIGH);
 Wire.begin(); 
 myservox.attach(9); 
 myservoy.attach(10); 
 myservoy.attach(11); 
 myservox.write(90); 
 delay(25); 
 myservoy.write(90); 
 delay(25); 
myservoz.write(90); 
 delay(25); 
 writeTo(DEVICE, 0x2D, 0); 
 writeTo(DEVICE, 0x2D, 16);
 writeTo(DEVICE, 0x2D, 8);
}
 
void loop()
{
 int regAddress = 0x32; 
 int x, y, z;
 digitalWrite(TRIGGER,LOW);
 delay(10);
 digitalWrite(TRIGGER,HIGH); 
 readFrom(DEVICE, regAddress, TO_READ, buff);
 
 x=0;
 y=0;
 z=0;
 for(i=1;i<=5;i++){
 x += (((int)buff[1]) << 8) | buff[0]; 
 y += (((int)buff[3])<< 8) | buff[2];
 z += (((int)buff[5]) << 8) | buff[4];
 delay(10);
 }
 x/=5;
 y/=5;
 z/=5;
 if(x<-255)x= -255; else if (x>255)x=255;
 if(y<-255)y= -255; else if (y>255)y=255;
 if(z<-255)z= -255; else if (z>255)z=255;
 x=map(x, -255, 255, 0, 180); 
 y=map(y, -255, 255, 0, 180);
 z=map(z, -255, 255, 0, 180); 
 myservox.write(x); 
 delay(25); 
 myservoy.write(180-y); 
 delay(25); 
 myservoz.write(180-z); 
 delay(25); 
 delay(200);
}
 
 
void writeTo(int device, byte address, byte val) {
 Wire.beginTransmission(device); 
 Wire.write(address); 
 Wire.write(val); 
 Wire.endTransmission(); 
}
 
 
void readFrom(int device, byte address, int num, byte buff[]) {
 Wire.beginTransmission(device); 
 Wire.write(address); 
 Wire.endTransmission();
 
 Wire.beginTransmission(device); 
 Wire.requestFrom(device, num); 
 
 int i = 0;
 while(Wire.available()) 
 { 
 buff[i] = Wire.read(); 
 i++;
 }
 Wire.endTransmission(); 
}
Bunlar da İlgini Çekebilir

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

  1. abuziddin

    süüüüüüüüüpeeeeeeeeeeeeeeeeer

  2. Bekir

    Hocam bana mail üzerinden ulaşabilirmisiniz. Bekiryldzz19@gmail.com

  3. kenan

    en alttaki motor z eksenindeki hareket etmiyor yani vücut üzerinde bir hareket yok

  4. kenan

    bu projeyi mpu6050 ile yapabilirmiyiz

  5. Daniel

    Hola, me podrias decir como agregar otro servo al codigo de bluethooth

  6. Atalay ATABEY

    Hocam merhabalar. Mika kısımlarının ölçülerini söyleyebilir misiniz?

    1. Sezgin GÜL

      Uzunluk 10cm genişlik 3 cm.

  7. umut

    merhaba arduıno nanonu baglantı ucları bellı olmuyor ama yardımcı olabilirmisiniz

    1. Sezgin GÜL

      servo motor sinyal pinleri 9 ve 10. dijital pinlere ivme ölçerin scl A5, sda A4 ve sdo pini gnd ye takın. vcc 3.3v ve gndyi gnd ye takın

  8. Siddharth

    Hello!
    I am trying to control two servos using the YAW and pitch moments of mpu6050. Can you please share any code for it? Or any helpful link( siddharth123sk@gmail.com). Thanking you!

  9. CİHAN

    Merhabalar ,
    Şu anda buna benzer robot kol kontrolü üzerinde çalışmaktayım … Projemde sizdede olduğu gibi adxl345 ,ivme ölçer kullanıyorum … Tek fark robotu uzaktan, kablosuz olarak kontrol etmek.. Gerçek zamanlı olarak veri transferi için sizin önerdiğiniz bir proses varmı ?

    1. Sezgin GÜL

      Merhaba Cihan,
      mpu6050 ile yapılış projemiz mevcut.Buradan bakabilirsin >> https://www.robimek.com/ivmeolcer-ile-bluetooth-uzerinden-servo-kontrol/
      Kablosuz kontrol bluetooth üzerinden yapıldı. Bunun için de iki modülün master slave modlarını ayarlaman gerekecek buradan nasıl ayarlanacağına bakabilirsin >> https://www.robimek.com/hc-05-ile-hc-06-bluetooth-modullerin-haberlesmesi/

  10. Josip- Joe Bedenicec 9A2QP

    teşekkürler benim torunum mutlu olacak yapılmış

  11. Josip- Joe Bedenicec 9A2QP

    O bu robot kolunun için onun doğum günü için benim küçük torunum için bir araya tüm verileri indirmek olabilir Lütfen nerede. Eğer bütün belgelerini var mı ve biz posta çok minnettar olacaktır gönderebilirsiniz.

    1. Sezgin GÜL

      Projede devre şeması ve yazılım mevcut buradan da indirebilirsiniz https://www.robimek.com/wp-content/uploads/5-axis-robot-arm.rar