วัตถุประสงค์ของโครงการ
- เพื่อศึกษา Forward และ Inverse Kinematic ของหุ่นยนต์ที่ได้เรียนในรายวิชา
- เพื่อศึกษา ระบบ Control Robot
- เพื่อศึกษา Vision Camera เพื่ออ่านสีของ Rubik
- เพื่อศึกษา 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);
}