AT2200 ชุดเรียนรู้+ชุดทดลองแขนกลจับชิ้นงาน Linear Slide Robot Gripper Arm V2.0

฿12,900.00

สินค้าหมดแล้ว

คำอธิบาย

แขนกลจับชิ้นงาน Linear Slide Mechanical Arm เพื่อการทดลองและเรียนรู้ ประยุกต์ใช้งานแขนกลจับชิ้นงาน

การทำงาน

  1. เริ่มจาก เซนเซอร์โฟโตอิเล็คทริคอินฟราเรด Infrared Photoelectric Sensors ตรวจจับขวดน้ำ
  2. จากนั้น แขน ที่ติดตั้งมือจับ Gripper เซอร์โวมอเตอร์ 500g ซึ่งแขนนั้นติดตั้งบนรางสไลด์ยาว 1 เมตร
  3. ขับเคลื่อนด้วยสเต็ปปิ้งมอเตอร์ สไลด์เพื่อนำพาชิ้นงานจากจุดต้นทางไปยังปลายทาง
  4. การยกแขนกระทำด้วยเซอร์โวมอเตอร์ High torque 110Kg.cm
  5. มือจับ Gripper จับขวด ประกอบด้วย เซอร์โวมอเตอร์ 500g
  6. ควบคุมการทำงานทั้งหมดด้วยบอร์ด Arduino

มีอะไรเตรียมไว้ให้ในชุด

  1. รางสไลด์ยาว 1 เมตร พร้อมสเต็ปมอเตอร์
  2. เซอร์โวมอเตอร์ High Torque 110Kg.cm สำหรับยกแขน
  3. ชุดมือจับชิ้นงาน Gripper 4 พร้อมเซอร์โวมอเตอร์ MT0601 เซอร์โวมอเตอร์ แรงบิดสูง Digital High Torque RC Servo Motor 20kg 180D TD-8120MG
  4. ชุดควบคุม Arduino Shield + Driver A4988
  5. เซนเซอร์โฟโตอิเล็คทริคอินฟราเรด Infrared Photoelectric Sensors
  6. สวิตชิ่งพาวเวอร์ซัพพลาย +5VDC, +12VDC
  7. ลิมิตสวิตช์พร้อมสาย Limit Switch

Source Code // Test Step Motor

#include <AccelStepper.h>

AccelStepper stepper(AccelStepper::DRIVER, 2, 5);
// pin 2 = Step
// pin 5 = Dir

void setup()
{  
    pinMode(8, OUTPUT);
    digitalWrite(8,LOW);// enable
   stepper.setMaxSpeed(1000);
   stepper.setSpeed(500);	
}

void loop()
{  
   stepper.runSpeed();
}

 

Source Code Linear Slide Mechanical Arm Gripper Robot V2

#include <AccelStepper.h>
#include <Servo.h>
Servo MyGripper;  // create servo object to control a servo
Servo MyARM;  // create servo object to control a servo
// Define a stepper and the pins it will use

AccelStepper stepper(AccelStepper::DRIVER, 5, 2);
const int HomeSW = 9;
int buttonState = 0; 
char OK_flag=0;
int State=0;
int MaxDistance = 2500;
const int Gripper_servo = 13;  // มือจับ
const int Arm_servo = 12;  // แขน
int arm_Up = 75;// ตำแหน่งยกแขนขึ้น
int arm_Down = 55;// ตำแหน่งวางแขนลง
int Gripper_ON = 100; // มือจับ
int Gripper_OFF = 30; // ปล่อยมือ
int SensorA6=0; // เซนเซอร์ตรวจจับขวดว่ามีหรือไม่
int pos = arm_Up;
int SetSpeedArm = 100;
void setup()
{  
    pinMode(8, OUTPUT);
    digitalWrite(8,LOW);// enable
    pinMode(A6, INPUT_PULLUP );//เซนเซอร์
    stepper.setMaxSpeed(1000.0); //ปรับความเร็ว
    stepper.setAcceleration(2000.0); 

    pinMode(HomeSW,INPUT_PULLUP);
    MyGripper.attach(Gripper_servo);  // attaches the servo on pin 9 to the servo object
    MyGripper.write(Gripper_OFF);
    MyARM.attach(Arm_servo);  // attaches the servo on pin 9 to the servo object
    MyARM.write(arm_Up);  
    stepper.setCurrentPosition(MaxDistance);
    Serial.begin(9600);
    delay(1000);
    
}

void loop()
{    

 switch (State) 
 {
    case 0:    // เคลื่อนเข้า home มอเตอร์แกนนอน มอเตอร์1
                    // อ่านค่าสวิตช์ Home 
                  buttonState = digitalRead(HomeSW);
                  if (buttonState == HIGH) //ยังไม่ชนสวิตช์ 
                  {
                      stepper.setSpeed(-500); //ให้เคลื่อนที่ต่อไป
                      stepper.runSpeed();
                      MyARM.write(arm_Up);//ยกแขน90องศา
                      MyGripper.write(Gripper_OFF);//ปล่อยมือ
                  } 
                  else //ชนสวิตช์3
                  {                   
                    stepper.stop();// ให้หยุดมอเตอร์
                    stepper.setCurrentPosition(0);// เคลืยร์ค่าเป็น 0 นี่คือตำแหน่ง Home

                    stepper.moveTo(MaxDistance); // จากนั้นเคลื่อนที่ไปยังตำแหน่งไกลสุด เพื่อรอจับขวด
                    stepper.setMaxSpeed(1200);
                    stepper.setAcceleration(1200);
                    State = 10;
                    
                    delay(300);
                    buttonState = digitalRead(HomeSW);
                    if (buttonState == HIGH) 
                      {
                        State = 0;//  home again
                      }
                      else
                      {
                        State = 10;
                      }
                  }
      break;
      case 10:     //เคลื่อนไปจนสุด ที่ตำแหน่ง MaxDistance
                  {
                     if (stepper.distanceToGo() == 0)//เช็คว่าระยะทางที่เหลือเป็น 0 แล้วหรือยัง
                      {
                        stepper.moveTo(-stepper.currentPosition());
                        State = 15;
                      }
                      stepper.run();   //รอให้แขนเคลื่อนมาตำแหน่งที่ต้องการแล้วจึงเปลี่ยนเป็น state ถัดไป
            
                  }
      break;
       case 15:    // เช็คเซนเซอร์ตำแหน่งขวด ว่ามีหรือไม่
                  {
                  
                  SensorA6 = analogRead(A6);
                    if (SensorA6 < 200) 
                    {
                      State = 16;
                       Serial.print("\t SensorA6 = ");
                       Serial.println(SensorA6);
                    } 
                  }
      break;     
      case 16:    // หน่วงเวลา
                  {
                       delay(1000);
                      State = 20;
                  }
      break; 
      case 20:    // วางแขนลง แล้วจับของ
                  {
                      //ค่อยๆ วางแขน
                      for (pos = arm_Up; pos >= arm_Down; pos -= 1) 
                      { // goes from 0 degrees to 180 degrees
                        // in steps of 1 degree
                        MyARM.write(pos);              // tell servo to go to position in variable 'pos'
                        delay(SetSpeedArm);                       // waits 15ms for the servo to reach the position
                      }
                      State = 21;
                  }
      break;
      case 21:    // หน่วงเวลา
                  {
                       delay(1000);
                      State = 22;
                  }
      break; 
      case 22:    // จับของ
                  {
                      MyGripper.write(Gripper_ON);//มือจับ
                      State = 23;
                  }
      break;    
      case 23:    // หน่วงเวลา
                  {
                       delay(1000);
                      State = 24;
                  }
      break; 
       case 24:    // ยกแขนขึ้น
                  {
                      //ค่อยๆ ยกแขน90องศา
                      for (pos = arm_Down; pos <= arm_Up; pos += 1) 
                      { // goes from 0 degrees to 180 degrees
                        // in steps of 1 degree
                        MyARM.write(pos);              // tell servo to go to position in variable 'pos'
                        delay(SetSpeedArm);                       // waits 15ms for the servo to reach the position
                      }                      
                      State = 25;
                  }
      break;    
      case 25:    // หน่วงเวลา
                  {
                       delay(500);
                      State = 30;
                  }
      break;                
      case 30:    // เคลื่อนเข้า home แกนตั้ง มอเตอร์3
                  {
                    stepper.moveTo(200); //ตำแหน่งที่ห่างจากตำแหน่ง Home = 200 (ตำแหน่งที่มีลิมิตสวิตช์ =0)
                    stepper.setMaxSpeed(1200);
                    stepper.setAcceleration(1200);
                      State = 31;
                  }
                  
      break;
      case 31:    // เคลื่อนเข้า home แกนตั้ง มอเตอร์3
                  {
                     if (stepper.distanceToGo() == 0)
                      {
                        stepper.moveTo(-stepper.currentPosition());
                        State = 40;
                      }
                      stepper.run();   
                  }
      break;
      case 40:    // วางแขนลง
                  {
                      //ค่อยๆ วางแขน
                      for (pos = arm_Up; pos >= arm_Down; pos -= 1) 
                      { // goes from 0 degrees to 180 degrees
                        // in steps of 1 degree
                        MyARM.write(pos);              // tell servo to go to position in variable 'pos'
                        delay(SetSpeedArm);                       // waits 15ms for the servo to reach the position
                      }
                      State = 45;
                  }
      break;    
      case 45:    // หน่วงเวลา
                  {
                       delay(1000);
                      State = 46;
                  }
      break; 
      case 46:    // ปล่อยมือ
                  {
                      MyGripper.write(Gripper_OFF);//มือปล่อย
                      State = 47;
                  }
      break;    
      case 47:    // หน่วงเวลา
                  {
                       delay(1000);
                      State = 48;
                  }
      break; 


      case 48:    // ปล่อยมือ
                  {
                      //ค่อยๆ ยกแขน90องศา
                      for (pos = arm_Down; pos <= arm_Up; pos += 1) 
                      { // goes from 0 degrees to 180 degrees
                        // in steps of 1 degree
                        MyARM.write(pos);              // tell servo to go to position in variable 'pos'
                        delay(SetSpeedArm);                       // waits 15ms for the servo to reach the position
                      } 
                      State = 49;
                  }
      break;    
      case 49:    // หน่วงเวลา
                  {
                       delay(1000);
                      State = 50;
                  }
      break; 
      case 50:
                  {
                    stepper.moveTo(MaxDistance); 
                    stepper.setMaxSpeed(1200);
                    stepper.setAcceleration(1200);
                    State = 10;
                  }
 }

}

Wiring 

https://oshwlab.com/s2insupply/2200-linear-slide-mechanical-arm-v2

 

 

 

ข้อมูลเพิ่มเติม

น้ำหนัก 5000 กรัม
ขนาด 100 × 30 × 30 เซนติเมตร

รีวิว

ยังไม่มีบทวิจารณ์

เฉพาะลูกค้าที่เข้าสู่ระบบ และเคยซื้อสินค้าชิ้นนี้แล้วเท่านั้น ที่เขียนบทวิจารณ์ได้