Robot Solve Rubik SNC Team

Robot Solve Rubik SNC Team

วัตถุประสงค์ของโครงการ

  1. เพื่อศึกษา Forward และ Inverse Kinematic ของหุ่นยนต์ที่ได้เรียนในรายวิชา
  2. เพื่อศึกษา ระบบ Control Robot
  3. เพื่อศึกษา Vision Camera เพื่ออ่านสีของ Rubik
  4. เพื่อศึกษา Algolithim การแก้ไขปัญหา Rubik

สถานการณ์ของระบบ System Scenario

1.ออกแบบระบบให้เริ่มจาก วาง Rubik บนพื้นที่การทำงานของ Robot ทั้ง 2 ตัว เพื่อให้ Robot จับ Rubik ขึ้นมา 1 แขน

2.มี Camera Vision ติดด้านบน 1 ตัวเพื่อตรวจสอบระยะและสีของ Rubik ปัจจุบัน

3.พิจารณาจากสถานะปัจจุบันของ Rubik เพื่อใช้ Algorithm ใน Computer ในการประมวลผลผ่าน Camera vision

4.วางแผนการเล่น Rubik โดยการใช้ robot Left ในการจับ Rubik อยู่กับที่ และใช้ Robot Right จับ Rubik หมุนตามที่ Computer ประมวลผลมาได้

5.วิธีการเล่นคือใช้ Robot 2 ตัว Left & Right สลับกันจับอยู่กับที่ และสลับกันหมุน Rubik ผ่านจากการประมวลผลจาก Computer ผ่าน Camera vision โดยใช้โปรแกรมคอมพิวเตอร์สั่งการ

6.Computer จะสั่งการผ่านบอร์ด Micro Controller เพื่อ สั่งการไปที่ Robot ทั้ง 2 ตัว ทำงานตามโปรแกรมที่ตั้งไว้

7.ใช้ Robot ที่ผ่านการสร้างขึ้นมามี 6 DOF ทั้ง 2 ตัว ผ่านบอร์ด Micro Controller

8.Actuator คือ Robot จะได้รับคำสั่งจาก Micro controller ที่ได้รับข้อมูลผ่าน Sensor คือ Camara vision ให้ทำงานตามคำสั่ง Computer

9.และทุกครั้งที่ Camera Vision ตรวจสอบสีของ Rubik จะส่งสัญญาณกลับไปที่ Computer เพื่อประมวลผลในการทำงานใน Loop ต่อไป จน Solve Rubik ได้

Software design

System Data flow

Hardware Design

1.Robot 6 DOF = 2 unit

2.Laptop = 1 PC

3.Camera vision = 1 PC

4.Rubik = 1 PC

5.Micro Controller = 2 units

6.Servo Driver Board 6 channel = 2 units

All design by our team for solve Rubik

Progress 1 2-March-2023

Progress 2 01-Apr-2023 คำนวน Forward Kinematic

Progrss 3 07-Apr-2023

Progress 4 17-Apr-2023

ทดลองประกอบ Robot 1 ตัว พบปัญหา จึงทำการแก้ไข ใหม่

Progress 5 26-Apr-2023

ทดลองประกอบอีกครั้ง ยังพบว่า แกน 1 ไม่แข็งแรง

Progress 6 30-Apr-2023

แก้ไขแกน 1 ใหม่ เพิ่ม ลูกปืนเพื่อให้รับแรงได้มากขึ้น

Progress 7

ต่อสายไฟระบบ

Program Arduino

include

Servo axis0;
Servo axis1;
Servo axis2;
Servo axis3;
Servo axis4;
Servo axis5;
Servo axis6;
void setup()
{
Serial.begin(9600);
axis0.attach(0);
axis1.attach(1);
axis2.attach(2);
axis3.attach(3);
axis4.attach(4);
axis5.attach(5);
axis6.attach(6);

}
void loop()
{

if (Serial.available() > 0) {

  String teststr = Serial.readString();
  teststr.trim(); 
  Serial.println(teststr);
  if(teststr == "A"){
      axis0.write(45); 
      axis1.write(45); 
      axis2.write(0);   
      axis3.write(0); 
      axis4.write(0); 
      axis5.write(0); 
      axis6.write(0);
  }
  if(teststr == "B"){
      axis0.write(0); 
      axis1.write(0); 
      axis2.write(0);   
      axis3.write(0); 
      axis4.write(0); 
      axis5.write(0); 
      axis6.write(0);
  }
  if(teststr == "C"){
      axis0.write(0); 
      axis1.write(0); 
      axis2.write(0);   
      axis3.write(0); 
      axis4.write(0); 
      axis5.write(0); 
      axis6.write(0); 
  }