آردوینوالکترونیکپروژه آردوینو

ساخت بازوی رباتیک با آردوینو

مقدمه

ساخت بازوی رباتیک با آردوینو : بازو های رباتیک در کار های زیادی می توانند استفاده شوند. زمانی که برا انتقال وسایل خیلی سنگین انسان نا کارآمد می شود، زمانی که ابعاد خیلی کوچک می شود، زمانی که سرعت و یا تداوم انجام کاری برای ما مهم می شود ما از بازو های کمکی استفاده می کنیم. بدون بازو های کمکی خیلی از صنایع عملا ناکارآمد می شوند. امروز قرار است یک مدل بازو کمکی در ابعاد کوچک را برای شما راه اندازی کنیم. با داتوس همراه باشید.

نمایی از یک بازوی رباتیک
نمایی از یک بازوی رباتیک

در برنامه میبینید که میتوانید هر موتور را به طور جداگانه کنترل کنید و حتی می توانید یک دسته حرکت خاص را در برنامه ثبت کنید و آن را در قسمت Start Loop به طور خودکار تکرار کنید. سرعت موتورها نیز قابل کنترل می باشد.

  • Base پایه اصلی بازو
  • Shoulder کنترل شانه بازو
  • Elbow آرنج بازو
  • Gripper گیره ی بازو

مدار زیر را روی آردوینو بردبرد ببندید آردوینو را به کامپیوتر وصل کنید و برنامه زیر را در برد قرار دهید.

نمایی از مدار ساخت بازوی رباتیک با آردوینو
نمایی از مدار ساخت بازوی رباتیک با آردوینو

لوازم مورد نیاز برای ساخت بازوی رباتیک با آردوینو

برنامه

#include <Servo.h>  //arduino library
#include <math.h>   //standard c library

اضافه کردن کتابخانه های مورد نیاز

#define PI 3.141

تعریف عدد پی برای سیستم

Servo baseServo;  
Servo shoulderServo;  
Servo elbowServo; 
Servo gripperServo;

راه اندازی ۴ شئ برای ۴ سروو موتور

int command;

struct jointAngle{
  int base;
  int shoulder;
  int elbow;
};

تعریف ساختار برای سروو موتور ها

int desiredGrip;
int gripperPos;
int desiredDelay;
int servoSpeed = 15;
int ready = 0;
struct jointAngle desiredAngle; //desired angles of the servos

تعریف متغییر ها

int servoParallelControl (int thePos, Servo theServo );

باز تعریف تابعی که پایینتر تعریف شده

void setup()
{ 
  Serial.begin(9600);

  راه اندازی سریال

baseServo.attach(9);
  shoulderServo.attach(10);
  elbowServo.attach(11);
  gripperServo.attach(6);

  راه اندازی سروو موتور ها و تعریف پایه های آن ها

  Serial.setTimeout(50);

  تایم اوت برای سریال

Serial.println("started");
  baseServo.write(90);
  shoulderServo.write(150);
  elbowServo.write(110);
  ready = 0;

  تنظیم زاویه های اولیه

} 

void loop() 
{ 
  if (Serial.available()){
    ready = 1;
    desiredAngle.base = Serial.parseInt();
    desiredAngle.shoulder = Serial.parseInt();
    desiredAngle.elbow = Serial.parseInt();
    desiredGrip = Serial.parseInt();
    desiredDelay = Serial.parseInt();

دریافت مقادیر دلخواه زاویه سروو ها

    if(Serial.read() == '\n'){

        Serial.flush();
        Serial.print('d');      
    }

    اگر آخرین دیتا دریافتی d بود دست از خواندن سریال بر میدارد و بافر را خالی می کند

  }
  
  int status1 = 0;
  int status2 = 0;
  int status3 = 0;
  int status4 = 0;
  int done = 0 ; 
  
  while(done == 0 && ready == 1){  
    //move the servo to the desired position
    status1 = servoParallelControl(desiredAngle.base, baseServo, desiredDelay);
    status2 = servoParallelControl(desiredAngle.shoulder,  shoulderServo, desiredDelay);
    status3 = servoParallelControl(desiredAngle.elbow, elbowServo, desiredDelay);      
    status4 = servoParallelControl(desiredGrip, gripperServo, desiredDelay);  

    اگر done برابر ۰ و ready برابر ۱ بود سروو ها را به اندازه دریافت شده می برد

if (status1 == 1 & status2 == 1 & status3 == 1 & status4 == 1){
      done = 1;

      اگر همه status ها ۱ باشد آنگاه done را برابر با یک قرار می دهد

    }     
  }
}
int servoParallelControl (int thePos, Servo theServo, int theSpeed ){

  انتخاب موقعیت شماره و سرعت سروو

    int startPos = theServo.read();

    دریافت وضعیت فعلی به عنوان وضعیت اولیه تابع

    int newPos = startPos;
    //int theSpeed = speed;
    
    if (startPos < (thePos-5)){

          اگر موقعیت استارت از موقعیت وارد شده برای تابع ۵ واحد کوچکتر بود

newPos = newPos + 1;
       theServo.write(newPos);
       delay(theSpeed);
       return 0;

           موقعیت جدید را +۱ کن و سروو را تغییر اندازه بده

    }
  
   else if (newPos > (thePos + 5)){

  اگر موقعیت جدید از موقعیت وارد شده در تابع بیش از ۵ واحد بزرگتر بود

      newPos = newPos - 1;
      theServo.write(newPos);
      delay(theSpeed);
      return 0;

          موقعیت جدید را -۱ کن و سروو را تغییر اندازه بده

}  
    
    else {
        return 1;

        در غیر اینصورت ۱ را برگردان

 }  
    
  
}

سخن پایانی

سروو موتور ها در آردوینو به راحتی راه اندازی می شوند و می توان آن ها را با دقت خوبی کنترل کرد. بازو های مکانیکی نمونه ای از کاربرد این موتور ها هستند. شما هم اکنون می توانید سروو موتور مورد نیاز خود را از این لینک تهیه کنید. امیدوارم از این آموزش لذت برده باشید.

ویکی پدیا

نمایش بیشتر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا