โครงงานโครงงานหุ่นยนต์สำรวจโลก
ที่มาและความสำคัญ
มนุษย์ในยุคปัจจุปันก้าวหน้าเข้าสู่โลกในศตวรรตที่ 21 ซึ่งเป็นยุคที่เทคโนโลยีเข้ามาเกี่ยวข้องกับการดำเนินชีวิตประจำวันของมนุษย์ต้องกระตือรือร้นในการดำรงชีวิต และสภาพความเป็นอยู่เปลี่ยนไปตามสถานะการณ์ของโลกในปัจจุบันมนุษย์ยังต้องการเทคโนโลยีที่อำนวยความสะดวกชนิดใหม่ๆ ซึ่งปัจจุบันการที่จะไปสำรวจการสำรวจที่ต่างๆเช่น เพดาน ที่แคบ นั้นเป็นเรื่องที่ลำบากและน่าเบื่อ คณะผู้จัดทำจึงได้คิดค้น หุ่นยนต์สำรวจขึ้นเพื่อที่จะได้มีความสะทดวกสบายและสนุกสนานในการสำรวจขึ้น
วัตถุประสงค์
1.เพื่อประดิษฐ์หุ่นยนต์ที่สามารถไปสำรวจได้
2.เพื่อเพิ่มความสะดวกสบายและความสนุกสนานในการสำรวจ
3.เพื่อที่จะได้มีความปลอดภัยในการสำรวจ
วัสดุอุปกรณ์
2.1 บอร์ด arduino uno
2.2 ไม้อัด
2.3 สายจั้มเปอร์
2.4 มอเตอร์
2.5 กล้อง
2.6 ตัวรับสัญญาณจากกล้อง
2.7 ชุดรีโมท
2.1 บอร์ด arduino uno
เนื่องจากราคาไม่แพง ส่วนใหญ่โปรเจคและ Library ต่างๆ ที่พัฒนาขึ้นมา Support จะอ้างอิงกับบอร์ดนี้เป็นหลัก เนื่องจากเป็นขนาดที่เหมาะสำหรับการเริ่มต้นเรียนรู้ Arduino และมี Shields ให้เลือกใช้งานได้มากกว่าบอร์ด Arduino รุ่นอื่นๆที่ออกแบบมาเฉพาะมากกว่า โดยบอร์ด Arduino Uno ได้มีการพัฒนาเรื่อยมา ตั้งแต่ R2 R3 และรุ่นย่อยที่เปลี่ยนชิปไอซีเป็นแบบ SMD และข้อดีอีกอย่างคือ กรณีที่ MCU เสีย ผู้ใช้งานสามารถซื้อมาเปลี่ยนเองได้ง่าย
2.2 ไม้อัด
ไม้อัด เกิดจากการรวมไม้หลาย ๆ ชนิดเข้าด้วยกันหรือทำจากไม้ชนิดเดียวกัน โดยการตัดท่อนซุงให้มีความยาวตามที่ต้องการ แล้วกลึงปอกท่อนซุง หรือฝานให้ได้แผ่นไม้เป็นแผ่นบาง ๆ มีความหนาตั้งแต่ 1 ถึง 4 มิลลิเมตร แล้วนำมาอัดติดกันโดยใช้กาวเป็นตัวประสานโดยให้แต่ละแผ่นมีแนวเสี้ยน ตั้งฉากกัน แผ่นไม้จะถูกอบแห้งในเตาอบ ไม้อัดมีขนาด กว้าง 4 ฟุต ยาว 8 ฟุต หนา 4,6,8,10,15 และ 20 มิลลิเมตร
2.3 สายจั้มเปอร์
สาย jumper เข้าหัวสาย ตัวผู้ และ ตัวผู้ ใช้สำหรับ เพื่อให้ง่ายต่อการใช้งาน เชื่อมต่อปกรณ์ ต่างๆไม่ว่าจะเป็น Arduino / Module / Sensor เป็นต้น
2.4 มอเตอร์
การทำงานปกติของมอเตอร์ไฟฟ้าส่วนใหญ่เกิดจากการทำงานร่วมกันระหว่างสนามแม่เหล็กของแม่เหล็กในตัวมอเตอร์ และสนามแม่เหล็กที่เกิดจากกระแสในขดลวดทำให้เกิดแรงดูดและแรงผลักของสนามแม่เหล็กทั้งสอง
2.5 กล้อง
เป็นกล้องที่ติดอยู่กับโดรนซึ่งสามารถส่งภายมาที่โทรศัพท์ได้
2.6 ตัวรับสัญญาณจากกล้อง
เป็นเครื่องที่จะรับสัญญาณภาพจากกล้องตามค่าของกล้องที่ตั้งไว้
2.7 ชุดรีโมท
เป็นรีโมทที่สามารถเชื่อต่อเข้ากับหุ่นยนต์ได้และมีความสะดวกสบายในการเชื่อมต่อ ไม่มีสาย
วิธีการดำเนินงาน
เนื้อหาในบทนี้จะกล่าวถึง ขั้นตอน และวิธีการดำเนินงาน ในการสร้างหุ่นยนต์สำรวจโลก ซึ่งได้ข้อมูลจากการศึกษาเอกสารต่างๆ ที่เป็นประโยชน์เพื่อประกอบใช่ในขั้นตอนการดำเนินงานตลอดจนวิธีการทำงานของหุ่นยนต์สำรวจโลกและอุปกรณ์ต่างๆให้เข้าใจเสียก่อน เพื่อที่จะทำการสร้างหุ่นยนต์สำรวจโลก เพื่อให้ออกมามีประสิทธิภาพในการทำงานและใช่ได้ตามวัตถุประสงค์ที่ต้องการและสามารถนำไปประกอบการศึกษาเพื่อให้เกิดประโยชน์สูงสุดซึ่งมีลำดับการดำเนินงานต่อไปนี้
3.1 แผนผังการปฏิบัติงาน
3.2 วัสดุอุปกรณ์และเครื่องมือ
3.3 การดำเนินการ
3.1 ขั้นตอนการดำเนินงาน
3.1.1 สืบค้นหาชิ้นงานที่ต้องทำ
3.1.2 ศึกษาข้อมูลของอุปกรณ์
3.1.3 ออกแบบหุ่นยนต์
3.1.4 ตรวจสอบ / ทดลองการทำงานของหุ่นยนต์
3.1.5 เสนอครูที่ปรึกษาหรือผู้เชี่ยวชาญ โดยการนำกลับไปแก้ใหม่ตามคำแนะนำ
3.1.6 จัดรูปเล่ม
3.1.7 นำเสนอโครงงาน
3.2 วัสดุอุปกรณ์
ลำดับ | วัสดุอุปกรณ์ | จำนวน |
1 | บอร์ด Adriana | 1 ชิ้น |
2 | มอเตอร์ | 4 ตัว |
3 | ไม้อัด | 1 แผ่น |
4 | กล่องถ่ายภาพโดรน | 1 ชิ้น |
5 | เสารับสัญญาณภาพจากกล้อง | 1 ชิ้น |
6 | สายจั้มเปอร์ | 6 สาย |
7 | กล่องพลาสติก | 1 กล่อง |
8 | รังถ่าน | 1 ชิ้น |
9 | ถ่าน | 4 ก่อน |
10 | ชุดรีโมท | 1 ชุด |
11 | ไฟฉาย | 1 ตัว |
3.3 การดำเนินการ
3.3.1 วางแผนการทำงานกำหนดระยะเวลาในการทำงาน และจัดหาอุปกรณ์ที่ต้องใช้
3.3.2 ค้นคว้าหาข้อมูลเกี่ยวกับอุปกรณ์ภายในระบบของหุ่นยนต์สำรวจโลก และศึกษาโค๊ดอุปกรณ์แต่ละชนิด
3.3.3 จัดเตรียมอุปกรณ์เพื่อลงมือปฏิบัติในการต่อวงจร
3.3.4 จากนั้นต่อวงจร
3.3.5 เขียนโค๊ดและอัพโหลดลงอุปกรณ์
3.3.6 ทดสอบโค๊ดว่าสามารถทำงานได้หรือไม่ หากไม่สามารถทำงานได้ก็แก้ไขได้
3.3.7 ทำแบบจำลองเพื่อนำบอร์ดไปใส่ในแบบจำลอง
3.3.8 ทดสอบอุปกรณ์ภายในว่าสามารถใช่งานได้หรือไม่ หากอุปกรณ์มีข้อผิดพลาดก็สามารถปรับปรุงแก้ไข้อุปกรณ์ให้มีการทำงานให้ดียิ่งขึ้น
รูปการดำเนินงาน
บทที่ 4
ผลการดำเนินงาน
โครงงานหุ่นยนต์สำรวจโลกได้จัดทำการทำการทดลองใช้งานแล้วได้ผลดงนี้
สามารถไปสำรวจในที่ต่างๆได้ สามารถส่งภาพไปยังโทรศัพท์มือถือได้ มีความสนุกสนานในการสำรวจ แต่ระบบของเราอาจจะมีความยุ่งยากในการบังคับ
เพราะต้องมีพื้นฐานในการบังคับหุ่นยนต์ ดังนั้น เราจึงควรมีการปรับปรุงแก้ไขเพื่อให้ง่ายต่อการบังคับง่ายขึ้นกว่าเดิม
รูปผลการดำเนินงาน
บทที่ 5
สรุปผล อภิปรายและข้อเสนอแนะ
5.1 สรุปผลการทำโครงงาน
การดำเนินโครงงานเรื่อง หุ่นยนต์สำรวจโลก จากการทดสอบนำไปสำรวจในสถานที่ต่างๆ พบว่าสามารถทำงานได้ดีพอสมแต่ถ้าไปเจอสิ่งกีดขวางที่สูงกว่าล้อจะทำให้ไม่สามารถผ่านไปได้และคุณภาพของภาพจะไม่ค่อยดีเมื่ออยู่ในที่มืดแต่ถ้าเปิดไฟฉายที่ติดไปด้วยแล้วก็สมารถทำงานได้อย่างปกติ
5.2 ปัญหาที่พบ
5.2.1 ไม่สามารถข้ามสิ่งกีดขวางที่สูงกว่าล้อได้
5.2.2 มองภาพในที่มืดไม่ค่อยชัด
5.2.3 บอร์ดเสียหายง่ายถ้าต่อสายผิด
5.3 อภิปรายและข้อเสนอแนะ
5.3.1 เช็ดอุปกรณ์ให้ดีก่อนใช้งาน
5.3.2 ศึกษาอุปกรณ์แต่ละชิ้นให้ดีก่อนใช้งาน
5.4 การประยุกต์การใช้งาน
5.4.1 ใช้ในการสำรวจที่ต่างๆ
5.4.2 ใช้ในการเล่นเพื่อความสนุกสนานได้
5.4.3 สามารถนำไปต่อยอดเพื่อหารายได้ได้
Code หุ่นยนต์สำรวจโลก
#include <PS2X_lib.h> //for v1.6
#define PS2_DAT 13 //14
#define PS2_CMD 11 //15
#define PS2_SEL 10 //16
#define PS2_CLK 12 //17
//#define pressures true
#define pressures false
//#define rumble true
#define rumble false
PS2X ps2x;
int error = 0;
byte type = 0;
byte vibrate = 0;
void setup(){
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
Serial.begin(57600);
delay(300);
error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);
if(error == 0){
Serial.print(“Found Controller, configured successful “);
Serial.print(“pressures = “);
if (pressures)
Serial.println(“true “);
else
Serial.println(“false”);
Serial.print(“rumble = “);
if (rumble)
Serial.println(“true)”);
else
Serial.println(“false”);
Serial.println(“Try out all the buttons, X will vibrate the controller, faster as you press harder;”);
Serial.println(“holding L1 or R1 will print out the analog stick values.”);
Serial.println(“Note: Go to www.billporter.info for updates and to report bugs.”);
}
else if(error == 1)
Serial.println(“No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips”);
else if(error == 2)
Serial.println(“Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips”);
else if(error == 3)
Serial.println(“Controller refusing to enter Pressures mode, may not support it. “);
// Serial.print(ps2x.Analog(1), HEX);
type = ps2x.readType();
switch(type) {
case 0:
Serial.print(“Unknown Controller type found “);
break;
case 1:
Serial.print(“DualShock Controller found “);
break;
case 2:
Serial.print(“GuitarHero Controller found “);
break;
case 3:
Serial.print(“Wireless Sony DualShock Controller found “);
break;
}
}
void loop() {
if(error == 1) //skip loop if no controller found
return;
if(type == 2){ //Guitar Hero Controller
ps2x.read_gamepad(); //read controller
if(ps2x.ButtonPressed(GREEN_FRET))
Serial.println(“Green Fret Pressed”);
if(ps2x.ButtonPressed(RED_FRET))
Serial.println(“Red Fret Pressed”);
if(ps2x.ButtonPressed(YELLOW_FRET))
Serial.println(“Yellow Fret Pressed”);
if(ps2x.ButtonPressed(BLUE_FRET))
Serial.println(“Blue Fret Pressed”);
if(ps2x.ButtonPressed(ORANGE_FRET))
Serial.println(“Orange Fret Pressed”);
if(ps2x.ButtonPressed(STAR_POWER))
Serial.println(“Star Power Command”);
if(ps2x.Button(UP_STRUM)) //will be TRUE as long as button is pressed
Serial.println(“Up Strum”);
if(ps2x.Button(DOWN_STRUM))
Serial.println(“DOWN Strum”);
if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed
Serial.println(“Start is being held”);
if(ps2x.Button(PSB_SELECT))
Serial.println(“Select is being held”);
if(ps2x.Button(ORANGE_FRET)) { // print stick value IF TRUE
Serial.print(“Wammy Bar Position:”);
Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);
}
}
else { //DualShock Controller
ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at ‘vibrate’ speed
if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed
Serial.println(“Start is being held”);
if(ps2x.Button(PSB_SELECT))
Serial.println(“Select is being held”);
if(ps2x.Button(PSB_PAD_UP)) { //will be TRUE as long as button is pressed
Serial.print(“Up held this hard: “);
Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
}
if(ps2x.Button(PSB_PAD_RIGHT)){
Serial.print(“Right held this hard: “);
Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
if(ps2x.Button(PSB_PAD_LEFT)){
Serial.print(“LEFT held this hard: “);
Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
}
if(ps2x.Button(PSB_PAD_DOWN)){
Serial.print(“DOWN held this hard: “);
Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
vibrate = ps2x.Analog(PSAB_CROSS); //this will set the large motor vibrate speed based on how hard you press the blue (X) button
if (ps2x.NewButtonState()) { //will be TRUE if any button changes state (on to off, or off to on)
if(ps2x.Button(PSB_L3))
Serial.println(“L3 pressed”);
if(ps2x.Button(PSB_R3))
Serial.println(“R3 pressed”);
if(ps2x.Button(PSB_L2)){
Serial.println(“L2 pressed”);
digitalWrite(4,LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
if(ps2x.Button(PSB_R2))
Serial.println(“R2 pressed”);
if(ps2x.Button(PSB_TRIANGLE))
Serial.println(“Triangle pressed”);
}
if(ps2x.ButtonPressed(PSB_CIRCLE)) //will be TRUE if button was JUST pressed
Serial.println(“Circle just pressed”);
if(ps2x.NewButtonState(PSB_CROSS)) //will be TRUE if button was JUST pressed OR released
Serial.println(“X just changed”);
if(ps2x.ButtonReleased(PSB_SQUARE)) //will be TRUE if button was JUST released
Serial.println(“Square just released”);
if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) { //print stick values if either is TRUE
Serial.print(“Stick Values:”);
Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX
Serial.print(“,”);
Serial.print(ps2x.Analog(PSS_LX), DEC);
Serial.print(“,”);
Serial.print(ps2x.Analog(PSS_RY), DEC);
Serial.print(“,”);
Serial.println(ps2x.Analog(PSS_RX), DEC);
}
}
delay(50);
}
ครูที่ปรึกษา
คุณครูสุกิจ สุวรรณ์
คุณครูสิงห์ สุจันทร์
โรงเรียนราชประชานุเคราะห์ 56
ที่อยู่ของโรงเรียน 108 ม. 10 ต.กลางเวียง อ. เวียงสา จ. น่าน 55110