1
เปาหมาย เขียนโปรแกรมควบคุมใหหุนยนต iBOT เคลือนที ่ ไปข ่ างหนา แลวถอยหลังตรงๆ สลับกันไปมา #include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() { sw_OK_press(); // กดสวิตช OK เริ่มตนทํางาน } void loop() { motor(1,40); motor(2,40); // หุนยนต เคลื่อนที่ตรงไปขางหนา กําลัง 40% sleep(1000); // เปนเวลา 1 วินาที motor(1,-40); motor(2,-40); // หุนยนตถอยหลังดวยกําลัง 40% sleep(1000); // เปนเวลา 1 วินาที } เปดโปรแกรม Wiring 1.0 SE แลวเขียนโปรแกรม บันทึกชื่อเปน iBOT_ForwardBackword.pde จากนั้น ทําการอัปโหลดโปรแกรมไปยังหุนยนต iBOT แลวถอดสาย miniB-USB ออก นําหุนยนตมาวางที่พื้น กดสวิตช OK บนแผงวงจร IPST-SE ของหุนยนต iBOT สังเกตการทํางานของหุนยนต หากหุนยนตเคลือนที ่ กลั ่ บทิศทาง ใหทําการกลับขั้วตอของสายมอเตอรที่ แผงวงจร IPST-SE หากพบวา หุนยนต เคลือนที ่ ่ไมตรง ใหทดลองแกไขกําลังขับในฟงกชั่น motor ของมอเตอรแตละตัว อาจ ตองปรับใหมอเตอร 2 ตัวทํางานดวยกําลังที่ตางกันเล็กนอย เพื่อทําใหหุนยนตเคลือนที ่ ได ่ ตรงมากที่สุด
2
เปาหมาย เขียนโปรแกรมควบคุมใหหุนยนต iBOT เคลือนที ่ ตามเวลาที ่ ่กําหนด #include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() { glcd(1,1,"Press OK"); // แสดงขอความ sw_OK_press(); // กดสวิตช OK motor(1,40); // หุนยนต เคลื่อนที่ motor(2,40); // ตรงไปขางหนา sleep(4000); // เปนเวลา 4 วินาที ao(); // สังให ่ หุนยนต หยุด } void loop() {} เปดโปรแกรม Wiring 1.0 SE แลวเขียนโปรแกรม บันทึกชื่อเปน iBOT_ForwardTimer.pde จากนั้นทํา การอัปโหลดโปรแกรมไปยังหุนยนต iBOT แลวถอดสาย miniB-USB ออก นําหุนยนตมาวางที่พื้น กดสวิตช OK บนแผงวงจร IPST-SE ของหุนยนต iBOT สังเกตการทํางานของหุนยนต หุนยนต iBOT เคลือนที ่ ตรงไปข ่ างหนานาน 4 วินาที แลวหยุด หากพบวา หุนยนต เคลือนที ่ ่ไมตรง ใหทดลองแกไขกําลังขับในฟงกชั่น motor ของมอเตอรแตละตัว อาจ ตองปรับใหมอเตอร 2 ตัวทํางานดวยกําลังที่ตางกันเล็กนอย เพื่อทําใหหุนยนตเคลือนที ่ ได ่ ตรงมากที่สุด ทดลองแกไขคาเวลา และกําลังขับมอเตอร แลวสังเกตวา หุนยนตจะเคลือนที ่ ได ่ ระยะทางแตกตางกัน หรือไมอยางไร ่ ถอยหลั ่ งตามคาเวลาที่กําหนด ทดลองแกไขโปรแกรมใหหุนยนต iBOT เคลือนที ่ ไปข ่ างหนาและถอยหลังตามเวลาที่กําหนด ทดลองแกไขโปรแกรมใหหุนยนต iBOT เคลือนที
3
เปาหมาย เขียนโปรแกรมภาษา C/C++ เพื่อสรางฟงกชั่นการเคลือนที ่ ของหุ ่ นยนต iBOT ในแบบตางๆ
30 A6 27 A3
29 A5 26 A2
8 SCL 9 SDA
24 A0 30 A6 27 A3
28 A4 25 A1
LOW
2
LOW
1
8 SCL 9 SDA
USB
D
+5
2 RxD1 3 TxD1
D
USB
+5
24 A0 30 A6 27 A3
18
19
29 A5 26 A2
OK
SW1
KNOB
16
17
30 A6 27 A3
ON
OK
SW1
KNOB
18
20
20
D
LOW
8 SCL 9 SDA
+5
2 RxD1 3 TxD1
UART1
RESET
LOW
1
1 2
2 DC MOTOR
SERVO
G 6V 12 G 6V 13 G 6V 14 G 6V 15
SERVO
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
ON
ON
USB
D
USB
+5
2 RxD1 3 TxD1
UART1
RESET
DC MOTOR
15 SV0 14 SV1 13 SV2 12 SV3
8 SCL 9 SDA
19
28 A4 25 A1
ON
G 6V 12 G 6V 13 G 6V 14 G 6V 15
16
17
29 A5 26 A2
SERVO
G 6V 12 G 6V 13 G 6V 14 G 6V 15
2
SERVO
15 SV0 14 SV1 13 SV2 12 SV3
28 A4 25 A1
1
24 A0
2 RxD1 3 TxD1
UART1
RESET
UART1
RESET
29 A5 26 A2
20
28 A4 25 A1
24 A0
SW1
OK
18
19
20
16
18
19
15 SV0 14 SV 1 13 SV2 12 SV3
DC MOTOR
DC MOTOR
KNOB
17
KNOB
OK
16
SW1
17
4
#include <ipst.h> // ผนวกไฟลไลบรารีหลัก void fd(int speedL,int speedR) // ฟงกชันเดิ ่ นหนา { motor(1,speedL); motor(2,speedR); } void bk(int speedL,int speedR) // ฟงกชันถอยหลั ่ ง { motor(1,-speedL); motor(2,-speedR); } void tl(int speedL,int speedR) // ฟงกชันเลี ่ ้ยวซาย { motor(1,-speedL); motor(2,speedR); } void tr(int speedL,int speedR) // ฟงกชันเลี ่ ้ยวขวา { motor(1,speedL); motor(2,-speedR); } void setup() { glcd(1,1,"Press OK"); // แสดงขอความ glcd sw_OK_press(); // กดสวิตช OK เริ่มตนทํางาน } void loop() { fd(40,40); sleep(1000); tl(40,40); sleep(250); ao(); sleep(500); bk(40,40); sleep(1000); tr(40,40); sleep(250); ao(); sleep(500); } เปดโปรแกรม Wiring 1.0 SE แลวเขียนโปรแกรม บันทึกชื่อเปน iBOT_MovementFunction.pde จากนั้น ทําการอัปโหลดโปรแกรมไปยังหุนยนต iBOT แลวถอดสาย miniB-USB ออก นําหุนยนตมาวางที่พื้น กดสวิตช OK บนแผงวงจร IPST-SE ของหุนยนต iBOT สังเกตการทํางานของหุนยนต
5
เปาหมาย เขียนโปรแกรมภาษา C/C++ อานคาจากสวิตชเพื่อนําคามา ควบคุมการเคลือนที ่ ของหุ ่ นยนต iBOT
30 A6 27 A3
28 A4 25 A1
OK
18
19
29 A5 26 A2
24 A0
KNOB
SW1
16
17 20
D
8 SCL 9 SDA
USB
+5 LOW
2 RxD1 3 TxD1
UART1
RESET
1 2 DC MOTOR
SERVO
G 6V 12 G 6V 13 G 6V 14 G 6V 15
ZX-Switch01
ON
15 SV0 14 SV1 13 SV2 12 SV3
ZX-Switch01
D
D
S
S
+
+ S
+
+ S
ตอแผงวงจรสวิตช ZX-Switch01 ตัวหนึ่งเขากับจุดตอ 16 กําหนดเปนสวิตชขวา และตอแผงวงจร ZX-Switch01 อีกตัวหนึ่งเขากับจุดตอ 17 กําหนดเปนสวิตชซาย เปดโปรแกรม Wiring 1.0 SE แลวเขียนโปรแกรม บั นทึ กชื่ อเป น iBOT_RemoteControl.pde อัปโหลด โปรแกรมไปยังหุนยนต iBOT แลวถอดสาย miniB-USB นําหุนยนต มาวางทีพื่ ้น กดสวิตช OK ของหุนยนต iBOT กดสวิตชทั้ง 2 ตัว แลวสังเกตการทํางานของหุนยนต จะพบวา เมื่อกดสวิตชพรอมกัน 2 ตัว หุนยนต จะเคลื่อนที่ตรงไปขางหนา หากกดสวิตชซายตัวเดียว (จุดตอ 17) หุนยนต จะหมุนตัวไปทางซาย หากกดสวิตช ขวา (จุดตอ 16) ตัวเดียว หุนยนตจะหมุนตัวไปทางขวา หากไมกดสวิตช หุนยนตไมเคลือนที ่ ่
#include <ipst.h> // ผนวกไฟลไลบรารี void fd(int speedL,int speedR) // ฟงกชันเดิ ่ นหนา { motor(1,speedL); motor(2,speedR); } void bk(int speedL,int speedR) // ฟงกชันถอยหลั ่ ง { motor(1,-speedL); motor(2,-speedR); } void tl(int speedL,int speedR) // ฟงกชันเลี ่ ้ยวซาย { motor(1,-speedL); motor(2,speedR); } void tr(int speedL,int speedR) // ฟงกชันเลี ่ ้ยวขวา { motor(1,speedL); motor(2,-speedR); } void setup() { glcd(1,1,"Press OK"); // แสดงขอความ sw_OK_press(); // กดสวิตช OK เริ่มทํางาน } void loop() { if (in(17)==0&&in(16)==0) // กดสวิตชสองตัว { fd(40,40); } else if(in(17)==0) // กดสวิตชซาย { tl(40,40); } else if(in(16)==0) // กดสวิตชขวา { tr(40,40); } else { ao(); // ไมกดสวิตชมอเตอรหยุด } }
6
เปาหมาย เขียนโปรแกรมภาษา C/C++ เพื่อกําหนดใหหุนยนต iBOT อานคาจากตัวตรวจจับที่จุดตอ A0 ถึง A6
A1
A2
A1
A2 30 A6 27 A3
20 USB
D
+5 LOW
2 RxD1 3 TxD1
UART1
RESET
LOW
8 SCL 9 SDA
D
USB
+5
2 RxD1 3 TxD1
UART1
RESET
8 SCL 9 SDA
29 A5 26 A2
20
28 A4 25 A1
30 A6 27 A3
28 A4 25 A1
18
29 A5 26 A2
24 A0
24 A0
19
OK
16
SW1
17
18
OK
19
SW1
16
KNOB
KNOB
17
1
1
2
L=190 R=190
L=900 R=900
2
DC MOTOR
DC MOTOR
ON
SERVO
G 6V 12 G 6V 13 G 6V 14 G 6V 15
SERVO
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV 0 14 SV1 13 SV2 12 SV3
ON
15 SV0 14 SV1 13 SV2 12 SV3
#include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() { setTextSize(2); // กําหนดขนาดตัวอักษร 2 เทา } void loop() { glcd(0,0,"L=%d ",analog(1)); // แสดงคาตัวตรววจับชอง A1 glcd(1,0,"R=%d ",analog(2)); // แสดงคาตัวตรววจับชอง A2 } ตอแผงวงจร ZX-03 เขากับจุดตอ A1 กําหนดเปนตัวตรวจจับซายและตอแผงวงจร ZX-03 อีกตัวหนึ่งเขากับจุด ตอ A2 กําหนดเปนตัวตรวจจับขวา เปดโปรแกรม Wiring 1.0 SE แลวเขียนโปรแกรมขางตน บันทึกชื่อเปน iBOT_SensorTest.pde อัปโหลดไปยัง หุนยนต iBOT แลวถอดสาย miniB-USB นําหุนยนตมาวางที่พื้นดําแลวขาว แลวสังเกตการทํางานของหุนยนต จะพบวา หุนยนตจะอานคาจากพื้นหรือเสนสีดําไดนอยกวาสีขาวคอนขางมาก
7
เปาหมาย เขียนโปรแกรมภาษา C/C++ เพื่อควบคุมใหหุนยนต iBOT เคลือนที ่ ตามเส ่ นสีดําอยางงาย
A1
A2 30 A6 27 A3
28 A4 25 A1
OK
18
19
29 A5 26 A2
24 A0
KNOB
SW1
16
17 20
D
8 SCL 9 SDA
USB
+5 LOW
2 RxD1 3 TxD1
UART1
RESET
1 2 DC MOTOR
SERVO
G 6V 12 G 6V 13 G 6V 14 G 6V 15 ON
15 SV0 14 SV1 13 SV2 12 SV3
หัวใจสําคัญของการตรวจจับเสนคือ การกําหนดคาอางอิงเพือใช ่ ในการตัดสินใจวา ตัวตรวจจับพบเสนหรือ พืนสนาม ้ จากการทดสอบในปฏิบัติการที่ 5 พบวา คาที่อานไดจากสีขาวมีคาอยูประมาณ 700 ถึง 1000 คาที่อาน ไดจากสีดํามีคาอยูประมาณ 80 ถึง 250 ดังนันค ้ าที่เหมาะสม เพือใช ่ เปนคาอางอิงจะอยูที ่ (700+250) /2 = 500 ในกรณียกตัวหุ นยนตขึ้นจากพื้น เพื่อไมใหเกิดการสะทอน คาที่อานไดควรมีคาไมเกิน 30 ซึงจะนํ ่ าไปใชในการ พัฒนาโปรแกรมเพื่อควบคุมใหหุนยนต iBOT สามารถตรวจจับและเคลือนที ่ ตามเส ่ นได
8
ตอแผงวงจร ZX-03 เขากับจุดตอ A1 กําหนดเปนตัวตรวจจับซายและตอแผงวงจร ZX-03 อีกตัวหนึ่งเขากับจุด ตอ A2 กําหนดเปนตัวตรวจจับขวา เปดโปรแกรม Wiring 1.0 SE เขียนโปรแกรมตอไปนี้ บันทึกชือเป ่ น iBOT_SimpleLineTracking.pde #include <ipst.h> int L,R,refL=500,refR=500; void fd(int speedL,int speedR) // ฟงกชันเดิ ่ นหนา { motor(1,speedL); motor(2,speedR); } void bk(int speedL,int speedR) // ฟงกชันถอยหลั ่ ง { motor(1,-speedL); motor(2,-speedR); } void tl(int speedL,int speedR) // ฟงกชันเลี ่ ้ยวซาย { motor(1,-speedL); motor(2,speedR); } void tr(int speedL,int speedR) // ฟงกชันเลี ่ ้ยวขวา { motor(1,speedL); motor(2,-speedR); } void setup() { setTextSize(2); glcd(0,1,"Press Start"); sw_OK_press(); // รอกดสวิตช OK } void loop() { L=analog(0);R=analog(2); if(L>refL&&R>refR) // พบสีขาวทังสองด ้ าน ? { fd(60); } else if(L<refL&&R>refR) // ตัวตรวจจับซายพบสีดํา { tl(60); } else if(L>refL&&R<refR) // ตัวตรวจจับขวาพบสีขาว { tr(60); } } iBOT แลวถอดสาย miniB-USB นําหุนยนต มาวางทีพื่ นสนามที ้ มี่ เสนสีดํา แลวสังเกตการทํา อัปโหลดไปยังหุนยนต งานของหุนยนต หุนยนต iBOT เคลือนที ่ ตามเส ่ นดําอยางตอเนือง ่