Issuu on Google+

    

  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 เคลือนที ่ ตามเส ่ นดําอยางตอเนือง ่ 


iBOT_Practice_