ibot_practice_
DESCRIPTION
ÂTRANSCRIPT
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 เคลื่ อนที่ ตามเวลาที่ กํ าหนด
เป ดโปรแกรม Wiring 1.0 SE แล วเขี ยนโปรแกรม บั นทึ กชื่ อเป น iBOT_ForwardTimer.pde จากน้ั นทํ าการอั ปโหลดโปรแกรมไปยั งหุ นยนต iBOT แล วถอดสาย miniB-USB ออก นํ าหุ นยนต มาวางที่ พื้ น กดสวิ ตช OKบนแผงวงจร IPST-SE ของหุ นยนต iBOT
สั งเกตการทํ างานของหุ นยนต
หุ นยนต iBOT เคลื่ อนที่ ตรงไปข างหน านาน 4 วิ นาที แล วหยุ ด
หากพบว า หุ นยนต เคลื่ อนที่ ไม ตรง ให ทดลองแก ไขกํ าลั งขั บในฟ งก ชั่ น motor ของมอเตอร แต ละตั ว อาจต องปรั บให มอเตอร 2 ตั วทํ างานด วยกํ าลั งที่ ต างกั นเล็ กน อย เพื่ อทํ าให หุ นยนต เคลื่ อนที่ ได ตรงมากที่ สุ ด
ทดลองแก ไขค าเวลา และกํ าลั งขั บมอเตอร แล วสั งเกตว า หุ นยนต จะเคลื่ อนที่ ได ระยะทางแตกต างกั นหรื อไม อย างไร
ทดลองแก ไขโปรแกรมให หุ นยนต iBOT เคลื่ อนที่ ถอยหลั งตามค าเวลาที่ กํ าหนด
ทดลองแก ไขโปรแกรมให หุ นยนต iBOT เคลื่ อนที่ ไปข างหน าและถอยหลั งตามเวลาที่ กํ าหนด
#include <ipst.h> // ผนวกไฟล ไลบรารี หลั กvoid setup(){
glcd(1,1,"Press OK"); // แสดงข อความsw_OK_press(); // กดสวิ ตช OKmotor(1,40); // หุ นยนต เคลื่ อนที่ motor(2,40); // ตรงไปข างหน าsleep(4000); // เป นเวลา 4 วิ นาที ao(); // สั่ งให หุ นยนต หยุ ด
}void loop(){}
3
เป าหมายเขี ยนโปรแกรมภาษา C/C++ เพื่ อสร างฟ งก ชั่ นการเคลื่ อนที่ ของหุ นยนต iBOT ในแบบต างๆ
27
A3
30
A6
29
A5
26
A2
28
A4
25
A1
24A0
USB
D
9SDA
8SCL
12131415 SV0 SV1 SV2 SV3
12
6V G
13
6V G
14
6V G
15
6V G
21
DC MOTOR
3TxD
1
LOW
+5
2R
xD1
UART1
SE
RVO
RESE
T20
19
18
17
16
KN
OB
OK
SW1
ON
27
A3
30
A6
29
A5
26
A2
28
A4
25
A1
24A0
USB
D
9SDA
8SCL
12131415 SV0 SV1 SV2 SV3
12
6V G
13
6V G
14
6V G
15
6V G
21
DC MOTOR
3TxD
1
LOW
+5
2RxD1
UART1
SE
RVO
RESE
T20
19
18
17
16
KN
OBO
K
SW1
ON
27
A3
30
A6
29
A5
26
A2
28
A4
25
A1
24A0
USB
D
9SD
A8
SCL
12131415 SV0 SV1 SV2 SV3
12
6V G
13
6V G
14
6V G
15
6V G
21
DC MOTOR
3TxD
1
LOW
+5
2RxD
1
UAR
T1
SERVO
RESET
20
19
18
17
16
KN
OB
OK
SW
1
ON
27
A3
30
A6
29
A5
26
A2
28
A4
25
A1
24A0
USB
D
9SD
A8
SCL
12131415 SV0 SV1 SV2 SV3
12
6V G
13
6V G
14
6V G
15
6V G
21
DC MOTOR
3TxD
1
LOW
+5
2RxD
1
UAR
T1
SERVO
RESET
20
19
18
17
16
KN
OB
OK
SW
1
ON
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"); // แสดงข อความ glcdsw_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
27
A3
30
A6
29
A5
26
A2
28
A4
25
A1
24A0
USB
D
9SD
A8
SCL
12131415 SV0 SV1 SV2 SV3
12
6V G
13
6V G
14
6V G
15
6V G
21
DC MOTOR
3TxD
1
LOW
+5
2RxD
1
UART1
SERV
ORESET
20
19
18
17
16
KN
OB
OK
SW
1
ON
ZX-Switch01
+ S
+
S
D
ZX-Switch01
+ S
+
S
D
ต อแผงวงจรสวิ ตช 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
#include <ipst.h> // ผนวกไฟล ไลบรารี หลั กvoid setup(){
setTextSize(2); // กํ าหนดขนาดตั วอั กษร 2 เท า}void loop(){
glcd(0,0,"L=%d ",analog(1)); // แสดงค าตั วตรววจั บช อง A1glcd(1,0,"R=%d ",analog(2)); // แสดงค าตั วตรววจั บช อง A2
} ต อแผงวงจร ZX-03 เข ากั บจุ ดต อ A1 กํ าหนดเป นตั วตรวจจั บซ ายและต อแผงวงจร ZX-03 อี กตั วหน่ึ งเข ากั บจุ ดต อ A2 กํ าหนดเป นตั วตรวจจั บขวา
เป ดโปรแกรม Wiring 1.0 SE แล วเขี ยนโปรแกรมข างต น บั นทึ กชื่ อเป น iBOT_SensorTest.pde อั ปโหลดไปยั งหุ นยนต iBOT แล วถอดสาย miniB-USB นํ าหุ นยนต มาวางที่ พื้ นดํ าแล วขาว แล วสั งเกตการทํ างานของหุ นยนต
จะพบว า หุ นยนต จะอ านค าจากพื้ นหรื อเส นสี ดํ าได น อยกว าสี ขาวค อนข างมาก
27
A3
30
A6
29
A5
26
A2
28
A4
25
A1
24A0
USB
D
9SD
A8
SCL
12131415 SV0 SV1 SV2 SV3
12
6V G
13
6V G
14
6V G
15
6V G
21
DC MOTOR
3TxD1
LOW
+5
2RxD
1
UART1
SERVO
RESET
20
19
18
17
16
KN
OB
OK
SW1
ON
A2A1
27
A3
30
A6
29
A5
26
A2
28
A4
25
A1
24A0
USB
D
9SD
A8
SCL
12131415 SV0 SV1 SV2 SV3
12
6V G
13
6V G
14
6V G
15
6V G
21
DC MOTOR
3TxD
1
LOW
+5
2RxD
1
UART1
SERV
ORESET
20
19
18
17
16
KN
OB
OK
SW
1
ON
A2A1
L=190
R=190
L=900
R=900
7
เป าหมายเขี ยนโปรแกรมภาษา C/C++ เพื่ อควบคุ มให หุ นยนต iBOT เคลื่ อนที่ ตามเส นสี ดํ าอย างง าย
27
A3
30
A6
29
A5
26
A2
28
A4
25
A1
24A0
USB
D
9SD
A8
SCL
12131415 SV0 SV1 SV2 SV3
12
6V G
13
6V G
14
6V G
15
6V G
21
DC MOTOR
3TxD
1
LOW
+5
2RxD
1
UART1
SERVO
RESET
20
19
18
17
16
KN
OB
OK
SW
1
ON
A2A1
หั วใจสํ าคั ญของการตรวจจั บเส นคื อ การก ําหนดค าอ างอ ิงเพื ่อใช ในการตั ดสิ นใจว า ต ัวตรวจจั บพบเส นหร ือพื ้นสนาม จากการทดสอบในปฏิ บั ติ การที่ 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 เคลื่ อนที่ ตามเส นดํ าอย างต อเนื่ อง