Page 1

Robo-Creator : AT-BOT ctivity book  1

AT-BOT

       AT-BOT activity book


2Robo-Creator : AT-BOT activity book

AT-BOT activity book

ทดลองและใชงานหุนยนต  อัตโนมัติขับเคลือน ่ 4 ลอควบคุมดวยโปรแกรมภาษา C/C++

สงวนลิขสิทธิ์ตาม พ.ร.บ. ลิขสิทธิ์ พ.ศ. 2537 หามการลอกเลียนไมวาสวนหนึงส ่ วนใดของหนังสือเลมนี้ นอกจากจะไดรับอนุญาต

ใครควรใชหนังสือเลมนี้ 1. นักเรียน นิสิต นักศึกษา และบุคคลทัวไปที ่ มี่ ความสนใจในการนําไมโครคอนโทรลเลอรไปประยุกตใชในการทดลอง เกียวกั ่ บการทํางานของระบบอัตโนมัติ หรือสนใจในการเรียนรูและทดลองไมโครคอนโทรลเลอร  ในแนวทางใหมทีใช ่ กิจกรรมหุนยนต  อัตโนมัติเปนสือ่ 2. สถาบันการศึกษา โรงเรียน วิทยาลัย มหาวิทยาลัย ทีมี่ การเปดการเรียนการสอนวิชาอิเล็กทรอนิกสหรือภาควิชา วิศวกรรมอิเล็กทรอนิกสและคอมพิวเตอร 3. คณาจารยทีมี่ ความตองการศึกษา และเตรียมการเรียนการสอนวิชาไมโครคอนโทรลเลอร รวมถึงวิทยาศาสตร ประยุกตทีต่ องการบูรณาการความรูทางอิเล็กทรอนิกส-ไมโครคอนโทรลเลอร--การเขียนโปรแกรมคอมพิวเตอรการทดลองทางวิทยาศาสตร ในระดับมัธยมศึกษา อาชีวศึกษา และปริญญาตรี ดําเนินการจัดพิมพและจําหนายโดย บริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด 108 ซ.สุขุมวิท 101/2 ถ.สุขุมวิท แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศัพท 0-2747-7001-4 โทรสาร 0-2747-7005 รายละเอียดทีปรากฏในหนั ่ งสือเลมนี้ไดผานการตรวจทานอยางละเอียดและถวนถี่ เพือให ่ มีความสมบูรณและ ถูกตองมากทีสุ่ ดภายใตเงือนไขและเวลาที ่ พึ่ งมีกอนการจัดพิมพเผยแพร ความเสียหายอันอาจเกิดจากการนําขอมูล ในหนังสือเลมนีไปใช ้ ทางบริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด มิไดมีภาระในการรับผิดชอบแตประการใด ความผิดพลาดคลาดเคลือนที ่ อาจมี ่ และไดรับการจัดพิมพเผยแพรออกไปนัน้ ทางบริษัทฯ จะพยายามชีแจงและแก ้ ไข ในการจัดพิมพครังต ้ อไป


Robo-Creator : AT-BOT ctivity book  3

  การนําเสนอขอมูลเกียวกั ่ บขอมูลทางเทคนิคและเทคโนโลยีในหนังสือเลมนี้ เกิดจากความตอง การทีจะอธิ ่ บายกระบวนการและหลักการทํางาน ของอุปกรณในภาพรวมดวยถอยคําทีง่ ายเพือสร ่ าง ความเขาใจแกผูอ าน ดังนันการแปลคํ ้ าศัพททางเทคนิคหลายๆ คําอาจไมตรงตามขอบัญญัติของราช บัณฑิตยสถาน และมีหลายๆ คําทียั่ งไมมีการบัญญัติอยางเปนทางการ คณะผูเขี  ยนจึงขออนุญาต บัญญัติศัพทขึนมาใช ้ ในการอธิบาย โดยมีขอจํากัดเพืออ ่ างอิงในหนังสือเลมนีเท ้ านัน้ ทังนี ้ สาเหตุ ้ หลักของขอชีแจงนี ้ มาจาก ้ การรวบรวมขอมูลของอุปกรณในระบบสมองกลฝงตัว และเทคโนโลยีหุนยนต  สําหรับการศึกษาเพือนํ ่ ามาเรียบเรียงเปนภาษาไทยนันทํ ้ าไดไมงายนัก ทางคณะ ผูเขี ยนตองทําการรวบรวมและทดลองเพือให ่ แนใจวา ความเขาใจในกระบวนการทํางานตางๆ นันมี ้ ความ คลาดเคลือนน ่ อยทีสุ่ ด เมือต ่ องทําการเรียบเรียงออกมาเปนภาษาไทย ศัพททางเทคนิคหลายคํามีความหมายทีทั่ บซอน กันมาก การบัญญัติศัพทจึงเกิดจากการปฏิบัติจริงรวมกับความหมายทางภาษาศาสตร ดังนันหากมี ้ ความ คลาดเคลือนหรื ่ อผิดพลาดเกิดขึน้ ทางคณะผูเขี  ยนขอนอมรับและหากไดรับคําอธิบายหรือชีแนะจากท ้ าน ผูรู จะได  ทําการชีแจงและปรั ้ บปรุงขอผิดพลาดทีอาจมี ่ เหลานันโดยเร็ ้ วทีสุ่ ด ทังนี ้ ้เพือให ่ การพัฒนาสื่อทางวิชาการ โดยเฉพาะอยางยิงกั ่ บความรูของเทคโนโลยีสมัยใหม สามารถดําเนินไปไดอยางตอเนือง ่ ภายใตการมีสวนรวมของผูรู ในทุ  กภาคสวน บริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด


4Robo-Creator : AT-BOT activity book

 บทนํา

แนะนํา Robo-Creator ชุดหุนยนต  อัตโนมัติควบคุมดวยโปรแกรมภาษา C/C++......5

บทที่ 1 AT-BOT หุนยนต  อัตโนมัติขับเคลือน ่ 4 ลอ................................................................7 บทที่ 2 การเตรียมการเครื่องมือสําหรับพัฒนาโปรแกรม ของหุนยนต  AT-BOT................................................................................................... 19 บทที่ 3 รูจั กกับ Wiring ซอฟตแวรพัฒนาโปรแกรมภาษา C/C++ สําหรับหุนยนต  AT-BOT..............................................................................................27 บทที่ 4 ไลบรารีสําหรับการพัฒนาโปรแกรมภาษา C/C++ ของหุนยนต  AT-BOT.............43 บทที่ 5 ทดสอบการควบคุมฮารดแวรของแผงวงจร Creator controller...............................57 บทที่ 6 ขับเคลือนหุ ่ นยนต  AT-BOT.........................................................................................83 บทที่ 7 AT-BOT กับการผานสิงกี ่ ดขวางดวยการสัมผัสหรือชน...............................................97 บทที่ 8 AT-BOT กับการเคลือนที ่ ตามเส ่ น.................................................................................111 บทที่ 9 AT-BOT กับการผานสิงกี ่ ดขวางแบบไมสัมผัส........................................................159 บทที่ 10 AT-BOT กับการขับเซอรโวมอเตอร...........................................................................167


Robo-Creator : AT-BOT ctivity book  5



    

Robo-Creator เปนชุดหุนยนต  อัตโนมัติเพือการศึ ่ กษาทีสามารถพั ่ ฒนาโปรแกรมควบคุมดวยภาษา C/C++ ใน แบบโอเพ นซอร สที่เขากันไดกับซอฟตแวรในโครงการพัฒนาระบบควบคุมขนาดเล็กเพื่อประยุกตใชงานดาน ซอฟตแวรและฮารดแวรทีชื่ อ่ Wiring (www.wiring.org.co) Robo-Creator มีบอรดควบคุมทีชื่ อว ่ า Creator controller ทีสามารถขั ่ บมอเตอรไฟตรงได 6 ตัว และเซอรโว มอเตอรอีก 6 ตัวพรอมกัน จัดไดวา เปนชุดหุนยนต  อัตโนมัติเพือการศึ ่ กษาขนาดกลางสําหรับเรียนรูการพั  ฒนาโปรแกรม ทีมี่ ความซับซอนเพิมขึ ่ น้ ตลอดจนการติดตอกับอุปกรณทีมี่ ความพิเศษมากขึน้ อาทิ โมดูลเข็มทิศอิเล็กทรอนิกส, ตัวตรวจ จับแสงอินฟราเรดแบบหลายทิศทาง และโมดูลกลองแบบอนุกรม ทังนี ้ เพื ้ อให ่ สามารถพัฒนาหุนยนต  เพือรองรั ่ บการ แขงขันฟุตบอลหุนยนต  ยุวชนโลก (World RoboCup Junior)







46 ADC6

45

ADC5

44

ADC4

C r e a t o r e > >> > > > > >

 

3

c o n t r o l l er R b o a r d USB DATA 2

ON

E2

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1 1



5

40 ADC0

START

41 ADC1

4



42 ADC2

KNOB

RESET



ADC7

SW1

49

SW2

50

48 0





43 ADC3

 

SERVO PORT BATTERY LEVEL 8

9 10 11 12 13 S





+ -







7.2-9V BATT.





14

PC6

15 PC7

MOTOR

 



 

 






6Robo-Creator : AT-BOT activity book

ในชุด Robo-Creator มีการจัดเตรียมไวอุปกรณเพือรองรั ่ บการดัดแปลงและสรางสรรคหุนยนตอัตโนมัติได หลากหลายแบบตามความตองการ ตามความคิดสรางสรรค และตามกิจกรรมการแขงขันทีต่ องการ จึงทําใหสามารถนํา หุนยนต  Robo-Creator นีมาใช ้ ในการเรียนรู, ทดลองและพัฒนาหุนยนต  อัตโนมัติแบบโปรแกรมไดตังแต ้ ขันพื ้ นฐาน ้ ไปจนถึงระดับทีมี่ ความซับซอนเพิมขึ ่ น้ รวมถึงนําไปใชในการแขงขันในระดับนานาชาติทีใช ่ กติกาสากลได ในชุดประกอบดวย บอรด ATX controller, ชุดเฟองขับมอเตอร 4 ตัว เปนรุน BO-1 อัตราทด 48:1, เซอรโว มอเตอรแบบมาตรฐาน 1 ตัว, แผงวงจรสวิตชสําหรับตรวจจับการชน (2 ชุด), แผงวงจรตรวจจับแสงสะทอนสําหรับ ตรวจจับพืนและเส ้ น (3 ชุด), โมดูลวัดระยะทางดวยแสงอินฟราเรด, ลอหนามพรอมแกนสวม (4 ตัว), ลอกลมพรอม ยาง (4 ชุด), ชุดประกอบลอสายพาน, แผนฐานแบบตางๆ, กะบะถาน AA 5 กอน, สายตอพอรต USB, หนังสือทดลอง และใชงานไมโครคอนโทรลเลอร ATmega128 ดวยโปรแกรมภาษา C/C++ กับซอฟตแวร Wiring, คูมื อ AT-BOT ทดลองและใชงานหุนยนต  อัตโนมัติขับเคลือน ่ 4 ลอ, แผนสนามกระดาษสําหรับทดสอบ และซีดีรอมบรรจุซอฟตแวร และตัวอยางโปรแกรม


Robo-Creator : AT-BOT activity book  7



     

AT-BOT (อานวา เอ-ที-บอต : All-Terrain mobile robot) เปนชุดหุนยนตอัตโนมัติที่ขับเคลือนด ่ วยมอเตอร ไฟตรงที่มีชุดเฟองทดในอัตรา 48:1 จํานวน 4 ตัวพรอมดวยลอยางแบบมีปุมเพื่อชวยใหการเคลื่อนทีผ่ านพื้นผิวที่ ขรุขระมีประสทิธิภาพมากขึน้ ทั้งยังสามารถเคลือนที ่ ขึ่ นทางลาดชั ้ นในระดับ 0 ถึง 25 องศาได และหากมีความ ตองการหยุดอยางกระทันหันเพื่อเปลียนทิ ่ ศทางการเคลือนที ่ ก็่ ทําได ทําให AT-BOT สามารถรองรับการทําภาระกิจ ทั้งในพื้นที่หรือสนามแขงขันที่เรียบ มีเสนสําหรับกําหนดทิศทางการเคลือนที ่ ่ หรือแบบขรุขระมีอุปสรรคกีดขวาง ได ทําใหนําไปใชในการแขงขันหุนยนต  ยุวชนโลกในประเภทหุนยนต  กูภั ยยุวชน (World RoboCup Junior - Rescue) ไดเปนอยางดี

การพัฒนาโปรแกรมของหุนยนต AT-BOT ใชภาษา C/C++ ในแบบโอเพนซอรสทีเข ่ ากันไดกับซอฟตแวร ในโครงการพั ฒนาระบบควบคุมขนาดเล็กเพื่ อประยุกตใช งานดานซอฟตแวรและฮาร ดแวรที่ ชื่อ Wiring (www.wiring.org.co) AT-BOT ใชบอรดควบคุมที่ชื่อ ATX ที่สามารถขับมอเตอรไฟตรงได 6 ตัว และเซอรโวมอเตอรอีก 6 ตัวพรอมกัน มีจุดตอตัวตรวจจับไดทั้งแบบอะนาลอก, ดิจิตอลพืนฐาน ้ และแบบใชการสื่อสารขอมูลผานระบบบัส 2 สายที่เรียกวา I2C และบัสอนุกรม UART มาตรฐาน ระบบขับเคลือนหลั ่ กเปนชุดเฟองขับมอเตอรไฟตรงพรอมลอแบบมีปุมจํ  านวน 4 ชุด จึงทําให AT-BOT เปน หุนยนต  อัตโนมัติแบบขับเคลือน ่ 4 ลอ มีกําลังขับสูงและเคลือนที ่ ได ่ เร็ว นับเปนการนําเสนอระบบขับเคลือนหุ ่ นยนต  ทีแตกต ่ างไปจากเดิมของหุนยนต  เพือการศึ ่ กษาในประเทศไทย AT-BOT เปนหนึงในกิ ่ จกรรมหุนยนต  ของ Robo-Creator ชุดหุนยนต  อัตโนมัติเพือการศึ ่ กษาแบบสรางสรรค


8 Robo-Creator : AT-BOT activity book

1.1 รายการอุปกรณที่ใชในหุนยนต  AT-BOT 1. แผงวงจรควบคุม ATX 2. สายตอพอรต USB แบบ mini-B 3. แผงวงจรตรวจจับแสงสะทอน 3 ชุด 4. แผงวงจรสวิตชตรวจจับการชน 2 ชุด 6. ชุดเฟองขับมอเตอรไฟตรงรุน BO-1 อัตราทด 48:1 พรอมตัวยึดและสายตอ จํานวน 4 ตัว 7. เซอรโวมอเตอรแบบมาตรฐาน จํานวน 1 ตัว 8. ลอหนาม (เปนลอยางแบบมีปุมหนามปลายมนยื่นออกมาจาก เสนผานศูนยกลาง 65 มิลลิเมตร กวาง 26 มิลลิเมตร พรอมขอตอสําหรับติดตั้งเขากับชุดเฟองขับมอเตอรไฟตรง BO-1 จํานวน 4 ชุด 9. กะบะถานขนาด AA 5 กอน แบบมีสายตอ 10. ชิ้นตอ/แทงตอพลาสติก 11. ชุดฉากโลหะ 12. ชุดนอตและสกรู 13. ซีดีรอมบรรจุซอฟตแวรและตัวอยางโปรแกรมการทดลอง 14. หนังสือทดลองและใชงานไมโครคอนโทรลเลอรดวยภาษา C/C++ กับซอฟตแวร Wiring 15. หนังสือ AT-BOT ทดลองและใชงานหุนยนตอัตโนมัติขับเคลือน ่ 4 ลอ (เลมนี)้ 16. สนามสําหรับทดสอบการเคลือนที ่ ตามเส ่ น


Robo-Creator : AT-BOT activity book  9

1.2 คุณสมบัติของแผงวงจรควบคุมหลัก ATX1.0 ในรูปที่ 1-1 แสดงสวนประกอบของแผงวงจรหลัก มีคุณสมบัติทางเทคนิคที่สําคัญดังนี้  ใชไมโครคอนโทรลเลอร 8 บิตเบอร ATmega1281 ของ Atmel ภายในมีโมดูลแปลงสัญญาณ อะนาลอกเปนดิจิตอลความละเอียด 10 บิต 8 ชอง มีหนวยความจําโปรแกรมแบบแฟลช 128 กิโลไบต โปรแกรม ใหมได 10,000 ครังด ้ วยกระบวนการโปรแกรมในวงจรหรือ ISP (In-System Programming) มีหนวยความจําขอมูล อีอีพรอม 4 กิโลไบต และหนวยความจําขอมูลแรม 4 กิโลไบต สัญญาณนาฬิกา 16MHz จากคริสตอล  กําหนดชือขาพอร ่ ตในการติดตออุปกรณตามขอกําหนดของฮารดแวร Wiring I/O มาตรฐาน ซึงกํ ่ าหนดชือขาพอร ่ ตเปนหมายเลขตั้งแต 0 ถึง 50  มีจุดตอพอรต 3 ขา (ขาไฟเลี้ยง, สัญญาณ และกราวด) แบบโปรแกรมไดจํานวน 11 จุด แบง เปนขาพอรตแบบดิจิตอลหรืออะนาลอก (กําหนดได) 7 จุด (พอรต 40 หรือ ADC0 ถึงพอรต 46 หรือ ADC6, จุดตอ ขาพอรตสําหรับบัสสือสารข ่ อมูล 2 สาย (TWI) 1 ชุด (2 จุดคือ พอรต 0-SDA และพอรต 1-SCL) และจุดตอบัสสือ่ สารขอมูลอนุกรม UART 1 ชุด (2 จุด ประกอบดวย พอรต 2-RX1 และพอรต 3-TX1) สําหรับจุดตอพอรต TWI และ UART สามารถกําหนดใหเปนขาพอรตอินพุตเอาตพุตดิจิตอลสําหรับงานทั่วไปได ้  จุดตอพอรตอินพุตอะนาลอก 7 จุด (ADC0 ถึง ADC6) รองรับแรงดันอะนาลอกอินพุตไดตังแต 0 ถึง +5V มีความละเอียดในการแปลงสัญญาณเปนขอมูลดิจิตอล 10 บิต ใหผลการทํางานในชวง 0 ถึง 1,023  มี ตัวตานทานปรั บคาไดตอกับอิ นพุตอะนาลอกชอง 7 (ADC7) สําหรับทดลองการทํางาน ของวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอลภายในชิปไมโครคอนโทรลเลอรได โดยไมตองตออุปกรณภายนอก

41 ADC1

40 ADC0

46 ADC6

45 ADC5

44 ADC4

5

42 ADC2

4

43 ADC3



C r e a t o r e > >> > > > > > 3

c o n t r o l l er R b o a r d ON TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

1

E2

KNOB

ADC7

SW1

49

SW2

50

  

48

0

RESET

SERVO PORT 9

BATTERY LEVEL

10 11 12 13 S

8

+

-

7.2-9V BATT.



    

USB DATA

2

     

START

   

   

14

PC6

15 PC7

MOTOR

       

รูปที่ 1-1 แสดงสวนประกอบหลักของแผงวงจรควบคุมหลัก ATX1.0

 


10 Robo-Creator : AT-BOT activity book

มีสวิตชกดติดปลอยดับ 2 ตัวพรอมตัวตานทานพูลอัปตอเขากับขาพอรต 49 และ 50 เพือทดสอบ ่ การอานคาอินพุตดิจิตอลอยางงาย  มี LED พรอมตอตัวตานทานจํากัดกระแสไฟฟาตอเขากับขาพอรต 48 เพื่อทดสอบการทํางาน ของพอรตเอาตพุตดิจิตอลอยางงาย  มีลําโพงเปยโซตอกับขาพอรต 4 สําหรับขับเสียง  มีโมดูล LCD 16 ตัวอักษร 2 บรรทัด สําหรับแสดงผลการทํางาน  มีซ็อกเก็ตสําหรับติดตั้งโมดูลเข็มทิศอิเล็กทรอนิกส HMC6352 ของ Honeywell ใชการสื่อสาร ผานบัส 2 สายตอตรงเขากับขาบัส TWI ของไมโครคอนโทรลเลอร ATmega128 และจุดตอ TWI บนแผงวงจร  มีจุดตอพอรตสื่อสารขอมูลอนุกรม UART 1 ชุด สําหรับติดตอกับอุปกรณอนุกรม อาทิ โมดูล กลอง CMUCAM1 และ 2, ZX-CCD หรือ CAM เปนตน  มีวงจรขับมอเตอรไฟตรง 6 ชอง พรอมไฟแสดงการทํางาน รองรับมอเตอรไฟตรงขนาด 4.5 ถึง 9V (ขึ้นกับไฟเลี้ยงของแผงวงจร แรงดันสูงสุดทีใช ่ ไดคือ +12V) ขับกระแสไฟฟาไดสูงสุด 3A และ 1.2A หากเปนการขับตอเนือง ่  มีจุดตอ RC เซอรโวมอเตอรขนาดเล็ก 6 ชอง รองรับเซอรโวมอเตอรขนาด 4.8 ถึง 7.5V  มี LED แสดงสภาวะไฟเลี้ยงของวงจรขับมอเตอรและเซอรโวมอเตอร ปกติจะติดสวาง และ ดับลงหากมอเตอรมีการลัดวงจร  มีวงจรตรวจสอบระดับไฟเลี้ยงของระบบแสดงผลดวย LED 5 ดวงโดย - LED สีเหลืองซายสุดแจงภาวะระดับแรงดันของแบตเตอรีอ่ อน (LOW BATT.) - LED สีเหลืองในตําแหนงถัดมา แจงระดับไฟเลี้ยงอินพุต 5.4V - LED สีเขียวในตําแหนงถัดมา แจงระดับไฟเลี้ยงอินพุต 5.8V - LED สีเขียวในตําแหนงถัดมา แจงระดับไฟเลี้ยงอินพุต 6.2V - LED สีแดงทางขวาสุด แจงระดับแรงดันไฟเลี้ยงอินพุตของแผงวงจรสูงกวา +7.5V ซึง่ อาจทําใหเซอรโวมอเตอรเสียหายได หากนํามาตอกับระบบ (อยางไรก็ตามเซอรโวมอเตอรบางรุน บางยีห่ อ สามารถ รับแรงดันไฟเลี้ยงสูงกวา +7.5V ขอใหตรวจสอบคุณสมบัติของเซอรโวมอเตอรกอนใชงาน)  ดาวนโหลดและสือสารข ่ อมูลกับคอมพิวเตอรผานพอรต USB มีไฟแสดงการทํางาน  มีสวิตชเลือกโหมดการทํางานในโหมดรันและโปรแกรม รวมถึงการทําหนาที่เปนสวิตชรีเซต  สามารถขยายพอรตผานจุดตอพอรตบัส 2 สายหรือ TWI โดยใชอุปกรณเพิ่มเติม ้ าน +6 ถึง +12V กระแสไฟฟา 1100mA (เปนอยางนอย หากมีการใชงานมอเตอร  ใชไฟเลียงในย ไมวาแบบใด 4 ตัว)  มีวงจรควบคุมแรงดันคงที่ +5V สําหรับไมโครคอนโทรลเลอร และควบคุมแรงดันคงที่ +6V สําหรับวงจรขับเซอรโวมอเตอร ทั้งนีเพื ้ ่อปองกันความเสียหายกรณีจายไฟเกินแกเซอรโวมอเตอร 


Robo-Creator : AT-BOT activity book  11

1.3 คุณสมบัติของอุปกรณเอาตพุต 1.3.1 ชุดเฟองขับมอเตอรไฟตรง เปนมอเตอรไฟตรงทีมี่ เฟองทดสําหรับเพิมแรงบิ ่ ด มีรูปรางหนาตาแสดงในรูปที่ 1-2 มีชือรุ ่ นว  า BO-1 คุณสมบัติ ทางเทคนิคทีสํ่ าคัญมีดังนี้ ้ าน +4.8 ถึง +9Vdc ตองการกระแสไฟฟา 130mA (ทีไฟเลี ่ ยง ้ +6V และไมมีโหลด)  ใชไฟเลียงในย  อัตราทด 48:1  ความเร็ว 250 รอบตอนาที (ที่ไฟเลียง ้ +6V และไมมีโหลด) ้ ก 30 กรัม  นําหนั  แรงบิด 0.5 กิโลกรัม-เซนติเมตร

เฟองสง (2) 9 ฟน เฟองสง (1) 8 ฟน

เฟองสง (4) 17 ฟน

เฟองสง (3) 17 ฟน

เฟองรับ (1) 36 ฟน

เฟองรับ (3) 28 ฟน เฟองรับ (4) 28 ฟน เฟองรับ (2) 36 ฟน

รูปที่ 1-2 ชุดเฟองขับมอเตอรไฟตรงรุน BO-1 ซึงใช ่ ในหุนยนต  AT-BOT


12 Robo-Creator : AT-BOT activity book

1.3.2 เซอรโวมอเตอรแบบมาตรฐาน มีสายตอใชงาน 3 เสนคือ สายสัญญาณ (S) สายไฟเลียง ้ (+V) และกราวด (G) ภายในเซอรโวมอเตอรมี วงจรควบคุมการหมุนติดตังอยู ้  ดังแสดงในรูปที่ 1-3 คุณสมบัติทางเทคนิคที่สําคัญมีดังนี้ ้ าน +4.8 ถึง +6Vdc  ตองการไฟเลียงในย  นําหนั ้ ก 45 กรัม  แรงบิด 3.40 กิโลกรัม-เซนติเมตร หรือ 47 ออนซ-นิ้ว  ขนาด (กวาง x ยาว x สูง) 40.5 x 20 x 38 มิลลิเมตร หรือ 1.60 x 0.79 x 1.50 นิว ้

(ก)

(ข)

(ค)

รูปที่ 1-3 แสดงรูปรางและสวนประกอบของเซอรโวมอเตอรแบบมาตรฐาน (ก) รูปรางภายนอก (ข) ระบบเฟองทดภายใน (ค) แผงวงจรอิเล็กทรอนิกสทีใช ่ ควบคุม

1.4 คุณสมบัติของชุดอุปกรณตรวจจับสัญญาณ 1.4.1 แผงวงจรสวิตช มีวงจรแสดงในรูปที่ 1-4 ประกอบดวยสวิตชพรอมไฟแสดงผล ใหเอาตพุตเปนลอจิก “0” เมือมี ่ การกดสวิตช ที่ชองเอาตพุต ถากดสวิตชจะสงลอจิก “0” ไฟสีแดงติด ถาไมมีการกด LED ดับ ลอจิกที่ไดเปนลอจิก “1”

LED1

+V R2 10k

R1 510

S1 Switch

R3 220

DATA

GND

รูปที่ 1-4 หนาตาและวงจรของแผงวงจรสวิตชทีใช ่ ในหุนยนต  AT-BOT


Robo-Creator : AT-BOT activity book  13

จุดตอสัญญาณ

LED LED1

+V OUT

SFH310

GND

10k

220

ตัวตรวจจับแสงสะทอน

รูปที1-12 ่ หนาตาและวงจรของแผงวงจรตรวจจับแสงสะทอนทีใช ่ ในชุดหุนยนต  AT-BOT

1.4.2 แผงวงจรตรวจจับแสงสะทอน : ZX-03R มีวงจรและหนาตาของแผงวงจรแสดงในรูปที่ 1-5 เปนแผงวงจรทีใช ่ ในการตรวจสอบการสะทอนของแสงจาก พื้นผิวหรือจากเสน เมือจ ่ ายไฟเลียง ้ LED สีแดงแบบความสวางสูงหรือซูเปอรไบรตจะติดสวางขับแสงสีแดงออกมาตลอดเวลา สวนตัวรับแสงเปนโฟโตทรานซิสเตอรเบอร SFH310 จะไดรับแสงสีแดงจากการสะทอนกลับจากวัตถุหรือพื้นผิว โดยปริมาณของแสงที่ไดรับจะมากหรือนอยขึนอยู ้ กั บวา มีวัตถุมากีดขวางหรือไม และวัตถุนั้นมีความสามารถใน การสะทอนแสงสีแดงไดดีเพียงไร ซึงขึ ่ นกั ้ บลักษณะพืนผิ ้ วและสีของวัตถุ โดยวัตถุสีขาวผิวเรียบจะสะทอนแสงไดดี ทําใหตัวรับแสงอินฟราเรดไดรับแสงสะทอนมาก สงผลใหแรงดันทีเอาต ่ พุตของวงจรสูงตามไปดวย ในขณะทีวั่ ตถุสี ดําสะทอนแสงไดนอย ทําใหตัวรับอินฟราเรดสงแรงดันออกมาตํา่ ดวยคุณสมบัติดังกลาวจึงนิยมนําแผงวงจรตรวจ จับแสงสะทอนนี้มาใชในการตรวจจับพื้นหรือเสน โดยตองติดตังไว ้ ดานลางของโครงหุนยนต  ดวยการใชแสงสีแดงเปนแสงหลักในการตรวจจับ ทําใหนําตัวตรวจจับแบบนีไปใช ้ วัดความแตกตางของ สีบนพื้นผิวที่พิมพดวยหมึกกันแสงอินฟราเรดหรือหมึกกันรังสีอัลตราไวโอเล็ตได เนืองจากแผงวงจรตรวจจั ่ บแสงสะทอนอินฟราเรด ZX-03R ใหผลการทํางานเปนแรงดันไฟตรง ดังนันใน ้ การใชงานกับหุ นยนต QuadMover จึงตองตอสัญญาณเขากับชองอินพุตอะนาลอกของแผงวงจรหลัก Creator controller 7 ชองคือ ทีช่ อง ADC0 ถึง ADC6 จากนันใช ้ ความรูจากการอ  านคาสัญญาณอะนาลอกเพืออ ่ านคาจากแผง วงจรตรวจจับแสงสะทอนและนําไปใชในการตรวจจับเสนตอไป

1.4.3 GP2D120 โมดูลตรวจจับระยะทางแบบอินฟราเรด GP2D120 เปนโมดูลตรวจจับระยะทางแบบอินฟราเรดมีขาตอใชงาน 3 ขาคือ ขาตอไฟเลียง ้ (Vcc), ขากราวด (GND) และขาแรงดันเอาตพุต (Vout) การอานคาแรงดันจาก GP2D120 จะตองรอใหพนชวงเตรียมความพรอมของ โมดูลกอน ซึงใช ่ เวลาประมาณ 32.7 ถึง 52.9 มิลลิวินาที (1 มิลลิวินาทีเทากับ 0.001 วินาที) ดังนันในการอ ้ านคาแรง ดันจึงควรรอใหพนชวงเวลาดังกลาวไปกอน ดังแสดงขอมูลเบืองต ้ นในรูปที่ 1-6 คาแรงดันเอาตพุตของ GP2D120 ที่ระยะทาง 30 เซนติเมตรที่ไฟเลียง ้ +5V อยูในชวง 0.25 ถึง 0.55V โดย คากลางคือ 0.4V ชวงของการเปลี่ยนแปลงแรงดันเอาตพุตทีระยะทาง ่ 4 เซนติเมตรคือ 2.25V 0.3V


14 Robo-Creator : AT-BOT activity book

LED อินฟราเรดตัวสง

กราฟแสดงการทํางานของ GP2D120

ตัวรับแสงอินฟราเรด

แรงดันเอาตพุต (V) 2.8

GP2D12 GP2D120

2.4 Vout

GND

Vcc

2.0 1.6

ไฟเลี้ยง

1.2 0.8

38.3ฑ9.6 มิลลิวินาที

0.4

การวัดระยะหาง แรงดันเอาตพุต

วัดครั้งที่ 1

วัดครั้งที่ 2

ไมแนนอน

วัดครั้งที่ n

เอาตพุตครั้งที่ 1 เอาตพุตครั้งที่ 2

0

หลักการทํางานของโมดูลวัดระยะทางดวยแสงอินฟราเรด โมดูลวัดระยะทางดวยแสงอินฟราเรด จะสงแสงอินฟราเรดจาก ตัวสงไปกระทบวัตถุผานเลนสนูนเพือโฟกั ่ สแสงใหมีความเขมแสงไปยัง จุดใดจุดหนึง่ เมือแสงไปกระทบวั ่ ตถุจะเกิดการกระเจิงของแสงไปในทิศ ทางตาง ๆ แสงสวนหนึงจะกระเจิ ่ งไปยังภาครับ โดยมีเลนสภาครับทํา หนาทีรวมแสงและกํ ่ าหนดจุดตกกระทบ แสงจะถูกสงผานไปยังโฟโต ทรานซิสเตอรจํานวนมากทีต่ อเรียงตัวกันเปนสวนรับแสง หรืออะเรยรับ แสง ตําแหนงทีแสงตกกระทบนี ่ สามารถนํ ้ ามาคํานวณหาระยะทาง (L) จากภาคสงไปยังวัตถุได โดยใชสูตรหาสามเหลียมคล ่ ายดังนี้ L F  A X

ดังนันค ้ า L จะมีคาเทากับ L

4

8

12

16

20

24

28

32

ระยะหางจากวัต ถุที่ตรวจจับ (cm)

เอาตพุตครั้งที่ n

5 มิลลิว ินาที

0

* ใชกระดาษเทาขาวรุน R-27 ของ Kodak ซึ่ง ดานขาวมีอัตราการสะทอนแสง 90% เปน วัตถุสําหรับสะทอนแสงเพื่อวัดระยะทาง วัตถุ

L A

F สวนรับแสง

LED อินฟราเรด ตัวสง GP2D120

X

FA X

โดยค าที่ วั ดได จากโฟโต ทรานซิสเตอรจะถูกสงไปยังวงจร ประมวลผลสัญญาณ กอนจะเปลียนค ่ าเปนระดับแรงดัน ซึงให ่ ผลการ เปลี่ยนแปลงแรงดันตามระยะทางที่ตรวจวัดได

รูปที่ 1-13 แสดงรูปราง การจัดขา ไดอะแกรมเวลาจังหวะการทํางาน และกราฟแสดงการทํางานของ GP2D120


Robo-Creator : AT-BOT activity book  15

1.5 ขอมูลของอุปกรณทางกลที่ใชในหุนยนต  AT-BOT 1.5.1 ลอพลาสติกสําหรับชุดเฟองขับมอเตอรไฟตรง BO-1 และยาง เปนลอกลม มีเสนผานศูนยกลาง 65 มิลลิเมตร สามารถสวมเขากับแกนของชุดเฟองขับมอเตอร BO-1 ได ทันทีโดยไมตองดัดแปลงเพิ่มเติม ขันยึดดวยสกรูเกลียวปลอย 2 มิลลิเมตร สวนยางขอบลอที่ใชรวมดวยผลิตจาก ยางพารา ผิวมีดอกยางเพื่อชวยเพิ่มสมรรถนะในการเกาะพื้นผิว

1.5.2 ลอยางแบบมีหนาม เปนลอยางที่มีลักษณะพิเศษ ผิวลอเปนยางที่มีปุมสามเหลี่ยมปลายมนคลายหนามยื่นออกมา เพื่อชวยใน การยึดเกาะและเคลือนที ่ ผ่ านพื้นผิวทังแบบผิ ้ วเรียบ, ผิวขรุขระ, เนิน หรือลูกระนาดที่มีความชันไมเกิน 20 องศา ในการประกอบลอยางแบบนีเข ้ ากับแกนหมุนของชุดเฟองขับมอเตอรรุน BO-1 จะตองใชขอตอพิเศษชวย แลวยึดดวยสกรูและนอต 3 มม.

1.5.3 ชุดประกอบลอสายพาน เปนชุดสายพานทีนํ่ ามาตอกันเพือสร ่ างเปนลอสายพานหรือลอตีนตะขาบไดหลายขนาด เขากันไดดีกับชุด ประกอบฐาน ในชุดประกอบดวย สายพาน 30 ขอตอ (2 ชิ้น), 10 ขอตอ (4 ชิ้น), 8 ขอตอ (4 ชิ้น), ลอขับ (2 ตัว), ลอประคองสายพานใหญ (2 ตัว), ลอประคองสายพานกลาง (8 ตัว), ลอประคองสายพานเล็ก (10 ตัว), ดุมลอ (12 ตัว), แกนโลหะเสนผานศูนยกลาง 3 มิลลิเมตร ยาว 110 มิลลิเมตร (4 อัน) และชุดสกรูที่จําเปน


16 Robo-Creator : AT-BOT activity book

1.5.4 ชุดประกอบฐาน เป นชุ ดอุ ปกรณสําหรับประกอบเปนฐานหรือโครงตัวถังเอนกประสงค ในชุดประกอบดวยแผนฐาน พลาสติกที่ผลิตจากวัสดุ ABS 2 แบบ แบบแรกเรียกกวาแผนฐาน AT-plate สีดํา อีกแบบหนึงเป ่ นแผนฐานขนาด 160x60 มิลลิเมตร มีรูขนาด 3 มิลลิเมตรทีมี่ ระยะหางกัน 5 มิลลิเมตร รวม 341 รู, ฉากยึดแกนลอยาว (2 ตัว), ฉากยึด แกนลอสัน้ (2 ตัว) และชุดสกรูที่จําเปนสําหรับการขันยึด

1.5.5 แผนกริด เปนแผนพลาสติกที่ผลิตจากวัสดุ ABS ขนาด 80x60 มิลลิเมตร และ 80x80 มิลลิเมตร อยางละ 1 แผน ใน แตละมีรูขนาด 3 มิลลิเมตรที่มีระยะหางกัน 5 มิลลิเมตร

1.5.6 ชินต ้ อพลาสติก เปนชินส ้ วนพลาสติกแข็งเหนียว มี 3 แบบคือ ชิ้นตอแนวตรง, ชิ้นตอมุมฉาก และชิ้นตอมุมปาน สามารถ เสียบตอกันได ใชตอกันเปนโครงสรางหรือตกแตง บรรจุ 3 แบบ แบบละ 5 สี สีละ 4 ชิ้น รวม 60 ชิ้นตอชุด


Robo-Creator : AT-BOT activity book  17

1.5.7 แทงตอพลาสติก เปนชินส ้ วนพลาสติกแข็งเหนียวในแตละชินจะมี ้ รูขนาด 3 มิลลิเมตรสําหรับรอยสกรูเพือติ ่ ดตังหรื ้ อตอกับ ชิ้นสวนโครงสรางอื่นๆ ที่ปลายของแทงตอสามารถเสียบเขากับชิ้นตอพลาสติกได ในชุดมี 3 ขนาด คือ 3, 5 และ 12 รู แตละขนาดมี 4 ชิ้น

1.5.8 ฉากโลหะ เปนชินส ้ วนโลหะกวาง 7.5 มิลลิเมตรที่ดัดเปนมุมฉาก ในแตชิ้นจะมีรูขนาด 3 มิลลิเมตรสําหรับรอยสกรู เพื่อติดตั้งหรือตอกับชิ้นสวนโครงสรางอื่นๆ ในชุดมี 3 ขนาด คือ 1x2 รู, 2x2 รู และ 2x5 รู แตละขนาดมี 4 ชิ้น

1.5.9 สกรูและนอต เปนอุปกรณสําหรับยึดชินส ้ วนตางๆ เขาดวยกัน ประกอบดวยสกรูเกลียวปลอย 2 มิลลิเมตร (4 ตัว), 3x8 มิลลิเมตร (4 ตัว), 3x10 มิลลิเมตร (30 ตัว), 3x15 มิลลิเมตร (4 ตัว), 3x40 มิลลิเมตร (4 ตัว), สกรูหัวตัด 3x8 มิลลิเมตร (4 ตัว), สกรูมือหมุน 3x5 มิลลิเมตร (4 ตัว), สกรูมือหมุน 3x20 มิลลิเมตร (2 ตัว) และนอต 3 มิลลิเมตร (30 ตัว)

1.5.10 เสารองโลหะ เปนอุปกรณชวยยึดชินส ้ วนตางๆ และรองรับแผงวงจร, แผนกริดและแผนฐาน ทําจากโลหะชุบนิเกิลกันสนิม มีลักษณะเปนแทงทรงกระบอกยาว 25 มิลลิเมตร ภายในมีรูเกลียวตลอดตัวสําหรับขันสกรู 3 มิลลิเมตร ในชุดมี 3 ตัว


18 Robo-Creator : AT-BOT activity book

1.5.11 เสารองพลาสติก เปนอุปกรณชวยยึดชินส ้ วนตางๆ และประคองรองรับแผงวงจร, แผนกริดและแผนฐาน ทําจากพลาสติก ABS เหนียว สามารถตัดได มีลักษณะเปนแทงทรงกระบอก ภายในมีรูตลอดตัวสําหรับรอยสกรู 3 มิลลิเมตร ในชุดประกอบ ดวย เสารอง 3 มิลลิเมตร (4 ตัว), 10 มิลลิเมตร (4 ตัว), 15 มิลลิเมตร (4 ตัว) และ 25 มิลลิเมตร (4 ตัว)

1.5.12 กะบะถาน ใชบรรจุแบตเตอรี่ AA จํานวน 5 กอน มีสายตอขัวบวกและขั ้ วลบสํ ้ าหรับตอกับแผงวงจรควบคุมหลักไดทันที

1.5.13 สาย JST3AA-8 : สายเชื่อมตอระหวางแผงวงจร สาย JST3AA-8 ใชเชื่อมตอระหวางแผงวงจรควบคุม ATX กับแผงวงจรตรวจจับและแผงวงจรอุปกรณ ตางๆ เปนสายแพ 3 เสน ยาว 8 นิว้ ปลายสายทั้งดานติดตั้งคอนเน็กเตอรแบบ JST 3 ขา ตัวเมีย ระยะหางระหวาง ขา 2 มิลลิเมตร มีการจัดขาดังนี้ ระยะหางระหวางขา 2 มม. GND S +5V

ระยะหางระหวางขา 2 มม.


Robo-Creator : AT-BOT activity book  19



      ชุดหุนยนต Robo-Creator ในสวนของหุนยนต AT-BOT รองรับโปรแกรมควบคุมการทํางานทีพั่ ฒนาจาก โปรแกรมภาษาแอสเซมบลี เบสิก และ C ไดทั้งหมด สําหรับที่นีจะใช ้ โปรแกรมภาษา C/C++ ดวยซอฟตแวรแบบ โอเพนซอรสชือ่ Wiring ซึงเป ่ นชือของโครงการพั ่ ฒนาระบบควบคุมขนาดเล็ก เพือประยุ ่ กตใชงานดานซอฟตแวร และฮารดแวรเขาดวยกัน โดยมุงเน  นการนําไปใชอยางเปนรูปธรรม รวมถึงการนําอุปกรณและวงจรอิเล็กทรอนิกสมา ตอรวมดวยใหระบบทํางานตามคําสังที ่ เขี ่ ยนเอาไวอยางถูกตอง เรียกโดยรวมวาเปน Physical Computing หรือระบบ คอมพิวเตอรทีเน ่ นเกียวกั ่ บการเชือมสั ่ ญญาณทางกายภาพ เชน ตออุปกรณตรวจจับภายนอกหรือควบคุมการแสดงผล หลอดไฟ แสง เสียง เปนตน เว็บไซตอยางเปนทางการของโครงการ Wiring นีคื้ อ www.wiring.org.co ทีเวบไซต ่ จะมีขอมูลทังฮาร ้ ดแวรและ ซอฟตแวรใหดาวนโหลดไดโดยไมเสียคาใชจาย ทังยั ้ งเปนโครงการแบบโอเพนซอรสเพือเป ่ ดโอกาสใหนักพัฒนาเขา รวมโครงการและตอยอดโครงการไดอยางอิสระ ผูกอตั้งโครงการ Wiring คือ เฮอรนันโด บาราแกน (Hernando Barragan) แหงภาควิชาออกแบบและ สถาปตยกรรม (Architecture and Design School) ของมหาวิทยาลัย Universidad de Los Andes ประเทศโคลัมเบีย มีการนําไปใชในการเรียนการสอนครังแรกที ้ ่ สถาบันออกแบบปฏิสัมพันธ Ivrea (Interaction Design Institute Ivrea) ในประเทศอิตาลี และปจจุบันโครงการ Wiring นียั้ งไดรับการพัฒนาอยางตอเนืองในมหาวิ ่ ทยาลัย Universidad de Los Andes ในประเทศโคลัมเบีย

2.1 ระบบปฏิบัติการที่รองรับ ซอฟตแวรสําหรับพัฒนาโปรแกรมในโครงการ Wiring นีคื้ อ Wiring Development Environment หรือ บางครังเรี ้ ยกวา Wiring IDE สามารถทํางานไดกับระบบปฏิบัติการหรือแพล็ตฟอรม (platform) ดังนี้ 

Mac OS X 10.4 (ทั้งรุนทีใช ่ ซีพีพียูเพาเวอรพีซีและอินเทล)

วินโดวส XP, วินโดวสวิสตา และ 7 (ไมสนับสนุนวินโดวส ME, 98SE และ 95)

Linux ทัง้ Fedora Core และ Debian (รวมถึง Ubuntu ดวย)

แพล็ตฟอรมอืนๆ ่ ทีสนั ่ บสนุนการทํางานของ Java 1.4 ขึนไป ้


20Robo-Creator : AT-BOT activity book

2.2 ฮารดแวรของ Wiring ฮารดแวรหลักของโครงการ Wiring คือ บอรด Wiring I/O ซึงเป ่ นแผงวงจรขนาดเล็กทีมี่ ไมโครคอนโทรลเลอร เบอร ATmega128 เปนหัวใจหลักในการควบคุมการทํางาน โดยตัวควบคุมหลักหรือไมโครคอนโทรลเลอรจะไดรับการ โปรแกรมผานทางพอรต USB ดวยซอฟตแวร Wiring IDE มีจุดตอเพือรั ่ บสัญญาณจากตัวตรวจจับภายนอกทังแบบ ้ อะนาลอกและดิจิตอลเพือช ่ วยใหแผงวงจรสามารถรับขอมูลจากสิ่งแวดลอม เชน แสง, อุณหภูมิ, ระยะหางจากวัตถุของ ตัวตรวจจับ เปนตน นอกจากนันยั ้ งมีจุดตอเพือส ่ งสัญญาณออกไปควบคุมอุปกรณภายนอก อาทิ ไดโอดเปลงแสง ลําโพง เซอรโวมอเตอร และโมดูลแสดงผลแบบผลึกเหลวหรือ LCD เปนตน สําหรับในชุดหุนยนต  Robo-Creator ไดจัดเตรียมฮารดแวรของแผงวงจรควบคุมใหเขากันไดกับฮารดแวรของ Wiring และระบบซอฟตแวรในโครงการ Wiring ทําใหสามารถพัฒนาโปรแกรมไดอยางสะดวก

2.3 แนะนําซอฟตแวร Wiring 1.0 Wiring1.0 เป นซอฟตแวรสําหรับพัฒนาโปรแกรมภาษา C/C++ เพื่อสรางโปรแกรมควบคุมไมโคร คอนโทรลเลอร ATmega1281 บนฮารดแวร Wiring I/O และนํามาใชในหุนยนต AT-BOT ในชุด Robo-Creator ดวย โดยบรรจุเครื่องมือที่ใชในการพัฒนาโปรแกรมไวอยางครบถวนในรูปแบบของ IDE (Integrated Development Environment) ไมวาจะเปนเท็กซเอดิเตอรสําหรับพิมพโคดโปรแกรม, C คอมไพเลอร, สวนของการดาวนโหลดโปรแกรม และหนาตาง Serial monitor สําหรับรับสงขอมูลอนุกรมกับหุนยนต  AT-BOT โปรแกรม Wiring ถูกออกแบบมาใหใชงาย และภาษาทีใช ่ ในการเขียนโปรแกรมคือ ภาษา C/C++ สามารถทํางานบนระบบปฏิบัติการวินโดวส XP ขึนไป, ้ Linux และ MAC OS X โดยมีไฟลติดตังสํ ้ าหรับแตละแพลตฟอรมแยกจากกัน

2.3.1 การติดตั้งซอฟตแวร (1) นําแผนซีดีรอมที่จัดมาพรอมกับชุดหุนยนต  Robo-Creator ใสลงในซีดีรอมไดรฟ แลวเลือกคลิกที่ไฟล Wiring1000_RoboCreatorR1_Setup.exe (ตัวเลขของไฟลติดตังอาจเปลี ้ ยนแปลงได ่ ) จะปรากฏหนาตางตอนรับสูการ  ติดตังซอฟต ้ แวร Wiring ดังรูป


Robo-Creator : AT-BOT activity book  21

(2) จากนันคลิ ้ กตอบตกลงในแตละขันตอนของการติ ้ ดตังเหมื ้ อนกับการติดตังแอปพลิ ้ เคชันอื ่ นๆ ่ ของวินโดวส จนเสร็จสิน้ (3) ในการติดตังซอฟต ้ แวร Wiring1.0 โดยใชซีดีรอมทีมากั ่ บชุดหุนยนต  Robo-Cerator จะเปนการติดตังทั ้ ง้ ซอฟตแวร Wiring1.0 และไดรเวอร USB สําหรับติดตอกับแผงวงจรควบคุม ATX ดวยในคราวเดียว ้ หนึงหน ่ าตาง (4) ทดสอบเปดโปรแกรมโดยเลือกทีเมนู ่ Start  All Programs  Wiring  Wiring จากนันครู ของซอฟตแวร Wiring IDE จะปรากฏขึน้

จากนีสามารถใช ้ งานซอฟตแวร Wiring IDE ในการพัฒนาโปรแกรมสําหรับหุนยนต  AT-BOT ไดแลว


22Robo-Creator : AT-BOT activity book



42 ADC2

41 ADC1

40 ADC0

46 ADC6

45 ADC5

44 ADC4

4

43 ADC3

5



4

START

1

R o b o - C r e a to r > > > > 3

> o R u n n i n g. . . o a r d 2

USB DATA

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

1

E2

SW1

49

SW2

50

48

0

ADC7

SERVO PORT 9

BATTERY LEVEL

10 11 12 13 S

8

+

-



KNOB

RESET

7.2-9V BATT.

2

3

14

PC6

15 PC7

MOTOR



รูปที่ 2-1 ขันตอนการเตรี ้ ยมการสําหรับการตรวจสอบตําแหนงพอรตอนุกรมเสมือนของหุนยนต  AT-BOT

2.3.2 การตรวจสอบตําแหนงของพอรตอนุกรมเสมือน หรือ USB Serial port สําหรับหุนยนต  AT-BOT (1) เสียบสาย USB เชือมต ่ อระหวางแผงวงจรควบคุม ATX กับพอรต USB ของคอมพิวเตอร เปดสวิตชเพือจ ่ าย ไฟ รอจนกระทังไฟสี ่ นําเงิ ้ นทีตํ่ าแหนง USB บนแผงวงจรควบคุมติดสวาง ดังรูปที่ 2-1 (2) คลิกทีปุ่ ม Start แลวเลือกไปที่ Control Panel (3) จากนันดั ้ บเบิลคลิกเลือกที่ System (4) เลือกไปทีแท็ ่ ป Hardware แลวคลิกที่ Device Manager


Robo-Creator : AT-BOT activity book  23

(5) ตรวจสอบรายการฮารดแวรทีหั่ วขอ Port จะพบ USB Serial port ใหดูวามีการเลือกตําแหนงของพอรต อนุกรม USB Serial port ไวที่ตําแหนงใด ปกติจะเปน COM3 ขึนไป ้ ใหใชคาของตําแหนงของพอรตอนุกรมนีใน ้ การกําหนดการเชือมต ่ อกับโปรแกรมตอไป ตามรูปตัวอยางจะเปน COM10


24Robo-Creator : AT-BOT activity book

2.3.3 การเชือมต ่ อหุนยนต  AT-BOT กับ Wiring IDE หลังจากทราบถึงตําแหนงของพอรตอนุกรมเสมือนทีสร ่ างขึนผ ้ านพอรต USB ของหุนยนต  AT-BOT ในลําดับ ตอไปเปนการเชือมต ่ อเขากับซอฟตแวร Wiring IDE (1) เปดโปรแกรม Wiring IDE รอสักครูหนึง่ หนาตางหลักของ Wiring IDE จะปรากฏขึน้ ในการเปดใช งาน Wiring IDE ในครั้งแรกอาจใชเวลาพอสมควร (ขึ้นอยูกั บคอมพิวเตอรแตละเครื่อง) ทั้งนีเนื ้ องจากต ่ องมีการ กําหนดคาและเตรียมระบบ กอปรกับ Wiring IDE ตองทํางานรวมกับ Java runtime ดวย ทําใหตองใชเวลาจัดการระบบ (2) เลือกฮารดแวรที่ใช โดยเลือกเมนู Tools  Board  INEX  Robo-Creator R1 -> ATmega1281 @16MHz

(3) เลือกพอรตสําหรับการติดตอ โดยไปที่เมนู Tools  Serial Port เลือกตําแหนงของพอรตอนุกรมทีใช ่ ในการเชือมต ่ อกับแผงวงจรควบคุมของหุนยนต  AT-BOT ในทีนี่ คื้ อ COM4

ขันตอนนี ้ ควรทํ ้ าทุกครังที ้ เชื ่ อมต ่ อหุนยนต  AT-BOT กับพอรต USB ของคอมพิวเตอรใหม เพียงเทานีหุ้ นยนต  AT-BOT พรอมสําหรับการติดตอกับซอฟตแวร Wiring IDE แลว


Robo-Creator : AT-BOT activity book  25

Note * Integrated development environment (IDE) คือ ลักษณะของซอฟตแวรทีรวบรวมเครื ่ องมื ่ อทีใช ่ ในการพัฒนา โปรแกรมเอาไวภายใตหนาตางหลักในรูปแบบของกราฟกทีสามารถสื ่ อสารกั ่ บผูใช  งานไดอยางสะดวก (หรือเรียกวา GUI : Graphic User Interface) โดยสามารถเขาถึงหรือเรียกใชเครื่องมือเหลานันจากหน ้ าตางหลักของโปรแกรม เฟรมแวร (firmware) ในทีนี่ คื้ อ โปรแกรมควบคุมขนาดเล็กทีทํ่ าหนาทีในการเขี ่ ยนหนวยความจําโปรแกรมของไมโคร คอนโทรลเลอร ATmega128 จะเรียกการทํางานในลักษณะนีว้ า บูตโหลดเดอร (bootloader) ทังนี ้ เพื ้ อช ่ วยใหผูใช  งานสามารถดาวนโหลดโปรแกรมลงในหนวยความจําของไมโครคอนโทรลเลอรไดโดยไมตองใชเครืองโปรแกรมภายนอก ่ การเลือกเวอรชันของเฟรมแวรในซอฟตแวร Wiring เปนการเลือกรูปแบบการสือสารข ่ อมูลหรือโปรโตคอลทีใช ่ ในการ สือสารข ่ อมูล ไมเกียวข ่ องกับคุณสมบัติทางฮารดแวร, การทํางานหรือความสามารถของบอรดแตอยางใด บูตโหลดเดอร (boot loader) เปนโคดหรือโปรแกรมขนาดเล็กที่บรรจุลงในหนวยความจําโปรแกรมเพื่อทําการ โปรแกรมหรือเขียนขอมูลของไฟล .hex ลงในหนวยความจําโปรแกรมและขอมูลภายในไมโครคอนโทรลเลอร ATmega128 เอง ผานทางพอรตสื่อสารขอมูลอนุกรม USART ของตัวไมโครคอนโทรลเลอร ซึงการโปรแกรมบู ่ ต โหลดเดอรลงในหนวยความจําโปรแกรมจะตองใชกระบวนการโปรแกรมผานทางพอรต ISP โดยใชเครืองโปรแกรม ่ ภายนอก หลังจากนันจะสามารถโปรแกรมไมโครคอนโทรลเลอร ้ ไดโดยตอกับพอรตอนุกรมโดยตรงและไมตองใชเครือง ่ โปรแกรมภายนอกใดๆ อีก โดยบูตโหลดเดอรทีใช ่ ในแผงวงจรควบคุมหลัก ATX ของชุดหุนยนต Robo-Creator ทุกกิจกรรม จะใชรูปแบบสือสารตามข ่ อกําหนดของ STK500 Version 2


26Robo-Creator : AT-BOT activity book


Robo-Creator : AT-BOT activity book  27



     

ในบทนีนํ้ าเสนอขอมูลในขันต ้ นของ Wiring ซึงเป ่ นเครืองมื ่ อทางซอฟตแวรสําหรับพัฒนาการทํางานของ หุนยนต  AT-BOT หนึงในกิ ่ จกรรมการสรางหุนยนต  ในชุด Robo-Creator สําหรับรายละเอียดของโครงสรางโปรแกรม ภาษา C/C++ ที่ Wiring รองรับสามารถอานไดจากหนังสือทดลองและใชงานไมโครคอนโทรลเลอร ATmega128 ดวย โปรแกรมภาษา C/C++ กับซอฟตแวร Wiring ซึงได ่ จัดมาพรอมกันกับชุดหุนยนต  Robo-Creator แลว

3.1 สวนประกอบของ Wiring IDE Wiring IDE ประกอบไปดวย 2 สวนที่สําคัญคือ เท็กซเอดิเตอร (text editor) และ ตัวแปลภาษา C (C compiler) ดานเครืองมื ่ อหรือปุมคํ  าสังที ่ ช่ วยในการพัฒนาโปรแกรมก็มีหลากหลายสามารถสรุปไดดังรูปที่ 3-1

รูปที่ 3-1 หนาตางหลักของซอฟตแวร Wiring IDE ทีใช ่ ในการพัฒนาโปรแกรม


28Robo-Creator : AT-BOT activity book

3.1.1 แถบเมนูคําสั่ง : Menu bar ประกอบดวย File, Edit, Sketch, Tools และ Help menu จะมีผลกับไฟลงานที่ทําอยูป จจุบันเทานัน้

3.1.1.1 เมนู File

New (Ctrl+N) : สรางไฟลใหม ซึงในซอฟต ่ แวร Wiring จะเรียกวา สเก็ตช (sketch) โดยจะถูกตังชื ้ อเป ่ นวันที่ ปจจุบันในรูปแบบ

 sketch_YYMMDDa เชน sketch_080407a หรือคลิกปุม

Open (Ctrl+O) : เลือกเปดไฟลสเก็ตช หรือคลิกปุม

บนแถบเครืองมื ่ อก็ได

บนแถบเครืองมื ่ อก็ได

Close (Ctrl+W) : เลือกปดไฟลสเก็ตช Save (Ctrl+S) : บันทึกไฟลสเก็ตชทีเป ่ ดอยูในชื  อเดิ ่ ม ทํางานเหมือนกับการคลิกทีปุ่ ม

บนแถบเครืองมื ่ อ

Save as... (Ctrl+Shift+O) : บันทึกไฟลสเก็ตชที่เปดอยูในชื  อใหม ่ ไฟลเดิมจะไมหายไป Upload to Wiring hardware (Ctrl+U) : สงขอมูลของไฟลสเก็ตชในปจจุบันไปยังฮารดแวร Wiring I/O ปกติแลวการทํางานในลักษณะนีมั้ กจะเรียกวา ดาวนโหลด (donwload) แตสําหรับในซอฟตแวร Wiring จะเรียก บนแถบเครืองมื ่ อ กระบวนการทํางานนีว้ า การอัปโหลด (upload) ทํางานเหมือนกับการคลิกทีปุ่ ม

Preferences : ปรับแตงการทํางานของ Wiring IDE ้ Quit (Ctrl+Q) : ออกจากโปรแกรม Wiring และปดหนาตางของโปรแกรม Wiring ทังหมด


Robo-Creator : AT-BOT activity book  29

3.1.1.2 เมนู Edit เปนเมนูทีบรรจุ ่ คําสังต ่ างๆ ทีใช ่ ในการแกไขไฟลสเก็ตชทีพั่ ฒนาบน Wiring IDE

่ อนหนานีหรื ้ อทีพิ่ มพลาสุด คุณสามารถยกเลิกคําสัง่ Undo ได Undo (Ctrl+Z) : ยกเลิกการกระทําคําสังก โดยเลือก Edit  Redo ่ ทํ่ ากอนหนาคําสัง่ Undo คําสังนี ่ จะใช ้ ไดก็ตอเมือได ่ ทําการ Undo ไปแลว Redo (Ctrl+Y) : กลับไปทําคําสังที ่ ปบอรด ซึงทํ ่ าหนาทีเป ่ นหนวยความจําชัวคราว ่ Cut (Ctrl+X) : ลบและคัดลอกขอความทีเลื่ อกไปเก็บทีคลิ สําหรับพักขอมูล ่ ปบอรด Copy (Ctrl+C) : คัดลอกขอความทีเลื่ อกไปเก็บทีคลิ ่ ในคลิ  ปบอรดไปยังตําแหนงทีกํ่ าหนดหรือแทนทีข่ อความทีเลื ่ อก Paste (Ctrl+V) : วางขอมูลทีอยู

Select All (Ctrl+A) : เลือกตัวหนังสือหรือขอความทังหมดในไฟล ้ ทีกํ่ าลังเปดอยูในเท็  กซเอดิเตอรในขณะนัน้ Find (Ctrl+F) : คนหาขอความภายในไฟลทีเป ่ ดอยูในเท็  กซเอดิเตอร นอกจากนียั้ งสามารถคนหาและแทน ทีด่ วยขอความอืนได ่

Find Next (Ctrl+G) : คนหาขอความคําที่เราใชคนหาตัวถัดไปภายในไฟลทีเป ่ ดอยูในเท็  กซเอดิเตอร


30Robo-Creator : AT-BOT activity book

3.1.1.3 เมนู Sketch เปนเมนูคําสังที ่ เกี ่ ยวข ่ องกับการคอมไพลไฟลสเก็ตช

่ โปรแกรม ทํางานเหมือนกับการกดปุม Verify/Compile (Ctrl+R) : เปนคําสังคอมไพล Import Library : ใชเลือกผนวกไฟลไลบรารีทีต่ องการลงในไฟลสเก็ตช Show Sketch Folder : แสดงโฟลเดอรของไฟลสเก็ตชปจจุบัน ่ สเก็ตช Add File : เลือกไฟลโปรแกรมทีต่ องการเพิมลงไปในไฟล 3.1.1.4 เมนู Tools

บนแถบเครืองมื ่ อ

เปนเมนูคําสังที ่ เกี ่ ยวข ่ องกับการเลือกใชเครืองมื ่ อชวยในการพัฒนาโปรแกรม คําสังสํ ่ าคัญทีควรทราบมี ่ ดังนี้

 ปแบบทีเรี่ ยบรอย Auto Format : พยายามจัดรูปแบบของโคดโปรแกรมใหอยูในรู Serial Monitor : เลือกเปดการทํางานและแสดงผลของ Serial Monitor  ดแวรทีใช ่ กับ Wiring 1.0 Board : ใชเลือกรุนของฮาร Serial Port : ใชเลือกตําแหนงของพอรตอนุกรมที่ใชติดตอกับฮารดแวร Wiring I/O


Robo-Creator : AT-BOT activity book  31

3.1.1.5 Help

Getting Started : เปดหนาตางเกียวกั ่ บการเริมต ่ นเรียนรูและใชงาน Wiring ของเว็บไซต Wiring Examples : เลือกเปดไฟลสเก็ตชของโปรแกรมตัวอยาง ่ วย language, programming Reference : เปดหนาตาง Reference ของเว็บไซต Wiring ซึงประกอบไปด environment, libraries, และ language comparison จะตองตออินเทอรเน็ต หากตองการดูขอมูล

Find in Reference (Ctrl+Shift+F) : เลือกขอความในโคดโปรแกรมของคุณ จากนั้นเลือก Help  Find in Reference โปรแกรมจะนําขอความทีคุ่ ณเลือกไปคนหาใน reference ถาคนหาไมพบ จะมีขอความเตือนใน หนาตางหลักของโปรแกรม

Wiring Hardware : เลือกดูขอมูลของฮารดแวร Wiring I/O ผานทางเครือขายอินเทอรเน็ต ่ บการแกไขปญหาในการใชงาน Wiring ของเว็บไซต Wiring Troubleshooting : เปดหนาตางเกียวกั Visit wiring.org.co (Ctrl+5) : เป ดเว็ บบราวเซอร เพื่ อเยี่ยมชมโฮมเพจของ Wiring ที่ http:// wiring.org.co จะตองตออินเตอรเน็ต หากตองการดูขอมูล ่ บซอฟตแวร Wiring About Wiring : แสดงขอมูลลิขสิทธิเกี์ ยวกั


32Robo-Creator : AT-BOT activity book

3.1.2 แถบเครื่องมือ : Toolbar มีฟงกชั่นพืนฐาน ้ 6 ปุม และการทํางานในขันต ้ นดังนี้ Run หรือ Compile ใชในการคอมไพลโคดโปรแกรม New ใชสรางไฟลสเก็ตชใหม (ใน Wiring จะเรียกไฟลที่ทําการพัฒนาวา สเก็ตช (sketch) Open เปดไฟลสเก็ตชที่มีอยู Save บันทึกไฟลสเก็ตชปจจุบันใสในโฟลเดอรของไฟลสเก็ตชทีทํ่ างานอยู ถาตองการบันทึก ในชื่ออืน่ ใหเลือกใชคําสั่ง Save As จากเมนู File Upload to Wiring hardware ใชสงไฟลสเก็ตชปจจุบันไปสเก็ตชบุกและอั  ปโหลดโปรแกรม ไปยังฮารดแวร Wiring ในทีนี่ คื้ อ แผงวงจรควบคุม ATX (ใน Wiring จะเรียกกระบวนการดาวนโหลดโปรแกรมไป ยังฮารดแวรวา อัปโหลด : upload) Serial monitor เปดการเชือมต ่ อระหวางฮารดแวร Wiring I/O กับพืนที ้ มอนิ ่ เตอรของ Wiring IDE ผานทางพอรตอนุกรมเพื่อดูขอมูลที่สงกลับมาจากฮารดแวร Wiring I/O (ในที่นีคื้ อ แผงวงจรควบคุม ATX) ซึงมี ่ ประโยชนมากในการตรวจสอบการทํางานของโปรแกรม

3.1.3 Serial monitor Wiring IDE ไดผนวกเครืองมื ่ อสําหรับแสดงผลและสงขอมูลผานพอรตอนุกรมเพือติ ่ ดตอกับฮารดแวร Wiring I/O นันคื ่ อ Serial monitor โดยในการเขียนโปรแกรมจะตองบรรจุคําสัง่ Serial.println() ลงในโปรแกรม ดวย อยางไรก็ตามกอนการใชคําสัง่ Serial.println()จะตองมีการกําหนดคาอัตราเร็วในการถายทอดขอมูล หรืออัตราบอดหรือบอดเรต (baud rate) กอน โดยใชคําสั่ง Serial.begin()ซึงโดยปกติ ่ กําหนดคาเปน 9600 บิตตอวินาที และควรบรรจุคําสัง่ Serial.begin()ใหอยูในส  วน setup()ของโปรแกรมทุกครัง้ การเรียกใหหนาตาง Serial Monitor ใหทํางาน ทําไดงายมากเพียงคลิกทีปุ่ ม บนแถบเครืองมื ่ อ หนาตาง Serial Monitor จะปรากฏขึนเพื ้ อแสดงข ่ อความทีรั่ บมาจากฮารดแวร Wiring ผานทางพอรตอนุกรม ทีด่ านบนของหนาตาง Serial Monitor จะเปนชองสําหรับปอนขอมูลเพือส ่ งคาจากโปรแกรมมายังฮารดแวร Wiring


Robo-Creator : AT-BOT activity book  33

3.2 ขันตอนการพั ้ ฒนาโปรแกรม (1) ตรวจสอบการติดตังฮาร ้ ดแวรและซอฟตแวรของ Wiring รวมถึงการตังค ้ าของพอรตอนุกรมทีเชื ่ อมต ่ อกับ ฮารดแวร Wiring I/O ในที่นีคื้ อ แผงวงจรควบคุม ATX ของหุนยนต AT-BOT ในชุด Robo-Creator (2) สรางไฟลสเก็ตชใหมดวยการคลิกทีปุ่ ม New บนแถบเครืองมื ่ อหรือเลือกจากเมนู File  New

(3) พิมพโคดโปรแกรมตอไปนี้ #include <atx.h> int ledPin = 48; void setup() { lcd("Hello Robot!"); pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }

// Include main library // LED connected to pin 48 (bootloader) // Title message on LCD // Sets the digital pin as output

// Sets the LED on // Waits for a second // LED off

โปรแกรมนีใช ้ ในการทดสอบฮารดแวรเบืองต ้ นของหุนยนต  AT-BOT กําหนดใหแสดงขอความทีโมดู ่ ล LCD ่ ที ขาพอร ่ ต 48 บนแผงวงจรควบคุม ATX ของหุนยนต  ATà»ç¹ Hello Robot! และควบคุม LED ทีอยู BOT ใหกะพริบทุกๆ 1 วินาที


34Robo-Creator : AT-BOT activity book

(4) ไปทีเมนู ่ File เลือกคําสัง่ Save As เพือบั ่ นทึกไฟลในชือ่ Test ตอนนีจะมี ้ ไฟล test.pde เกิดขึนในโฟลเดอร ้ ชื่อวา test

(5) ตรวจสอบการเขียนโปรแกรมดวยการคลิกทีปุ่ ม Run ทีแถบเครื ่ องมื ่ อหรือเลือกคําสังจากเมนู ่ Sketch  Compile/Verify

หากมีความผิดพลาดเกิดขึ้นจากการคอมไพล จะปรากฏขอความแจงความผิดพลาดในชองแสดง สถานะและพืนที ้ แสดงข ่ อความ ตองทําการแกไขโปรแกรม


Robo-Creator : AT-BOT activity book  35

1

 5



41 ADC1

40 ADC0

46 ADC6

45 ADC5

44 ADC4

5

42 ADC2

4

43 ADC3

START

4

R o b o - C r e a to r > > > > 3

> o B o o t l o ad e r o a r d

  

2

USB DATA

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

1

E2

2

KNOB

ADC7

SW1

49

SW2

50

48

SERVO PORT 9

BATTERY LEVEL

10 11 12 13 S

8

+

-



7.2-9V BATT.

0

R ESET

3

 

14

PC6

15

PC7

MOTOR



รูปที่ 3-2 แสดงการกําหนดใหหุนยนต  AT-BOT เขาสูโหมดโปรแกรม  หากการคอมไพลถูกตอง ทีช่ องแสดงสถานะจะแจงแสดงขอความ Done compiling

หลังจากการคอมไพลสําเร็จ ในโฟลเดอร test จะมีโฟลเดอรใหมเกิดขึนชื ้ อว ่ า Build ภายในโฟลเดอร Build จะบรรจุไฟลซอรสโปรแกรมภาษา C++ และไฟลประกอบ (6) ตอสาย USB เขากับแผงวงจรควบคุม ATX จากนั้นเปดสวิตชจายไฟเลียง ้ แลวรอใหการเชื่อมตอกับ คอมพิวเตอรเสร็จสมบูรณ (ดูจากไฟแสดงผลสีนําเงิ ้ นทีตํ่ าแหนง USB ติดสวาง) (7) กดสวิตช START บนแผงวงจรควบคุม ATX คางไว 3 วินาที ที่จอแสดงผล LCD แสดงขอความแจง การเขาสูโหมดโปรแกรม  ในรูปที่ 3-2 แสดงขันตอนทั ้ งหมดของการกํ ้ าหนดใหหุนยนต  AT-BOT เขาสูโหมดโปรแกรม 


36Robo-Creator : AT-BOT activity book

(8) คลิกที่ปุม Upload to Wiring Hardware บนแถบเครื่องมือ ถาทุกอยางเปนปกติ เมื่อทําการอัป โหลดเสร็จ จะมีขอความแจงที่ชองแสดงสถานะวา Done uploading. RESET to start the new program. และที่ พืนที ้ แสดงข ่ อความจะแจงกระบวนการและผลคอมไพล รวมถึงขนาดของไฟลผลลัพธทีเกิ ่ ดขึน้

ถามีขอผิดพลาดเกิดขึนจะมี ้ ขอความแจงเตือนในพืนที ้ แสดงข ่ อความดานลางของหนาตางโปรแกรมหลัก

ซึงส ่ วนใหญแลวมักเกิดจากการเลือกพอรตอนุกรมไมถูกตองหรือไมไดเลือกใหบอรดทํางานใน โหมดโปรแกรม การแกไขใหดูในหัวขอ การแกปญหาในกรณีทีอั่ ปโหลดโปรแกรมไมได (9) กดสวิตช START บนแผงวงจรควบคุม ATX เพือเริ ่ มการทํ ่ างานของโปรแกรม ทีโมดู ่ ล LCD แสดงขอความ Hello Robot! และ LED ทีขาพอร ่ ต 48 ติดกะพริบ


Robo-Creator : AT-BOT activity book  37

3.3 การแกปญหาในกรณีที่อัปโหลดโปรแกรมไมได 3.3.1 กรณีทีคลิ ่ กปุม Upload แลว ไมมีการทํางานใดๆ ตอ หรือโปรแกรมคาง สาเหตุ : ซอฟตแวร Wiring ไมสามารถติดตอกับแผงวงจรควบคุม ATX ของหุนยนต  AT-BOT ได เนืองจากไม ่ ไดอยู ในโหมดโปรแกรม

ทางแกไข : (1) ใหกดคีย Ctrl, Alt และ Delete พรอมกัน หนาตาง Window Security ปรากฏขึน้ แลวคลิกเลือก Task Manager หรือในคอมพิวเตอรบางเครื่องอาจเขาสูหน  าตาง Window Task mangaer ทันที ใหเลือกแท็ป Processes แลวหาชือไฟล ่ avrdude.exe คลิกเลือกทีไฟล ่ นัน้ แลวคลิกทีปุ่ ม End Process

(2) โปรแกรม Wiring IDE จะกลับมาทํางานในสถานะปกติได ทําการจายไฟใหกับบอรดอีกครัง้ เลือกพอรต เชือมต ่ อใหถูกตอง จากนันเลื ้ อกใหบอรดทํางานในโหมดโปรแกรมเพือทํ ่ าการอัปโหลดโปรแกรมอีกครัง้


38Robo-Creator : AT-BOT activity book

3.3.2 กรณีทีคลิ ่ กปุม Upload แลว มีการแจงความผิดพลาดวา ไมพบฮารดแวรสําหรับการ อัปโหลดโปรแกรม

สาเหตุ : ซอฟตแวร Wiring ไมสามารถติดตอกับ แผงวงจรควบคุม ATX ของหุนยนต  AT-BOT ได เนืองจากเลื ่ อกพอรต อนุกรมทีใช ่ ในการสือสารข ่ อมูลไมถูกตอง

ทางแกไข : ใหเลือกพอรตอนุกรมที่ใชในการเชื่อมตอใหมใหถูกตอง โดยเลือกที่เมนู Tools  Serial port

3.4 ขอควรทราบเกียวกั ่ บโครงสรางการจัดการไฟลสเก็ตชของ Wiring ไฟลโปรเจ็กตใน Wiring จะเรียกวา “สเก็ตช” (sketch) แตละสเก็ตชจะมีโฟลเดอรเปนของตัวเอง ภายใน โฟลเดอรจะตองมีไฟลโปรแกรมหลักซึงมี ่ ชือเหมื ่ อนกับชือสเก็ ่ ตช เชน ถาสเก็ตชชือ่ Sketch_123 โฟลเดอรของสเก็ต นีจะชื ้ อ่ Sketch_123 ดวย สวนไฟลโปรแกรมหลักจะชือ่ Sketch_123.pde ไฟลสเก็ตชตองการโฟลเดอรเพือเก็ ่ บไฟลทีต่ องใชเพิมเติ ่ มรวมถึงโคดโปรแกรมและไลบรารี เมือทํ ่ าการคอม ไพลและอัปโหลดไฟลสเก็ตช ไฟลทั้งหมดจะถูกคอมไพลรวมกันเปนไฟล .hex ทีมี่ ชื่อเดียวกันกับไฟลสเก็ตช เชน ถาสเก็ตชชือ่ Sketch_123 ไฟลทีคอมไพล ่ แลวจะชือ่ Sketch_123.hex ไฟลสเก็ตชทังหมดจะถู ้ กเก็บไวในโฟลเดอร Wiring ทีอยู ่ ต างกันไปตามคอมพิวเตอรของผูพั ฒนาโปรแกรม การกําหนดตําแหนงของโฟลเดอรทําไดโดยเลือก Preferences ในหัวขอ File (ปกติอยูในโฟลเดอร  My Document\Wiring) ในรูปที่ 3-3 แสดงโครงสรางการจัดการไฟลทังหมดของซอฟต ้ แวร Wiring ผูพั ฒนาโปรแกรมจะทําการเขียน โคดในสวนของไฟลสเก็ตช เมื่อบันทึกจะเปนไฟลนามสกุล .pde สวนประกอบทีเหลื ่ อของโปรแกรมภาษา C จะได รับการดําเนินการโดยระบบของ Wiring เมือทํ ่ าการคอมไพลแลว ระบบจะสรางโฟลเดอร Applet เพือทํ ่ าหนาทีเป ่ น ทีเก็ ่ บไฟลการทํางานไว รวมถึงไฟลนามสกุล .hex ทีใช ่ ในการอัปโหลดไปยังฮารดแวร Wiring ดวย


Robo-Creator : AT-BOT activity book  39

ประกาศตัวแปร พรีโปรเซสเซอร ผนวกไฟลไลบรารี

ไฟลไลบรารี

ไฟล .pde

สเก็ตชบกุ :

setup() { ................... ................... } loop() { .................... .................... }

คอมไพล

พื้นที่โคดโปรแกรมที่ผูพัฒนา ตองเขียนขึ้นเอง

init() {

รันโปรแกรมทีอ่ ยูใน loop()

ตั้งคาเบื้องตนของระบบ } int main(void) { init(); setup(); for (;;) { loop(); } return 0; }

โฟลเดอร Applet ไฟล .cpp

เป นส วนของโปรแกรมที่ Wiring เตรี ยมไว ทั้ งหมด ผู พั ฒนา โปรแกรมทําหนาที่เขียนโคดในสวน ของไฟลสเก็ตชบุก (.pde) เทานั้น (main.cxx template file)

ไฟลยอยอื่นๆ ที่เกีย่ วของ

ไฟล .hex

รูปที่3-3 แสดงโครงสรางการจัดการไฟลทังหมดของซอฟต ้ แวร Wiring

อัปโหลดไปยัง ฮารดแวร Wiring I/O


40Robo-Creator : AT-BOT activity book

3.5 กระบวนการคอมไพลและอัพโหลดโปรแกรมของซอฟตแวร Wiring เมือเรี ่ ยกใชคําสัง่ Upload I/O Board กระบวนการทํางานจะเริมต ่ นดวยการคอมไพลโปรแกรม ไฟลสเก็ตช ทีเขี ่ ยนขึนจะถู ้ กเปลียนเป ่ นโคดโปรแกรม C++ จากนันทํ ้ าการคอมไพล ไฟลทีเกิ ่ ดขันทั ้ งหมดในกระบวนการนี ้ จะถู ้ ก เก็บไวในโฟลเดอร applet ซึงถู ่ กสรางขึ้นภายในโฟลเดอรหลักของสเก็ตช ถาไฟลสเก็ตชชื่อ Sketch_123 ภายใน โฟลเดอร Applet จะมีไฟลตางๆ ดังนีบรรจุ ้ อยู Sketch_123.hex เปนไฟลผลลัพธนามสกุล .HEX ระบบจะนําไฟลนีอั้ ปโหลดหรือเขียนไปยัง หนวยความจําโปรแกรมของฮารดแวร Wiring I/O 

Sketch_123.cpp เปนไฟลของโปรแกรมภาษา C++ สรางจากไฟล .pde โดยไฟลนีเป ้ นจริงๆ ทีได ่ รับการคอมไพลเปนไฟล . hex โดยคอมไพเลอรทีใช ่ ใน Wiring IDE คือ g++ อันเปน C++ คอมไพเลอร 

Sketch_123.pde เปนไฟลตนฉบับของโปรแกรมทีเขี ่ ยนขึน้

3.6 ตําแหนงการเก็บไฟลสเก็ตชของ Wiring ผูพั ฒนาโปรแกรมสามารถบันทึกไฟลสเก็ตชไวทีใดในพื ่ นที ้ จั่ ดเก็บแฟมขอมูลของคอมพิวเตอรก็ได แตเพืออํ ่ านวย ความสะดวกและจดจํางาย Wiring IDE จึงกําหนดคาตังต ้ น (default) ของตําแหนงจัดเก็บโฟลเดอรของไฟลสเก็ตชทีพั่ ฒนา ขึ้นไวที่ C:\Documents and Settings\Admin (หรือชื่อผูใช) \My Documents\Wiring สามารถตรวจสอบรวมถึง กําหนดตําแหนงใหมได โดยไปทีเมนู ่ File  Preference


Robo-Creator : AT-BOT activity book  41

จะปรากฏหนาตาง Preference ขึนมาดั ้ งรูป คุณสามารถเปลียนแปลงตํ ่ าแหนงโฟลเดอรทีจั่ ดเก็บไฟลสเก็ตชที่ ช อง Sketchbook location โดยใช เมาสคลิกที่ ปุ มคนหาทางดานขวามือ หรือจะพิมพตําแหนงลงไปในชอง Sketchbook location โดยตรงก็ได จากนันคลิ ้ กปุม OK เพือตอบตกลงและยื ่ นยันการเปลียนแปลง ่

สวนพารามิเตอร หรือขอกําหนดอืนๆ ่ แนะนําใหใชตามคาที่กําหนดมา ทั้งนี้เพื่อลดขันตอนการพั ้ ฒนา โปรแกรมและความผิดพลาดทีอาจเกิ ่ ดขึนได ้ สําหรับนักพัฒนาโปรแกรมมือใหมหรือผูเริ มต ่ น


42Robo-Creator : AT-BOT activity book

3.7 การเปดไฟลสเก็ตชตัวอยาง เพืออํ ่ านวยความสะดวกและลดการผิดพลาดในการพัฒนาโปรแกรมสําหรับผูเริ มต ่ นใชงาน Wiring ผูเขี  ยน จึงไดเตรียมไฟลสเก็ตชตัวอยางไวเปนจํานวนมาก ซึงรวมถึ ่ งไฟลสเก็ตชตัวอยางของการทดลองทังหมดในหนั ้ งสือเลม นี้ และถาหากติดตังโปรแกรมจากแผ ้ นซีดีรอมไฟลสเก็ตชตัวอยางจะไดรับการติดตังมาพร ้ อมกันดวย ่ สเก็ต การเปดไฟลสเก็ตชตัวอยางทําไดงายมาก โดยไปทีเมนู ่ Help  Example  AT-BOT จะเห็นชือไฟล ช จํานวนมาก ใหเลือกเปดใชงานไดตามตองการ

หรือเลือกเปดผานทางคําสัง่ Open ซึงจะปรากฏหน ่ าตาง Explorer ขึนมาเพื ้ อให ่ คนหาไฟล ใหเลือกไปที่ C:/ Wiring/Examples/AT-BOT จะพบโฟลเดอรทีใช ่ เก็บไฟลสเก็ตชจํานวนมาก เมือเลื ่ อกเปดโฟลเดอรทีต่ องการ จะพบไฟล .pde ซึงก็ ่ คือไฟลสเก็ตชที่ใชงานกับ Wiring IDE จากนันก็ ้ จะ สามารถแกไข, คอมไฟล รวมทังอั ้ ปโหลดโปรแกรมไดตามตองการ

3.8 ขอกําหนดในการแกไขและบันทึกไฟลสเก็ตช ในกรณีที่ตองการแกไขไฟลสเก็ตชเดิม ตองเปดไฟลสเก็ตชนั้นๆ ขึ้นมา ทําการแกไขโคดโปรแกรม ตรวจสอบไวยกรณดวยการคอมไพล เมือเรี ่ ยบรอยแลว มีทางเลือกในการบันทึกไฟล 2 ทางคือ 1. บันทึกในชื่อเดิม ใหใชคําสั่ง Save 2. บันทึกในชื่อใหมดวยคําสั่ง Save As แตไมควรบันทึกทับไฟลสเก็ตชเดิมที่ไมไดถูกเปดขึ้นมา เพราะจะทําใหการเชื่อมโยงไฟลสับสน และทําใหเกิดความผิดพลาดในการเปดใชงานครั้งตอไปได ถาหากมีความ ตองการบันทึกทับไฟลเก็ตชเดิมที่ไมไดถูกเปดขึนมา ้ จะตองทําการลบโฟลเดอรของไฟลสเก็ตชนันออกไปเสี ้ ยกอน


Robo-Creator : AT-BOT activity book  43



   การพัฒนาโปรแกรมภาษา C/C++ ดวย Wiring สําหรับหุนยนต AT-BOT ดําเนินการภายใตการสนับสนุน ของไฟลไลบรารี atx.h ทั้งนี้เพื่อชวยลดขั้นตอนและความซับซอนในการเขียนโปรแกรมเพื่อควบคุมสวนตางๆ ของฮารดแวรลง เนืองจากต ่ องการใหความสําคัญของการพัฒนาโปรแกรมควบคุมหุนยนต AT-BOT ไปอยูที่การ เขียนโปรแกรมสําหรับรองรับกิจกรรมการแขงขัน โครงสรางของไฟลไลบรารี atx.h แสดงดังรูป รายละเอียดของไฟลไลบรารียอยทั้งหมดมีดั้ งนี้

                

                    


44 Robo-Creator : AT-BOT activity book

4.1 lcd.h ไฟลไลบรารีของการแสดงผลที่โมดูล LCD เปนไฟลไลบรารีสนับสนุนชุดคําสั่งเกียวกั ่ บการแสดงขอความที่โมดูล LCD กอนเรียกใชงานฟงกชันของ ่ ไลบรารีนีควรผนวกไฟล ้ ไลบรารีในตอนตนของโปรแกรมดวยคําสั่ง

#include <lcd.h> หรือ #include <atx.h> ฟงกชันที ่ สํ่ าคัญคือ lcd บรรจุฟงกชันสํ ่ าหรับการแสดงผลขอความทีโมดู ่ ล LCD แบบ 16 ตัวอักษร 2 บรรทัด รูปแบบ

void lcd(char *p,...) พารามิเตอร p - รับรหัสสําหรับกําหนดกลุมขอความที่ตองการแสดงผลที่โมดูล LCD โดยสามารถกําหนดรูปแบบการ แทรกสัญลักษณพิเศษเพือร ่ วมแสดงผลคาขอมูลตัวเลขรูปแบบอืนๆ ่ อันไดแก รหัสบังคับ การทํางาน %c หรือ %C รับคาการแสดงผลตัวอักษร 1 ตัว %d หรือ %D รับคาการแสดงผลตัวเลขฐานสิบในชวง -32,768 ถึง +32,767 %l หรือ %L รับคาการแสดงผลตัวเลขฐานสิบในชวง -2,147,483,648 ถึง +2,147,483,647 %f หรือ %F รับคาเพือแสดงผลข ่ อมูลแบบจํานวนจริง (แสดงทศนิยม 3 หลัก) #c คําสังพิ ่ เศษเพื่อสังเคลี ่ ยรขอความกอนแสดงผลในครั้งถัดไป #n คําสังพิ ่ เศษเพือสั ่ งตั ่ ดขอความไปแสดงผลยังบรรทัดที่ 2 (บรรทัดลาง) ตัวอยางที่ 4-1 lcd(“Hello LCD”); // แสดงขอความ Hello LCD ที่โมดูล LCD ผลลัพธที่โมดูล LCD H e l l o o L C D rb o a r d r W i r i n g I / Ob R o b o t d

ตัวอยางที่ 4-2 lcd(“abcdefghijklmnopqrstuvwxyz”); // แสดงผลขอความเมือสายอั ่ กขระเกิน 16 ตัวอักษร อักขระตัวถัดไปจะขึนบรรทั ้ ดที่ 2 (บรรทัดลาง) ทันที ผลลัพธที่โมดูล LCD abcdefghijklmnop q r s t u v w x yz R o b o t d


Robo-Creator : AT-BOT activity book  45

ตัวอยางที่ 4-3 lcd(“Value: %d unit “,518); // แสดงขอความรวมกับขอมูลตัวเลข (518) ทีโมดู ่ ล LCD ผลลัพธที่โมดูล LCD Value:g518kunitp q r s t u v w x yz R o b o t d

ตัวอยางที่ 4-4 lcd(“Value: %d “,analog(4)); ผลลัพธที่โมดูล LCD

// แสดงผลคาอะนาลอกชอง ADC4 ที่โมดูล LCD

Value:gxxxkunitp q r s t u v w x yz R o b o t d

โดยที่ xxx คือคาที่อานได มีคาตั้งแต 0 ถึง 1023 ตัวอยางที่ 4-5 char c_test=’j’; lcd(“abcd%cxyz”,c_test);// แสดงอักขระ j รวมกับขอความอื่นๆ abcdjxyzxxkunitp q r s t u v w x yz R o b o t d

ผลลัพธที่โมดูล LCD ตัวอยางที่ 4-6 lcd(“Value: %f “,125.450); // แสดงขอความรวมกับตัวเลขที่โมดูล LCD (แสดงทศนิยม 3 หลัก) ผลลัพธที่โมดูล LCD Value:g125.450tp q r s t u v w x yz R o b o t d


46 Robo-Creator : AT-BOT activity book

ตัวอยางที่ 4-7 lcd(“count1: %d #ncount2: %d”,12,48); // แสดงขอความรวมกับ 2 รหัสควบคุม และคียพิเศษ #n // เพือกํ ่ าหนดใหกลุมขอความที่ตอทาย #n จะถูกนํามาแสดงผลยังบรรทัดที่ 2 (บรรทัดลาง) ผลลัพธที่โมดูล LCD count1:112.450tp c o u n t 2 : x 48 R o b o t d

4.2 sleep.h ไฟลไลบรารียอยการหนวงเวลา เปนไฟลไลบรารีสนับสนุนชุดคําสังเกี ่ ยวกั ่ บการหนวงเวลา กอนเรียกใชงานควรผนวกไฟลไลบรารีไวใน ตอนตนของโปรแกรมดวยคําสั่ง

#include <sleep.h> หรือเรียก #include <atx.h> ฟงกชั่นทีสํ่ าคัญคือ sleep เปนฟงกชั่นหนวงเวลาโดยประมาณในหนวยมิลลิวินาที มีรายละเอียดดังนี้ รูปแบบ

void sleep(unsigned int ms) พารามิเตอร ms - กําหนดคาเวลาทีต่ องการหนวงในหนวยมิลลิวินาที มีคา 0 ถึง 65,535 การคืนคา ไมมี ตัวอยางที่ 4-8 sleep(20); // หนวงเวลาประมาณ 20 มิลลิวินาที sleep(1000); // หนวงเวลาประมาณ 1 วินาที


Robo-Creator : AT-BOT activity book  47

4.3 in_out.h ไฟลไลบรารียอยสําหรับติดตอพอรต เปนไฟลไลบรารีสนับสนุนชุดคําสังเกี ่ ่ยวกับการอานและเขียนคากับพอรตอินพุตเอาตพุตของฮารดแวร Wiring I/O ซึงในที ่ ่นีคื้ อ แผงวงจรควบคุม ATX ของหุนยนต AT-BOT หรือ กอนเรียกใชงานฟงกชั่นตองผนวก ไฟลไลบรารีนีไว ้ ในตอนตนของโปรแกรมดวยคําสั่ง

#include <in_out.h> หรือเรียก #inclue <atx.h> ฟงกชั่นที่สําคัญของไฟลไลบรารีนี้ประกอบดวย

4.3.1 in เปนฟงกชั่นอานคาสถานะลอจิกของพอรตทีกํ่ าหนด รูปแบบ

char in(x) พารามิเตอร x - กําหนดขาพอรตทีต่ องการอานคา มีคาตั้งแต 0 ถึง 50 การคืนคา เปน 0 หรือ 1 ตัวอยางที่ 4-9 char x; // ประกาศตัวแปร x เพื่อเก็บคาผลลัพธจาการอานคาระดับสัญญาณ x = in(49); // อานคาดิจิตอลจากพอรตหมายเลข 49 แลวเก็บคาไวทีตั่ วแปร x ตัวอยางที่ 4-10 char x; // ประกาศตัวแปร x เพื่อเก็บคาผลลัพธจาการอานคาระดับสัญญาณ x = in(50); // อานคาดิจิตอลจากพอรตหมายเลข 50 แลวเก็บคาไวทีตั่ วแปร x

4.3.2 out เปนฟงกชั่นกําหนดระดับสัญญาณหรือขอมูลดิจิตอลไปยังขาพอรตที่กําหนด รูปแบบ out(char _bit,char _dat) พารามิเตอร _bit - กําหนดขาพอรตทีต่ องการ มีคา 0 ถึง 50 ตัวอยางที่ 4-11 out(43,1); // กําหนดใหขาพอรต 43 เปน “1” out(45,0); // กําหนดใหขาพอรต 45 เปน “0”


48 Robo-Creator : AT-BOT activity book

4.3.3 sw1_press เปนฟงกชันวนตรวจสอบการกดสวิ ่ ตช SW1 บนแผงวงจร ATX ตองรอจนกระทัง่ SW1 ถูกปลอยหลังจากมี การกดสวิตช จึงจะผานพนการทํางานของฟงกชันนี ่ ไป ้ รูปแบบ

void sw1_press() ตัวอยางที่ 4-12 ............ sw1_press(); ................

// รอจนกระทังสวิ ่ ตช SW1 ถูกกดและปลอย

4.3.4 sw2_press เปนฟงกชันวนตรวจสอบการกดสวิ ่ ตช SW2 บนแผงวงจร ATX รูปแบบ

void sw2_press() ตัวอยางที่ 4-13 ............ Sw2_press(); .................

// รอจนกระทังสวิ ่ ตช SW2 ถูกกดและปลอย

4.3.5 sw1 เปนฟงกชั่นตรวจสอบการกดสวิตช SW1 ในขณะใดๆ รูปแบบ char sw1() การคืนคา เปน “0” เมือสวิ ่ ตช SW1 ถูกกด และ เปน “1” เมือไม ่ มีการกดสวิตช SW1 ตัวอยางที่ 4-14 char x; // ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจากการอานคาดิจิตอล x = sw1(); // อานคาสถานะของสวิตช SW1 มาเก็บไวทีตั่ วแปร x

4.3.6 sw2 เปนฟงกชั่นตรวจสอบการกดสวิตช SW2 ในขณะใดๆ รูปแบบ

char sw2() การคืนคา เปน “0” เมือสวิ ่ ตช SW2 ถูกกด และ เปน “1” เมือไม ่ มีการกดสวิตช SW2 ตัวอยางที่ 4-15 char x; // ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจากการอานคาดิจิตอล x = sw2(); // อานคาสถานะของสวิตช SW2 มาเก็บไวทีตั่ วแปร x


Robo-Creator : AT-BOT activity book  49

4.4 analog.h ไฟลไลบรารีจัดการสัญญาณอะนาลอก เปนไฟลไลบรารีสนับสนุนชุดคําสังที ่ เกี ่ ยวกั ่ บการอานคาอินพุตอะนาลอก ซึงใช ่ ในการเชือมต ่ อกับตัวตรวจ จับที่ใหผลการทํางานในรูปแรงดันไฟฟาในยาน 0 ถึง +5V กอนเรียกใชงานตองผนวกไฟลไลบรารีไวในตอนตน ของโปรแกรมดวยคําสั่ง

#include <analog.h> หรือ #inclue <robot.h> ฟงกชั่นทีสํ่ าคัญของไฟลไลบรารีนีประกอบด ้ วย

4.4.1 analog เป นฟงกชั่ นอ านคาขอมูลดิจิตอลที่ไดจากการแปลงสัญญาณอะนาลอกของไมโครคอนโทรลเลอรที่ขา พอรต ADC0 ถึง ADC7 รูปแบบ

unsigned int analog(unsigned char channel) พารามิเตอร channel - กําหนดชองอินพุตอะนาลอกทีต่ องการ มีคา 0 ถึง 7 ซึงตรงกั ่ บขาพอรต ADC0 ถึง ADC7 การคืนคา เปนข อมู ลที่ได จากการแปลงสัญญาณของโมดูลแปลงสัญญาณอะนาลอกเปนดิจิตอลภายในไมโคร คอนโทรลเลอรจากชองอินพุตทีกํ่ าหนด โดยขอมูลมีความละเอียด 10 บิต ดังนั้นคาที่เปนไปไดคือ 0 ถึง 1,023

4.4.2 knob เป นฟงกชั่ นอ านคาขอมูลดิจิตอลที่ไดจากการแปลงสัญญาณอะนาลอกของไมโครคอนโทรลเลอรที่ขา พอรต ADC7 ซึงต ่ อกับตัวตานทานปรับคาไดหรือเรียกวาชองอินพุตอะนาลอกนี้วา KNOB รูปแบบ

unsigned int knob() การคืนคา เปนข อมู ลที่ได จากการแปลงสัญญาณของโมดูลแปลงสัญญาณอะนาลอกเปนดิจิตอลภายในไมโคร คอนโทรลเลอรจากชองอินพุต KNOB (ซึงก็ ่ คือ ADC7) มีคาในชวง 0 ถึง 1,023 ตัวอยางที่ 4-16 int val=0; // กําหนดตัวแปรสําหรับเก็บคาของอินพุตอะนาลอกทีได ่ จากการแปลงสัญญาณแลว val = analog(2); // อานคาของอินพุตอะนาลอกชอง 2 ซึงตรงกั ่ บพอรต ADC2 ซึงผ ่ านการแปลง // เปนขอมูลดิจิตอลแลวมาเก็บไวทีตั่ วแปร val ตัวอยางที่ 4-17 int val=0; // กําหนดตัวแปรสําหรับเก็บคาของอินพุตอะนาลอกทีได ่ จากการแปลงสัญญาณแลว val = knob(); // อานคาจากอินพุต knob ซึงผ ่ านการแปลงเปนขอมูลดิจิตอลแลวมาเก็บไวทีตั่ วแปร val


50 Robo-Creator : AT-BOT activity book

4.5 motor.h เปนไฟลไลบรารีชุดคําสังควบคุ ่ มมอเตอรไฟตรง ตองผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสัง่

#include <motor.h> หรือ #inclue <atx.h>

4.5.1 การเชื่อมตอทางฮารดแวร ไฟลไลบรารีนีรองรั ้ บการขับมอเตอรไฟตรงของแผงวงจร ATX จํานวน 6 ชองคือ ชอง 0 ถึง 5

4.5.2 motor เปนฟงกชั่นขับเคลือนมอเตอร ่ ไฟตรง รูปแบบ

void motor(char _channel,int _power) พารามิเตอร _channel - กําหนดชองเอาตพุตมอเตอรไฟตรงของหุนยนต  AT-BOT มีคา 0 ถึง 5 _power - กําหนดกําลังขับมอเตอร มีคาในชวง -100 ถึง 100 ถากําหนดคา _power เปนบวก (1 ถึง 100) ทําใหมอเตอรหมุนไปในทิศทางหนึ่ง ถากําหนดคา _power เปนลบ (-1 ถึง -100) มอเตอรจะถูกขับใหหมุนไปในทิศทางตรงขาม ถากําหนดคา _power เปน 0 มอเตอรหยุดหมุน ไมแนะนําใหกําหนดคาเปน 0 หากตองการใหมอเตอร หยุดหมุนควรเรียกใชฟงกชัน่ motor_stop ตัวอยางที่ 4-18 motor(1,60); // ขับมอเตอรชอง 1 ดวยกําลัง 60% ของกําลังสูงสุด motor(1,-60); // ขับมอเตอรชอง 1 ดวยกําลัง 60% มีทิศทางการหมุนตรงขามกับคําสังก ่ อนหนา ตัวอยางที่ 4-19 motor(2,100); // ขับมอเตอรชอง 2 ดวยกําลัง 100% อันเปนคากําลังสูงสุด

4.5.3 motor_stop เปนฟงกชั่นหยุดขับมอเตอร รูปแบบ

void motor_stop(char _channel) พารามิเตอร _channel - กําหนดชองเอาตพุตมอเตอรไฟตรง มีคา 0 ถึง 5 และ ALL โดย ALLเปนการเลือกใหมอเตอร ทังหมดหยุ ้ ดทํางาน ตัวอยางที่ 4-20 motor_stop(1); // หยุดขับมอเตอรชอง 1 motor_stop(4); // หยุดขับมอเตอรชอง 4 ตัวอยางที่ 4-21 motor_stop(ALL); // มอเตอรทัง้ 6 ชองหยุดทํางานพรอมกัน


Robo-Creator : AT-BOT activity book  51

4.6 servo.h ไฟลไลบรารีขับเซอรโวมอเตอร เปนไฟลไลบรารีควบคุมเซอรโวมอเตอร มีฟงกชั่นสนับสนุนการควบคุมตําแหนงแกนหมุนของเซอรโว มอเตอร ควบคุมได 6 ตัวในเวลาเดียวกัน กอนใชงานตองผนวกไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง

#include <servo.h> หรือ #inclue <atx.h> ในไฟลไลบรารีนีมี้ 1 ฟงกชั่นคือ servo เปนฟงกชั่นกําหนดตําแหนงแกนหมุนของเซอรโวมอเตอร รูปแบบ

void servo(unsigned char _ch, int _pos)

พารามิเตอร _ch - ชองเอาตพุตเซอรโวมอเตอร มีคา 8 ถึง 13 _pos - กําหนดตําแหนงแกนหมุนของเซอรโวมอเตอร มีคาในชวง 0 ถึง 180 และ -1 ถากําหนดเปน -1 หมายถึง ไมใชงานเซอรโวมอเตอรทีช่ องนั้นๆ

4.7 sound.h ไฟลไลบรารีกําเนิดสัญญาณเสียง เปนไฟลไลบรารีสนับสนุนชุดคําสังเกี ่ ยวกั ่ บการกําเนิดเสียงของแผงวงจร ATX กอนใชงานตองผนวกไฟล ไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง

#include <sound.h> หรือ #inclue <atx.h>

4.7.1 beep เปนฟงกชั่นกําเนิดเสียง “ติ๊ด” ซึงมี ่ ความถี่ 500Hz นาน 100 มิลลิวินาที ที่ขาพอรตใดๆ รูปแบบ

void beep()

4.7.2 sound เปนฟงกชั่นกําเนิดสัญญาณเสียงที่กําหนดความถีและระยะเวลาในการกํ ่ าเนิดสัญญาณได รูปแบบ

void sound(int freq,int time) พารามิเตอร freq - กําหนดความถี่สัญญาณเสียง มีคา 0 ถึง 32,767 time - กําหนดคาเวลาในการกําเนิดสัญญาณเสียงในหนวย 1 มิลลิวินาที มีคา 0 ถึง 32,767 ตัวอยางที่ 4-22 beep(); // กําเนิดเสียงความถี่ 500Hz นาน 100 มิลลิวินาที sound(1200,500); // กําเนิดสัญญาณเสียงความถี่ 1200Hz นาน 500 มิลลิวินาที


52 Robo-Creator : AT-BOT activity book

4.8 serial.h ไฟลไลบรารีสือสารข ่ อมูลผานโมดูลสือสารข ่ อมูลพอรตอนุกรมหรือ UART เปนไฟลไลบรารีสนับสนุนชุดคําสังเกี ่ ยวกั ่ บการรับสงขอมูลผานโมดูลสือสารข ่ อมูลอนุกรม (UART) กอน เรียกใชงานตองผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง

#include <serial.h> หรือ #inclue <atx.h>

4.8.1 การเชื่อมตอทางฮารดแวร เมือต ่ องการใชงานชอง UART0 ใหตอสายจากจุดตอพอรต USB บนแผงวงจรควบคุม ATX (เปนจุดตอเดียวกับที่ใชในการดาวนโหลด) เขากับพอรต USB ของคอมพิวเตอร เมือต ่ องการใชงานชอง UART1 ตอสายสัญญาณเขากับจุดตอ RXD1 (ขาพอรต 2) และ TXD1 (ขาพอรต 3)

4.8.2 uart เปนฟงกชันสํ ่ าหรับสงขอมูลสายอักขระออกจากโมดูล UART0 มีอัตราบอดเริมต ่ นที่ 115,200 บิตตอวินาที รูปแบบ

void uart(char *p,...) พารามิเตอร p - รับรหัสของกลุมขอความที่ตองการสงออกจากภาคสงของโมดูล UART0 โดยสามารถกําหนดรูปแบบ การแทรกสัญลักษณพิเศษเพือใช ่ รวมในการแสดงผลไดดังนี้ รหัสบังคับ การทํางาน %c หรือ %C แสดงผลตัวอักษร 1 ตัว %d หรือ %D แสดงผลตัวเลขฐานสิบชวงตั้งแต -32,768 ถึง +32,767 %l หรือ %L แสดงผลตัวเลขฐานสิบชวงตั้งแต -2,147,483,648 ถึง +2,147,483,647 %f หรือ %F แสดงผลขอมูลแบบจํานวนจริง(แสดงทศนิยม 3 หลัก) \r กําหนดใหขอความชิดไปทางดานซายของบรรทัด \n กําหนดใหขอความขึ้นบรรทัดใหม

4.8.3 uart_set_baud เปนฟงกชั่นกําหนดอัตราบอดในการสื่อสารของโมดูล UART0 กับคอมพิวเตอร รูปแบบ

void uart_set_baud(unsigned int baud) พารามิเตอร baud - อัตราบอดในการสือสารของโมดู ่ ล UART0 กับคอมพิวเตอร มีคา 2400 ถึง 115,200 ตัวอยางที่ 4-23 uart_set_baud(4800); // กําหนดอัตราบอดในการสื่อสารขอมูลเปน 4,800 บิตตอวินาที


Robo-Creator : AT-BOT activity book  53

4.8.3 uart_available เปนฟงกชั่นตรวจสอบการรับขอมูลเขามาของโมดูล UART0 เมื่อติดตอกับคอมพิวเตอร รูปแบบ

unsigned char uart_available(void) การคืนคา - เปน “0” เมื่อยังไมมีขอมูลเขามา - มากกวา 0 เมื่อมีขอมูลเขามา โดยมีคาเทากับจํานวนของอักขระที่ไดรับ ตัวอยางที่ 4-24 char x =uart_available(); // ตรวจสอบวา มีขอมูลเขามาทางภาครับของโมดูล UART0 หรือไม ถา x มีคามากกวา 0 แสดงวา // มีขอมูลเขามายังภาครับแลว ควรอานขอมูลออกดวยฟงกชัน่ uart_getkey ในลําดับถัดไปทันที

4.8.4 uart_getkey เปนฟงกชั่นอานขอมูลจากบัฟเฟอรตัวรับของโมดูล UART0 รูปแบบ

char uart_getkey(void) การคืนคา - เปน “0” เมื่อไมมีการรับอักขระใดๆ เขามายังวงจรภาครับของโมดูล UART - เปนคาของอักขระทีรั่ บไดในรูปแบบของรหัสแอสกี้ ตัวอยางที่ 4-25 #include <atx.h> // เรียกใชฟงกชันพื ่ ้นฐาน void setup() { } void loop() // ลูปการทํางานหลัก { if(uart_available()) // ตรวจสอบวามีขอมูลเขามาหรือไม { if(uart_getkey()==’a’) // ตรวจจับการกดคีย a วา ถูกกดหรือไม { lcd(“Key a Active!”); // แสดงขอความเพือตอบสนองต ่ อการตรวจพบวามีการคีย a sleep(1000); // หนวงเวลาแสดงขอความประมาณ 1 วินาที } else { lcd(“#c”); // เคลียรขอความที่หนาจอโมดูล LCD } } } หมายเหตุ เมือเรี ่ ยกใชฟงกชัน่ uart เพือส ่ งขอมูลออกทางโมดูลพอรตอนุกรมหรือ UART และ uart_getkey เพือ่ ตรวจจับอักขระใดๆ นัน้ อัตราบอดจะถูกกําหนดเปน 152,000 บิตตอวินาที ขอมูล 8 บิต และไมมีการตรวจสอบพาริตีโดย ้ อัตโนมัติ และเปนคาตังต ้ น เพือลดความซั ่ บซอนในการเขียนโปรแกรมลง หากตองการเปลียนอั ่ ตราบอดตองใช uart_set_baud อยางไรก็ตาม ตองคํานึงดวยวา เมืออั ่ ตราบอดสูงขึนอาจส ้ งผลกระทบตอความถูกตองในการสือสารข ่ อมูล


54 Robo-Creator : AT-BOT activity book

4.8.5 uart1 เปนฟงกชันส ่ งขอมูลสายอักขระออกทางภาคสงของโมดูล UART1 มีอัตราบอดเริมต ่ นที่ 9,600 บิตตอวินาที รูปแบบ

void uart1(char *p,...) พารามิเตอร p - รับรหัสของกลุมขอความที่ตองการสงออกจากภาคสงของโมดูล UART1 โดยสามารถกําหนดรูปแบบ การแทรกสัญลักษณพิเศษเพือใช ่ รวมในการแสดงผลเหมือนกับฟงกชัน่ uart1

4.8.6 uart1_set_baud เปนฟงกชั่นกําหนดอัตราบอดในการสื่อสารของโมดูล UART1 กับคอมพิวเตอร รูปแบบ

void uart1_set_baud(unsigned int baud) พารามิเตอร baud - กําหนดคาอัตราบอดในการสื่อสารของโมดูล UART1 ตัวอยางที่ 4-26 uart1_set_baud(19200); // กําหนดอัตราบอดในการสื่อสารเปน 19,200 บิตตอวินาที

4.8.7 uart1_available เปนฟงกชั่นตรวจสอบการรับขอมูลเขามาของโมดูล UART1 เมื่อติดตอกับคอมพิวเตอร รูปแบบ

unsigned char uart1_available(void) การคืนคา - เปน 0 เมื่อไมมีขอมูลเขามา - มากกวา 0 โดยมีคาเทากับจํานวนของอักขระที่ไดรับ ตัวอยางที่ 4-27 char x =uart1_available(); // ตรวจสอบวามีขอมูลเขามาทางภาครับของโมดูล UART1 หรือไม // ถา x มีคามากกวา 0 แสดงวามีขอมูลเขามาแลว ควรอานออกไปดวยฟงกชัน่ uart1_getkey ทันที

4.8.8 uart1_getkey เปนฟงกชั่นอานขอมูลจากบัฟเฟอรตัวรับของโมดูล UART1 รูปแบบ

char uart1_getkey(void) การคืนคา - เปน 0 เมื่อยังไมมีการรับอักขระใดๆ - เปนคาของอักขระทีรั่ บไดในรูปแบบของรหัสแอสกี้


Robo-Creator : AT-BOT activity book  55

4.9 ไลบรารีเพิ่มเติมสําหรับใชงานตัวตรวจจับหนาที่พิเศษ กลุมไลบรารี  สําหรับติดตอกับตัวตรวจจับหนาที่พิเศษของบอรดควบคุม ATX มิไดรวมไวในไฟลไลบรารี atx.h ดังนันเมื ้ อต ่ องการใชงาน จึงตองผนวกเพิ่มเติมไวในตอนตนของโปรแกรมเชนกัน

4.9.1 compass.h ไลบรารีอานคาทิศทางจากเข็มทิศอิเล็กทรอนิกส เปนไฟลไลบรารีชุดคําสังอ ่ านคาจากเข็มทิศอิเล็กทรอนิกส HMC6352 กอนใชงานตองผนวกไฟลไลบรารีใน ตอนตนของโปรแกรมดวยคําสัง่

#include <compass.h> 4.9.1.1 compass_read เปนฟงกชั่นอานคามุมจากโมดูลเข็มทิศอิเล็กทรอนิกส HMC6352 รูปแบบ

int compass_read() การคืนคา คืนคามุม 0 ถึง 359 องศา

4.9.1.2 compass_set_heading เปนฟงกชันกํ ่ าหนดมุมอางอิงจากตําแหนงมุมปจจุบันทีอ่ านไดจากโมดูลเข็มทิศอิเล็กทรอนิกส HMC6352 ใหเปนตําแหนง 0 องศา ซึงก็ ่ คือ การตั้งคามุมอางอิง 0 องศาใหมนันเอง ่ รูปแบบ

void compass_set_heading() 4.9.1.3 compass_read_heading เปนฟงกชั่นอานคามุมอางอิงที่ใชกําหนดตําแหนงจากฟงกชั่น compass_set_heading รูปแบบ int compass_read_heading() การคืนคา - เปนคา 1 ถึง 180 ในกรณีทีตํ่ าแหนงของโมดูลเข็มทิศอิเล็กทรอนิกสเบียงเบนจากมุ ่ มอางอิง 0 องศาไป ในทิศตามเข็มนาฬิกา - เปนคา -1 ถึง -180 ในกรณีทีตํ่ าแหนงของโมดูลเข็มทิศอิเล็กทรอนิกสเบียงเบนจากมุ ่ มอางอิง 0 องศาไป ในทิศทวนเข็มนาฬิกา


56 Robo-Creator : AT-BOT activity book


Robo-Creator : AT-BOT activity book  57



   ในบทนีนํ้ าเสนอตัวอยางการพัฒนาโปรแกรมภาษา C/C++ เบืองต ้ นโดยใชซอฟตแวร Wiring เพือทดสอบการ ่ ใชงานอุปกรณอินพุต/เอาตพุตตางๆ ของแผงวงจรควบคุมหลัก ATX ในชุดหุนยนต  Robo-Creator มี 7 การทดลองหลัก ประกอบดวย การทดลองที่ 1 แสดงผลขอความที่โมดูล LCD การทดลองที่ 2 ใชงานสวิตช SW1 และ SW2 การทดลองที่ 3 อานคาสัญญาณอะนาลอกจาก KNOB ตัวตานทานปรับคาไดบนแผงวงจรควบคุม การทดลองที่ 4 ใชงานลําโพงเปยโซเพื่อกําเนิดเสียง การทดลองที่ 5 ควบคุมมอเตอรไฟตรง การทดลองที่ 6 ควบคุมเซอรโวมอเตอร การทดลองที่ 7 สือสารข ่ อมูลอนุกรมกับคอมพิวเตอร


58 Robo-Creator : AT-BOT activity book

    (1) เปดซอฟตแวร Wiring แลวสรางไฟลสเก็ตชขึนใหม ้ (2) พิมพโปรแกรมภาษา C/C++ ลงในพื้นทีของไฟล ่ สเก็ตช (3) ทําการคอมไพลดวยการคลิกที่ปุม

หรือเลือกที่เมนู Sketch  Compile/Verify

(4) เชื่อมตอแผงวงจร ATX ของชุดหุนยนต  Robo-Creator เขากับพอรต USB ของคอมพิวเตอร เปดสวิตช เพื่อจายไฟเลียง ้ รอจนกระทั่งการเชื่อมตอระหวางคอมพิวเตอรกับแผงวงจร ATX เสร็จสมบูรณ โดยสังเกตจากไฟ สีนําเงิ ้ นทีตํ่ าแหนง USB ติดสวาง (5) เลือกโหมดการทํางานเปนโหมดโปรแกรม ดวยการกดสวิตช START คางไว 3 วินาที ทีโมดู ่ ล LCD ของแผงวงจร ATX แสดงขอความ Robo-Creator > Bootloader

และ LED สีแดงที่ตําแหนงพอรต 48 ติดสวาง (6) ทําการอัปโหลดโปรแกรมดวยการคลิกที่ปุม หรือคลิกเลือกที่เมนู File  Upload to Wiring hardware (7) รอจนกระทังการอั ่ ปโหลดเสร็จสมบูรณและไมมีขอผิดพลาดใดๆ ใหกดสวิตช START อีกครัง้ แผงวงจร Creator controller จะรันโปรแกรมทีอั่ ปโหลดลาสุดทันที


Robo-Creator : AT-BOT activity book  59

 การทดลองที่ 1.1 แสดงขอความอยางงายทีโมดู ่ ล LCD การทดลองนี้เปนการเขียนโปรแกรมเพื่อแสดงขอความ Hello Robot! ที่โมดูล LCD

ขันตอน ้ L1.1.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน lcd_01 พิมพโปรแกรมที่ L1-1 แลวบันทึกไฟล L1.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L1.1.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ Hello Robot!

#include <atx.h> // ผนวกไฟลไลบรารีหลัก void setup() { lcd(“Hello Robot!”); // แสดงขอความที่โมดูล LCD } void loop() { } คําอธิบายโปรแกรม โปรแกรมทํางานภายในฟงกชัน่ setup ซึงมี ่ เพียงคําสังเดี ่ ยวคือ สังให ่ โมดูล LCD แสดงขอความ Hello Robot! จากนั้นโปรแกรมจะหลุดไปทํางานในฟงกชัน่ loop ซึงไม ่ มีการกําหนดคําสังใดๆ ่ ภายในโปรแกรม ผลลัพธโดยรวมจึง เห็นการแสดงขอความเทานั้น

โปรแกรมที่ L1-1 ไฟล lcd_01.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการแสดงผล โมดูล LCD ของแผงวงจร ATX ในชุดหุนยนต  Robo-Creator สําหรับกิจกรรมหุนยนต  AT-BOT


60 Robo-Creator : AT-BOT activity book

การทดลองที่ 1.2 แสดงขอความ 2 บรรทัดทีโมดู ่ ล LCD ในการทดลองนี้เปนการเขียนโปรแกรมเพื่อแสดงขอความ 2 บรรทัดทีโมดู ่ ล LCD ของแผงวงจรควบคุม Creator controller

ขันตอน ้ L1.2.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน lcd_02 พิมพโปรแกรมที่ L1-2 L1.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L1.2.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ Line1 Line2

#include <atx.h> // ผนวกไฟลไลบรารีหลัก void setup() { } void loop() { lcd(“Line1#nLine2”); // แสดงขอความที่โมดูล LCD } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop ซึงกํ ่ าหนดใหแสดงผลขอ ความที่โมดูล LCD โดยตัดขอความ Line2 ใหไปแสดงบนบรรทัดที่ 2 (บรรทัดลาง) ของจอแสดงผล อันเปนผลจาก การทํางานของรหัสควบคุม #n ผลลัพธโดยรวมจึงเห็นการแสดงขอความ 2 บรรทัด

โปรแกรมที่ L1-2 ไฟล lcd_02.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการแสดงผล โมดูล LCD 2 บรรทัดของแผงวงจร ATX ในชุดหุนยนต  Robo-Creator สําหรับกิจกรรมหุนยนต  AT-BOT


Robo-Creator : AT-BOT activity book  61

การทดลองที่ 1.3 แสดงขอความและตัวเลขที่โมดูล LCD ในการทดลองนี้เปนการเขียนโปรแกรมแสดงขอความผสมกับตัวเลขที่โมดูล LCD โดยแสดงคาการนับ ขึนทุ ้ กๆ 1 วินาที

ขันตอน ้ L1.3.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน lcd_03 พิมพโปรแกรมที่ L1-3 L1.3.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L1.3.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ Count: xxx

โดยที่ xxx คือคาการนับที่เพิ่มขึ้นทุกๆ 1 วินาที #include <atx.h> // ผนวกไฟลไลบรารีหลัก int i = 0; // กําหนดตัวแปรเก็บคาการนับ void setup() { } void loop() { lcd(“Count: %d “,i); // แสดงคาการนับทีโมดู ่ ล LCD sleep(1000); // หนวงเวลา 1 วินาที i++; // เพิมค ่ าการนับ 1 คา } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในสวนฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop ซึงกํ ่ าหนดใหแสดง คาการนับทีมี่ การเพิ่มคาขึ้นทุกๆ 1 วินาที โดยมีตัวแปร i ทําหนาที่เก็บคาการนับ

โปรแกรมที่ L1-3 ไฟล lcd_03.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการแสดงขอความ และตัวเลขบนโมดูล LCD ของแผงวงจร ATX สําหรับกิจกรรมหุนยนต  AT-BOT


62 Robo-Creator : AT-BOT activity book

 การทดลองที่ 2.1 ใชงาน SW1 เพื่อเริมต ่ นนับคาตัวเลข ในการทดลองนี้เปนการเขียนโปรแกรมเพื่อใชงานสวิตช SW1 บนแผงวงจรควบคุม ATX ในการเริ่มตน การนับคาตัวเลข ซึงจะเริ ่ ่มทํางานเมือมี ่ การกดสวิตช SW1 คาที่นับไดนํามาแสดงผลที่โมดูล LCD

ขันตอน ้ L2.1.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน switch_01 พิมพโปรแกรมที่ L2-1 L2.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L2.1.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ SW1 Press!

L2.1.4 กดสวิตช SW1 แลวปลอย โปรแกรมจะเริมต ่ นการนับคาขึ้นและแสดงขอความที่โมดูล LCD เปน Count: xxx

โดยที่ xxx คือคาการนับที่เพิ่มขึ้นทุกๆ 1 วินาที #include <atx.h> // ผนวกไฟลไลบรารีหลัก int i=0; // กําหนดตัวแปรเก็บคาการนับ void setup() { lcd(“SW1 Press!”); // แสดงขอความเริ่มตนที่โมดูล LCD sw1_press(); // รอการกดสวิตช SW1 lcd(“#c”); // เคลียรขอความเดิมกอนแสดงขอความตอไป } void loop() { lcd(“Count: %d “,i); // แสดงคาการนับทีโมดู ่ ล LCD sleep(1000); // หนวงเวลา 1 วินาที i++; // เพิมค ่ าการนับขึ้น 1 คา } คําอธิบายโปรแกรม โปรแกรมเริมต ่ นทํางานภายในฟงกชัน่ setup เพือรอการกดสวิ ่ ตช SW1 โดยมีการแจงเตือนดวยขอความ SW1 Press! ทีโมดู ่ ล LCD หลังจากทีมี่ การกดสวิตช SW1 โปรแกรมจะวนทํางานภายในฟงกชัน่ loop ซึงกํ ่ าหนดใหแสดง คาการนับทีเพิ ่ มค ่ าขึ้นทุกๆ 1 วินาที โดยมีตัวแปร i ทําหนาที่เก็บคาการนับ

โปรแกรมที่ L2-1 ไฟล switch_01.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการอานคาจาก สวิตช SW1 ของแผงวงจร ATX


Robo-Creator : AT-BOT activity book  63

การทดลองที่ 2.2 ตรวจสอบการกดสวิตช SW1 และ SW2 ในชวงเวลาใดๆ ในการทดลองนีเป ้ นการเขียนโปรแกรมตรวจสอบการกดสวิตช SW1 และ SW2 เพือใช ่ ในการเพิ่มและลด คาการนับของตัวแปร พรอมทั้งแสดงคาการนับที่โมดูล LCD

ขันตอน ้ L2.2.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน switch_02 พิมพโปรแกรมที่ L2-2 L2.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX #include <atx.h> // ผนวกไฟลไลบรารีหลัก int i=10; // กําหนดตัวแปรเก็บคาการนับใหมีคาเริ่มตนที่ 10 void setup() { } void loop() { lcd(“Count: %d “,i); // แสดงคาการนับทีโมดู ่ ล LCD if(sw1()==0) // ตรวจสอบวา สวิตช SW1 ถูกกดหรือไม { i++; // เพิมค ่ าการนับขึ้น 1 คา sleep(200); // หนวงเวลาเพือลดการรบกวนจากหน ่ าสัมผัสของสวิตช } if(sw2()==0) // ตรวจสอบวา สวิตช SW2 ถูกกดหรือไม { i -- ; // ลดคาการนับลง 1 คา sleep(200); // หนวงเวลาเพือลดการรบกวนจากหน ่ าสัมผัสของสวิตช } } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop ซึงเป ่ นการวนตรวจสอบ การกดสวิตช SW1 และ SW2 อยูตลอดเวลา รวมถึงการแสดงคาการนับของตัวแปร i ทีโมดู ่ ล LCD ดวย เงื่อนไขการตรวจสอบภายใน loop มีดังนี้ 1. เมือพบว ่ า สวิตช SW1 ถูกกด (ฟงกชัน่ sw1() คืนคาเปน 0 ) โปรแกรมตอบสนองดวยการเพิ่มคาการนับของตัวแปร i ขึ้น 1 คา แลวหนวงเวลาเล็กนอยเพือลด ่ ปญหาการตรวจพบการกดซํ้าอันเปนผลมาจากการรบกวนของหนาสัมผัสสวิตช 2. เมือพบว ่ า สวิตช SW2 ถูกกด (ฟงกชัน่ sw2() คืนคาเปน 0 ) โปรแกรมตอบสนองดวยการลดคาการนับของตัวแปร i ลง 1 คา

โปรแกรมที่ L2-2 ไฟล switch_02.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการกดสวิตช SW1 และ SW2 ของแผงวงจรควบคุม ATX


64 Robo-Creator : AT-BOT activity book

L2.2.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ Count: xxx

โดยที่ xxx คือคาการนับขึน้ คาเริมต ่ นของโปรแกรมเปน 10 L2.2.4 กดสวิตช SW1 สังเกตการทํางานทีโมดู ่ ล LCD ทุกครั้งที่กดสวิตช SW1 คาการนับจะถูกเพิ่มขึ้น 1 คา L2.2.5 กดสวิตช SW2 สังเกตการทํางานทีโมดู ่ ล LCD ทุกครั้งที่กดสวิตช SW2 คาการนับจะลดลง 1 คา


Robo-Creator : AT-BOT activity book  65

   การทดลองที่ 3.1 แสดงคาตําแหนงการหมุนของ KNOB ที่โมดูล LCD การทดลองนีเป ้ นการเขียนโปรแกรมเพืออ ่ านคาตําแหนงของการปรับหมุนแกนของตัวตานทานปรับคาได ที่ ตําแหนง KNOB ของแผงวงจรควบคุม ATX ทีโมดู ่ ล LCD โดยผลลัพธมีคาในชวง 0 ถึง 1,023

ขันตอน ้ L3.1.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน knob_01 พิมพโปรแกรมที่ L3-1 L3.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L3.1.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ KNOB: xxx

โดยที่ xxx คือ คาตําแหนงของการปรับหมุนแกนของ KNOB มีคาในชวง 0 ถึง 1,023 โดย - ถาปรับแกนหมุนไปทางซายสุด คาทีอ่ านไดเปน 0 - ถาปรับแกนหมุนไปทางขวาสุด คาทีอ่ านไดเปน 1023 - ถาปรับแกนหมุนมายังตําแหนงกึงกลาง ่ คาทีอ่ านไดเปน 512 #include <atx.h> // ผนวกไฟลไลบรารีหลัก void setup() { } void loop() { lcd(“KNOB: %d “,knob()); // แสดงคาที่อานไดจาก KNOB ทีโมดู ่ ล LCD sleep(100); // หนวงเวลา 0.1 วินาที เพือให ่ แสดงผลไดชัดเจนขึ้น } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop ซึงกํ ่ าหนดใหแสดงคาที่ อานไดจาก KNOB ทีโมดู ่ ล LCD

โปรแกรมที่ L3-1 ไฟล knob_01.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการอานคาจาก ตัวตานทานปรับคาได KNOB ของแผงวงจรควบคุม ATX


66 Robo-Creator : AT-BOT activity book

การทดลองที่ 3.2 ใชงาน KNOB ในการเลือกโหมดนับคาขึ้น-ลง ในการทดลองนี้เปนการเขียนโปรแกรมเพื่อใชงาน KNOB เปนตัวกําหนดทิศทางการนับคา โดยกําหนด เงื่อนไขวา ถา KNOB ถูกปรับมาทางซายเมื่อเทียบกับตําแหนงกึ่งกลาง จะเปนการเลือกใหนับคาลง แตถาเปนตรง ขาม จะเปนการเลือกใหนับคาขึน้ โดยแสดงคาการนับที่โมดูล LCD

ขันตอน ้ L3.2.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน knob_02 พิมพโปรแกรมที่ L3-2 L3.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L3.2.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ Count: xxx Count Up

ในกรณีทีทํ่ างานในโหมดนับขึน้ หรือ Count: xxx Count Down

ในกรณีทีทํ่ างานในโหมดนับลง ่ นของโปรแกรมเทากับ 100 โดยที่ xxx คือคาการนับ คาเริมต โปรแกรมจะทําการนับขึนหรื ้ อลงขึ้นอยูกับคาของ KNOB ซึงเกิ ่ ดจากการหมุนแกนของตัวตานทานปรับ คาไดทีตํ่ าแหนง KNOB ของแผงวงจรควบคุม ATX L3.2.4 ปรับแกนหมุน KNOB ใหเลยตําแหนงกึ่งกลางมาทางซาย (หรืออาจปรับมาซาย) จะพบวา โปรแกรมทํางานในโหมดนับลง คาการนับจะลดลง 1 คาทุกๆ 1 วินาที L3.2.5 ปรับแกนหมุน KNOB ใหเลยตําแหนงกึ่งกลางมาทางขวา (หรืออาจปรับมาขวาสุด) จะพบวา โปรแกรมทํางานในโหมดนับขึน้ คาการนับจะถูกเพิ่มขึ้น 1 คาทุกๆ 1 วินาที


Robo-Creator : AT-BOT activity book  67

#include <atx.h> // ผนวกไฟลไลบรารีหลัก int i=100; // กําหนดตัวแปรเก็บคาการนับ มีคาเริ่มตนเทากับ 100 int k; // กําหนดตัวแปรเก็บคาที่อานไดจาก KNOB void setup() { } void loop() { lcd(“Count: %d “,i); // แสดงคาการนับทีโมดู ่ ล LCD k = knob(); // อานคา KNOB มาเก็บทีตั่ วแปร k if(k>512) // ตรวจสอบวา KNOB เลยตําแหนงกึ่งกลางไปทางขวาหรือไม { i++; // ถาแกนหมุนของ KNOB เลยกึ่งกลางมาทางขวา ใหเพิมค ่ าการนับ lcd(“#nCount Up “); // แสดงขอความในโหมดนับขึ้นที่บรรทัดที่ 2 ของโมดูล LCD } else { i -- ; // ถาแกนหมุนของ KNOB เลยกึ่งกลางมาทางซาย ใหลดคาการนับ lcd(“#nCount Down “); // แสดงขอความในโหมดนับลงทีบรรทั ่ ดที่ 2 ของโมดูล LCD } sleep(1000);// หนวงเวลา 1 วินาที } คําอธิบายโปรแกรม โปรแกรมเริมต ่ นทํางานภายในฟงกชัน่ setup จากนันวนทํ ้ างานภายในฟงกชัน่ loop ซึงมี ่ การตรวจสอบตําแหนง การปรับแกนหมุนของ KNOB อยางตอเนือง ่ พรอมกันนั้นยังแสดงคาการนับของตัวแปร i และโหมดการนับทีโมดู ่ ล LCD ดวย โดยมีเงื่อนไขการตรวจสอบดังนี้ 1. เมือพบว ่ า คาของ KNOB มากกวา 512 โปรแกรมตอบสนองดวยการเพิ่มคาการนับของตัวแปร i ขึ้น 1 คา พรอมทั้งแสดงขอความ Count Up เพือแจ ่ งวา ขณะนี้ทําการนับขึ้น 2. เมือพบว ่ า คาของ KNOB นอยกวา 512 (ทํางานในสวน else) โปรแกรมตอบสนองดวยการลดคาการนับของตัวแปร i ลง 1 คา พรอมทั้งแสดงขอความ Count Down เพือแจ ่ งวา ขณะนี้กําลังนับลง

โปรแกรมที่ L3-2 ไฟล knob_02.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบ การอานคาจาก KNOB เพือกํ ่ าหนดทิศทางการนับคาของแผงวงจรควบคุม ATX


68 Robo-Creator : AT-BOT activity book

  การทดลองที่ 4.1 แจงเตือนเมื่อกดสวิตช SW1 หรือ SW2 การทดลองนี้เปนการเขียนโปรแกรมกําเนิดเสียงเมื่อมีการกดสวิตช SW1 หรือ SW2 โดยกําเนิดสัญญาณ เสียงความถี่ 500Hz นาน 0.1 วินาที 1 ครั้งเมื่อสวิตช SW1 ถูกกด และเมื่อสวิตช SW2 ถูกกด จะกําเนิดสัญญาณ เสียงความถี่ 2000Hz นาน 0.5 วินาที 1 ครั้งแทน

ขันตอน ้ L4.1.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน sound_01 พิมพโปรแกรมที่ L4-1 L4.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L4.1.3 รันโปรแกรม กดสวิตช SW1 ทุกครั้งที่กดสวิตช SW1 จะไดยินเสียงความถี่ 500Hz นาน 0.1 วินาทีทีลํ่ าโพงเปยโซ L4.1.4 กดสวิตช SW2 ทุกครั้งที่กดสวิตช SW2 จะไดยินเสียงความถี่ 2000Hz นาน 0.5 วินาที #include <atx.h> // ผนวกไฟลไลบรารีหลัก void setup() { } void loop() { if(sw1()==0) // ตรวจสอบวา สวิตช SW1 ถูกกดหรือไม { beep(); // กําเนิดเสียงความถี่ 500Hz นาน 0.1 วินาที sleep(100); // หนวงเวลาเพือลดการรบกวนจากหน ่ าสัมผัสของสวิตช } if(sw2()==0) // ตรวจสอบวาสวิตช SW2 ถูกกดหรือไม { sound(2000,500); // กําเนิดเสียงความถี่ 2000Hz นาน 0.5 วินาที sleep(100); // หนวงเวลาเพือลดการรบกวนจากหน ่ าสัมผัสของสวิตช (อาจไมมีก็ได) } } คําอธิบายโปรแกรม โปรแกรมวนทํางานภายในฟงกชัน่ loop เพือตรวจสอบการกดสวิ ่ ตช SW1 และ SW2 โดยมีเงื่อนไขดังนี้ 1. เมือพบว ่ าสวิตช SW1 ถูกกด (ฟงกชัน่ sw1() คืนคาเปน 0 ) โปรแกรมตอบสนองดวยการกําเนิดเสียงความถี่ 500Hz นาน 0.1 วินาที 2. เมือพบว ่ าสวิตช SW2 ถูกกด (ฟงกชัน่ sw2() คืนคาเปน 0 ) โปรแกรมตอบสนองดวยการกําเนิดเสียงความถี่ 2000 Hz นาน 0.5 วินาที

โปรแกรมที่ L4-1 ไฟล sound_01.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการกําเนิดเสียง


Robo-Creator : AT-BOT activity book  69

การทดลองที่ 4.2 ปรับความถีเสี ่ ยงดวย KNOB การทดลองนีเป ้ นการเขียนโปรแกรมกําเนิดเสียง ซึงสามารถเปลี ่ ยนความถี ่ ได ่ จากการปรับคาทีตั่ วตานทาน ปรับคาไดที่ตําแหนง KNOB พรอมกันนั้นยังนําคาความถีมาแสดงที ่ ่โมดูล LCD ดวย

ขันตอน ้ L4.2.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน sound_02 พิมพโปรแกรมที่ L4-2 L4.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L4.2.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ Freq: xxx Hz

โดยที่ xxx คือคาความถีเสี ่ ยงทีกํ่ าเนิดขึ้น ซึงสั ่ มพันธกับการปรับแกนหมุนของ KNOB L4.2.4 คอยๆปรับแกนหมุนของ KNOB จากทางซายสุดมาขวาสุด จะพบวาคาความถีเสี ่ ยงทีแสดงบนโมดู ่ ล LCD จะคอยๆ เพิ่มขึ้น ตั้งแต 0 จนถึง 2046 Hz (เปน 2 เทา ของคาทีอ่ านไดจาก KNOB) เสียงทีได ่ ยินจะคอยๆ แหลมขึ้นตามคาความถีที่ ปรั ่ บสูงขึ้น #include <atx.h> // ผนวกไฟลไลบรารีหลัก int k; // กําหนดตัวแปรเก็บคาที่อานไดจาก KNOB int f; // กําหนดตัวแปรเก็บคาความถี่เสียง void setup() { } void loop() { k = knob(); // อานคา KNOB มาเก็บทีตั่ วแปร k f = 2*k; // คํานวณคาความถี่เสียงใหเปน 2 เทาของคา KNOB lcd(“Freq: %d Hz “,f); // แสดงคาความถี่เสียง sound(f,200); // กําเนิดเสียงจากคาตัวแปร f( 2 เทาของคา KNOB)นาน 0.2 วินาที sleep(1000); // หนวงเวลา 1 วินาทีเพือเว ่ นหวงของเสียง } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop เพือวนอ ่ านคาจากการ ปรับแกนหมุนของ KNOB นําคาที่อานไดคูณดวย 2 เพือใช ่ เปนคาความถี่ทีต่ องการกําหนดขึ้น จึงมีคาในชวง 0 ถึง 2046Hz พรอมทั้งแสดงคาความถี่ทีโมดู ่ ล LCD สําหรับการกําเนิดเสียงทีลํ่ าโพงเปยโซ โปรแกรมจะมีการเวนระยะทุกๆ 1 วินาทีโดยประมาณ

โปรแกรมที่ L4-2 ไฟล sound_02.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบ การกําเนิดสัญญาณเสียงจากการปรับคาของ KNOB ในแผงวงจรควบคุม ATX


70 Robo-Creator : AT-BOT activity book

 การทดลองที่ 5.1 ควบคุมทิศทางการหมุนของมอเตอรไฟตรง ในการทดลองนี้เปนการเขียนโปรแกรมเพื่อควบคุมมอเตอรไฟตรงที่เอาตพุตชอง 0 และ 1 ใหหมุนกลับ ทิศทางทุกๆ 3 วินาทีอยางตอเนือง ่

การเชือมต ่ อฮารดแวร ตอมอเตอรไฟตรงตัวที่ 1 เขากับเอาตพุตมอเตอรไฟตรงชอง 0 ของแผงวงจรควบคุม ATX  ตอมอเตอรไฟตรงตัวที่ 2 เขากับเอาตพุตมอเตอรไฟตรงชอง 1 ของแผงวงจรควบคุม ATX 

41 ADC1

40 ADC0

46 ADC6

45 ADC5

44 ADC4

5

42 ADC2

4

43 ADC3

START



C r e a t o r e > >> > > > > > 3

c o n t r o l l er R b o a r d USB DATA

2

ON TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

1

E2

KNOB

ADC7

SW1

49

SW2

50

48

SERVO PORT 9

BATTERY LEVEL

10 11 12 13 S

8

+

-

7.2-9V BATT.

0

RESET

14

PC6

15 PC7

MOTOR




Robo-Creator : AT-BOT activity book  71

#include <atx.h> void setup() { } void loop() { motor(0,70); motor(1,70); sleep(3000); motor(0,-70); motor(1,-70); sleep(3000);

// ผนวกไฟลไลบรารีหลัก

// ขับมอเตอรชอง 0 ดวยกําลัง 70% ของกําลังสูงสุด // ขับมอเตอรชอง 1 ดวยกําลัง 70% ของกําลังสูงสุด // หนวงเวลา 3 วินาทีกอนกลับทิศทางการหมุนของมอเตอร // ขับมอเตอรชอง 0 ดวยกําลัง 70% มีทิศทางการหมุนตรงขามกับคากําลังที่เปนบวก // ขับมอเตอรชอง 1 ดวยกําลัง 70% มีทิศทางการหมุนตรงขามกับคากําลังที่เปนบวก // หนวงเวลา 3 วินาทีกอนกลับทิศทางการหมุนของมอเตอร

} คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop เพือขั ่ บมอเตอรไฟตรง ชอง 0 และ 1 พรอมๆ กันดวยกําลังขับ 70% เทากันทั้งคู และทุกๆ 3 วินาทีจะทําการกลับทิศทางการหมุนเปนเชนนี้ ไปอยางตอเนือง ่

โปรแกรมที่ L5-1 ไฟล motor_01.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการขับมอเตอร ไฟตรงของแผงวงจรควบคุม ATX

ขันตอน ้ L5.1.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน motor_01 พิมพโปรแกรมที่ L5-1 L5.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L5.1.3 จากนันทํ ้ าการรันโปรแกรม มอเตอรไฟตรงที่ชอง 0 และ 1 เริมหมุ ่ น และมีการหมุนกลับทิศทางในทุกๆ 3 วินาที


72 Robo-Creator : AT-BOT activity book

การทดลองที่ 5.2 ขับมอเตอรไฟตรงเปนจังหวะ ในการทดลองนีเป ้ นการเขียนโปรแกรมควบคุมมอเตอรไฟตรงที่ตอกับเอาตพุตชอง 0 และ 1 ใหหมุนเปน เวลา 3 วินาที หลังจากนั้นหยุดขับเปนเวลา 3 วินาทีสลับกันอยางตอเนือง ่

การเชือมต ่ อฮารดแวร ตอมอเตอรไฟตรงตัวที่ 1 เขากับเอาตพุตมอเตอรไฟตรงชอง 0 ของแผงวงจรควบคุม ATX  ตอมอเตอรไฟตรงตัวที่ 2 เขากับเอาตพุตมอเตอรไฟตรงชอง 1 ของแผงวงจรควบคุม ATX 

ขันตอน ้ L5.2.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน motor_02 พิมพโปรแกรมที่ L5-2 L5.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L5.2.3 ยกแผงวงจรควบคุม Creator controller ใหพนจากพื้น จากนั้นทําการรันโปรแกรม มอเตอรไฟตรงที่ชอง 0 และ 1 หมุนเปนเวลา 3 วินาที แลวหยุด 3 วินาที จากนันหมุ ้ นอีก 3 วินาที สลับกันอยางตอเนือง ่ #include <atx.h> // ผนวกไฟลไลบรารีหลัก void setup() { } void loop() { motor(0,90); // ขับมอเตอรชอง 0 ดวยกําลัง 90% ของกําลังสูงสุด motor(1,90); // ขับมอเตอรชอง 1 ดวยกําลัง 90% ของกําลังสูงสุด sleep(3000); // หนวงเวลา 3 วินาที motor_stop(0); // หยุดขับมอเตอรชอง 0 motor_stop(1); // หยุดขับมอเตอรชอง 1 sleep(3000); // หนวงเวลา 3 วินาที } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop ซึงกํ ่ าหนดใหขับมอเตอร ไฟตรงชอง 0 และ 1 พรอมกันดวยกําลังขับ 90% เทากันทั้งคู เมือครบ ่ 3 วินาทีมอเตอรจะหยุดหมุนเปนเวลา 3 วินาที แลววนกลับไปหมุนอีกครัง้ สลับการทํางานกันอยางตอเนือง ่

โปรแกรมที่ L5-2 ไฟล motor_02.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบ การขับและหยุดขับมอเตอรไฟตรงของแผงวงจรควบคุม ATX


Robo-Creator : AT-BOT activity book  73

 การทดลองที่ 6.1 ควบคุมตําแหนงแกนหมุนของเซอรโวมอเตอร ในการทดลองนีเป ้ นการเขียนโปรแกรมควบคุมแกนหมุนของเซอรโวมอเตอรที่ตอกับเอาตพุตเซอรโว มอเตอรชอง 12 ใหหมุนไปยังตําแหนง 60 องศา แลวหยุดเพือล็ ่ อกตําแหนงไวเปนเวลา 5 วินาที จากนั้นเปลียนมา ่ ยังตําแหนง 120 องศา แลวหยุดล็อกตําแหนงไว 5 วินาทีเชนกัน จากนั้นหมุนแกนกลับไปยังตําแหนง 60 องศาอีก ครั้ง สลับตําแหนงไปมาเชนนี้อยางตอเนือง ่

การเชื่อมตอฮารดแวรเพิมเติ ่ ม

41 ADC1

40 ADC0

46 ADC6

45 ADC5

44 ADC4

5

42 ADC2

4

43 ADC3

START

ตอ RC เซอรโวมอเตอรเขากับเอาตพุตเซอรโวมอเตอรชอง 12

C r e a t o r e > >> > > > > >

 

3

c o n t r o l l er R b o a r d USB DATA

2

ON TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

1

E2

KNOB

ADC7

SW1

49

SW2

50

48

0

RESET

SERVO PORT 9

BATTERY LEVEL

10 11 12 13 S

8

+

-

7.2-9V BATT.

14

PC6

15

PC7

MOTOR

STANDARD SERVO MOTOR


74 Robo-Creator : AT-BOT activity book

#include <atx.h> // ผนวกไฟลไลบรารีหลัก void setup() { } void loop() { servo(12,60); // ขับเซอรโวมอเตอรชอง 12 ไปยังตําแหนง 60 องศา sleep(5000); // หนวงเวลา 5 วินาที servo(12,120); // ขับเซอรโวมอเตอรชอง 12 ไปยังตําแหนง 120 องศา sleep(5000); // หนวงเวลา 5 วินาที } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนันวนทํ ้ างานภายในฟงกชัน่ loop เพือขั ่ บเซอรโวมอเตอรใหหมุน แกนไปมาระหวางตําแหนง 60 และ 120 องศาในทุกๆ 5 วินาที

โปรแกรมที่ L6-1 ไฟล lcd_02.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการขับเซอรโว มอเตอรของแผงวงจรควบคุม ATX

ขันตอน ้ L6.1.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน servo_01 พิมพโปรแกรมที่ L6-1 L6.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L6.1.3 รันโปรแกรม แกนหมุนของเซอรโวมอเตอรจะหมุนไปมาระหวางตําแหนง 60 และ 120 องศาทุกๆ 5 วินาที

การทดลองที่ 6.2 ปรับตําแหนงแกนหมุนของเซอรโวมอเตอรดวยสวิตช การทดลองนี้เปนการเขียนโปรแกรมปรับตําแหนงเซอรโวมอเตอรดวยการกดสวิตช SW1 เพื่อเพิ่มคา ตําแหนง และกดสวิตช SW2 เพือลดค ่ าตําแหนง อันเปนการทดสอบการกําหนดตําแหนงแกนหมุนของเซอรโวมอเตอร

การเชื่อมตอฮารดแวรเพิมเติ ่ ม 

ตอ RC เซอรโวมอเตอรเขากับเอาตพุตเซอรโวมอเตอรชอง 12

ขันตอน ้ L6.2.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน servo_02 พิมพโปรแกรมที่ L6-2 L6.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX


Robo-Creator : AT-BOT activity book  75

#include <atx.h> // ผนวกไฟลไลบรารีหลัก int p=90; // กําหนดตัวแปรเก็บคาตําแหนงเซอรโวมอเตอร คาเริ่มตนเปน 90 void setup() { } void loop() { servo(12,p); // ขับเซอรโวมอเตอรชอง 12 ไปยังตําแหนงที่กําหนดดวยคาของตัวแปร p lcd(“Servo: %d “,p); // แสดงคาตําแหนงปจจุบันของแกนหมุนเซอรโวมอเตอร if(sw1()==0) // ตรวจสอบวา สวิตช SW1 ถูกกดหรือไม { p++; // เพิมค ่ าตําแหนงของแกนหมุนเซอรโวมอเตอรขึ้น 1 คา if(p>180) // คาตําแหนงแกนหมุนเกิน 180 หรือไม { p=0; // ถาเกิน กําหนดคาตําแหนงใหเปน 0 } sleep(100); // หนวงเวลา } if(sw2()==0) // ตรวจสอบวา สวิตช SW2 ถูกกดหรือไม { p --- ; // ลดคาตําแหนงของแกนหมุนเซอรโวมอเตอรลง 1 คา if(p<0) // คาตําแหนงแกนหมุนตํ่ากวา 0 หรือไม { p=0; // กําหนดคาตําแหนงใหเปน 0 } sleep(100); // หนวงเวลา } } คําอธิบายโปรแกรม โปรแกรมวนทํางานภายในฟงกชัน่ loop เพือขั ่ บแกนหมุนของเซอรโวมอเตอรใหเคลื่อนที่ไปยังตําแหนงที่เก็บ ไวในตัวแปร p พรอมกับแสดงคาตําแหนงที่โมดูล LCD นอกจากนี้ยังมีเงื่อนไขการตรวจสอบภายใน loop ดังนี้ 1. เมือพบว ่ าสวิตช SW1 ถูกกด (ฟงกชัน่ sw1() คืนคาเปน 0) โปรแกรมตอบสนองดวยการเพิ่มคาตัวแปร p ขึ้น 1 คา และตรวจสอบวา เกิน 180 หรือไม หาก เกินจะกําหนดคาตําแหนงกลับมาเริ่มตนที่ 0 ใหม จากนั้นหนวงเวลาเพือไม ่ ใหเกิดการเพิมค ่ าเร็วเกินไป 2. เมือพบว ่ าสวิตช SW2 ถูกกด (ฟงกชัน่ sw2() คืนคาเปน 0) โปรแกรมตอบสนองดวยการลดคาของตัวแปร p ลง 1 คา และตรวจสอบวา มีคาตํ่ากวา 0 หรือไม ถาใช จะกําหนดคาตําแหนงกลับมาเริ่มตนที่ 0 ใหม จากนั้นหนวงเวลา

โปรแกรมที่ L6-2 ไฟล servo_02.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการปรับ ตําแหนงแกนหมุนของเซอรโวมอเตอรดวยสวิตชของแผงวงจรควบคุม ATX


76 Robo-Creator : AT-BOT activity book

L6.2.3 รันโปรแกรม ทีโมดู ่ ล LCD ของแผงวงจรควบคุม ATX แสดงขอความ Servo: xxx

โดยที่ xxx คือคาตําแหนงแกนหมุนของเซอรโวมอเตอรในปจจุบัน มีคาเริมต ่ นที่ 90 L6.2.4 กดสวิตช SW1 คาตําแหนงของเซอรโวมอเตอรจะถูกเพิมขึ ่ ้น 1 คา พรอมกันนั้นแกนหมุนของเซอรโวมอเตอรจะถูกขับให เคลื่อนทีไปตามค ่ าทีเพิ ่ ่มขึ้นดวย เมื่อเพิ่มคาจนถึง 180 คาตําแหนงจะวนกลับมาเริมต ่ นที่ 0 ใหม L6.2.5 กดสวิตช SW2 คาตําแหนงของเซอรโวมอเตอรจะลดลง 1 คา พรอมกันนันแกนหมุ ้ นของเซอรโวมอเตอรจะถูกขับใหเคลือน ่ ทีไปตามค ่ าทีลดลงด ่ วย เมื่อลดคาจนตํ่ากวา 0 คาตําแหนงจะกลับมาเริมต ่ นที่ 0 ใหม


Robo-Creator : AT-BOT activity book  77

   การทดลองที่ 7.1 สงขอมูลไปยังคอมพิวเตอร ในการทดลองนี้เปนการเขียนโปรแกรมทดสอบสงขอมูลจากแผงวงจรควบคุม ATX ไปยังคอมพิวเตอร เพื่อแสดงผลที่หนาตาง Serial Monitor ของ Wiring ผานทางสาย USB ที่เชื่อมตอระหวางแผงวงจรควบคุม ATX กับพอรต USB ของคอมพิวเตอร โดยสงขอความ Hello Robot! ไปแสดงทุกๆ 2 วินาที

41 ADC1

40 ADC0

46 ADC6

45 ADC5

44 ADC4

5

42 ADC2

4

43 ADC3

START



C r e a t o r e > >> > > > > > 3

c o n t r o l l er R b o a r d USB DATA

2

ON TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

1

E2

KNOB

ADC7

SW1

49

SW2

50

48

SERVO PORT 9

BATTERY LEVEL

10 11 12 13 S

8

+

-

7.2-9V BATT.

0

RESET

14

PC6

15

PC7

MOTOR

ขันตอน ้ L7.1.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน uart_01 พิมพโปรแกรมที่ L7-1 L7.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX โดยยังเชื่อมตอสาย USB กับคอมพิวเตอร ไวกอน


78 Robo-Creator : AT-BOT activity book

#include <atx.h> // ผนวกไฟลไลบรารีหลัก void setup() { } void loop() { uart(“Hello Robot!\r\n”); // สงขอมูลไปยังคอมพิวเตอรแบบขึ้นบรรทัดใหม sleep(2000); // หนวงเวลา 2 วินาที } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนันวนทํ ้ างานภายในฟงกชัน่ loop เพือส ่ งขอความ Hello Robot! ไปยังคอมพิวเตอรทุกๆ 2 วินาทีอยางตอเนือง ่

โปรแกรมที่ L7-1 ไฟล uart_01.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการสงขอมูลไป ยังคอมพิวเตอรของแผงวงจรควบคุม ATX L7.1.3 รันโปรแกรม คลิกที่ปุม

เพื่อเปดหนาตาง Serial Monitor

หนาตาง Serial Monitor ปรากฏขึ้นพรอมกับแสดงขอความ Hello Robot! ทีละบรรทัดทุกๆ 2 วินาที


Robo-Creator : AT-BOT activity book  79

การทดลองที่ 7.2 สงคาของ KNOB ไปแสดงที่คอมพิวเตอร การทดลองนี้เปนการเขียนโปรแกรมสงคาจากการปรับแกนหมุนของ KNOB บนแผงวงจรควบคุม ATX ไปยังคอมพิวเตอร โดยแสดงผลที่หนาตาง Serial Monitor ของ Wiring

ขันตอน ้ L7.2.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน uart_02 พิมพโปรแกรมที่ L7-2 L7.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L7.2.3 ยังคงเชื่อมตอสาย USB กับคอมพิวเตอรเอาไวกอน L7.2.3 รันโปรแกรม คลิกที่ปุม

เพื่อเปดหนาตาง Serial Monitor

หนาตาง Serial Monitor ปรากฏขึ้นพรอมกับแสดงขอความ KNOB: xxx ทีละบรรทัดทุกๆ 0.1 วินาที โดยคา xxx มีคาในชวง 0 ถึง 1,023

#include <atx.h> // ผนวกไฟลไลบรารีหลัก void setup() { } void loop() { uart(“KNOB: %d \r\n”,knob()); // สงคาของ KNOB ไปแสดงทีคอมพิ ่ วเตอร sleep(100); // หนวงเวลาเล็กนอย } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop เพือจะส ่ งที่อานไดจาก การปรับแกนหมุนของ KNOB ไปแสดงยังคอมพิวเตอรในทุกๆ 0.1 วินาทีอยางตอเนือง ่

โปรแกรมที่ L7-2 ไฟล uart_02.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบอานคาจาก KNOB ไปแสดงผลบนหนาตาง Serial Monitor บนฝงคอมพิ  วเตอรของแผงวงจรควบคุม ATX


80 Robo-Creator : AT-BOT activity book

การทดลองที่ 7.3 รับขอมูลจากคอมพิวเตอร ในการทดลองนีเป ้ นการเขียนโปรแกรมรับขอมูลจากคอมพิวเตอร โดยปอนขอมูลผานทางหนาตาง Serial Monitor ของ Wiring สงกลับมายังแผงวงจรควบคุม ATX เพื่อควบคุมการกําเนิดเสียง

ขันตอน ้ L7.3.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน uart_03 พิมพโปรแกรมที่ L7-3 L7.3.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจรควบคุม ATX L7.3.3 ยังคงเชื่อมตอสาย USB กับคอมพิวเตอรเอาไวกอน L7.3.4 รันโปรแกรม คลิกที่ปุม

เพื่อเปดหนาตาง Serial Monitor

L7.3.5 ปอนตัวอักขระ 1 ลงในชองขอมูลสําหรับสงออกจากคอมพิวเตอรตามรูป

L7.3.6 จากนั้นกดคีย Enter หรือกดปุม Send ที่หนาตาง Serial Monitor เมื่อแผงวงจรควบคุม ATX ไดรับอักขระ 1 จะกําเนิดสัญญาณเสียงความถี่ 500Hz นาน 0.1 วินาที L7.3.6 ปอนตัวอักขระ 2 ลงในชองขอมูลสําหรับสงออกจากคอมพิวเตอร จากนั้นกดคีย Enter หรือกดปุม Send ที่หนาตาง Serial Monitor

เมื่อแผงวงจรควบคุม ATX ไดรับอักขระ 2 จะกําเนิดสัญญาณเสียงความถี่ 2000Hz นาน 0.5 วินาที


Robo-Creator : AT-BOT activity book  81

#include <atx.h> // ผนวกไฟลไลบรารีหลัก char c; // กําหนดตัวแปรเก็บขอมูลที่ไดรับจากคอมพิวเตอร void setup() { } void loop() { if(uart_available()) // ตรวจสอบวา มีขอมูลสงมาจากคอมพิวเตอรหรือไม { c = uart_getkey(); // อานขอมูลที่ไดรับจากคอมพิวเตอรมาเก็บทีตั่ วแปร c if(c==’1') // ตรวจสอบวา ไดรับขอมูลจากการกดคีย ‘1’ หรือไม { beep(); // กําเนิดเสียงความถี่ 500Hz นาน 0.1 วินาที } if(c==’2') // ตรวจสอบวา ไดรับขอมูลจากการกดคีย ‘2’หรือไม { sound(2000,500); // กําเนิดเสียงความถี่ 2000Hz นาน 0.5 วินาที } } } คําอธิบายโปรแกรม โปรแกรมเริ่มตนทํางานภายในฟงกชัน่ setup จากนั้นวนทํางานภายในฟงกชัน่ loop เพือวนตรวจสอบการรั ่ บ ขอมูลจากคอมพิวเตอร เมือได ่ รับแลวจะนํามาเก็บไวทีตั่ วแปร c แลวตรวจสอบคาดังนี้ 1. หากขอมูลทีได ่ รับเปนอักขระ 1 (จากการกดคีย 1) โปรแกรมตอบสนองดวยการกําเนิดเสียงความถี่ 500Hz นาน 0.1 วินาที 2. หากขอมูลทีได ่ รับเปนอักขระ 2 (จากการกดคีย 2) โปรแกรมตอบสนองดวยการกําเนิดเสียงความถี่ 2000Hz นาน 0.5 วินาที 3. หากเปนขอมูลอื่น ไมมีการตอบสนองใดๆ

โปรแกรมที่ L7-3 ไฟล uart_03.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับทดสอบการรับขอมูลจาก คอมพิวเตอรของแผงวงจรควบคุม ATX


82 Robo-Creator : AT-BOT activity book


Robo-Creator : AT-BOT activity book  83



  

หลังจากที่ไดทดลองเขียนโปรแกรมเพื่อตรวจสอบการทํางานของฮารดแวรในสวนตางๆ ในบทที่ 5 แลว ลําดับตอไปเปนการทําความเขาใจถึงโครงสรางทางกลของหุนยนต  AT-BOT วิธีการเคลื่อนทีของหุ ่ นยนต AT-BOT มีความแตกตางจากหุนยนตที่เคลือนที ่ ด่ วยลอ 2 ลอในแบบที่คุนเคย  เนืองจาก ่ AT-BOT มีชุดเฟองขับมอเตอรและ ลอหนามยาง 4 ชุด ดังนันการเขี ้ ยนโปรแกรมเพื่อขับคลือนหุ ่ นยนต  จึงตองพิจารณาถึงการทํางานของมอเตอรทั้ง 4 ตัว ดวย ในบทนีจะนํ ้ าเสนอตัวอยางการเขียนโปรแกรมภาษา C/C++ ดวย Wiring เพื่อควบคุมใหหุนยนต AT-BOT เคลือนที ่ ในแบบพื ่ ้นฐาน ไมวาจะเปนการเคลือนที ่ ตรง, ่ ถอยหลัง และการเลียวหรื ้ อหมุนตัวในแบบตางๆ

 

 

ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0

ADC7 SW1

46 ADC6

10 11 12 13

14

SW2 48

MOTOR

44 ADC4

50

PC7

BATTERY LEVEL

15

45 ADC5

49

PC6

C r e a t o r e > >> > > > > >

9

SERVO PORT

S

START

0

 

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8 +

-

USB DATA

E2

RESET

7.2-9V BATT.

1

2

3

4

5

 

รูปที่ 6-1 แสดงการกําหนดตําแหนงของมอเตอรและลอทัง้ 4 ชุดของหุนยนต  AT-BOT


84 Robo-Creator : AT-BOT activity book

6.1 พื้นฐานโครงสรางทางกลในการเคลื่อนทีของหุ ่ นยนต  AT-BOT หุนยนต AT-BOT มีลอขับเคลือน ่ 4 ชุด ไดรับการจัดวางตําแหนงดังในรูปที่ 6-1 โดยปกติแลวการขับเคลือน ่ หุนยนต AT-BOT ดวยลอขับเคลือนทั ่ ง้ 4 ชุดใหมีประสิทธิภาพนั้น ปจจัยหนึงที ่ ่ตองคํานึงถึงคือ แรงเสียดทาน ระหวางผิวสัมผัสของพื้นและลอของหุนยนต โดยใน AT-BOT เลือกใชชุดมอเตอรไฟตรงที่มีเฟองทดความเร็วรอบ ในอัตรา 48:1 และใชลอยางแบบที่มีหนาม ทําใหเคลือนที ่ ได ่ ดีและเร็วบนพืนผิ ้ วแทบทุกสภาพ แรงบิดทีได ่ จากชุด มอเตอรมีมากเพียงพอที่จะขับเคลือนหุ ่ นยนต  ใหเคลือนที ่ ขึ่ นทางลาดเอี ้ ยง 20 องศาหรือพื้นผิดขรุขระได การเชื่อมตอระหวางมอเตอรแตละตัวกับวงจรขับมอเตอรไฟตรงบนแผงวงจรควบคุม ATX ของหุนยนต AT-BOT เปนดังนี้  ลอหนาซายตอกับวงจรขับมอเตอรชอง 0  ลอหลังซายตอกับวงจรขับมอเตอรชอง 1  ลอหลังขวาตอกับวงจรขับมอเตอรชอง 2  ลอหนาขวาตอกับวงจรขับมอเตอรชอง 3

6.2 หลักการเบืองต ้ นของการเคลื่อนที่ของหุนยนต  AT-BOT 6.2.1 เคลื่อนทีไปข ่ างหนา ในการขับใหหุนยนต AT-BOT เคลือนที ่ ไปข ่ างหนาทําไดโดยควบคุมใหชุดเฟองขับมอเตอรของลอทั้งสี่ ใหหมุนไปในทิศทางที่ทําใหหุนยนต  เคลือนที ่ ไปข ่ างหนาดวยกําลังขับเทาๆ กัน เชน ขับดวยกําลัง 70% หรือ 100% ทั้งหมดเปนตน เพื่อไมใหเกิดการหมุนตัว

43 ADC3 42 ADC2 41 ADC1 40 ADC0 46 ADC6

14

SW1

S

SW2

45 ADC5

49 48

MOTOR

44 ADC4

50

PC7

15

BATTERY LEVEL

PC6

C r e at o r e > >>> > > > >

ADC7

SERVO PORT

+

44 ADC4

5

KNOB

10 11 12 13

45 ADC5

4

9

46 ADC6

48

MOTOR

3

8

40 ADC0

50

PC7

2

c o n tr o l l er Rb o a r d

41 ADC1

SW2

15

BATTERY LEVEL

1

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

42 ADC2

49

PC6

START

0

7.2-9V BATT.

-

USB DATA

43 ADC3

SW1

14

C r e at o r e > >>> > > > >

ADC7

+

c o n tr o l l er Rb o a r d

KNOB

10 11 12 13

SERVO PORT

9 S

E2

RESET

USB DATA

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

8

-

ON

ON E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5


Robo-Creator : AT-BOT activity book  85

6.2.2 เคลื่อนทีถอยหลั ่ ง

ในการขับใหหุนยนต AT-BOT เคลือนที ่ ถอยหลั ่ งทําไดดวยการควบคุมใหชุดเฟองขับมอเตอรของลอทั้งสี่ หมุนในทิศทางที่ทําใหหุนยนตเคลือนที ่ ถอยหลั ่ งดวยกําลังขับเทาๆ กัน

ON

ON

E2

43 ADC3

42 ADC2

41 ADC1

40 ADC0

46 ADC6

45 ADC5

8

ADC7

14

SW1

+

46 ADC6

10 11 12 13

SERVO PORT 9

40 ADC0

SW2

48

BATTERY LEVEL

MOTOR

PC7

15

PC6

SW2

15

PC7

MOTOR

BATTERY LEVEL

48

44 ADC4

49

PC6

50

45 ADC5

49

50

44 ADC4

C r e a t o r e > >> > > > > >

41 ADC1

KNOB

c o n t r o l l er R b o a r d

42 ADC2

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

43 ADC3

C r e a t o r e > >> > > > > >

+ 14

SW1

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

ADC7

10 11 12 13

SERVO PORT

KNOB

9

5 4 3 2

ON

ON

USB DATA

E2

RESET

USB DATA

E2

RESET

43 ADC3

42 ADC2

41 ADC1

40 ADC0

46 ADC6

45 ADC5

8

ADC7

10 11 12 13

SERVO PORT

9

40 ADC0

ADC7

14

SW1

+

46 ADC6

10 11 12 13

14

SW1

+

49

PC6

SW2

SW2

15 PC7

48

MOTOR

48

MOTOR

BATTERY LEVEL

50

44 ADC4

15 PC7

BATTERY LEVEL

45 ADC5

49

PC6

50

44 ADC4

C r e a to r e > >> >> > > >

41 ADC1

KNOB

c o n t ro l l er R bo a r d

42 ADC2

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

43 ADC3

C r e a to r e > >> >> > > >

9

SERVO PORT

KNOB

c o n t ro l l er R bo a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

8

5

4

3

2

1

USB DATA

RESET

USB DATA

E2

RESET

8

START

START

-

0

5

4

3

2

1

S



S

-

0

7.2-9V BATT.

7.2-9V BATT.

START START

1 0 5 4 3 2

S

S

-

1 0

7.2-9V BATT. 7.2-9V BATT.

6.2.3 เลียวซ ้ าย

มีรูปแบบการเคลือนที ่ ่ 2 แบบคือ เลียวด ้ วย 2 ลอ และเลี้ยวแบบหมุนตัว

6.2.3.1 เลี้ยวซายดวย 2 ลอ

การเคลือนที ่ ่แบบนีใช ้ มอเตอรและลอ 2 ชุดในการขับใหหุนยนต AT-BOT เลียวซ ้ าย โดยควบคุมลอหนา ขวาและลอหลังขวาใหหมุนไปขางหนา สวนลอหนาซายและลอหลังซายหยุดหมุน จะทําใหหุนยนตเลียวซ ้ ายได โดยมีจุดหมุนอยูที่ระหวางลอหนาซายและลอหลังซายดังรูป


86 Robo-Creator : AT-BOT activity book

6.2.3.2 เลี้ยวซายดวยการหมุนตัว การขับใหหุนยนต  AT-BOT หมุนตัวเลียวซ ้ ายอีกลักษณะหนึงที ่ ทํ่ าไดคือ ควบคุมใหลอหนาขวาและลอหลัง ขวาหมุนไปขางหนา สวนลอหนาซายและลอหลังซายหมุนไปขางหลังหรือในทิศทางตรงขามกัน จะทําใหหุนยนต AT-BOT เลียวซ ้ ายดวยการหมุนตัว โดยมีจุดหมุนอยูที ่กึงกลางลํ ่ าตัวหุนยนต  การหมุนตัวเลี้ยวซายดวยวิธีนีให ้ กําลัง ในการเคลื่อนทีสู่ ง แตก็ตองใชพลังงานทีเพิ ่ ่มขึ้นตามไปดวย

43 ADC3 42 ADC2 41 ADC1 40 ADC0

SW2 48

MOTOR

44 ADC4

50

15 PC7

BATTERY LEVEL

45 ADC5

49

PC6



46 ADC6

SW1

14

44 ADC4

C re a t o r e > >> > > > > >

ADC7

SERVO PORT

S

5

c o n t r o l l er R b o a r d

KNOB

+

45 ADC5

4

9 10 11 12 13

46 ADC6

48

3

8

40 ADC0

50

MOTOR

2

-

USB DATA

41 ADC1

SW2

15 PC7

BATTERY LEVEL

1

7.2-9V BATT.

42 ADC2

49

PC6

START

0

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

43 ADC3

SW1

14

C re a t o r e > >> > > > > >

+

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

ADC7

SERVO PORT

9 10 11 12 13 S

E2

RESET

USB DATA

KNOB

8

-

ON

ON E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5

6.2.4 เลี้ยวขวา มีรูปแบบการเคลือนที ่ ่ 2 แบบคือ เลียวด ้ วย 2 ลอ และเลี้ยวแบบหมุนตัว

6.2.4.1 เลี้ยวขวาดวย 2 ลอ ในการขับใหหุนยนต AT-BOT เคลือนที ่ ในลั ่ กษณะหมุนตัวเลียวขวาแบบนี ้ ้ จะกระทําตรงขามกับการเลี้ยว ซาย นั่นคือ ควบคุมลอหนาซายและลอหลังซายใหหมุนไปขางหนา สวนลอหนาขวาและลอหลังขวาหยุดหมุน หุนยนตจึงสามารถเลียวซ ้ ายได โดยมีจุดหมุนอยูที ่ระหวางลอหนาขวาและลอหลังขวา

43 ADC3 42 ADC2 41 ADC1 40 ADC0

SW2

44 ADC4

50 48

MOTOR

BATTERY LEVEL

45 ADC5

49



46 ADC6

SW1

PC6

C r e a t o re > >> > > >> >

ADC7

S

14 15 PC7

c o n t r o ll er R b o ar d

KNOB

+

44 ADC4

5

9 10 11 12 13

45 ADC5

4

SERVO PORT

46 ADC6

3

8

40 ADC0

48

2

-

USB DATA

41 ADC1

50

MOTOR

1

7.2-9V BATT.

42 ADC2

SW2

15 PC7

BATTERY LEVEL

START

0

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

43 ADC3

49

PC6

C r e a t o re > >> > > >> >

14

SW1

+

c o n t r o ll er R b o ar d

ADC7

SERVO PORT

9 10 11 12 13 S

E2

RESET

USB DATA

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8

-

ON

ON E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5


Robo-Creator : AT-BOT activity book  87

6.2.4.2 เลี้ยวขวาแบบหมุนตัว การขับเคลื่อนแบบนี้ จะกระทําตรงขามกับการหมุนตัวเลียวซ ้ ายแบบที่ 2 (หัวขอ 6.2.4) โดยควบคุมให ลอหนาซายและลอหลังซายหมุนไปขางหนา สวนลอหนาขวาและลอหลังขวาหมุนไปขางหลังหรือในทิศทางตรง ขามกัน ทําใหหุนยนต AT-BOT เลียวขวาด ้ วยการหมุนตัว มีจุดหมุนอยูที ่กึงกลางลํ ่ าตัวหุนยนต  การหมุนตัวเลียว ้ ขวาดวยวิธีนีให ้ กําลังในการเคลือนที ่ สู่ ง แตตองใชพลังงานทีเพิ ่ ่มขึ้นตามไปดวย

43 ADC3 42 ADC2 41 ADC1 40 ADC0

SW2

44 ADC4

50 48

MOTOR

BATTERY LEVEL

45 ADC5

49



46 ADC6

SW1

PC6

C r e a to r e > >>> > > > >

ADC7

SERVO PORT

S

14 15 PC7

c o n t ro l l er Rb o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

+

44 ADC4

5

10 11 12 13

45 ADC5

4

9

46 ADC6

48

3

8

40 ADC0

50

MOTOR

2

-

USB DATA

41 ADC1

SW2

15 PC7

BATTERY LEVEL

1

7.2-9V BATT.

42 ADC2

49

PC6

START

0

E2

43 ADC3

14

SW1

+

C r e a to r e > >>> > > > >

ADC7

10 11 12 13

c o n t ro l l er Rb o a r d

KNOB

9

SERVO PORT

S

RESET

USB DATA

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

8

-

ON

ON E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5


88 Robo-Creator : AT-BOT activity book

   ในการทดลองนี้เปนการทดลองที่ตองกระทําเปนการทดลองแรกของการเขียนโปรแกรมเพื่อควบคุมให หุนยนต  AT-BOT ใหเคลือนที ่ ่ โดยนําเสนอกระบวนการปรับแตงการขับมอเตอรของหุนยนต  เพือทดสอบการเคลื ่ อน ่ ที่ขันพื ้ ้นฐาน หุนยนต AT-BOT ไดรับการกําหนดการเชื่อมตอมอเตอรของลอทั้งสี่ของหุนยนตเขากับวงจรขับมอเตอร บนแผงวงจร Creator controller บนตัวหุนยนต  AT-BOT ดังนี้  ลอหนาซายตอกับวงจรขับมอเตอรชอง 0  ลอหลังซายตอกับวงจรขับมอเตอรชอง 1  ลอหลังขวาตอกับวงจรขับมอเตอรชอง 2  ลอหนาขวาตอกับวงจรขับมอเตอรชอง 3 เพือให ่ การทดสอบเปนไปในแนวทางเดียวกัน จึงตองมีการกําหนดทิศทางการหมุนของลอในแตละตําแหนง ในทีนี่ กํ้ าหนดให เมือมอเตอร ่ ของลอใดก็ตามถูกสังขั ่ บดวยกําลังทีเป ่ นคาบวก (+) จากฟงกชัน่ motor มอเตอรตัวดังกลาว จะหมุนไปในทิศทีทํ่ าใหหุนยนต  เคลือนที ่ ไปข ่ างหนา ยกตัวอยาง เมือขั ่ บมอเตอรชอง 1 ดวยกําลังเปนคาบวก แกนหมุน ของมอเตอรจะตองหมุนไปในทิศทางทีทํ่ าใหหุนยนต  เคลือนที ่ ไปข ่ างหนา แตถาหมุนกลับทิศทางใหทําการแกไขดวย การสลับทิศทางการตอขัวของสายมอเตอร ้ ทีช่ อง 1 และทําการทดสอบเชนนีกั้ บมอเตอรและชุดลออีก 3 ลอทีเหลื ่ อ

ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0 46 ADC6

14

SW1

+

S

SW2

15

48

MOTOR

44 ADC4

50

PC7

BATTERY LEVEL

45 ADC5

49

PC6

C r e a t o r e > >> > > > > >

ADC7

SERVO PORT

9 10 11 12 13

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5


Robo-Creator : AT-BOT activity book  89

#include <atx.h> void setup() { } void loop() { motor(0,50); motor(1,50); motor(2,50); motor(3,50); }

// ผนวกไลบรารีหลัก

คําอธิบายโปรแกรม ในโปรแกรมทําการขับมอเตอรชอง 0,1, 2 และ 3 ดวยกําลัง +50% ของกําลังขับสูงสุด สังเกตขัวของแรงดั ้ น ที่จายใหแกมอเตอรไดจากสีของไฟแสดงสถานะของวงจร ขับมอเตอรทัง้ 4 ชอง จะตองติดเปนสีเขียว (ถาขับดวยคา ลบ ไฟแสดงสถานะจะเปนสีแดง) เพือให ่ ทําการกําหนดขั้ว ตอของมอเตอร 0, 1, 2 และ 3 ตรงตามการอางอิง และ จะใชรูปแบบการตอสายของมอเตอรนี้ กับการทดลองตอ จากนี้ทังหมด ้

โปรแกรมที่ L8-1 ไฟล motor_test.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับตรวจสอบการตอขัว้ มอเตอรไฟตรงของหุนยนต  AT-BOT

ขันตอน ้ L8.1 ปลดสายตอมอเตอรออกทั้งหมด L8.2 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน motor_test พิมพโปรแกรมที่ L8-1 L8.3 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L8.4 ตอสายมอเตอรของลอหนาซายเขากับจุดตอมอเตอรชอง 0 ถาตอขัวของสายมอเตอร ้ ตรงกับทีอ่ างอิง จะทําใหลอของหุนยนต  หมุนไปในทิศทางทีทํ่ าใหหุนยนต  เคลือนที ่ ่ ไปขางหนา แสดงวา การตอถูกตอง แตถาเปนไปในทิศตรงขาม ใหสลับขัวของสายมอเตอร ้ ทีจุ่ ดตอมอเตอรชอง 0

ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0

ADC7

46 ADC6

14

SW1

+

S

SW2 48

MOTOR

44 ADC4

50

15 PC7

BATTERY LEVEL

45 ADC5

49

PC6

C r e a to r e > >> >> > > >

KNOB

10 11 12 13

SERVO PORT

9

c o n t ro l l er R bo a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5


90 Robo-Creator : AT-BOT activity book

L8.5 ตอสายมอเตอรของลอหลังซายเขากับจุดตอมอเตอรชอง 1 ถาตอขั้ วของสายมอเตอรตรงกับที่กําหนด จะทําใหลอของหุนยนตหมุนไปในทิศทางที่ทําใหหุนยนต เคลือนที ่ ไปข ่ างหนา แสดงวา การตอถูกตอง แตถาหากเปนไปในทิศตรงขาม ใหทําการสลับขั้วของสายมอเตอรที่ จุดตอมอเตอรชอง 1

ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0 46 ADC6

14

SW1

S

SW2 50 48

MOTOR

44 ADC4

BATTERY LEVEL

15 PC7

45 ADC5

49

PC6

C r e a to r e > >> >> > > >

ADC7

10 11 12 13

SERVO PORT

9

c o n t ro l l er R bo a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

8

KNOB

+

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5

L8.6 ตอสายมอเตอรลอหลังดานขวาเขากับจุดตอมอเตอรชอง 2 ถาตอขัวของสายมอเตอร ้ ตรงกับทีอ่ างอิง จะทําใหลอของหุนยนต  หมุนไปในทิศทางทีทํ่ าใหหุนยนต  เคลือน ่ ที่ไปขางหนา แสดงวา การตอถูกตอง แตถาหากเปนไปในทิศตรงขาม ใหทําการสลับขั้วของสายมอเตอรที่จุดตอ มอเตอรชอง 2

ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0 46 ADC6

14

SW1

+

S

SW2 48

MOTOR

44 ADC4

50

15 PC7

BATTERY LEVEL

45 ADC5

49

PC6

C r e a to r e > >> >> > > >

ADC7

10 11 12 13

SERVO PORT

9

c o n t ro l l er R bo a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5


Robo-Creator : AT-BOT activity book  91

L8.7 ตอสายมอเตอรลอหนาขวาเขากับจุดตอมอเตอรชอง 3 ถาตอขัวของสายมอเตอร ้ ตรงกับทีอ่ างอิง จะทําใหลอของหุนยนต  หมุนไปในทิศทางทีทํ่ าใหหุนยนต  เคลือน ่ ที่ไปขางหนา แสดงวา การตอถูกตอง แตถาหากเปนไปในทิศตรงขาม ใหทําการสลับขั้วของสายมอเตอรที่จุดตอ มอเตอรชอง 3

ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0

ADC7

46 ADC6

14

SW1

+

S

SW2 48

MOTOR

44 ADC4

50

15 PC7

BATTERY LEVEL

45 ADC5

49

PC6

C r e a to r e > >> >> > > >

KNOB

10 11 12 13

SERVO PORT

9

c o n t ro l l er R bo a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5

เมื่อตอขั้วของสายมอเตอรจนทําใหไดผลลัพธตามการอางอิงแลว ใหใชรูปแบบการตอสาย มอเตอรนีเป ้ นหลักในการเขียนโปรแกรมเพื่อทดสอบการทํางานของหุนยนต AT-BOT นับจากนี้


92 Robo-Creator : AT-BOT activity book

   ในการทดลองนี้นําเสนอตัวอย างการพัฒนาโปรแกรมเพื่อควบคุมการเคลื่อนที่ของหุนยนตดวยการ สรางฟงกชั่นควบคุม ซึงประกอบด ่ วย ฟงกชั่นควบคุมใหหุนยนตเคลือนที ่ ไปข ่ างหนา, ถอยหลัง,หมุนซาย, หมุน ขวา และหยุดการเคลื่อนที่ โดยอาศัยฟงกชั่นการควบคุมมอเตอรทั้ง 4 ตัวทํางานประสานกันใหเกิดรูปแบบการ เคลื่อนทีของหุ ่ นยนตตามที่กลาวมา

การทดลองที่ 9.1 ขับเคลื่อนหุนยนตไปขางหนา ในการทดลองนีเป ้ นการควบคุมหุนยนต AT-BOT ใหเคลือนที ่ ไปข ่ างหนา หลังจากมีการกดสวิตช SW1 เพื่อเปนการเริ่มตนปลอยตัวหุนยนต #include <atx.h> // ผนวกไลบรารีหลัก void forward() // ฟงกชันขั ่ บเคลื่อนหุนยนตไปขางหนา { motor(0,40); // ขับมอเตอรของลอหนาซายใหหมุนไปขางหนาดวยกําลัง 40 % motor(1,40); // ขับมอเตอรของลอหลังซายใหหมุนไปขางหนาดวยกําลัง 40 % motor(2,40); // ขับมอเตอรของลอหลังขวาใหหมุนไปขางหนาดวยกําลัง 40 % motor(3,40); // ขับมอเตอรของลอหนาขวาใหหมุนไปขางหนาดวยกําลัง 40 % } void setup() { lcd(“SW1 Press!”); // แสดงขอความแจงการดกสวิตช SW1 sw1_press(); // รอจนกระทังมี ่ การกดสวิตช SW1 } void loop() { forward(); // ขับเคลื่อนหุนยนตไปขางหนา } คําอธิบายโปรแกรม เมือโปรแกรมเริ ่ มทํ ่ างาน จะแสดงขอความทีโมดู ่ ล LCD แลวรอการกดสวิตช SW1 เมือกดสวิ ่ ตชแลว โปรแกรม จึงเขามาทํางานภายในฟงกชัน่ setup แลววนทํางานภายในฟงกชัน่ loop เพือขั ่ บมอเตอรใหหุนยนต  เคลื่อนที่ไปขาง หนาอยางตอเนือง ่ เพิมเติ ่ ม ผูพัฒนาโปรแกรมสามารถกําหนดกําลังขับของมอเตอรไดตามความเหมาะสม โดยทั่วไปจะกําหนด คากําลังขับมอเตอรของทุกลอใหเทากัน แตถาในกรณีทีมอเตอร ่ แตละตัวทํางานไดแตกตางกัน ผูพั ฒนาตองทดสอบปรับ คากําลังขับของมอเตอรแตละตัวใหไมเทากัน ทังนี ้ ้เพือให ่ ไดคาที่ทําใหหุนยนต  เคลื่อนที่ไดดีทีสุ่ ดเทาที่จะทําได

โปรแกรมที่ L9-1 ไฟล robo_move_forward.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับตรวจสอบ การตอขัวมอเตอร ้ ไฟตรงของหุนยนต  AT-BOT


Robo-Creator : AT-BOT activity book  93

ขันตอน ้ L9.1.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน robo_move_forward พิมพโปรแกรมที่ L9-1 L9.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L9.1.3 รันโปรแกรม ที่โมดูล LCD ของแผงวงจร Creator controller บนหุนยนต AT-BOT แสดงขอความ SW1 และหุนยนต AT-BOT เคลือนที ่ ไปข ่ างหนาหลังจากที่กดสวิตช SW1

Press

การทดลองที่ 9.2 ขับเคลื่อนหุนยนตถอยหลัง ในการทดลองนีเป ้ นการควบคุมหุนยนต AT-BOT ใหเคลือนที ่ ถอยหลั ่ ง หลังจากกดสวิตช SW1

ขันตอน ้ L9.2.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน robo_move_backward พิมพโปรแกรมที่ L9-2 L9.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L12.1.3 รันโปรแกรม  AT-BOT เคลื่อนที่ ทีโมดู ่ ล LCD ของหุนยนต  AT-BOT แสดงขอความ SW1 Press และหุนยนต ถอยหลังหลังจากทีกดสวิ ่ ตช SW1 #include <atx.h> void backward() { motor(0,-40); motor(1,-40); motor(2,-40); motor(3,-40); } void setup() { lcd(“SW1 Press!”); sw1_press(); } void loop() { backward(); }

// ผนวกไลบรารีหลัก // ฟงกชันขั ่ บเคลื่อนหุนยนตถอยหลัง // ขับมอเตอรของลอหนาซายใหหมุนกลับหลังดวยกําลัง 40 % // ขับมอเตอรของลอหลังซายใหหมุนกลับหลังดวยกําลัง 40 % // ขับมอเตอรของลอหลังขวาใหหมุนกลับหลังดวยกําลัง 40 % // ขับมอเตอรของลอหนาขวาใหหมุนกลับหลังดวยกําลัง 40 %

// แสดงขอความแจงการกดสวิตช SW1 // รอจนกระทังมี ่ การกดสวิตช SW1

// ขับเคลื่อนหุนยนตถอยหลัง

โปรแกรมที่ L9-2 ไฟล robo_move_backward.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุม ใหหุนยนต  AT-BOT ถอยหลัง


94 Robo-Creator : AT-BOT activity book

การทดลองที่ 9.3 ขับเคลื่อนหุนยนต  AT-BOT เลี้ยวซาย ในการทดลองนีเป ้ นการควบคุมหุนยนต AT-BOT ใหเลียวซ ้ าย หลังจากมีการกดสวิตช SW1

ขันตอน ้ L9.3.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน robo_turn_left พิมพโปรแกรมที่ L12-3 L9.3.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L9.3.3 รันโปรแกรม ที่โมดูล LCD ของแผงวงจร Creator controller บนหุนยนต AT-BOT แสดงขอความ SW1 และหุนยนต AT-BOT เลียวซ ้ ายดวยการหมุนตัวหลังจากที่กดสวิตช SW1 #include <atx.h> void turn_left() { motor(0,-40); motor(1,-40); motor(2,40); motor(3,40); } void setup() { lcd(“SW1 Press!”); sw1_press(); } void loop() { turn_left(); }

Press

// ผนวกไลบรารีหลัก // ฟงกชันขั ่ บเคลื่อนหุนยนตใหหมุนตัวเลียวซ ้ าย // ขับมอเตอรของลอหนาซายใหหมุนกลับหลังดวยกําลัง 40 % // ขับมอเตอรของลอหลังซายใหหมุนกลับหลังดวยกําลัง 40 % // ขับมอเตอรของลอหลังขวาใหหมุนไปขางหนาดวยกําลัง 40 % // ขับมอเตอรของลอหนาขวาใหหมุนไปขางหนาดวยกําลัง 40 %

// แสดงขอความแจงการดกสวิตช SW1 // รอจนกระทังมี ่ การกดสวิตช SW1

// ขับเคลื่อนใหหุนยนต  หมุนตัวเลียวซ ้ าย

โปรแกรมที่ L9-3 ไฟล robo_turn_left.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมใหหุนยนต  AT-BOT เลียวซ ้ ายดวยการหมุนตัว


Robo-Creator : AT-BOT activity book  95

การทดลองที่ 9.4 ขับเคลื่อนหุนยนต  AT-BOT เลียวขวา ้ ในการทดลองนีเป ้ นการควบคุมหุนยนต AT-BOT ใหเลียวขวา ้ หลังจากมีการกดสวิตช SW1

ขันตอน ้ L9.4.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน robo_move_back_left พิมพโปรแกรมที่ L9-4 L9.4.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L9.4.3 รันโปรแกรม ทีโมดู ่ ล LCD ของหุนยนต  AT-BOT แสดงขอความ SW1 Press และหุนยนต  AT-BOT เคลือนที ่ เลี ่ ยวขวา ้ หลังจากทีกดสวิ ่ ตช SW1 #include <atx.h> void turn_right() { motor(0,40); motor(1,40); motor(2,-40); motor(3,-40); } void setup() { lcd(“SW1 Press!”); sw1_press(); } void loop() { turn_right(); }

// ผนวกไลบรารีหลัก // ฟงกชันขั ่ บเคลื่อนหุนยนตเลี้ยวขวา // ขับมอเตอรของลอหนาซายใหหมุนไปขางหนาดวยกําลัง 40 % // ขับมอเตอรของลอหลังซายใหหมุนไปขางหนาดวยกําลัง 40 % // ขับมอเตอรของลอหลังขวาใหหมุนกลับหลังดวยกําลัง 40 % // ขับมอเตอรของลอหนาดานขวาหมุนกลับหลังดวยกําลัง 40 %

// แสดงขอความแจงการดกสวิตช SW1 // รอจนกระทังมี ่ การกดสวิตช SW1

// ขับเคลื่อนหุนยนตหมุนตัวเลียวขวา ้

โปรแกรมที่ L9-4 ไฟล robo_turn_right.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุม ใหหุนยนต  AT-BOT เลียวขวาด ้ วยการหมุนตัว


96 Robo-Creator : AT-BOT activity book

การทดลองที่ 9.5 ควบคุมการเคลื่อนที่ของหุนยนต  ดวยเวลา ในการทดลองนีเป ้ นการควบคุมหุนยนต AT-BOT ใหเคลือนที ่ ด่ วยการกําหนดเวลา

ขันตอน ้ L9.5.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน robo_pause พิมพโปรแกรมที่ L9-5 L9.5.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L9.5.3 รันโปรแกรม ที่โมดูล LCD ของแผงวงจร ATX บนหุนยนต AT-BOT แสดงขอความ SW1 Press เมื่อกดสวิตช SW1 หุนยนต AT-BOT จะเคลือนที ่ ไปข ่ างหนาเปนเวลา 2 วินาทีแลวหยุดเปนเวลา 3 วินาที สลับกันไปอยางตอเนือง ่ #include <atx.h> void forward() { motor(0,40); motor(1,40); motor(2,40); motor(3,40); } void setup() { lcd(“SW1 Press!”); sw1_press(); } void loop() { forward(); sleep(2000); motor_stop(ALL); sleep(3000); }

// ผนวกไลบรารีหลัก // ฟงกชันขั ่ บเคลื่อนหุนยนตไปขางหนา // ขับมอเตอรของลอหนาซายใหหมุนไปขางหนาดวยกําลัง 40 % // ขับมอเตอรของลอหลังซายใหหมุนไปขางหนาดวยกําลัง 40 % // ขับมอเตอรของลอหลังขวาใหหมุนไปขางหนาดวยกําลัง 40 % // ขับมอเตอรของลอหนาขวาใหหมุนไปขางหนาดวยกําลัง 40 %

// แสดงขอความแจงการดกสวิตช SW1 // รอจนกระทังมี ่ การกดสวิตช SW1

// ขับเคลื่อนหุนยนตไปขางหนา // หนวงเวลา 2 วินาที // หยุดการขับเคลื่อนหุนยนต // หนวงเวลา 3 วินาที

โปรแกรมที่ L9-5 ไฟล robo_pause.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมใหหุนยนต  AT-BOT เคลือนที ่ ตามการกํ ่ าหนดคาเวลา


Robo-Creator : AT-BOT activity book  97



  

การเรียนรูในลํ  าดับตอมาหลังจากการขับเคลือนหุ ่ นยนต  ไดคือ การอานคาจากตัวตรวจจับเพื่อนํามากําหนด เป นเงื่ อนไขในการเคลื่อนที่ ตัวตรวจจับพื้ นฐานที่ สุดที่ ทําหนาที่นี้คือ สวิ ตช (switch) ในบทนี้จะกลาวถึง การประยุ กตใชงานแผงวงจรสวิตชรวมกับหุนยนต AT-BOT เพื่อนํามาใชตรวจจับการสัมผัสกับสิ่งกีดขวาง ทําใหหุนยนตรับรูไดวา เคลือนที ่ ไปพบสิ ่ งกี ่ ดขวาง จากนั้นประมวลผลเพื่อกําหนดการเคลือนที ่ ให ่ สามารถเคลือน ่ ที่พนสิงกี ่ ดขวางไปได อุปกรณสําคัญที่ใชในการเรียนรูนีคื้ อ แผงวงจรสวิตช มีวงจรและการทํางานแสดงในรูปที่ 7-1 เมื่อสวิตช ถูกกดซึงเที ่ ยบไดกับการสัมผัสหรือชนกับสิ่งกีดขวาง สัญญาณลอจิกที่เอาตพุตจะเปลียนจากลอจิ ่ ก “1” เปน “0” จนกวาจะปลอยหรือไมเกิดการชน สัญญาณเอาตพุตจะเปลียนกลั ่ บไปเปน “1” อีกครั้ง ดวยคุณสมบัติการทํางานของตัวตรวจจับแบบนีจึ้ งนํามากําหนดเงือนไขในการเคลื ่ อนที ่ ่ใหกับหุนยนต  ATBOT ได โดยใหติดตังสวิ ้ ตชเขาทีด่ านหนาของหุนยนต  เมือหุ ่ นยนตเคลือนที ่ ไปสั ่ มผัสหรือชนกับสิ่งกีดขวาง จะทํา ใหสวิตชถูกกด ตัวควบคุมรับรูการเปลี  ยนแปลงของอิ ่ นพุตทีต่ อกับสวิตช แลวควบคุมใหหุนยนตเคลือนที ่ ถอยหลั ่ ง ตามดวยเปลี่ยนทิศทางการเคลือนที ่ ่ เพียงเทานีหุ้ นยนตก็จะสามารถเคลือนที ่ ผ่ านสิงกี ่ ดขวางไปได จุดตอสัญญาณ

LED1

ไฟแสดงผล

+V

R2 10k R1 510

ไฟแสดงผล สวิตช

S1

สวิตช

R3 220

DATA

จุดตอสัญญาณ GND

เมื่อไมมีการกดสวิตช จุด DATA มีสถานะ ลอจิกเปน “1” จากการตอตัวตานทาน R2 เขากับไฟบวก เมือกดสวิ ่ ตช จะเกิดการตอ เชื่อมระหวางขา DATA กับกราวด ทําให ขา DATA มีลอจิกเปน “0” เกิดกระแส ไฟฟาไหลผาน LED1 ทําใหติดสวางดวย

รูปที่ 7-1 แสดงหนาตา, วงจร และคําอธิบายการทํางานของแผงวงจรสวิตชทีใช ่ ในหุนยนต  AT-BOT


98 Robo-Creator : AT-BOT activity book

 การทดลองนีเป ้ นการทดสอบการทํางานของแผงวงจรสวิตชของหุนยนต  AT-BOT โดยแผงวงจรควบคุม ATX จะอานคาสถานะของการกดสวิตชจากแผงวงจรสวิตชทีต่ อกับพอรต ADC0 (หรือพอรต 40) มาแสดงทีโมดู ่ ล LCD

การตอฮารดแวรเพิ่มเติม  ติดตังแผงวงจรสวิ ้ ตชเขาที่ดานหนาของหุนยนต

AT-BOT  ตอสายจากแผงวงจรสวิตชเขาที่จุดตอ ADC0 หรือ 40 ของแผงวงจร Creator controller บนหุนยนต AT-BOT

   ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0

49

PC6

SW2

44

50

15 PC7

ADC4

48

MOTOR

BATTERY LEVEL

46 ADC6 45 ADC5

14

SW1

+

S

C r e a t o r e > >> > > > > >

ADC7

10 11 12 13

SERVO PORT

9

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

#include <atx.h> void setup() { } void loop() { lcd(“Switch1: %d “,in(40)); }

4

5

// ผนวกไลบรารีหลัก

// อานคาสถานะของแผงวงจรสวิตชทีพอร ่ ต ADC0/40 มาแสดงทีโมดู ่ ล LCD

โปรแกรมที่ L10-1 ไฟล switch1_test.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับอานคาการทํางาน ของแผงวงจรสวิตชทีต่ อกับหุนยนต  AT-BOT


Robo-Creator : AT-BOT activity book  99

ขั้นตอน L10.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน switch1_test พิมพโปรแกรมที่ L10-1 L10.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L10.3 รันโปรแกรม เมื่อเริ่มตนการทํางาน โปรแกรมจะแสดงขอความที่โมดูล LCD เปน Switch: x

โดยที่ x คือ คาขอมูลที่อานไดจากสถานะสวิตชของแผงวงจรสวิตช L10.4 กดสวิตชคางไว แลวดูผลการทํางาน คาสถานะของสวิตช (x) จะเปลี่ยนเปน 0 และเมื่อปลอยสวิตช คาผลลัพธจะกลับมาเปน

1 อีกครั้ง


C5

44

41 ADC1

4 DC A

R T AD

42 45 ADC2

ST A

6

5

4 3 A DC 3

40 ADC0

4

8

9

ADC7

ON

USB DATA

E2

14

PC6

S W1RESET 49

+

50

48

TWI UAR T1 0 SCL 1 SDA 2 RX1 3 TX1

SW2

15 P C7

MOTOR

BATTERY LEVEL

A DCA2DC 641 45 A DCADC5 1 40 4 ADC0 4 2 46 4 ADC4

10 11 12 13

SERVO PORT

ADC3 4043ADC0

TWI UA RT1 0 SCL 1 SD A 2 RX1 3 TX1

PC6

49

8

9

15 P C7

MOTOR

46 ADC6

10 11 12 13

SERVO PORT BATTERY LEVEL

46 ADC6

14

SW1

+ 14

S W1

+

40 ADC0

14

SW1

+

9 8

9

46 ADC6

10 11 12 13

11 E R VO 10 POR T SSER

8

8

9

SW2

ADC7

15 P C7

48

+ 14

14

SW1

+

MOTO R

48

MOTO R

BATTERY LEVEL

50

44 ADC4

15 P C7

BATTERY LEVEL

SW2

50

44 ADC4

10 11 12 13

SER VO POR T

KNOB

45 ADC5

P C6

49

45 ADC5

P C6

49

45 ADC5

44 A DC 4

MOTOR PC7

15

BATTERY LEVEL

PC6

S W2

15

PC7

MOTOR

BATTERY LEVEL

48

44 A DC 4

PC6

49

5 4 3 2 1

3

2 DC A

K

2

E2

USB D ATA

ADC7

10 11 12 13

41 A DC 1

10 11 12 13

50

45 ADC5

1

2

RX

46 ADC6

0

4

2

UA 1 3

40 ADC0

S

C3

ET ES

41 ADC1

-

AD

R

L SC

I SD A TW 1

C > AD > 46 d > > t o rr e > > > > > > > > C0 C r e> a a AD o 40 > 1 > n tbr o l l e r R b o a co rd DC 48 A R > 41 r 0 e 5 EL USB DATA e 2 r LEV W Y S l R o O ON ER T l O TT t 49 M TWI UAR T1 BA 1 a 0 SCLo 1 SDA 2 RX1 3 TX1 W 7 S r PC eE2 t 15 r 6 7 n C DC PC A RT o KNOB ADC7 13 SW1 S W2 50 48 144 9 + PO 12 B 1 X1 cRESET T NO RT VO

0 E2

TA DA

O

45 ADC5 4 3 A4DC 4 3ADC4 42 ADC2

N

U SB

46 A DC 6

.

43

40 ADC0

TT

4 1 A DC 1

BA

42 ADC2

4 1 A DC 1

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

42 ADC2

ON TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

9

SERVO PORT

4 2 A DC 2

TWI UA RT1 0 SCL 1 SD A 2 RX1 3 TX1

ADC7

c o n t r o l l er R b o a r d

C r e a t o r e > >> > > > > >

43 ADC3

SW2 KNOB 50 ADC7 48

c o n t r o l l ecroRnbtoraorldl e r R b o a r d

C r e a t o r e >C>r>e>a>t>o>r>e > > > > > > > >

43 ADC3

KNOB

c o n t r o l l er R b o a r d c o n t r o l l e r R b o a r d

C r e a t o r e > > > > > > > > C r e a t o r e > >> > > > > >

43 ADC3

V

U SB D ATA

E2

R ESET

E2

U SB D ATA

8

R ESET KNOB

USB D ATA

E2

9

SERVO PORT

STAR T START

0 5 4

S

S

-

3

7.2-9V BAT T.

7 .2 -9V B AT T.

KNOB

8

5 3 5 4 3 2

ON

ON

R ESET

ON

R ESET

START

2

4 1 STAR T

0

3 S

2

5

4 3 2 2 0 -

S

-

S

-

1

S

-

1 1

0

7.2-9V BATT.

7.2 -9V BAT T.

1 0

START

START

0 5

4

7 .2 -9V B AT T. 7.2-9V BATT.

   

7 .2 -9

100 Robo-Creator : AT-BOT activity book

 

ในการทดลองนีเป ้ นการเขียนโปรแกรมควบคุมหุนยนต AT-BOT ใหตรวจจับสิ่งกีดขวางดวยการชน แลว เคลือนที ่ เปลี ่ ยนทิ ่ ศทางเพือหลบหลี ่ กสิงกี ่ ดขวาง โดยใชตัวตรวจจับการชนหรือแผงวงจรสวิตช 1 ตัวซึงติ ่ ดตังไว ้ ดาน หนาของหุนยนตจากการทดลองที่ 10 โดยมีเงื่อนไขการทํางานดังนี้ 1. ในกรณีที่หุนยนตไมพบการชน หุนยนตจะเคลือนที ่ ตรงไปข ่ างหนาอยางตอเนือง ่ 2. ในกรณีที่หุนยนตเกิดการชน จะมีการขับเสียงเตือนออกมา 1 ครั้ง จากนั้นเคลื่อนทีถอยหลั ่ ง แลวเปลียนทิ ่ ศทางการเคลือนที ่ มาทางซ ่ าย แลวเคลือนที ่ ตรงต ่ อไปเพื่อหลบหลีกสิงกี ่ ดขวาง

ขั้นตอน

L11.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน robo_bumper1 พิมพโปรแกรมที่ L11-1 L11.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L11.3 นําหุนยนตมาวางบนพื้น แลววางกลองหรือสิงกี ่ ดขวางเพื่อใชทดสอบการทํางาน L11.4 รันโปรแกรม เมื่อเริ่มตนการทํางาน โปรแกรมจะแสดงขอความที่โมดูล LCD เปน Press SW1 L11.5 กดสวิตช SW1 ที่หุนยนต หุนยนตจะเคลือนที ่ ่ตรงไปขางหนา หากชนสิงกี ่ ดขวาง หุนยนตจะเคลือนที ่ ถอยหลั ่ ง แลวเปลียนทิ ่ ศทาง ไปทางซาย จากนั้นเคลือนที ่ ตรงต ่ อไป


Robo-Creator : AT-BOT activity book  101

#include <atx.h> #define POW 80 char mid; void forward(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,POW); motor(3,POW); sleep(time); } void backward(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,-POW); motor(3,-POW); sleep(time); } void turn_left(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,POW); motor(3,POW); sleep(time); } void turn_right(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,-POW); motor(3,-POW); sleep(time); }

// ผนวกไลบรารีหลัก // กําหนดกําลังขับของมอเตอรคงที่ที่ 80% ของกําลังขับสูงสุด // กําหนดตัวแปรอานสถานะของแผงวงจรสวิตช // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา // ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย

// ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา

โปรแกรมที่ L11-1 ไฟล robo_bumper1.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT เคลือนที ่ ผ่ านสิงกี ่ ดขวางดวยการตรวจจับการชนโดยใชแผงวงจรสวิตช 1 ตัว (มีตอ)


102 Robo-Creator : AT-BOT activity book

void setup() { lcd(“SW1 Press!”); // แสดงขอความแจงผูใชงานใหกดสวิตช SW1 sw1_press(); // รอจนกระทังสวิ ่ ตช SW1 ถูกกด } void loop() { mid = in(40); // อานคาสถานะสวิตชมาเก็บทีตั่ วแปร mid if(mid==0) // ตรวจสอบวา สวิตชถูกกดใชหรือไม { beep(); // หากสวิตชถูกกด ขับเสียง “ติ๊ด” หนึ่งครั้ง backward(500); // ถอยหลัง 0.5 วินาที turn_left(800); // เลี้ยวซาย 0.8 วินาที เพือหลบหลี ่ กสิงกี ่ ดขวาง } else { forward(1); // หุนยนตเคลื่อนที่ไปขางหนาดวยเวลาสั้นๆ ประมาณ 0.001 วินาที } } คําอธิบายโปรแกรม เมือโปรแกรมเริ ่ ่มทํางาน จะมีการแสดงขอความที่โมดูล LCD เปน Press SW1 เพือรอการกดสวิ ่ ตช SW1 ดวยการทํางานของฟงกชัน่ sw1_press เมือมี ่ การกดสวิตช SW1 โปรแกรมจึงสามารถกระทําคําสังในบรรทั ่ ดถัดไป ได ซึงก็ ่ คือ เขาไปทํางานภายในฟงกชัน่ loop ซึงกํ ่ าหนดใหวนอานคาสถานะอินพุตทีจุ่ ดตอ ADC0/40 ซึงต ่ อกับแผง วงจรสวิตชมาเก็บทีตั่ วแปร mid เมือแผงวงจรสวิ ่ ตชถูกกดจะใหคาผลลัพธเปน “0” จากนั้นโปรแกรมจะนําคาของตัว แปรไปทําการเปรียบเทียบดังนี้  กรณี if(mid==0) เปนการตรวจสอบวา แผงวงจรสวิตชถูกกดหรือไม ถาเปนจริง จะตอบสนองให หุนยนต  กําเนิดเสียง แลวถอยหลัง จากนั้นเลี้ยวซายเพือหลบสิ ่ งกี ่ ดขวาง (คาของการหนวงเวลานั้นผูพัฒนาสามารถ ปรับไดตามความเหมาะสม)  กรณี else เปนกรณีทีอนุ ่ มานวาหุนยนต  ยังไมพบสิงกี ่ ดขวาง ถาเปนจริง จะตอบสนองใหหุนยนต  เคลือน ่ ทีตรงไปข ่ างหนาเปนระยะเวลาสันๆ ้

โปรแกรมที่ L11-1 ไฟล robo_bumper1.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT เคลือนที ่ ผ่ านสิงกี ่ ดขวางดวยการตรวจจับการชนโดยใชแผงวงจรสวิตช 1 ตัว (จบ)


Robo-Creator : AT-BOT activity book  103

 การทดลองนี้เปนการเขียนโปรแกรมทดสอบอานคาจากแผงวงจรสวิตช 2 ตัวทีต่ อเขากับจุดตอ ADC0/40 และ ADC1/41 ของหุนยนต AT-BOT มาแสดงที่โมดูล LCD

การตอฮารดแวรเพิ่มเติม  ตอสายจากแผงวงจรสวิตชตัวที่ 1 เขาทีจุ่ ดตอ ADC0 หรือ 40 ของแผงวงจร Creator controller บนหุนยนต 

AT-BOT  ตอสายจากแผงวงจรสวิตชตัวที่ 2 เขาที่จุดตอ ADC1 หรือ 41

 

   ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0 46 ADC6

14

SW1

+

S

SW2

15

48

MOTOR

44 ADC4

50

PC7

BATTERY LEVEL

45 ADC5

49

PC6

C r e at o r e > >>> > > > >

ADC7

10 11 12 13

SERVO PORT

9

c o n tr o l l er Rb o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5

#include <atx.h> // ผนวกไลบรารีหลัก void setup() {} void loop() { lcd(“Switch1: %d #nSwitch2: %d “,in(40),in(41)); // อานคาสถานะสวิตชทีจุ่ ดตอ ADC0/40 และ ADC1/41 ไปแสดงทีโมดู ่ ล LCD }

โปรแกรมที่ L12-1 ไฟล switch2_test.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับอานคาการทํางาน ของแผงวงจรสวิตช 2 ตัวทีต่ อกับหุนยนต  AT-BOT


104 Robo-Creator : AT-BOT activity book

ขั้นตอน L12.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน switch2_test พิมพโปรแกรมที่ L11-1 L12.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L12.3 รันโปรแกรม เมื่อเริ่มตนการทํางาน โปรแกรมจะแสดงขอความที่โมดูล LCD เปน Press SW1 เมื่อกดสวิตช SW1 ที่จอแสดงผลของแผงวงจรควบคุม ATX แสดงขอความเปน Switch1: x Switch2: y

โดยที่ x และ y คือคาขอมูลที่อานไดจากสถานะสวิตชของแผงวงจรสวิตชตัวที่ 1 และ 2 ตามลําดับ L12.4 กดสวิตชตัวที่ 1 คางไว ดูผลการทํางาน คาสถานะของสวิตช (x) จะเปลี่ยนเปน 0 และเมื่อปลอยสวิตช คาผลลัพธจะกลับมาเปน 1 อีกครั้ง L12.5 กดสวิตชตัวที่ 2 คางไว ดูผลการทํางาน คาสถานะของสวิตช (y) จะเปลี่ยนเปน 0 และเมื่อปลอยสวิตช คาผลลัพธจะกลับมาเปน 1 อีกครั้ง


> > >

AD C6

45 ADC5

> > >

SW2

2

15

AD C5

48

44

44 AD C4

45

50

3

PC7

AD

C4

MOTOR

BATTERY LEVEL

48

44 ADC4

50

PC 7

MOTO R

4

T AR ST

5

ON

USB D ATA

E2

RESE T

42 ADC2

41 ADC1

TWI UART 1 0 SCL 1 SDA 2 RX1 3 TX 1

41 ADC1

43

42

E2

2 A DC

O

43

41

C

r

c

o

E2

n

SE

L

I

RE

SC

TW

0

1

T

SD

A

2

45

RX

5 A DC

1

44

4 C AD

KN

ADC 7

B O

7 DC A

O

9

+

ON

USB DAT A

E2

+

SW2

15

50

PC7

48

M OTOR

48

MOTOR

BAT TERY L EVEL

50

44 AD C4

15 PC7

BATTE RY LE VEL

45 ADC5

PC6

SW2

TWI UART1 0 SCL 1 SDA 2 RX 1 3 TX1

14

ADC7 RESE T SW1 49

10 1 1 1 2 13

46 AD C6

PC6

49

46 AD C6 45 ADC5

1 0 11 12 1 3

14

SW1

+

PC6

49

SW2

15

9

ADC7

10 11 1 2 13

SERVO PORT

KNOB

8

48

44 AD C4

50

PC7

MOTOR

BAT TERY LEVEL

15

+

50

14

48

6 PC

MOTOR

PC7

13

SW2

BAT TERY LEVEL

PC6

SW2

15 PC7

MOTOR

BATTERY LEVE L

48

44 ADC4

49

14 PC 6

SW1

+

50

45 ADC5

49

11

RT PO 12

10

14

SW1

RV

8

SE

1 0 11 12 1 3

46 ADC6

9

SERVO PORT

40 ADC0

8

KNOB

C6 AD > 46 > d > r > C0 ADC3 AD 42 AD C2 41 ADC1 > 40 ADC0 a 46 ADC6 45 ADC5 44 AD C4 40 o > b > 48 R > r 50 e V EL 2 LE W C r e ra tloer e > > > > > > > S> o RY TE l 49 t 1 r d B AT cao n to r o l l e r R b o SWa 7 PC r e 15 t

C1 AD

TA

TWI UA RT1 T1 TX AR 3 0 SCL 1 SD A 2 RX1 3 UTX1 1

DA

N

46 ADC6 43 AD 45C3AD C5 42 ADC2 44 ADC4 41 AD C1

RESET

SB U

US B DATA

D C3 A

ON

40 ADC0

9

SERVO PORT

40 ADC0

8

KNOB

c o n t r o l l e r R b o acrodn t r o l l e r R b o a r d

C r e a t o r e > > > > > >C>r>e a t o r e > > > > > > > >

43 ADC3

AR T

46 ADC6

>

o r49 d

PC6

1

15

ST

C2

>

b a

14

SW1

+

0

SW2

BATTERY LEVEL

5

AD

40 42AD C0

AD C3

e R

48

45 ADC5

PC6

49

4

43

41 ADC1

l

r

VEL

50

10 11 1 2 1 3

LE

SW 2

46 AD C6

14

SW1

+

3

42 ADC2

9

SERV O PO RT

KNO B ADC7

8

49

TO R

O

M

BA TT ER Y

ADC 7

9 1 0 11 12 13

42 ADC2

14

SW1

+

40 ADC0

1 0 11 1 2 1 3

41 ADC1

9

SERVO PORT

ADC7

c o n t r o l l er R b o a r d

C r e a t o r e > >> > > > > >

43 ADC3

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

8

KNOB

42 ADC2

ADC7

c o n t r o l l er R b o a r d

C re a to r e > >> >> > >>

43 ADC3

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

9

SERVO PORT

2

43 ADC3

TW I

1

7

40 ADC0

8

SERVO P ORT

KNOB

US B DAT A

E2

US B DAT A

E2

8

K NOB

1

N

L

SC

PC

SW 1

US 41 B C DA AD TA r C1 c C r e ao t oe ar e > > > 40> > > > > AD n t C0 c o n t rtor l lo e r R b o a r d 46 o re SD A l

0

KNO B C7

AD

M OTOR

ON

RESET

ON

RESET

5

M

O

4

3

2

1

5 4 3 2

O

E2

USB DATA

10

SE R VO

48

TWI UART1 0 S CL 1 S DA 2 RX1 3 TX1

50

PC7 15

MOTOR

0

S ET

RE

9

PO RT 12

S

6

PC 15

2 UAR RX 1 T1 3 TXART1 TWI U 1 0 SCL 1 SDA 2 RX 1 3 TX1

8

11 13

14

+

-

46 ADC6 43 ADC3 45 ADC5 42 AD 44 C2ADC4 41 ADC1

RESET

. TT BA 9V E2 27.

ON

40 ADC0

USB DAT A

E2

SW2

BA TTERY LEVE L

PC6

44 ADC4

49

45 ADC5

48

44 AD C4

50

PC7

S

41 AD C1

ON

+ 14

ADC7 RESE T SW1

10 11 12 13

46 ADC6

48

MOTOR

15

T .

42 ADC2

C r e a t o r e > > > > > >C>r>e a t o r e > > > > > > > >

43 ADC3

9

S ERVO PORT

40 ADC0

8

KNOB

c o n t r o l l e r R b o acrodn t r o l l e r R b o a r d

41 ADC1

TWI UAR T1 0 SCL 1 SDA 2 RX1 3 TX 1

42 ADC2

50

1 5 PC7

BAT TE RY LEVEL

SW2

c o n t r o l l er R b o a r d

C r e a t o r e > >> > > > > >

43 AD C3

PC 6

49

45 ADC5

SW2

BATTERY LEVEL

STA RT

ST ART

0

5

-

US B DATA

E2

RESE T

USB DAT A

14

SW1

+

46 ADC6

PC6

49

3

2

1

4

S

S

-

3

7.2-9V BATT.

7.2-9V BAT T.

2

BAT

ON

ON

A DC7

40 AD C0

1 0 1 1 1 2 13

41 ADC1

9

SERVO P ORT

KNOB

8

42 ADC2

TWI U ART1 0 S CL 1 SDA 2 RX 1 3 TX1

+ 14

SW1

co nt rol l erRb oa rd

C r e a t o r e > >> > > > > >

43 ADC3

TWI UART1 0 S CL 1 S DA 2 RX1 3 TX1

E2

USB DATA

ADC7

10 1 1 1 2 1 3

STA RT

0

5

4

3

2

1

0

S

1

5

4

-

5

4

3

2

1

0

0

ST ART

START

7.2-9V BAT T.

7.2-9V BA TT.

START START

1

0 5 4

   

3 2 1

3

S

S

-

0 5 4 3 2 1 0

-

S

-

E2

RES ET

ON

9

STAR T

2

5

4

7. 2-9V BATT. 7.2-9V BATT.

SERV O PO RT

7.2-9V BATT.

5 4 3 2

1 0

START

STAR T

S

S

KNOB

8

S

-

S

-

1 0

7.2-9V BATT. 7.2-9V B ATT. RES ET

7.2 -9V BATT.

   

7 .2 - 9V

Robo-Creator : AT-BOT activity book  105

    

ในการทดลองนีเป ้ นการเขียนโปรแกรมควบคุมหุนยนต AT-BOT ใหเคลือนที ่ ผ่ านสิงกี ่ ดขวางดวยการใช แผงวงจรสวิตช 2 ตัวในการตรวจจับสิ่งกีดขวางดวยการสัมผัสหรือชน โดยสวิตชตัวที่ 1 จะไดรับการติดตั้งไวดาน หนาทางซาย สวนอีกตัวหนึ่งติดตั้วไวที่ดานหนาทางขวา โดยมีเงื่อนไขการทํางานดังนี้ 1. ในกรณีที่หุนยนต  ไมพบการชน หุนยนตจะเคลือนที ่ ไปข ่ างหนาอยางตอเนือง ่ 2. กรณีที่หุนยนต  พบการชนของแผงวงจรสวิตชดานซาย หุ นยนตจะสงเสียงสัญญาณ “ติ้ด” ดัง 1 ครั้ง จากนั้นเคลือนที ่ ถอยหลั ่ ง แลวเปลียนเส ่ นทางการเคลือนที ่ เพื ่ ่อเลียวขวา ้

3. กรณีที่หุนยนตพบการชนของแผงวงจรสวิตชดานขวา หุนยนตจะสงเสียงสัญญาณ “ติด” ้ ดัง 1 ครั้ง จากนั้นเคลือนที ่ ถอยหลั ่ ง แลวเปลียนเส ่ นทางการเคลือนที ่ เพื ่ ่อเลียวซ ้ าย

TO

R


106 Robo-Creator : AT-BOT activity book

4. กรณีที่หุนยนต  พบการชนของแผงวงจรสวิตชทั้งสองดาน หุนยนตจะสงเสียงสัญญาณ “ติ้ด” ดัง 1 ครั้ง เชนกัน จากนั้นเคลือนที ่ ถอยหลั ่ ง แลวเปลียนเส ่ นทางการเคลือนที ่ เพื ่ ่อเลียวซ ้ าย 



42

S

48

M OTOR

1

2

3

46

o

AD

C6

45 A DC

S W2 50

ER Y LE

P C7

a

r

L

AR T

C4

ST

AD

>

48

VE

5

44

>

>

>

5

>

44 ADC4

50

PC7

0

15

b

49

BA TT

P C6

C0

d

4

. BA TT 9V 15

SW2

BATTE RY LEVE L

14

R

>

45 AD C5

PC6

49

13

+

r

AD

>

3

SW 1

RT

12

e

2

PO

11

C1

>

1

RV O

10

l

e

46 ADC6

9

C7

l

r

40 AD C0

14

SW1

+

8

AD

o

o

41 ADC1

ADC7

10 1 1 12 13

S

OB

t

42 AD C2

9

-

SE

AD

40

r

UA RT 1 R X1 3

KN

2

41

a

0

A DC

t

C re a to r e> >>> > >> >

n

TX 1

SERVO PORT

44 ADC4

48

MOTOR

5

2

C3

e

c on t ro l l er Rb o ar d

SD A

8

45 ADC5

50

PC7

4

I

o

r

43 ADC3

L1

AD US B DATA

RE S ET

TWI UA RT1 0 SCL 1 SD A 2 RX1 3 TX1

SC

43

E2

TW

0

5

46 AD C6

15

SW2

BAT TERY LEVEL

3

E2

C

KNOB

4

c

D AT A

7.2-9V BAT T.

40 ADC0

PC6

49

2

RESET

46 ADC6 43 AD 45C3AD C5 42 ADC2 44 ADC4 41 AD C1

14

SW1

+

1

US B

ON

START

START

0

ON

40 AD C0

ADC7

1 0 11 12 1 3 S

41 ADC1

3

42 AD C2

2

C r e a t o r e > > > > > >C>r>e a t o r e > > > > > > > >

TWI UART1 0 SCL 1 SDA 2 RX 1 3 TX1

1

43 ADC3

E2

9

SERVO PORT

KNOB

8

-

48

MOTOR

5

50

PC7

4

0

USB D ATA

15

5

SW2

BATTE RY LEVE L

3

ON

PC6

49 7.2 -9V BATT.

c o n t r o l l e r R b o acrodn t r o l l e r R b o a r d

UART1 2 RX1 3 TX1

14

2

TWI 0 SCL 1 SD A

+

1

ADC7 RESE T SW1

10 1 1 12 13 S

START

0

E2

9

44 AD C4

4

SERVO PORT

45 ADC5

3

-

KNOB

46 AD C6

48

MOTOR

2

8

40 ADC0

50

PC7

48

MOTOR

44 ADC4

50

PC7

1

US B DATA

RESET

41 AD C1

15

SW2

BAT TERY LEV EL

15

SW2

BAT TERY LEVEL

45 ADC5

PC6

49

START

0

7.2 -9V BATT.

42 ADC2

PC6

49

46 AD C6

C r e a t o r e > >> > > > > >

14

SW1

+

S

43 AD C3

ADC7

10 11 1 2 1 3

40 ADC0

c o n t r o l l er R b o a r d

TWI UART 1 0 SCL 1 SDA 2 RX 1 3 TX 1

9

SERVO PORT

41 AD C1

KNOB

8

42 ADC2

14

SW1

+

C r ea t or e > >> >> > >>

c o n t r o l l er R b o a r d

UART1 2 RX 1 3 TX1

ADC7

1 0 11 12 1 3 S

43 AD C3

TWI 0 SCL 1 SDA

9

SERVO PORT

K NOB

8

-

USB DATA

E2

USB DAT A

E2

7.2- 9V BATT.

-

ON

ON

RESE T

ON

RESE T

7.2 -9V B ATT.



7 .2-



STA RT MO TO 4 R

5

อยางไรก็ตาม ผูพัฒนาโปรแกรมสามารถเปลียนหรื ่ อกําหนดเงือนไขในการทํ ่ างานใหมไดตามตองการ

การเชื่อมตอทางฮารดแวร(ตอเพิ่มเติมจากชุดหุนยนต  ) ้ ตช 2 ตัวเขาที่ดานหนาของหุนยนต  ติดตังแผงวงจรสวิ

AT-BOT โดยใชชิ้นตอมุมฉาก, แทงตอแนวตรงรวมกับ สกรู 3x10 มม. และนอต 3 มม. แนะนําใหติดตั้งเขาที่มุมซายและขวาทางดานหนาของหุนยนต AT-BOT โดยติด ตังให ้ เอียงทํามุมประมาณ 45 องศา - ติดตังแผงวงจรสวิ ้ ตชตัวที่ 1 ทางซาย แลวตอสายเขากับจุดตอ ADC0/40 ของหุนยนต AT-BOT - ติดตังแผงวงจรสวิ ้ ตชตัวที่ 2 ทางขวา แลวตอสายเขากับจุดตอ ADC1/41 ของหุนยนต AT-BOT

ขั้นตอน L13.1 สรางไฟลสเก็ตชของ Wiring ขึนใหม ้ ตังชื ้ ่อเปน robo_bumper2 พิมพโปรแกรมที่ L13-1 L13.2 คอมไพลและอัปโหลดโปรแกรมไปยังหุนยนต AT-BOT L13.3 รันโปรแกรม เมื่อเริ่มตนการทํางาน โปรแกรมจะแสดงขอความที่โมดูล LCD เปน Press SW1 เพื่อแจงเตือนให ใหผูใชงานกดสวิตช SW1 ที่แผงวงจรควบคุม L13.4 กดสวิตช SW1 แลวสังเกตการเคลือนที ่ ของหุ ่ นยนต IPST-BOT หุนยนต AT-BOT จะเคลื่อนทีตรงไปข ่ างหนาอยางตอเนือง ่ หากพบสิ่งกีดขวางและเกิดการชนตรงตาม เงื่อนไขที่กําหนดไว หุนยนต AT-BOT จะเปลี่ยนทิศทางการเคลือนที ่ เพื ่ ่อหลบหลีกสิงกี ่ ดขวางได


Robo-Creator : AT-BOT activity book  107

#include <atx.h> #define POW 80 char left,right; void forward(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,POW); motor(3,POW); sleep(time); } void backward(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,-POW); motor(3,-POW); sleep(time); } void turn_left(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,POW); motor(3,POW); sleep(time); } void turn_right(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,-POW); motor(3,-POW); sleep(time); }

// ผนวกไลบรารีหลัก // กําหนดกําลังขับของมอเตอรคงที่ที่ 80 % ของกําลังขับสูงสุด // กําหนดตัวแปรอานสถานะสวิตชทางดานซายและดานขวาตามลําดับ // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา // ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย

// ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา

โปรแกรมที่ L13-1 ไฟล robo_bumper2.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT เคลือนที ่ ผ่ านสิงกี ่ ดขวางดวยการใชแผงวงจรสวิตชตรวจจับการชน 2 ตัว (มีตอ)


108 Robo-Creator : AT-BOT activity book

void setup() { lcd(“SW1 Press!”); sw1_press(); } void loop() { left = in(40); right = in(41); if(left==1 && right==1) { forward(1); } else if(left==0 && right==1)

// แสดงขอความแจงใหกดสวิตช SW1 // รอจนกระทังสวิ ่ ตช SW1 ถูกกด

// อานคาสถานะสวิตชดานซายมาเก็บทีตั่ วแปร left // อานคาสถานะสวิตชดานขวามาเก็บทีตั่ วแปร right // ตรวจสอบวา แผงวงจรสวิตชทังสองตั ้ วไมถูกกด (ไมมีการชนเกิดขึ้น) // ถาไมมีการกดสวิตชใดๆ หุนยนตเคลื่อนที่ตรงไปขางหนาภายในชวงเวลาสันๆ ้ // ตรวจสอบแผงวงจรสวิตชดานซายถูกกดเพียงตัวเดียวหรือไม // (เกิดการชนสิ่งกีดขวางทางดานซาย)

{ beep(); backward(500); turn_right(800);

// ถาใช ขับเสียง “ติด” ้ 1 ครั้ง // ถอยหลัง 0.5 วินาที // หมุนตัวเลียวขวา ้ 0.8 วินาที เพือเปลี ่ ่ยนทิศทางการเคลื่อนที่

} else if(left==1 && right==0) // ตรวจสอบแผงวงจรสวิตชดานขวาถูกกดเพียงตัวเดียว // (เกิดการชนสิ่งกีดขวางทางดานขวา) { beep(); // ถาใช ขับเสียง “ติด” ้ 1 ครั้ง backward(500); // ถอยหลัง 0.5 วินาที turn_left(800); // หมุนตัวเลียวซ ้ าย 0.8 วินาที เพือเปลี ่ ่ยนทิศทางการเคลื่อนที่ } else if(left==0 && right==0) // ตรวจสอบวา แผงวงจรสวิตชทังสองตั ้ วถูกกดพรอมกันหรือไม // (เกิดการชนซึ่งหนา) { beep(); // ถาใช ขับเสียง “ติด” ้ 1 ครั้ง backward(500); // ถอยหลัง 0.5 วินาที turn_left(1500); // หมุนตัวเลียวซ ้ าย 1.5 วินาที เพือเปลี ่ ่ยนทิศทางการเคลื่อนที่ } }

โปรแกรมที่ L13-1 ไฟล robo_bumper2.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT เคลือนที ่ ผ่ านสิงกี ่ ดขวางดวยการใชแผงวงจรสวิตชตรวจจับการชน 2 ตัว (มีตอ)


Robo-Creator : AT-BOT activity book  109

คําอธิบายโปรแกรม เริ่มตนการทํางาน โปรแกรมจะแสดงขอความที่โมดูล LCD เปน Press SW1 เพือรอการกดสวิ ่ ตช SW1 เมื่อ กดสวิตช SW1 ซีพียูจึงเขาไปกระทําคําสังภายใน ่ loop เพือวนอ ่ านคาสถานะของแผงวงจรสวิตชทีจุ่ ดตอ ADC0/40 และ ADC1/41 มาเก็บทีตั่ วแปร left และ right ตามลําดับ แผงวงจรสวิตชตัวใดถูกกดจะใหคาผลลัพธเปน “0” จากนัน้ โปรแกรมจะนําคาของตัวแปรทังสองไปเปรี ้ ยบเทียบ 4 กรณีดังนี้ กรณีที่ 1 : if(left==1 && right==1) ตรวจสอบวา ไมมีการกดสวิตชทังสองตั ้ วหรือไม ซึงถ ่ าเปนจริง (ไมมีการชนเกิดขึน) ้ จะตอบสนองใหหุนยนต  เคลือนที ่ ตรงไปข ่ างหนาเปนระยะเวลาสันๆ ้ เนืองจากยั ่ งไมพบสิงกี ่ ดขวาง กรณีที่ 2 : else if(left==0 && right==1) ตรวจสอบการกดสวิตชดานซายเพียงตัวเดียว ซึงถ ่ าเปนจริง (เกิดการชนทางซาย) จะตอบสนองดวยการขับเสียง 1 จังหวะ จากนั้นหุนยนตเคลื่อนที่ถอยหลัง แลวหมุนตัวเลียว ้ ขวาเพื่อหลบสิงกี ่ ดขวาง กรณีที่ 3 : else if(left==1 && right==0) ตรวจสอบการกดสวิตชดานขวาเพียงตัวเดียว ซึงถ ่ าเปนจริง (เกิดการชนทางขวา) จะตอบสนองดวยการขับเสียง 1 จังหวะ หุนยนต  เคลื่อนที่ถอยหลัง แลวเลียวซ ้ ายเพือหลบสิ ่ ง่ กีดขวาง กรณีที่ 4 : else if(left==0 && right==0) เปนการตรวจสอบการกดสวิตชทังสองตั ้ ว ถาเปนจริง (เกิด การชนแบบซึงหน ่ า สวิตชถูกกดพรอมกัน) จะตอบสนองดวยการขับเสียง 1 จังหวะ หุนยนต  เคลื่อนที่ถอยหลัง แลว เลี้ยวซายเพือหลบสิ ่ งกี ่ ดขวาง ผูพั ฒนาโปรแกรมสามารถปรับเปลียนค ่ าเวลาหนวง ทีใช ่ กําหนดการเคลือนที ่ ในแต ่ ละจังหวะไดอิสระตามความ เหมาะสมในแตละสถานการณ

โปรแกรมที่ L13-1 ไฟล robo_bumper2.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT เคลือนที ่ ผ่ านสิงกี ่ ดขวางดวยการใชแผงวงจรสวิตชตรวจจับการชน 2 ตัว (จบ)


Robo-Creator : AT-BOT activity book  111



   หนึ่งภาระกิจหลักของการเรียนรูเกี่ยวกับการเขียนโปรแกรมเพื่อควบคุมหุ นยนตอัตโนมัติขนาดเล็กคือ การตรวจจับและการเคลือนที ่ ตามเส ่ น หุนยนต  AT-BOT ก็สามารถปฏิบัติภาระกิจนีได ้ โดยเนือหาในบทนี ้ จะเริ ้ มต ่ น ดวยการอธิบายการทํางานของตัวตรวจจับแสงสะทอนซึงนํ ่ ามาประยุกตใชงานเปนตัวตรวจจับเสน การเตรียมสนาม สําหรับการทดสอบ ตัวอยางการปรับแตงคาของตัวตรวจจับเพือให ่ สามารถตรวจจับเสนไดอยางมีประสิทธิภาพ จากนัน้ เขาสูการทดลองเขี  ยนโปรแกรมภาษา C เพือค ่ นหาเสน เคลือนที ่ ในพื ่ นที ้ ที่ กํ่ าหนด และการเคลือนที ่ ตามเส ่ นทังแบบ ้ ไมพิจารณาทางแยกและพิจารณาทางแยก ดังนันในการเรี ้ ยนรูจึ งควรพยายามทําความเขาใจและทําการทดลองไปตามลําดับ เนืองจากเนื ่ อหาทั ้ ้งหมด มีความเกียวข ่ องกัน และตองใชความรูจากการทดลองกอนหนามารวมดวย

8.1 คุณสมบัติของแผงวงจรตรวจจับแสงสะทอน เปนแผงวงจรที่ใชในการตรวจสอบการสะทอนของแสง โดยบนแผงวงจรประกอบดวย LED สีแดงแบบ ความสวางสูงหรือซูเปอรไบรตทําหนาที่เปนแหลงกําเนิดแสง และโฟโตทรานซิสเตอรความไวสูงที่ตรวจจับแสง ขาว (แสงสวางปกติ) และแสงอินฟราเรดได โดยโฟโตทรานซิสเตอรจะรอรับแสงที่ LED ขับไปสะทอนกับพื้น ผิวกลับมา โดยตัวโฟโตทรานซิสเตอรจะใหผลการทํางานทีแตกต ่ างกันไปตามความเขมของแสงสะทอนทีได ่ รับ ในรูปที่ 8-1 แสดงการทํางานของแผงวงจรตรวจจับแสงสะทอนเมือนํ ่ ามาใชงานกับพื้นผิวสีขาวและดํา เมือจ ่ ายไฟเลียง ้ LED สีแดงแบบความสวางสูงจะถูกขับใหทํางาน เปลงแสงสีแดงออกมาตลอดเวลา สวน ตัวรับซึงเป ่ นโฟโตทรานซิสเตอรจะไดรับแสงสีแดงจากการสะทอนกลับ โดยปริมาณของแสงทีได ่ รับจะมากหรือนอย ขึนอยู ้ กั บวา มีวัตถุมากีดขวางหรือไม และวัตถุนันมี ้ ความสามารถในการสะทอนแสงสีแดงไดดีเพียงไร ซึงขึ ่ นกั ้ บ ลักษณะพืนผิ ้ วและสีของวัตถุ โดยวัตถุสีขาวผิวเรียบจะสะทอนแสงไดดี ทําใหตัวรับแสงหรือโฟโตทรานซิสเตอรได รั บแสงสะทอนมาก สงผลใหแรงดันที่เอาตพุตของวงจรสูงตามไปดวย ในขณะที่วั ตถุสีดําสะทอนแสงไดนอย ทําใหตัวรับแสงทํางานนอย สงแรงดันออกมาตํา่ ดวยคุณสมบัติดังกลาวจึงนําแผงวงจรตรวจจับแสงสะทอนนีมาใช ้ ในการตรวจจับพื้นหรือเสน โดยตองติดตังไว ้ ดานลางของโครงหุนยนต 


112 Robo-Creator : AT-BOT activity book

LED

510 10k



SFH310

+V

OUT

 GND

 

 

 LED

510 10k



SFH310

+V

OUT

 GND

 

 

 รูปที่ 8-1 การทํางานของแผงวงจรตรวจจับแสงสะทอนเมือนํ ่ ามาใชในการตรวจจับเสนดําและพืนขาว ้


Robo-Creator : AT-BOT activity book  113

8.2 การเตรียมความพรอมกอนพัฒนาโปรแกรมสําหรับหุนยนต  ตรวจจับเสน 8.2.1 เตรียมอุปกรณสําหรับสรางสนามทดสอบ ในการพัฒนาโปรแกรมเพื่อควบคุมใหหุนยนตเคลือนที ่ ตามเส ่ นโดยใชตัวตรวจจับแสงสะทอน จะตองมี การวิเคราะหเสนและพืนสนามก ้ อน ทั้งนีเพื ้ ่อนําขอมูลมาใชกําหนดเงือนไขเพี ่ อเปรี ่ ยบเทียบกับคาอางอิงคาหนึงที ่ ได ่ จากการทดสอบอานคาของสภาวะแสงทีได ่ จากเสนและพืนสนามที ้ ใช ่ งานจริง โดยอาศัยความแตกตางของการสะทอน แสงของแตละพืนผิ ้ วทีมี่ สีตางกัน เชน พืนผิ ้ วสีขาวสามารถสะทอนแสงไดดี สวนพืนผิ ้ วสีดําสะทอนแสงไดนอย เนือง ่ จากสีดํามีความสามารถในการดูดกลืนแสงไดมาก การเรียนรูในบทนี  เลื ้ อกใชสนามทดสอบอางอิงทีมี่ พืนสนามเป ้ นสี ขาวและเสนเปนสีดํา ดังนันขอแนะนํ ้ าใหผูพั ฒนาสรางสนามทดสอบขึนมาก ้ อน สําหรับสนามทดสอบตัวอยางที่ใชในหนังสือเลมนี้ ทําจากแผนพลาสติกลูกฟูก (หรือชื่อเรียกกันทัวไปว ่ า แผนฟวเจอรบอรด) มาติดเทปสีดํา โดยมีอุปกรณและเครื่องมือที่ใชดังนี้ 1. แผนพลาสติกลูกฟูก (หรือชื่อเรียกกันทัวไปว ่ า แผนฟวเจอรบอรด) สีขาว 1 แผน ขนาด 90 x 60 เซนติเมตร อาจเล็กใหญกวานีได ้ ขอใหมีพื้นทีมากพอสํ ่ าหรับการเคลือนที ่ ของหุ ่ นยนต AT-BOT

2. เทปพันสายไฟสีดํากวาง 1 นิว้ 2 มวน แนะนํายีห่ อ 3M เนืองจากยื ่ ดหยุนสู  ง ติดเปนเสนโคงไดดี

3. กรรไกรสําหรับตัดเทปพันสายไฟ


114 Robo-Creator : AT-BOT activity book

8.2.2 ติดตั้งแผงวงจรตรวจจับแสงสะทอนแกหุนยนต  AT-BOT จุดประสงคของการใชงานแผงวงจรตรวจจับแสงสะทอนในหุนยนต  AT-BOT คือ นํามาตรวจจับพืนและเส ้ น ดังนันจึ ้ งตองติดตังแผงวงจรตรวจจั ้ บนีไว ้ ทีใต ่ ฐานหุนยนต  มีขันตอนดั ้ งนี้ (1) ยึดแผงวงจรตรวจจับแสงสะทอน 3 ตัวเขากับแทงตอ 12 รูดวยสกรู 3x10 มม. และนอต 3 มม. โดยระหวางแผงวงจรกับแทงตอใหนําเสารองพลาสติก 3 มม. คันเอาไว ่

          

      





    



 


Robo-Creator : AT-BOT activity book  115

(2) ปดสวิตชจายไฟเลี้ยงของหุนยนต AT-BOT นําแผงวงจรตรวจจับแสงสะทอนที่ยึดกับแทง ตอจากขั้นตอนที่ (1) ยึดเขากับดานหนาของหุ นยนต โดยใชเสารองพลาสติก 25 มม. รองและยึดดวยสกรู 3x40 มม. และนอต 3 มม. 2 ชุด ทําใหแผงวงจรตรวจจับแสงสะทอนหางจากพื้นประมาณ 5 มิลลิเมตร จากนั้นเสียบ สายสัญญาณของแผงวงจรตรวจจับแสงสะทอนดานซาย, กลางและขวาเขาที่ จุดตอ ADC0, ADC1 และ ADC2 ของหุนยนต AT-BOT ตามลําดับ จะไดหุนยนตAT-BOT ที่พรอมสําหรับภาระกิจตรวจจับพื้นและเสน

การติดตังแผงวงจรตรวจจั ้ บแสงสะทอนในลักษณะนีเพื ้ อใช ่ งานเปนตัวตรวจจับพืนหรื ้ อเสน ซึงใช ่ ตรวจจับได ทังเส ้ นสีขาวและสีดํา รวมถึงใชตรวจจับสีทีมี่ ความแตกตางกันเชน มวงกับเหลือง, เขียวกับแดง เปนตน


116 Robo-Creator : AT-BOT activity book

8.2.3 กําหนดคาอางอิงเพือแยกความแตกต ่ างระหวางเสนและพืนสนาม ้ ในการกําหนดคาอางอิงเพือใช ่ ในการเปรียบเทียบเพือให ่ หุนยนต  ทราบวา ตัวตรวจจับพบเสนหรือพืนสนามนั ้ น้ โดยทัวไปจะอาศั ่ ยการเขียนโปรแกรมอานคาสัญญาณไฟฟาจากแผงวงจรตรวจจับแสงสะทอนแตละตัวขึนมาแสดงผล ้ เพือสั ่ งเกตคาผลลัพธทีได ่ จากเสนและพืนสนามมี ้ คาแตกตางกันเพียงไร ปกติแลวคาทังสองต ้ องแตกตางกันพอสมควร ในการเขียนโปรแกรมภาษา C ดวย Wiring เพื่ออานคาจากแผงวงจรตรวจจับแสงสะทอนของแผงวงจร ควบคุมในหุนยนต AT-BOT ในชุด Robo-Creator จะใชฟงกชั่น analog ซึงให ่ คาผลลัพธ 0 ถึง 1023  



  



 

 

  



 เมื่อแผงวงจรตรวจจับแสงสะทอนไปอยูในบริเวณของเสนสีดําจะใหคาตํามี ่ แนวโนมเอียงไปทางคา 0 ถาไปอยูในบริเวณพื้นสนามสีขาวจะใหคาสูงที่มีแนวโนมเอียงไปทางคา 1023 คาอางอิงที่ใชในการแยกแยะพื้นสนามสีขาวกับเสนสีดําของสนาม คํานวณไดดังนี้ คาอางอิง = (คาการสะทอนแสงทีได ่ จากพืนสี ้ ขาว + คาการสะทอนแสงทีได ่ จากเสนสีดํา) / 2 ยกตัวอยาง หากคาทีได ่ จากพื้นสีขาวเทากับ 950 และเสนดําเทากับ 250 คาอางอิงจะเทากับ (950+250) / 2 = 600 อยางไรก็ตาม ในการใชงานจริงอาจกําหนดคาใหกวางกวานีได ้ แตควรอยูในช  วง 250 ถึง 950 แตไมควร เลือกคาทีใกล ่ กับ 250 และ 950 มากเกินไป


Robo-Creator : AT-BOT activity book  117

   การทดลองนีเป ้ นการทดสอบหาคาอางอิงสําหรับใชตรวจจับเสนของหุนยนต AT-BOT ดวยแผงวงจรจับ แสงสะทอน โดยที่หุนยนต AT-BOT ไดติดตั้งแผงวงจรจับแสงสะทอนไวใตฐานหุนยนตทางดานหนาจํานวน 3 ตัว โดยแผงวงจรตรวจจับดานซายตอกับพอรต ADC0, แผงวงจรตรวจจับตรงกลางตอกับพอรต ADC1 และแผงวงจร ตรวจจับดานขวาตอกับพอรต ADC2 ของแผงวงจรควบคุม ATX ของหุนยนต AT-BOT จากนั้นนําคาที่ ไดมา ประมวลผลแลวแสดงที่โมดูล LCD ของหุนยนต AT-BOT ในการทดลองนําเสนอการทดสอบใหเห็นเพือสร ่ างความเขาใจแกผูพัฒนาโปรแกรม ทั้งนีเพื ้ ่อใหผูพัฒนา โปรแกรมสามารถกําหนดคาอางอิงสําหรับใชเปรียบเทียบเพื่อแยกแยะระหวางเสนและพื้นสนาม อันนําไปสูการ  ใชการพัฒนาโปรแกรมเพื่อควบคุมใหหุนยนต AT-BOT ตรวจจับและเคลือนที ่ ตามเส ่ นได

สรางสนามทดสอบ สนามทดสอบในการทดลองนีมี้ พืนสนามเป ้ นสีขาว แลวใชเทปพันสายไฟติดเปนรูปสีเหลี ่ ยมมุ ่ มโคงตามรูป

ขนาดของสนามสามารถปรับแตงไดตามความเหมาะสม ในที่นีเลื ้ อกใชแผนพลาสติกลูกฟูกสีขาว ขนาด 90 x 60 เซนติเมตร นํามาติดเทปเพื่อสรางกรอบเสนโคงขนาด 70 x 40 เซนติเมตร


118 Robo-Creator : AT-BOT activity book

การเชื่อมตอทางฮารดแวร ตอสายจากพอรต ADC0 เขากับแผงวงจรตรวจจับแสงสะทอนใตฐานหุนยนตดานหนามุมซาย  ตอสายจากพอรต ADC1 เขากับแผงวงจรตรวจจับแสงสะทอนใตฐานหุนยนตดานหนาตรงกลาง  ตอสายจากพอรต ADC2 เขากับแผงวงจรตรวจจับแสงสะทอนใตฐานหุนยนตดานหนามุมขวา 



    



ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0 46 ADC6

14

SW1

+

S

SW2 48

MOTOR

44 ADC4

50

15 PC7

BATTERY LEVEL

45 ADC5

49

PC6

C r e a t o r e > >> > > > > >

ADC7

SERVO PORT

9 10 11 12 13

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5

#include <atxt.h> // ผนวกไลบรารีหลัก void setup() {} void loop() { lcd(“L %d M%d #nR %d “,analog(0),analog(1),analog(2)); // อานคาจากของแผงวงจรตรวจจับแสงสะทอนที่ชอง ADC0, ADC1 และ ADC2 มาแสดงทีโมดู ่ ล LCD }

โปรแกรมที่ L14-1 ไฟล reflect_test.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับอานคาจาก แผงวงจรตรวจจับแสงสะทอน 3 จุดมาแสดงทีโมดู ่ ล LCD ของหุนยนต  AT-BOT


Robo-Creator : AT-BOT activity book  119

ขั้นตอน L14.1 สรางไฟลโปรเจ็กตชื่อ reflect_test และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L10-1 L14.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L14.3 เริ่มตนรันโปรแกรม ที่โมดูล LCD ของหุนยนตแสดงขอความ L xxx M yyy R zzz

โดยที่ xxx ,yyy และ zzz คือคาขอมูลดิจิตอลที่ไดจากการอานคาจากแผงวงจรตรวจจับแสงสะทอนทีติ่ ดตั้ง อยูใตฐานหุนยนตดานซาย, กลาง และขวาตามลําดับ ซึงผ ่ านกระบวนการแปลงสัญญาณอะนาลอกเปนดิจิตอลแลว L14.4 นําหุนยนตไปวางไวบนพื้นสนามสีขาว อานและบันทึกคาที่วัดไดซึงแสดงบนโมดู ่ ล LCD แผงวงจรตรวจจับทัง้ 3 ชุดควรอานคาไดใกลเคียงกัน ใหเฉลียค ่ าทีได ่ ของแผงวงจรตรวจจับแสงสะทอนทัง้ 3 ชุด ในขันตอนนี ้ จากการทดสอบได ้ คาประมาณ 900

 

















ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0 46 ADC6

14

SW1

+

S

SW2 48

MOTOR

44 ADC4

50

15 PC7

BATTERY LEVEL

45 ADC5

49

PC6

C r e a t o r e > >> > > > > >

ADC7

SERVO PORT

9 10 11 12 13

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5


120 Robo-Creator : AT-BOT activity book

L10.5 วางหุนยนต  ใหแผงวงจรตรวจจับทัง้ 3 ชุดอยูเหนือเสนสีดํา อานและบันทึกคาที่วัดไดซึงแสดงบนโมดู ่ ล LCD แผงวงจรตรวจจับทัง้ 3 ชุดควรอานคาไดใกลเคียงกัน ในขันตอนนี ้ จากการทดสอบได ้ คาเฉลียประมาณ ่ 100

 

















ON 43 ADC3 42 ADC2 41 ADC1 40 ADC0 46 ADC6

14

SW1

+

S

SW2 48

MOTOR

44 ADC4

50

PC7

BATTERY LEVEL

15

45 ADC5

49

PC6

C r e a t o r e > >> > > > > >

ADC7

10 11 12 13

SERVO PORT

9

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

KNOB

8

-

USB DATA

E2

RESET

7.2-9V BATT.

START

0

1

2

3

4

5

L10.6 คํานวณหาคาอางอิงที่ใชในการแยกแยะพื้นสนามสีขาวกับเสนสีดําของสนาม ดังนี้ คาอางอิง = (คาการสะทอนแสงที่ไดจากพื้นสนามสีขาว + คาการสะทอนแสงที่ไดจากเสนสีดํา) / 2 = (900+100) / 2 = 500 อยางไรก็ตาม ในการใชงานจริงอาจกําหนดคาใหกวางกวานีได ้ แตควรอยูในชวง 100 ถึง 900 แตไมควร เลือกคาที่ใกลกับ 100 และ 900 มากเกินไป สําหรับการยกตัวอยางตอจากนี้ไปจะยึดคาอางอิงไวที่ 500


Robo-Creator : AT-BOT activity book  121

  ในการทดลองนีเป ้ นการเขียนโปรแกรมควบคุมหุนยนต AT-BOT ใหเคลือนที ่ ภายในกรอบสี ่ เหลี ่ ยมมุ ่ มโคง ทีมี่ เสนสีดําลอมรอบ (แบบเดียวกับสนามในการทดลองที่ 14) โดยในการทดลองนีจะใช ้ งานแผงวงจรตรวจจับแสง สะทอนเพียง 2 ตัวทีติ่ ดตั้งใตฐานหุนยนตดานหนามุมซายและขวา

  

การเชื่อมตอทางฮารดแวร 

ใชหุนยนต AT-BOT ที่ติดตังแผงวงจรตรวจจั ้ บแสงสะทอนจากการทดลองที่ 14 กอนหนานีในการทดสอบ ้

ขั้นตอน L15.1 สรางไฟลโปรเจ็กตชื่อ robo_inner และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L15-1 L15.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L15.3 เริ่มตนรันโปรแกรม ที่โมดูล LCD ของหุนยนตแสดงขอความ Press SW1

แจงใหกดสวิตช SW1 ที่แผงวงจร ATX ของหุนยนต AT-BOT เพื่อสังให ่ หุนยนตเคลือนที ่ ่ L15.4 กดสวิตช SW1 ที่แผงวงจร ATX ของหุนยนต AT-BOT สังเกตการเคลือนที ่ ของหุ ่ นยนต หุนยนต  AT-BOT จะเคลือนที ่ อยู ่ ภายในกรอบเส  นสีดํา โดยเมือแผงวงจรจั ่ บแสงสะทอนพบเสนสีดํา ไมโคร คอนโทรลเลอรจะควบคุมใหหุนยนต  ถอยหลัง แลวเปลียนทิ ่ ศทางการเคลือนที ่ ่ จะมีลักษณะคลายๆ กับการหลบหลีก วัตถุแบบสัมผัส หากแตเปลี่ยนจากการตรวจจับการชนมาเปนการตรวจจับเสนสีดําและพื้นสีขาวแทน


122 Robo-Creator : AT-BOT activity book

#include <atx.h> #define POW 80 #define REF 500 unsigned int left,right; void forward(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,POW); motor(3,POW); sleep(time); } void backward(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,-POW); motor(3,-POW); sleep(time); } void turn_left(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,POW); motor(3,POW); sleep(time); } void turn_right(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,-POW); motor(3,-POW); sleep(time); }

// ผนวกไลบรารีหลัก // กําหนดกําลังขับของมอเตอรคงที่ที่ 80 % ของกําลังขับสูงสุด // กําหนดคาอางอิงในการเปรียบเทียบเสนและพืนสนาม ้ // กําหนดตัวแปรเก็บคาที่อานไดจากตัวตรวจจับเสนดานซายและขวา // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา // ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย

// ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา

โปรแกรมที่ L15-1 ไฟล robo_inner.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ในขอบเขตที ่ กํ่ าหนด (มีตอ)


Robo-Creator : AT-BOT activity book  123

void setup() { lcd(“SW1 Press!”); // แสดงขอความแจงผูใชงานใหกดสวิตช SW1 sw1_press(); // รอจนกระทังสวิ ่ ตช SW1 ถูกกด } void loop() { left = analog(0); // อานคาอะนาลอกจากตัวตรวจจับดานซายมาเก็บทีตั่ วแปร left right = analog(2); // อานคาอะนาลอกจากตัวตรวจจับดานขวามาเก็บทีตั่ วแปร right if(left>REF && right>REF) // ตรวจสอบวา ตัวตรวจจับทังสองด ้ านไมยังไมพบเสนใชหรือไม { forward(1); // หุนยนตเคลื่อนที่ตรงไปขางหนาภายในชวงเวลาสันๆ ้ } else if(left<REF && right>REF) // ตรวจสอบวา ตัวตรวจจับดานซายพบเสนเพียงตัวเดียวหรือไม { backward(500); // ถาพบเสน ควบคุมใหหุนยนต  ถอยหลังประมาณ 0.5 วินาที turn_right(800); // จากนั้นเลี้ยวขวา 0.8 วินาที เพือเปลี ่ ่ยนทิศทางการเคลื่อนที่ } else if(left>REF && right<REF) // ตรวจสอบวา ตัวตรวจจับเสนดานขวาพบเสนเพียงตัวเดียวหรือไม { backward(500); // ถาพบเสน ควบคุมใหหุนยนต  ถอยหลังประมาณ 0.5 วินาที turn_left(800); // จากนั้นเลี้ยวขวา 0.8 วินาที เพือเปลี ่ ่ยนทิศทางการเคลื่อนที่ } else if(left<REF && right<REF) // ตรวจสอบวา ตัวตรวจจับเสนทั้งสองดานพบเสนหรือไม { backward(500); // ถาพบเสน ควบคุมใหหุนยนต  ถอยหลังประมาณ 0.5 วินาที turn_left(1500); // จากนั้นเลี้ยวขวา 1.5 วินาที เพือเปลี ่ ่ยนทิศทางการเคลื่อนที่ } } คําอธิบายโปรแกรม เมือเริ ่ มทํ ่ างาน ทีโมดู ่ ล LCD แสดงขอความ “Press SW1” เพือรอการกดสวิ ่ ตช SW1 เมือพบการกดสวิ ่ ตช SW1 ซีพียูจึงสามารถกระทําคําสังในบรรทั ่ ดถัดไปได ซึงก็ ่ คือ เขาไปทํางานภายในฟงกชัน่ loop เพือวนอ ่ านคาจาก แผงวงจรตรวจจับแสงสะทอนที่ใตฐานหุนยนตดานหนาซาย (ชอง ADC0) และขวา (ชอง ADC2) มาเก็บทีตั่ วแปร left และ right ตามลําดับ นําไปเปรียบเทียบกับคาอางอิง ทําใหทราบวา หุนยนต  พบพืนสี ้ ขาวหรือเสนสีดํา

โปรแกรมที่ L15-1 ไฟล robo_inner.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ในขอบเขตที ่ กํ่ าหนดT (มีตอ)


124 Robo-Creator : AT-BOT activity book

ถาแผงวงจรตรวจจับแสงสะทอนตัวใดใหคาผลลัพธมากกวา REF (คาอางอิงเทากับ 500) หุนยนต  จะตัดสิน วา ตรวจพบพืนสนามสี ้ ขาว ในทางกลับกัน ถาพบวาคาขอมูลที่อานไดนอยกวา REF จะตัดสินวา หุนยนต  พบเสนสี ดําแลว จากนั้นโปรแกรมจะนําคาของตัวแปรทังสองไปเปรี ้ ยบเทียบได 4 กรณีดังนี้ กรณี if(left>REF && right>REF) เปนการตรวจสอบวา ตัวตรวจจับไมพบเสนใชหรือไม ถาเปนจริง (ไมพบเสน) จะตอบสนองใหหุนยนต  เคลื่อนที่ตรงไปขางหนา กรณี else if(left<REF && right>REF) เปนการตรวจสอบวา ตัวตรวจจับดานซายพบเสนเพียงตัวเดียว หรือไม ถาเปนจริง (พบเสนหรือพบกรอบสีดํา) จะตอบสนองใหหุนยนต  ถอยหลังแลวเลียวขวาเพื ้ ่อเปลี่ยนทิศทางการ เคลื่อนที่ กรณี else if(left>REF && right<REF) เปนการตรวจสอบวา ตัวตรวจจับดานขวาพบเสนเพียงตัวเดียว หรือไม ถาเปนจริง (พบเสนหรือพบกรอบสีดํา) จะตอบสนองใหหุนยนต  ถอยหลังแลวเลียวซ ้ ายเพือเปลี ่ ่ยนทิศทางการ เคลื่อนที่ กรณี else if(left<REF && right<REF) เปนการตรวจสอบวา ตัวตรวจจับเสนทั้งสองดานพบเสนใช หรือไม ถาเปนจริง (พบเสนหรือพบกรอบสีดํา) จะตอบสนองใหหุนยนต  ถอยหลังแลวเลียวซ ้ ายเพือเปลี ่ ่ยนทิศทางการ เคลื่อนที่ จากหลักการในการตรวจจับเสนดังกลาว ผูพัฒนาสามารถนําไปพัฒนาโปรแกรมควบคุมหุนยนตใหเคลื่อนที่ ภายในกรอบเสนสี่เหลี่ยมโดยใชแผงวงจรตรวจจับแสงสะทอนอินฟราเรดเพียง 1 ตัวก็ได ้ ้คือ 500 ไดมาจากการทดลองที่ 14 หมายเหตุ คาอางอิง REF สําหรับเปรียบเทียบเสนและพืนสนามในการทดลองนี ผูพัฒนาอาจไดคาที่แตกตางออกไป ทังนี ้ ้ขึ้นอยูกับปจจัยภายนอกอืนๆ ่ อาทิ ปริมาณแสงสวางโดยรอบสนามทดสอบ ซึงมาจากดวงอาทิ ่ ตย, หลอดไฟแบบไส หรือแหลงกําเนิดแสงอืนๆรวมถึ ่ งระยะหางจากตัวตรวจจับถึงพื้นสนาม

โปรแกรมที่ L15-1 ไฟล robo_inner.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ในขอบเขตที ่ กํ่ าหนด (จบ)


Robo-Creator : AT-BOT activity book  125

   



นีคื่ อตัวอยางเพิมเติ ่ มของการคนหาและตรวจจับเสนของหุนยนต  AT-BOT โดยกําหนดใหมีเสนสีดํา 2 เสนที่ ขนานกัน จากนันปล ้ อยหุนยนต  ใหเคลือนที ่ โดยเอี ่ ยงทํามุมประมาณ 45 องศากับเสนสีดํา หุนยนต  จะเคลือนที ่ ตรงไป ่ ขางหนาอยางตอเนือง ่ จนกระทังตรวจพบเส ่ นก็จะหมุนตัวเลียว ้ แลวเคลือนที ่ ตรงจนกว ่ าจะตรวจพบเสน ก็จะหมนุตัวอีก ครัง้ ทํางานเชนนีไปตลอด ้ ทําใหหุนยนต  มีเสนทางการเคลือนที ่ ในลั ่ กษณะสลับฟนปลาหรือซิกแซกไปมาระหวางเสน สีดําทังสองเส ้ น ดังรูป

ในการเคลื่อนทีแบบสลั ่ บฟนปลาในการทดลองนี้ใชแผงวงจรตรวจจับแสงสะทอนเพียง 2 ตัวทีติ่ ดตั้งใต ฐานหุนยนตดานหนามุมซายและขวาเชนเดียวกับการทดลองที่ 15

สรางสนามทดสอบ ใชแผนพลาสติกลูกฟูกขนาด 90 x 60 เซนติเมตรจากการทดลองที่ 14 (หรือขนาดอืนก็ ่ ไดตามตองการ แต ควรมีขนาดใหญเพียงพอใหหุนยนตสามารถเคลือนที ่ ได ่ โดยสะดวก) มาทําเปนพื้นสนาม แลวติดเทปสีดํา 2 เสน ใหขนานกัน โดยมีระยะหางอยางนอย 30 เซนติเมตร เพื่อใหหุนยนตมีพื้นทีเพี ่ ยงพอในการเคลือนที ่ ่

การตอฮารดแวรเพิ่มเติม 

ใชหุนยนต AT-BOT ที่ติดตังแผงวงจรตรวจจั ้ บแสงสะทอนจากการทดลองที่ 14 กอนหนานีในการทดสอบ ้

ขั้นตอน L16.1 สรางไฟลโปรเจ็กตชื่อ robo_pingpong และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L16-1 L16.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L16.3 วางหุนยนตที่จุดปลอยตัว โดยเอียงทํามุมกับเสนสีดําประมาณ 45 องศา


126 Robo-Creator : AT-BOT activity book

#include <atx.h> #define POW 80 #define REF 500 unsigned int left,right; void forward(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,POW); motor(3,POW); sleep(time); } void backward(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,-POW); motor(3,-POW); sleep(time); } void turn_left(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,POW); motor(3,POW); sleep(time); } void turn_right(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,-POW); motor(3,-POW); sleep(time); }

// ผนวกไลบรารีหลัก // กําหนดกําลังขับของมอเตอรคงที่ที่ 80 % ของกําลังขับสูงสุด // กําหนดคาอางอิงในการเปรียบเทียบเสนและพืนสนาม ้ // กําหนดตัวแปรเก็บคาที่อานไดจากตัวตรวจจับเสนดานซายและขวา // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา // ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย

// ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา

โปรแกรมที่ L16-1 ไฟล robo_pingpong.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT เคลือนที ่ ในขอบเขตแบบสลั ่ บฟนปลา (มีตอ)


Robo-Creator : AT-BOT activity book  127

void setup() { lcd(“SW1 Press!”); // แสดงขอความแจงผูใชงานใหกดสวิตช SW1 sw1_press(); // รอจนกระทังสวิ ่ ตช SW1 ถูกกด } void loop() { left = analog(0); // อานคาอะนาลอกจากตัวตรวจจับเสนทางซายมาเก็บทีตั่ วแปร left right = analog(2); // อานคาอะนาลอกจากตัวตรวจจับเสนทางขวามาเก็บทีตั่ วแปร right if(left>REF && right>REF) // ตรวจสอบวา ตัวตรวจจับเสนทั้งสองดานไมพบเสน ใชหรือไม { forward(1); // ถาไมพบเสน หุนยนต  เคลื่อนที่ตรงไปขางหนาภายในชวงเวลาสันๆ ้ } else if(left<REF && right>REF) // ตรวจสอบวา ตัวตรวจจับเสนดานซายพบเสนเพียงตัวเดียวหรือไม { turn_right(400); // ถาใช (พบเสน) ทําการเลี้ยวขวา 0.4 วินาทีเพือเปลี ่ ่ยนทิศทางการเคลื่อนที่ } else if(left>REF && right<REF) // ตรวจสอบวา ตัวตรวจจับเสนดานขวาพบเสนเพียงตัวเดียวหรือไม { turn_left(400); // ถาใช (พบเสน) ทําการเลี้ยวซาย 0.4 วินาทีเพือเปลี ่ ่ยนทิศทางการเคลื่อนที่ } else if(left<REF && right<REF) // ตรวจสอบวา ตัวตรวจจับเสนทั้งสองดานพบเสนหรือไม { backward(1); // ถาพบเสน ควบคุมใหหุนยนต  ถอยหลังภายในชวงเวลาสันๆ ้ } } คําอธิบายโปรแกรม เริมต ่ นการทํางานของโปรแกรมจะแสดงขอความทีโมดู ่ ล LCD เปน “Press SW1” เพือรอการกดสวิ ่ ตช SW1 เมือกดสวิ ่ ตช SW1 ซีพียูเขาไปทํางานภายในฟงกชัน่ loop เพือวนอ ่ านคาของแผงวงจรตรวจจับแสงสะทอนทีต่ อกับชอง ADC0 และ ADC2 (ตัวตรวจจับเสนดานซายและขวาของหุนยนต  AT-BOT) มาเก็บทีตั่ วแปร left และ right ตามลําดับ เพือตรวจสอบว ่ า แผงวงจรตรวจจับแสงสะทอนตัวใดพบเสนสีดํา โดยแผงวงจรตรวจจับแสงสะทอนตัวใดใหคาผลลัพธ มากกวา REF (คาอางอิงในการเปรียบเทียบซึงคื ่ อ 500) จะถูกตัดสินวา ตรวจพบพืนสี ้ ขาว ในทางกลับกันถาคาทีอ่ านได นอยกวา REF จะถูกตัดสินวา ตรวจพบเสนสีดํา จากนันจะนํ ้ าคาของตัวแปรทังสองไปเปรี ้ ยบเทียบดังนี้

โปรแกรมที่ L16-1 ไฟล robo_pingpong.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT เคลือนที ่ ในขอบเขตแบบสลั ่ บฟนปลา (มีตอ)


128 Robo-Creator : AT-BOT activity book

1. กรณี if(left>REF && right>REF) เปนการตรวจสอบวา ตัวตรวจจับเสนทั้งสองดานยังไมพบเสน ใชหรือไม ถาเปนจริง (ไมพบเสน) จะตอบสนองใหหุนยนต  เคลื่อนที่ตรงไปขางหนาอยางตอเนือง ่ 2. กรณี else if(left<REF && right>REF) เปนการตรวจสอบวา ตัวตรวจจับเสนดานซายพบเสนเพียง ตัวเดียวหรือไม ถาเปนจริง ในกรณีนี้จะตีความวา หุนยนต  พบเสนขอบบน โปรแกรมจะกําหนดใหหุนยนต  เลี้ยวขวา เพือเลี ่ ่ยงออกจากเสน โดยผูพัฒนาโปรแกรมสามารถปรับคาเวลาหนวงในการเลี้ยวเพือให ่ ไดมุมเลี้ยวตามตองการ 3. กรณี else if(left>REF && right<REF) เปนการตรวจสอบวา ตัวตรวจจับเสนดานขวาพบเสนเพียง ตัวเดียวหรือไม ถาเปนจริง ในกรณีนี้จะตีความวา หุนยนต  พบเสนขอบลาง โปรแกรมจะกําหนดใหหุนยนต  เลี้ยวซาย เพื่อเลี่ยงออกจากเสน 4. กรณี else if(left<REF && right<REF) เปนการตรวจสอบวา ตัวตรวจจับเสนทั้งสองดานพบเสน หรือไม ถาเปนจริง (พบเสน) จะตอบสนองใหหุนยนต  ถอยหลังเปนชวงเวลาสันๆ ้ เพือเลี ่ ่ยงออกจากเสน นอกจากนี้ผูพัฒนาโปรแกรมอาจเพิมเติ ่ มคําสังให ่ หุนยนต  หมุนตัวและเลี้ยวดวยคามุมที่แตกตางออกไป เพือให ่ ไดรูปแบบการเคลื่อนทีแบบซิ ่ ก-แซกหรือสลับฟนปลาทีสมบู ่ รณ รวมถึงอาจตองปรับแตงตําแหนงและระยะหางของตัว ตรวจจับเสนจากพืน้ การปรับแตงทางกลเทาที่จําเปน เพือให ่ การเคลื่อนที่ของหุนยนต  เปนไปตามที่ตองการ

โปรแกรมที่ L16-1 ไฟล robo_pingpong.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT เคลือนที ่ ในขอบเขตแบบสลั ่ บฟนปลา (จบ) L16.4 เริ่มตนรันโปรแกรม ที่โมดูล LCD แสดงขอความแจงใหกดสวิตช SW1 ที่แผงวงจรควบคุม ATX ของหุนยนต AT-BOT เพื่อสัง่ ใหหุนยนตเคลือนที ่ ่ L16.5 กดสวิตช SW1 ของหุนยนต AT-BOT สังเกตการเคลือนที ่ ของหุ ่ นยนต หุนยนต  AT-BOT จะเคลือนที ่ ตรงอย ่ างตอเนือง ่ จนพบเสน ก็จะหมุนตัวเลียวทํ ้ ามุมประมาณ 90 องศา จากนัน้ เคลือนที ่ ตรงอี ่ กครั้ง จนพบเสนอีกดานหนึง่ ก็จะหมุนตัวเลี้ยวแลวเคลือนที ่ ตรงกลั ่ บไปอีกดานหนึงในลั ่ กษณะซิก แซกไปมาหรือสลับฟนปลา โดยหุนยนตจะเคลือนที ่ ่อยูระหวางเสนสีดําทั้ง 2 ฝง ใหผูพัฒนาโปรแกรมสังเกตวา การเคลือนที ่ และมุ ่ มในการเลี้ยวเพือทิ ่ ศทางของหุนยนตเหมาะสมแลวหรือไม ถายังไมสมบูรณเพียงพอ ผูพัฒนา โปรแกรมสามารถปรับคาเวลาในการหนวงสําหรับการเลียวภายในโปรแกรมให ้ เหมาะสม จนกระทั่งการทํางาน ของหุนยนตเปนทีน่ าพอใจ


Robo-Creator : AT-BOT activity book  129

     หลังจากเรียนรูและทดลองการตรวจจั  บเสนจากการทดลองที่ 15 และ 16 แลว ตอไปเปนการปฏิบัติภาระกิจ หลักประการหนึงของหุ ่ นยนต  อัตโนมัตินันคื ่ อ การเคลือนที ่ ตามเส ่ น ในการทดลองนีเป ้ นการควบคุมหุนยนต  AT-BOT ใหเคลือนที ่ ตามเส ่ นสีดําและมีเสนตัด 2 จุดทีกึ่ งกลางตามรู ่ ปที่ L17 -1 โดยใชแผงวงจรตรวจจับแสงสะทอน 2 ตัวทีติ่ ด ตังใต ้ ฐานหุนยนตดานหนาซายและขวา สําหรับตัวตรวจจับทีอยู ่ ตรงกลางจะถอดออกหรือไมก็ได เงื่อนไขในการ กระทําภาระกิจนี้มีดังนี้ 1. หุนยนตตองเคลือนที ่ ตามเส ่ นสีดําที่กําหนด 2. เมื่อหุนยนตพบเสนตัดจะตองหยุดรอที่จุดตัดเปนเวลา 3 วินาที แลวจึงเคลือนที ่ ต่ อไป

รูปที่ L17-1 สนามทดสอบหุนยนต  AT-BOT เคลื่อนทีตามเส ่ นโดยใชตัวตรวจจับเสน 2 ตัว ทําจากแผน พลาสติกลูกฟูกสีขาว แลวติดเทปสีดําตามแบบ


130 Robo-Creator : AT-BOT activity book

หลักการพื้นฐานของหุนยนต  เคลื่อนทีตามเส ่ นแบบใชตัวตรวจจับเสน 2 ตัว หัวใจหลักของหุนยนต  เคลือนที ่ ่ตามเสนคือ ควบคุมใหหุนยนต  เคลือนที ่ โดยที ่ ่ตัวตรวจจับเสนทังสองตั ้ วอยู ในตําหนงที่ครอมเสน ดังนันจะเกิ ้ ดเหตุการณขึน้ 4 กรณี ซึงนํ ่ ามาใชกําหนดเงือนไขของการทํ ่ างานไดดังนี้

กรณีที่ 1 หุนยนต  อยูในแนวเสนของสนามหรือครอมเสน

  

ตําแหนงของตัวตรวจจับเสนดานซาย อยูบริเวณพื้นสีขาว (อานคาไดมากกวาคาอางอิง) ตําแหนงของตัวตรวจจับเสนดานขวา อยูบริเวณพื้นสีขาว (อานคาไดมากกวาคาอางอิง) การควบคุมหุนยนตเมื่อพบเหตุการณนี้ ควรตอบสนองใหหุนยนตเคลือนที ่ ่ตรงไปขางหนาแลว หนวงเวลาในการเคลือนที ่ ่ชวงสันๆ ้


Robo-Creator : AT-BOT activity book  131

กรณีที่ 2 หุนยนต  เคลื่อนทีพ่ นจากเสนไปทางขวา

 











ตําแหนงของตัวตรวจจับเสนดานซาย อยูบนเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตําแหนงของตัวตรวจจับเสนดานขวา อยูบริเวณพื้นสีขาว (อานคาไดมากกวาคาอางอิง) การควบคุมหุนยนต  เมื่อพบเหตุการณนี้ ควรตอบสนองใหหุนยนต  เลียวซ ้ ายแลวหนวงเวลาในการ เคลือนที ่ ช่ วงสันๆ ้ เพื่อใหหุนยนตเคลือนที ่ กลั ่ บไปครอมเสน

กรณีที่ 3 หุนยนต  เอียงจากเสนทางไปดานซาย

 











ตําแหนงของตัวตรวจจับเสนดานซาย อยูบริเวณพื้นสีขาว (อานคาไดมากกวาคาอางอิง) ตําแหนงของตัวตรวจจับเสนดานขวา อยูบนเสนสีดํา (อานคาไดนอยกวาคาอางอิง) การควบคุมหุนยนต  เมือพบเหตุ ่ การณนี้ ควรตอบสนองใหหุนยนต  เลียวขวา ้ แลวหนวงเวลาในการ เคลือนที ่ ช่ วงสันๆ ้ เพื่อใหหุนยนตเคลือนที ่ กลั ่ บไปครอมเสน


132 Robo-Creator : AT-BOT activity book

กรณีที่ 4 หุนยนต  พบเสนตัดหรืออาจเปนทางแยก

 











ตําแหนงของตัวตรวจจับเสนดานซาย อยูบนเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตําแหนงของตัวตรวจจับเสนดานขวา อยูบนเสนสีดํา (อานคาไดนอยกวาคาอางอิง) การควบคุมหุนยนตเมือพบเหตุ ่ การณนี้ ผูพัฒนาอาจเลือกใหหุนยนตเคลือนที ่ ตรง,เลี ่ ยวซ ้ าย ,เลียว ้ ขวา,หยุด หรือถอยหลังไดตามตองการ ขึนอยู ้ กั บเปาหมายในการทําภาระกิจ


Robo-Creator : AT-BOT activity book  133

#include <atx.h> #define POW 80 #define REF 500 unsigned int left,right; void forward(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,POW); motor(3,POW); sleep(time); } void backward(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,-POW); motor(3,-POW); sleep(time); } void turn_left(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,POW); motor(3,POW); sleep(time); } void turn_right(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,-POW); motor(3,-POW); sleep(time); }

// ผนวกไลบรารีหลัก // กําหนดกําลังขับของมอเตอรคงที่ที่ 80 % ของกําลังขับสูงสุด // กําหนดคาอางอิงในการเปรียบเทียบเสนและพืนสนาม ้ // กําหนดตัวแปรเก็บคาที่อานไดจากตัวตรวจจับเสนดานซายและขวา // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา // ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย

// ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา

โปรแกรมที่ L17-1 ไฟล robo_line1.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ตามเส ่ นสีดําดวยการใชตัวตรวจจับเสน 2 ตัว (มีตอ)


134 Robo-Creator : AT-BOT activity book

void pause() { motor_stop(ALL); } void setup() { lcd(“SW1 Press!”); sw1_press(); } void loop() { left = analog(0); right = analog(2); if(left>REF && right>REF) { forward(1); } else if(left<REF && right>REF) { turn_left(10); } else if(left>REF && right<REF) { turn_right(10); } else if(left<REF && right<REF) { pause(); sleep(3000); forward(300); } }

// ฟงกชันหยุ ่ ดการขับเคลื่อนหุนยนต // หยุดขับมอเตอรทุกชองพรอมกัน

// แสดงขอความแจงผูใชงานใหกดสวิตช SW1 // รอจนกระทังสวิ ่ ตช SW1 ถูกกด

// อานคาจากตัวตรวจจับดานซายมาเก็บทีตั่ วแปร left // อานคาจากตัวตรวจจับดานขวามาเก็บทีตั่ วแปร right // ตรวจสอบวา ตัวตรวจจับทังสองด ้ านไมพบเสน ใชหรือไม // ถาไมพบเสน หุนยนต  เคลื่อนที่ตรงไปขางหนาภายในชวงเวลาสันๆ ้ // ตรวจสอบวา ตัวตรวจจับเสนดานซายพบเสนเพียงตัวเดียวหรือไม // ถาพบเสน ใหเลี้ยวซาย 0.01 วินาทีเพือพยายามเคลื ่ ่อนที่กลับไปครอมเสน // ตรวจสอบวา ตัวตรวจจับดานขวาพบเสนเพียงตัวเดียวหรือไม // ถาพบเสน ใหเลี้ยวขวา 0.01 วินาทีเพือพยายามเคลื ่ ่อนที่กลับไปครอมเสน // ตรวจสอบวา ตัวตรวจจับเสนทั้งสองดานพบเสนหรือไม // ถาพบ แสดงวา เคลื่อนที่มาถึงเสนตัดแลว ใหหยุดการขับเคลื่อนหุนยนต // หนวงเวลา 3 วินาทีสําหรับหยุดการขับเคลื่อนหุนยนต // หุนยนต  เคลื่อนที่ตรงไปขางหนา 0.3 วินาทีเพือข ่ ามเสนตัด

โปรแกรมที่ L17-1 ไฟล robo_line1.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ตามเส ่ นสีดําดวยการใชตัวตรวจจับเสน 2 ตัว (มีตอ)


Robo-Creator : AT-BOT activity book  135

คําอธิบายโปรแกรม เริ่มตนการทํางานของโปรแกรมจะแสดงขอความที่โมดูล LCD เปน “Press SW1” เมือกดสวิ ่ ตช SW1 ซีพียู จะเขาไปทํางานภายในฟงกชัน่ loop เพื่อวนอานคาจากแผงวงจรตรวจจับแสงสะทอนที่ชอง ADC0 และ ADC2 มาเก็บทีตั่ วแปร left และ right ตามลําดับ จากนั้นโปรแกรมจะนําคาของตัวแปรทังสองไปเปรี ้ ยบเทียบ 4 กรณีดังนี้ 1. กรณี if(left>REF && right>REF) เปนการตรวจสอบวาตัวตรวจจับเสนทั้งสองดานยังไมพบเสนใช หรือไม ถาเปนจริง (คือไมพบ) ตีความวา หุนยนต  เคลื่อนที่ครอมเสนอยู จึงกําหนดใหหุนยนต  เคลื่อนที่ตรงไปขางหนา 2. กรณี else if(left<REF && right>REF) เปนการตรวจสอบวา ตัวตรวจจับเสนดานซายพบเสนเพียง ตัวเดียวหรือไม ถาเปนจริง แสดงวา หุนยนต  กําลังเคลื่อนที่พนจากเสนไปทางขวา จึงตองควบคุมใหหุนยนต  เลี้ยวซาย ดวยคาเวลาสันๆ ้ เพือควบคุ ่ มใหหุนยนต  เคลื่อนที่กลับมาครอมเสนอีกครัง้ 3. กรณี else if(left>REF && right<REF) เปนการตรวจสอบวา ตัวตรวจจับเสนดานขวาพบเสนเพียง ตัวเดียวหรือไม ถาเปนจริง แสดงวา หุนยนต  กําลังเคลื่อนที่พนจากเสนไปทางซาย จึงตองควบคุมใหหุนยนต  เลี้ยวขวา ดวยคาเวลาสันๆ ้ เพือควบคุ ่ มใหหุนยนต  เคลื่อนที่กลับมาครอมเสนอีกครัง้ 4. กรณี else if(left<REF && right<REF) เปนการตรวจสอบวา ตัวตรวจจับเสนทั้งสองดานพบเสน หรือไม ถาเปนจริง (คือพบเสน) แสดงวา หุนยนต  เคลือนที ่ พบจุ ่ ดตัดหรือทางแยก จึงควบคุมใหหุนยนต  หยุดอยูที ตํ่ าแหนง นั้นเปนเวลาประมาณ 3 วินาที จากนั้นจึงเคลื่อนที่ตรงเปนเวลา 0.3 วินาที เพือข ่ ามเสนตัด อยางไรก็ตาม สําหรับการกําหนดคาของเวลาในแตละชวงของการเคลื่อนทีนั่ ้นผูพัฒนาสามารถปรับแกไดเพือ่ ใหเหมาะสมกับสถานการณและสภาพแวดลออมของสนามในขณะนั้น

โปรแกรมที่ L17-1 ไฟล robo_line1.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ตามเส ่ นสีดําดวยการใชตัวตรวจจับเสน 2 ตัว (จบ)

สรางสนามทดสอบ ใชแผนพลาสติกลูกฟูกขนาด 90 x 60 เซนติเมตรจากการทดลองที่ 14 (หรือขนาดอืนก็ ่ ไดตามตองการ แต ควรมีขนาดใหญเพียงพอใหหุนยนตสามารถเคลือนที ่ ได ่ โดยสะดวก) มาทําเปนพืนสนาม ้ แลวติดเทปสีดําตามแบบ ในรูปที่ L17-1

การตอฮารดแวรเพิ่มเติม 

ใชหุนยนต AT-BOT ที่ติดตังแผงวงจรตรวจจั ้ บแสงสะทอนจากการทดลองที่ 14 กอนหนานีในการทดสอบ ้

ขั้นตอน L17.1 สรางไฟลโปรเจ็กตชื่อ robo_line1 และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L17-1 L17.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L17.3 นําหุนยนต AT-BOT ไปวางครอมเสนสีดําในตําแหนงที่ไมใชจุดตัด


136 Robo-Creator : AT-BOT activity book

L17.4 เริ่มตนรันโปรแกรม ทีโมดู ่ ล LCD ของหุนยนต  แสดงขอความ Press SW1 แจงใหกดสวิตช SW1 เพือสั ่ งให ่ หุนยนต  เคลือนที ่ ่ L17.5 กดสวิตช SW1 ที่หุนยนต AT-BOT สังเกตการเคลือนที ่ ของหุ ่ นยนต หุนยนต  จะเคลื่อนที่ตามเสนสีดํา เมื่อพบเสนตัด จะหยุดนิ่งประมาณ 3 วินาที หลังจากนันจึ ้ งเคลื่อนที่ ตามเสนตอไป


Robo-Creator : AT-BOT activity book  137

    ในการทดลองนีเป ้ นการตอยอดจากการทดลองที่ 17 ดวยการเพิ่มแผงวงจรตรวจจับแสงสะทอนเพือนํ ่ ามา ใชงานเปนตัวตรวจจับเสนตัวที่ 3 โดยติดตั้งเขาที่ตําแหนงกลางระหวางตัวตรวจจับเสนดานซายและขวา (หากใน การทดลองที่ 17 ไมไดถอดแผงวงจรตรวจจับแสงสะทอนตัวกลางที่ติดตั้งอยูใตฐานหุนยนต  ออก ก็จะใชงานตอใน การทดลองนีได ้ เลย) ทั้งนีเพื ้ ่อชวยใหหุนยนต AT-BOT สามารถตรวจจับเสนตัดหรือทางแยกไดดียิ่งขึน้ สําหรับ สนามทดสอบนันจะใช ้ แบบเดียวกับการทดลองที่ 17 รวมถึงการเชือมต ่ อทางฮารดแวรดวย ทีเพิ ่ มเติ ่ มเขามาคือ ตอง ตอสายจากแผงวงจรตรวจจับแสงสะทอนตัวทีติ่ ดตั้งไวตรงกลางของฐานหุนยนตมาเขาที่ชอง ADC1 เงื่อนไขในการทํางานของหุนยนต AT-BOT ในการทดลองนี้คือ 1. หุนยนตตองเคลือนที ่ ตามเส ่ นสีดําที่กําหนด 2. เมื่อหุนยนตพบเสนตัดจะตองหยุดรอที่จุดตัดเปนเวลา 3 วินาที แลวจึงเคลือนที ่ ต่ อไป

หลักการพื้นฐานของหุนยนต  เคลื่อนทีตามเส ่ นแบบใชตัวตรวจจับเสน 3 ตัว หัวใจหลักของหุนยนต  เคลือนที ่ ตามเส ่ นคือ ควบคุมใหหุนยนตเคลือนที ่ โดยที ่ ่ตัวตรวจจับเสนสองตัวทาง ดานซายและขวาอยูในตําหนงที่ครอมเสน สวนตัวตรวจจับเสนตรงกลางจะอยูบนเสน ดังนันจะเกิ ้ ดเหตุการณขึน้ ทั้งหมด 6 กรณี ซึงสามารถนํ ่ ามาใชกําหนดเงือนไขของการทํ ่ างานไดดังนี้

กรณีที่ 1 หุนยนต  อยูในแนวเสนของสนามหรือครอมเสน

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบพื้นสนามสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบพื้นสนามสีขาว (อานคาไดมากกวาคาอางอิง) การควบคุมหุนยนต  เมื่อพบเหตุการณนีคื้ อ ควบคุมใหหุนยนตเคลือนที ่ ตรงไปข ่ างหนา แลวหนวง เวลาในการเคลือนที ่ ช่ วงสันๆ ้


138 Robo-Creator : AT-BOT activity book

กรณีที่ 2 หุนยนต  เคลื่อนทีพ่ นจากเสนไปทางขวา

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบพื้นสนามสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบพื้นสนามสีขาว (อานคาไดมากกวาคาอางอิง) การควบคุมหุนยนตเมื่อพบเหตุการณนีคื้ อ ควบคุมใหหุนยนตเลียวซ ้ าย แลวหนวงเวลาในการ เคลือนที ่ ช่ วงสันๆ ้ เพื่อใหหุนยนตเคลือนที ่ กลั ่ บไปครอมเสน

กรณีที่ 3 หุนยนต  เอียงจากเสนทางไปดานซาย

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบพื้นสนามสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบพื้นสนามสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) เมื่อพบเหตุการณนี้ ตองควบคุมใหหุนยนต  เลียวขวา ้ แลวหนวงเวลาในการเคลือนที ่ ช่ วงสันๆ ้ เพื่อ ใหหุนยนตเคลือนที ่ กลั ่ บไปครอมเสน


Robo-Creator : AT-BOT activity book  139

กรณีที่ 4 หุนยนต  พบทางแยกดานซาย

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบพื้นสนามสีขาว (อานคาไดมากกวาคาอางอิง) เมื่อพบเหตุการณนี้ ผูพัฒนาอาจเลือกสังให ่ หุนยนตเคลือนที ่ ตรงไปข ่ างหนา,เลี้ยวซาย , เลียวขวา, ้ หยุดหรือถอยหลังไดตามตองการ ขึนอยู ้ กั บเปาหมายในการทําภาระกิจ

กรณีที่ 5 หุนยนต  พบทางแยกดานขวา

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบพื้นสนามสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) เมื่อพบเหตุการณนี้ ผูพัฒนาอาจเลือกสังให ่ หุนยนตเคลือนที ่ ตรงไปข ่ างหนา,เลี้ยวซาย , เลียวขวา, ้ หยุดหรือถอยหลังไดตามตองการ ขึนอยู ้ กั บเปาหมายในการทําภาระกิจ


140 Robo-Creator : AT-BOT activity book

กรณีที่ 6 หุนยนต  พบทางแยกทีเป ่ นเสนตัด

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบเสนสีดํา (อานคาไดนอยกวาคาอางอิง) เมื่อพบเหตุการณนี้ ผูพัฒนาอาจเลือกสังให ่ หุนยนตเคลือนที ่ ตรงไปข ่ างหนา,เลี้ยวซาย , เลียวขวา, ้ หยุดหรือถอยหลังไดตามตองการ ขึนอยู ้ กั บเปาหมายในการทําภาระกิจ

ขั้นตอน L18.1 สรางไฟลโปรเจ็กตชื่อ robo_line2 และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L18-1 L18.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L18.3 นําหุนยนต AT-BOT ไปวางครอมเสนสีดําในตําแหนงที่ไมใชจุดตัด L18.4 เริ่มตนรันโปรแกรม ที่โมดูล LCD ของหุนยนตแสดงขอความ Press SW1 แจงใหกดสวิตช SW1 L14.5 กดสวิตช SW1 ของหุนยนต AT-BOT สังเกตการเคลือนที ่ ของหุ ่ นยนต หุนยนตจะเคลือนที ่ ตามเส ่ นสีดํา เมื่อพบเสนตัด จะหยุดนิ่งประมาณ 3 วินาที หลังจากนั้นจึงเคลือนที ่ ตาม ่ เสนตอไป (เหมือนกับการทดลองที่ 17)


Robo-Creator : AT-BOT activity book  141

#include <atx.h> #define POW 80 #define REF 500 unsigned int left,mid,right; void forward(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,POW); motor(3,POW); sleep(time); } void backward(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,-POW); motor(3,-POW); sleep(time); } void turn_left(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,POW); motor(3,POW); sleep(time); } void turn_right(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,-POW); motor(3,-POW); sleep(time); }

// ผนวกไลบรารีหลัก // กําหนดกําลังขับของมอเตอรคงที่ที่ 80 % ของกําลังขับสูงสุด // กําหนดคาอางอิงในการเปรียบเทียบเสนและพืนสนาม ้ // กําหนดตัวแปรเก็บคาทีอ่ านไดจากตัวตรวจจับเสนดานซาย,กลาง และขวา // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา // ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย

// ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา

โปรแกรมที่ L18-1 ไฟล robo_line2.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ตามเส ่ นสีดําดวยการใชตัวตรวจจับเสน 3 ตัว (มีตอ)


142 Robo-Creator : AT-BOT activity book

void pause() // ฟงกชันหยุ ่ ดการขับเคลื่อนหุนยนต { motor_stop(ALL); // หยุดขับมอเตอรทุกชองพรอมกัน } void setup() { lcd(“SW1 Press!”); // แสดงขอความแจงผูใชงานใหกดสวิตช SW1 sw1_press(); // รอจนกระทังสวิ ่ ตช SW1 ถูกกด } void loop() { left = analog(0); // อานคาจากตัวตรวจจับเสนดานซายมาเก็บทีตั่ วแปร left mid = analog(1); // อานคาจากตัวตรวจจับเสนตรงกลางมาเก็บทีตั่ วแปร mid right = analog(2); // อานคาจากตัวตรวจจับเสนดานขวามาเก็บทีตั่ วแปร right if(left>REF && mid<REF && right>REF) // ตรวจสอบวา หุนยนต  ครอมเสนใชหรือไม { forward(1); // ถาใช ควบคุมใหหุนยนต  เคลื่อนที่ตรงไปขางหนาภายในชวงเวลาสันๆ ้ } else if(left<REF && mid>REF && right>REF) // ตรวจสอบวา หุนยนต  เคลื่อนที่พนจากเสนไปทางขวาหรือไม { turn_left(10); // เลี้ยวซาย 0.01 วินาที เพือพยายามเคลื ่ อนที ่ กลั ่ บไปครอมเสน } else if(left>REF && mid>REF && right<REF) // ตรวจสอบวา หุนยนต  เคลื่อนที่พนจากเสนไปทางซายหรือไม { turn_right(10); // เลียวขวา ้ 0.01 วินาที เพือพยายามเคลื ่ ่อนที่กลับไปครอมเสน } else if(left<REF && mid<REF && right<REF) // ตรวจสอบวา หุนยนต  พบเสนตัดหรือไม { pause(); // ถาพบ - หยุดการเคลื่อนที่หุนยนต  sleep(3000); // หนวงเวลาสําหรับการยุดหุนยนต 3 วินาที forward(300); // หุนยนต  เคลื่อนที่ตรงไปขางหนา 0.3 วินาทีเพือข ่ ามเสนตัด }

โปรแกรมที่ L18-1 ไฟล robo_line2.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ตามเส ่ นสีดําดวยการใชตัวตรวจจับเสน 3 ตัว (มีตอ)


Robo-Creator : AT-BOT activity book  143

else {

// สําหรับเงือนไขอื ่ นๆ ่ forward(1);

// หุนยนตเคลื่อนที่ตรงไปขางหนาภายในชวงเวลาสันๆ ้

} } คําอธิบายโปรแกรม เงือนไขในการตรวจสอบค ่ าของตัวตรวจจับเพือกํ ่ าหนดลักษณะการเคลือนที ่ สํ่ าหรับการทดลองนีมี้ 4 กรณีคือ 1. กรณี if(left>REF && mid<REF && right>REF) เปนการตรวจสอบวา หุนยนต  ครอมเสนหรือไม ถาเปนจริงจะควบคุมใหหุนยนต  เคลื่อนที่ตรงไปขางหนาในเวลาสันๆ ้ 2. กรณี else if(left<REF && mid>REF && right>REF) เปนการตรวจสอบวา หุนยนต  เคลื่อนที่พน จากเสนมาทางขวาหรือไม ถาเปนจริง จะควบคุมใหหุนยนต  เลี้ยวซายเพือให ่ หุนยนต  เคลือนที ่ ่กลับมาครอมเสนอีกครัง้ 3. กรณี else if(left>REF && mid>REF && right<REF) เปนการตรวจสอบวา หุนยนต  เคลื่อนที่พน จากเสนมาทางซายหรือไม ถาเปนจริง จะควบคุมใหหุนยนต  เลี้ยวขวาเพือให ่ หุนยนต  เคลือนที ่ ่กลับมาครอมเสนอีกครัง้ 4. กรณี else if(left<REF && mid<REF && right<REF) เปนการตรวจสอบวา หุนยนต  เคลื่อนที่พบจุดตัด หรือทางแยกหรือไม ถาพบจะควบคุมใหหุนยนต  หยุดอยูที ่ตําแหนงนั้นเปนเวลาประมาณ 3 วินาที จากนั้นจึงเคลื่อนที่ตรงเปน เวลา 0.3 วินาที เพื่อขามเสนตัด

โปรแกรมที่ L18-1 ไฟล robo_line2.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ตามเส ่ นสีดําดวยการใชตัวตรวจจับเสน 3 ตัว (จบ)


144 Robo-Creator : AT-BOT activity book

บทสรุปเพิมเติ ่ ม จากการทดลองที่ 17 และ 18 การควบคุมหุนยนตใหเคลือนที ่ ตามเส ่ นใชหลักการเดียวกันและมีภาระกิจ เหมือนกัน ความแตกตางอยูที่จํานวนของตัวตรวจจับเสน ทั้งนีเป ้ นเพราะสนามทดสอบไมมีความซับซอนมากเกิน ไป การใชงานตัวตรวจจับเสนเพียง 2 ตัวจึงรองรับได ทวาในกรณีที่สนามทดสอบมีความซับซอนมากขึน้ เชน มี ทางแยกซายหรือทางแยกขวา การใชตัวตรวจจับเสน 3 ตัวจะใหผลลัพธในการวิเคราะหเสนทางไดแมนยํากวา พิจารณากรณีเปรียบเทียบตอไปนี้

(1) กรณีมีทางแยกซาย (1.1) เมื่อใชตัวตรวจจับเสน 2 ตัว

 











 











พบวา ตัวตรวจจับเสนดานซายจะพบเสนเพียงตัวเดียว ทําใหสรุปไมไดวา ขณะนี้หุนยนตกําลัง เคลือนที ่ ่พนจากเสนไปทางขวาหรือเคลือนที ่ พบทางแยกซ ่ าย

(1.2) เมื่อใชตัวตรวจจับเสน 3 ตัว

  















จะพบวา ตัวตรวจจับเสนดานซายและตรงกลางพบเสน จึงสรุปไดวา หุนยนต  พบทางแยกซาย


Robo-Creator : AT-BOT activity book  145

(2) กรณีมีทางแยกขวา (2.1) เมื่อใชตัวตรวจจับเสน 2 ตัว

 

























จะเห็นวา ตัวตรวจจับเสนดานขวาจะพบเสนเพียงตัวเดียว ซึงทํ ่ าใหไมสามารถสรุปไดวา ขณะนี้ หุนยนตกําลังเคลื่อนทีพ่ นจากเสนไปทางซายหรือเคลื่อนทีพบทางแยกขวา ่

(2.2) เมื่อใชตัวตรวจจับเสน 3 ตัว

 











จะพบวา ตัวตรวจจับเสนดานขวาและตรงกลางพบเสน ทําใหสรุปไดชัดเจนวา ขณะนี้หุนยนตเคลื่อนที่มาพบทางแยกขวา








146 Robo-Creator : AT-BOT activity book

   การทดลองนีต้ อยอดจากการทดลองที่ 18 โดยเพิ่มความซับซอนของสนามทดสอบและเงื่อนไขในการ เคลือนที ่ ่ตามเสนมากขึน้ ดังรูปที่ L19-1 โดยหุนยนต AT-BOT ตองใชตัวตรวจจับเสน 3 ตัวในการปฏิบัติภาระกิจนี้ เงื่อนไขในการทํางานมีดังนี้ 1. หุนยนตตองถูกปลอยตัวจากจุดเริมต ่ น 2. หุนยนตตองเคลือนที ่ ผ่ านทางแยกซายและขวาในระหวางทางที่ไปทางแยกเสนตัด 3. เมื่อมาถึงทางแยกเสนตัดตองเลี้ยวซาย แลวเคลือนที ่ ตามเส ่ นในทิศทางวนตามเข็มนาฬิกา

สรางสนามทดสอบ ใชแผนพลาสติกลูกฟูกขนาด 120 x 60 เซนติเมตร หรือขนาดอืนก็ ่ ไดตามตองการ แตควรมีขนาดใหญเพียง พอใหหุนยนตสามารถเคลือนที ่ ได ่ โดยสะดวกมาทําเปนพื้นสนาม แลวติดเทปสีดําตามแบบในรูปที่ L19-1

การตอฮารดแวรเพิ่มเติม 

ใชหุนยนต AT-BOT ที่ติดตังแผงวงจรตรวจจั ้ บแสงสะทอน 3 ตัวจากการทดลองที่ 17 และ 18 ในการทดสอบ

ขั้นตอน L19.1 สรางไฟลโปรเจ็กตชื่อ robo_line3 และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L19-1 L19.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L19.3 นําหุนยนต AT-BOT ไปวางครอมเสนสีดําในตําแหนงที่ไมใชจุดตัด

จุดเริ่มตน

ทางแยกเสนตัด

รูปที่ L19-1 สนามทดสอบของหุนยนต  เคลือนที ่ ตามเส ่ นในการทดลองที่ 19


Robo-Creator : AT-BOT activity book  147

#include <atx.h> // ผนวกไลบรารีหลัก #define POW 80 // กําหนดกําลังขับของมอเตอรคงที่ที่ 80 % ของกําลังขับสูงสุด #define REF 500 // กําหนดคาอางอิงในการเปรียบเทียบเสนและพืนสนาม ้ unsigned int left,mid,right; // กําหนดตัวแปรเก็บคาทีอ่ านไดจากตัวตรวจจับเสนดานซาย,กลาง และขวา void forward(unsigned int time) // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา { motor(0,POW); // ขับมอเตอร 0 หมุนไปขางหนา motor(1,POW); // ขับมอเตอร 1 หมุนไปขางหนา motor(2,POW); // ขับมอเตอร 2 หมุนไปขางหนา motor(3,POW); // ขับมอเตอร 3 หมุนไปขางหนา sleep(time); // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา } void backward(unsigned int time) { motor(0,-POW); // ขับมอเตอร 0 หมุนกลับหลัง motor(1,-POW); // ขับมอเตอร 1 หมุนกลับหลัง motor(2,-POW); // ขับมอเตอร 2 หมุนกลับหลัง motor(3,-POW); // ขับมอเตอร 3 หมุนกลับหลัง sleep(time); // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง } void turn_left(unsigned int time) { motor(0,-POW); // ขับมอเตอร 0 หมุนกลับหลัง motor(1,-POW); // ขับมอเตอร 1 หมุนกลับหลัง motor(2,POW); // ขับมอเตอร 2 หมุนไปขางหนา motor(3,POW); // ขับมอเตอร 3 หมุนไปขางหนา sleep(time); // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย } void turn_right(unsigned int time) { motor(0,POW); // ขับมอเตอร 0 หมุนไปขางหนา motor(1,POW); // ขับมอเตอร 1 หมุนไปขางหนา motor(2,-POW); // ขับมอเตอร 2 หมุนกลับหลัง motor(3,-POW); // ขับมอเตอร 3 หมุนกลับหลัง sleep(time); // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา }

โปรแกรมที่ L19-1 ไฟล robo_line3.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ตามเส ่ นสีดําและมีการตรวจจับทางแยก โดยใชตัวตรวจจับเสน 3 ตัว (มีตอ)


148 Robo-Creator : AT-BOT activity book

void pause() // ฟงกชันหยุ ่ ดการขับเคลื่อนหุนยนต { motor_stop(ALL); // หยุดขับมอเตอรทุกชองพรอมๆกัน } void setup() { lcd(“SW1 Press!”); // แสดงขอความแจงผูใชงานใหกดสวิตช SW1 sw1_press(); // รอจนกระทังสวิ ่ ตช SW1 ถูกกด } void loop() { left = analog(0); // อานคาจากตัวตรวจจับเสนดานซายมาเก็บทีตั่ วแปร left mid = analog(1); // อานคาจากตัวตรวจจับเสนตรงกลางมาเก็บทีตั่ วแปร mid right = analog(2); // อานคาตัวตรวจจับเสนดานขวามาเก็บทีตั่ วแปร right if(left>REF && mid<REF && right>REF) // ตรวจสอบวา หุนยนต  ครอมเสนหรือไม { forward(1); // ถาใช ควบคุมใหหุนยนต  เคลื่อนที่ตรงไปขางหนาภายในชวงเวลาสันๆ ้ } else if(left<REF && mid>REF && right>REF) // ตรวจสอบ หุนยนต  เคลือนที ่ พ่ นจากเสนไปทางขวาหรือไม { turn_left(10); // เลี้ยวซาย 0.01 วินาที เพือเคลื ่ ่อนที่กลับไปครอมเสน } else if(left>REF && mid>REF && right<REF) // ตรวจสอบ หุนยนต  เคลือนที ่ พ่ นจากเสนไปทางซายหรือไม { turn_right(10); // เลี้ยวขวา 0.01 วินาที เพือเคลื ่ ่อนที่กลับไปครอมเสน } else if(left<REF && mid<REF && right>REF) // ตรวจสอบวาหุนยนตพบแยกซายหรือไม { forward(10); // เคลื่อนที่ตรง 0.01 วินาที เพือผ ่ านแยกซาย } else if(left>REF && mid<REF && right<REF) // ตรวจสอบวาหุนยนตพบแยกขวาหรือไม { forward(10); // เคลื่อนที่ตรง 0.01 วินาที เพือผ ่ านแยกขวา } else if(left<REF && mid<REF && right<REF) // ตรวจสอบวา หุนยนต  พบเสนตัดหรือไม { forward(100); // ถาพบ ใหเคลื่อนที่ตรง 0.1 วินาทีเพือข ่ ามเสนตัด turn_left(200); // เลี้ยวซาย 0.2 วินาทีเพือกลั ่ บไปครอมเสนที่ทางแยก } }

โปรแกรมที่ L19-1 ไฟล robo_line3.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลือนที ่ ตามเส ่ นสีดําและมีการตรวจจับทางแยก โดยใชตัวตรวจจับเสน 3 ตัว (มีตอ)


Robo-Creator : AT-BOT activity book  149

คําอธิบายโปรแกรม เงื่อนไขในการตรวจสอบคาของตัวตรวจจับ เพือกํ ่ าหนดลักษณะการเคลื่อนที่สําหรับการทดลองนี้มี 6 กรณี คือ 1. กรณี if(left>REF && mid<REF && right>REF) เปนการตรวจสอบวา หุนยนต  ครอมเสนหรือไม ถาเปนจริง จะควบคุมใหหุนยนต  เคลื่อนที่ตรงไปขางหนาในเวลาสันๆ ้ 2. กรณี else if(left<REF && mid>REF && right>REF) เปนการตรวจสอบวา หุนยนต  เคลื่อนที่พน จากเสนมาทางขวาหรือไม ถาเปนจริง จะควบคุมใหหุนยนต  เลี้ยวซายเพือให ่ หุนยนต  เคลือนที ่ ่กลับมาครอมเสนอีกครัง้ 3. กรณี else if(left>REF && mid>REF && right<REF) เปนการตรวจสอบวา หุนยนต  เคลื่อนที่พน จากเสนมาทางซายหรือไม ถาเปนจริง จะควบคุมใหหุนยนต  เลี้ยวขวาเพือให ่ หุนยนต  เคลือนที ่ ่กลับมาครอมเสนอีกครัง้ 4. กรณี else if(left<REF && mid<REF && right>REF) เปนการตรวจสอบวา หุนยนต  พบทางแยก ซายหรือไม ถาพบ จะควบคุมใหหุนยนต  เคลื่อนที่ตรงไปขางหนาเพือผ ่ านทางแยกซาย 5. กรณี else if(left>REF && mid<REF && right<REF) เปนการตรวจสอบวา หุนยนต  พบทางแยก ขวาหรือไม ถาพบ จะควบคุมใหหุนยนต  เคลื่อนที่ตรงไปขางหนาเพือผ ่ านทางแยกขวา 6. กรณี else if(left<REF && mid<REF && right<REF) เปนการตรวจสอบวาหุนยนตพบเสนตัด หรือไม ถาพบ จะควบคุมใหหุนยนต  เคลื่อนทีตรงไปข ่ างหนา 0.1 วินาทีแลวเลี้ยวซาย 0.3 วินาที จากนั้นเขาสูกระบวน การตรวจสอบเงื่อนไขของการเคลื่อนทีตามเส ่ น

โปรแกรมที่ L19-1 ไฟล robo_line3.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลื่อนทีตามเส ่ นสีดําและมีการตรวจจับทางแยก โดยใชตัวตรวจจับเสน 3 ตัว (จบ) L19.4 เริ่มตนรันโปรแกรม ทีโมดู ่ ล LCD ของหุนยนตแสดงขอความ Press SW1 แจงใหกดสวิตช SW1 L19.5 กดสวิตช SW1 ที่หุนยนต AT-BOT สังเกตการเคลือนที ่ ของหุ ่ นยนต หุนยนต  จะเคลื่อนที่ตามเสนสีดํา โดยไมเลียวเมื ้ อพบทางแยกซ ่ ายและขวา จนกระทังเมื ่ อพบทางแยกเส ่ น ตัด หุนยนต  จะเลี้ยวซายและเคลื่อนที่ตามเสนโคงในทิศทางวนตามเข็มนาฬิกาอยางตอเนื่อง






150 Robo-Creator : AT-BOT activity book

เพิมเติ ่ ม จากการทดลองที่ผานมาสนามทดสอบจะมีเสนเปนสีดําและพื้นเปนสีขาว ถาเปลี่ยนเปนพื้นสีดําและเสน เปนสีขาว การเขียนโปรแกรมเพื่อควบคุมการทํางานยังสามารถใชหลักการในการวิเคราะหเสนและพื้นสนามจาก การทดลองที่ 14 และหลักการขับเคลือนหุ ่ นยนต  จากการทดลองที่ 15 ถึง 18 เปนแนวทางในการพัฒนาโปรแกรม ได ยกตัวอยาง ถาตองการทดสอบวาหุนยนตพบเสนตัดหรือไม ในกรณีที่ พื้นสนามเปนสีขาวและเสนเปนสีดํา จะใชเงื่อนไขตอไปนี้ในการตรวจสอบ

else if(left<REF && mid<REF && right<REF) แตถาหากพื้นสนามเปนสีดําและเสนเปนสีขาว จะใชเงื่อนไขตอไปนีตรวจสอบแทน ้

else if(left>REF && mid>REF && right>REF) เนื่องจากเสนเปลี่ยนเปนสีขาว ดังนั้นถาอานคาจากตัวตรวจจับเสนตําแหนงใด แลวพบวามีคา มากกวาคาอางอิง จะถือวา ตัวตรวจจับเสนตําแหนงนันพบเส ้ นสีขาว


Robo-Creator : AT-BOT activity book  151

     การทดลองนีนํ้ าเสนอแนวทางการพัฒนาโปรแกรมควบคุมหุนยนต  AT-BOT ใหเคลือนที ่ ตามเส ่ นสีขาวบน พื้นสนามสีดํา ซึงเป ่ นกรณีตรงขามกับสนามทดสอบที่ผานในการทดลองที่ 15 ถึง 19 โดยสนามทดสอบในการ ทดลองนี้มีลักษณะเดียวกับสนามทดสอบในการทดลองที่ 18 เพียงกลับสีจากเสนสีดําเปนเสนสีขาวและจากพื้น สนามสีขาวเปนสีดํา ดังแสดงในรูปที่ L20-1 เงื่อนไขการทํางานเปนดังนี้ 1. หุนยนตจะตองเคลือนที ่ ่ตามเสนสีขาวทีกํ่ าหนด 2. เมื่อหุนยนตพบเสนตัดจะตองหยุดรอเปนเวลา 3 วินาทีโดยประมาณ แลวจึงเคลือนที ่ ต่ อไปได

สรางสนามทดสอบ ใชแผนพลาสติกลูกฟูกสีดําขนาด 90 x 60 เซนติเมตร (หรือขนาดอืนก็ ่ ไดตามตองการ แตควรมีขนาดใหญ เพียงพอใหหุนยนต  สามารถเคลือนที ่ ได ่ โดยสะดวก) มาทําเปนพืนสนาม ้ แลวติดเทปสีขาวใหเปนกรอบเสนโคงและ มีเสนตัด 2 จุดตามตัวอยางในรูปที่ L20-1

รูปที่ L20-1 สนามทดสอบของหุนยนต  เคลือนที ่ ตามเส ่ นในการทดลองที่ 20


152 Robo-Creator : AT-BOT activity book

หลักการพื้นฐานของหุนยนต  เคลื่อนทีตามเส ่ นสีขาวแบบใชตัวตรวจจับเสน 3 ตัว กรณีที่ 1 หุนยนต  อยูในแนวเสนของสนามหรือครอมเสน

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบพื้นสนามสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบพื้นสนามสีดํา (อานคาไดนอยกวาคาอางอิง) เมือพบเหตุ ่ การณนี้ ตองควบคุมใหหุนยนต  เคลือนที ่ ตรงไปข ่ างหนา หนวงเวลาการเคลือนที ่ ช่ วงสันๆ ้

กรณีที่ 2 หุนยนต  เอียงจากเสนทางไปดานขวา

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบพื้นสนามสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบพื้นสนามสีดํา (อานคาไดนอยกวาคาอางอิง) เมื่อพบเหตุการณนี้ ตองควบคุมใหหุนยนตเลียวซ ้ ายแลวหนวงเวลาในการเคลือนที ่ ช่ วงสั้นๆ เพื่อ ใหหุนยนตเคลือนที ่ กลั ่ บไปครอมเสน


Robo-Creator : AT-BOT activity book  153

กรณีที่ 3 หุนยนต  เอียงจากเสนทางไปดานซาย

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบพื้นสนามสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบพื้นสนามสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) เมื่อพบเหตุการณนี้ ตองควบคุมใหหุนยนตเลียวขวาแล ้ วหนวงเวลาในการเคลือนที ่ ช่ วงสันๆ ้ เพื่อ ใหหุนยนตเคลือนที ่ กลั ่ บไปครอมเสน

กรณีที่ 4 หุนยนต  พบทางแยกดานซาย

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบพื้นสนามสีดํา (อานคาไดนอยกวาคาอางอิง) เมื่อพบเหตุการณนี้ ผูพัฒนาอาจเลือกสังให ่ หุนยนตเคลือนที ่ ตรงไปข ่ างหนา,เลี้ยวซาย , เลียวขวา, ้ หยุดหรือถอยหลังไดตามตองการ ขึนอยู ้ กั บเปาหมายในการทําภาระกิจ


154 Robo-Creator : AT-BOT activity book

กรณีที่ 5 หุนยนต  พบทางแยกดานขวา

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบพื้นสนามสีดํา (อานคาไดนอยกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) เมื่อพบเหตุการณนี้ ผูพัฒนาอาจเลือกสังให ่ หุนยนตเคลือนที ่ ตรงไปข ่ างหนา,เลี้ยวซาย , เลียวขวา, ้ หยุดหรือถอยหลังไดตามตองการ ขึนอยู ้ กั บเปาหมายในการทําภาระกิจ

กรณีที่ 6 หุนยนต  พบทางแยกทีเป ่ นเสนตัด นันคื ่ อ

 

















ตัวตรวจจับเสนดานซาย ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนตรงกลาง ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) ตัวตรวจจับเสนดานขวา ตรวจจับพบเสนสีขาว (อานคาไดมากกวาคาอางอิง) เมื่อพบเหตุการณนี้ ผูพัฒนาอาจเลือกสังให ่ หุนยนตเคลือนที ่ ตรงไปข ่ างหนา,เลี้ยวซาย , เลียวขวา, ้ หยุดหรือถอยหลังไดตามตองการ ขึนอยู ้ กั บเปาหมายในการทําภาระกิจ


Robo-Creator : AT-BOT activity book  155

การตอฮารดแวรเพิ่มเติม 

ใชหุนยนต AT-BOT ที่ติดตังแผงวงจรตรวจจั ้ บแสงสะทอน 3 ตัวจากการทดลองที่ 17 และ 18 ในการทดสอบ

ขั้นตอน L20.1 สรางไฟลโปรเจ็กตชื่อ robo_line3 และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L20-1 L20.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L20.3 นําหุนยนต AT-BOT ไปวางครอมเสนสีขาวในตําแหนงที่ไมใชจุดตัด L20.4 เริ่มตนรันโปรแกรม ที่โมดูล LCD ของหุนยนตแสดงขอความ Press SW1 L20.5 กดสวิตช SW1 ที่หุนยนต AT-BOT สังเกตการเคลือนที ่ ของหุ ่ นยนต หุนยนตจะเคลือนที ่ ตามเส ่ นสีขาว เมื่อพบเสนตัด จะหยุดนิ่ง 3 วินาที จากนั้นจึงเคลือนที ่ ตามเส ่ นตอไป #include <atx.h> // ผนวกไลบรารีหลัก #define POW 80 // กําหนดกําลังขับของมอเตอรคงที่ที่ 80 % ของกําลังขับสูงสุด #define REF 500 // กําหนดคาอางอิงในการเปรียบเทียบเสนและพืนสนาม ้ unsigned int left,mid,right; // กําหนดตัวแปรเก็บคาทีอ่ านไดจากตัวตรวจจับเสนดานซาย,กลาง และขวา void forward(unsigned int time) // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา { motor(0,POW); // ขับมอเตอร 0 หมุนไปขางหนา motor(1,POW); // ขับมอเตอร 1 หมุนไปขางหนา motor(2,POW); // ขับมอเตอร 2 หมุนไปขางหนา motor(3,POW); // ขับมอเตอร 3 หมุนไปขางหนา sleep(time); // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา } void backward(unsigned int time) { motor(0,-POW); // ขับมอเตอร 0 หมุนกลับหลัง motor(1,-POW); // ขับมอเตอร 1 หมุนกลับหลัง motor(2,-POW); // ขับมอเตอร 2 หมุนกลับหลัง motor(3,-POW); // ขับมอเตอร 3 หมุนกลับหลัง sleep(time); // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง }

โปรแกรมที่ L20-1 ไฟล robo_line4.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลื่อนทีตามเส ่ นสีขาว โดยใชตัวตรวจจับเสน 3 ตัว (มีตอ)


156 Robo-Creator : AT-BOT activity book

void turn_left(unsigned int time) { motor(0,-POW); // ขับมอเตอร 0 หมุนกลับหลัง motor(1,-POW); // ขับมอเตอร 1 หมุนกลับหลัง motor(2,POW); // ขับมอเตอร 2 หมุนไปขางหนา motor(3,POW); // ขับมอเตอร 3 หมุนไปขางหนา sleep(time); // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย } void turn_right(unsigned int time) { motor(0,POW); // ขับมอเตอร 0 หมุนไปขางหนา motor(1,POW); // ขับมอเตอร 1 หมุนไปขางหนา motor(2,-POW); // ขับมอเตอร 2 หมุนกลับหลัง motor(3,-POW); // ขับมอเตอร 3 หมุนกลับหลัง sleep(time); // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา } void pause() // ฟงกชันหยุ ่ ดการขับเคลื่อนหุนยนต { motor_stop(ALL); // หยุดขับมอเตอรทุกชองพรอมกัน } void setup() { lcd(“SW1 Press!”); // แสดงขอความแจงผูใชงานใหกดสวิตช SW1 sw1_press(); // รอจนกระทังสวิ ่ ตช SW1 ถูกกด } void loop() { left = analog(0); // อานคาจากตัวตรวจจับเสนดานซายมาเก็บทีตั่ วแปร left mid = analog(1); // อานคาจากตัวตรวจจับเสนตรงกลางมาเก็บทีตั่ วแปร mid right = analog(2); // อานคาจากตัวตรวจจับเสนดานขวามาเก็บทีตั่ วแปร right if(left<REF && mid>REF && right<REF) // ตรวจสอบวา หุนยนต  ครอมเสนหรือไม { forward(1); // ถาใช ควบคุมใหหุนยนต  เคลื่อนที่ตรงไปขางหนาภายในชวงเวลาสันๆ ้ } else if(left>REF && mid<REF && right<REF) // ตรวจสอบ หุนยนต  เคลือนที ่ พ่ นจากเสนไปทางขวาหรือไม

โปรแกรมที่ L20-1 ไฟล robo_line4.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต AT-BOT เคลื่อนทีตามเส ่ นสีขาว โดยใชตัวตรวจจับเสน 3 ตัว (มีตอ)


Robo-Creator : AT-BOT activity book  157

{

turn_left(10); // เลี้ยวซาย 0.01 วินาที เพือเคลื ่ ่อนที่กลับไปครอมเสน } else if(left<REF && mid<REF && right>REF) // ตรวจสอบ หุนยนต  เคลือนที ่ พ่ นจากเสนไปทางซายหรือไม { turn_right(10); // เลี้ยวขวา 0.01 วินาที เพือเคลื ่ ่อนที่กลับไปครอมเสน } else if(left>REF && mid>REF && right>REF) // ตรวจสอบวา หุนยนต  พบเสนตัดหรือไม { pause(); // ถาใช (พบเสนตัด) หยุดการเคลื่อนที่หุนยนต  sleep(3000); // หนวงเวลาสําหรับการยุดหุนยนต 3 วินาที forward(300); // หุนยนต  เคลื่อนที่ไปขางหนา 0.3 วินาทีเพือข ่ ามเสนตัด }

} คําอธิบายโปรแกรม เริ่มตนการทํางาน โปรแกรมจะแสดงขอความที่โมดูล LCD เปน Press SW1 เพือรอการกดสวิ ่ ตช SW1 เมื่อ กดสวิตช SW1 ซีพียูจะเขาไปทํางานภายใน loop() เพือวนอ ่ านคาจากแผงวงจรตรวจจับแสงสะทอนทั้ง 3 ตัวทีต่ อกับ จุดตอ ADC0 (ดานซาย), ADC1 (ตรงกลาง) และ ADC2 (ดานขวา) ซึงนํ ่ ามาใชเปนตัวตรวจจับเสนมาเก็บทีตั่ วแปร left , mid และ right ตามลําดับ คาอางอิงที่ใชเปรียบเทียบคือ 500 เก็บไวในตัวแปร REF หากคาที่อานไดจากตัวตรวจจับเมือผ ่ านการแปลง เปนขอมูลดิจิจตอลแลวมากกวาคาอางอิง REF จะถือวา ตัวตรวจจับตัวนันพบเส ้ นสีขาว แตถาหากคานอยกวาคาอางอิง จะถือวา ตัวตรวจจับตําแหนงนั้นตรวจพบพืนสี ้ ดํา เงื่อนไขในการตรวจสอบคาของตัวตรวจจับเพื่อกําหนดการเคลื่อนที่สําหรับการทดลองนี้มี 4 กรณีคือ 1. กรณี if(left<REF && mid>REF && right<REF) เปนการตรวจสอบวา หุนยนต  ครอมเสนสีขาว หรือไม ถาใช จะควบคุมใหหุนยนต  เคลื่อนที่ตรงไปขางหนา 2. กรณี else if(left>REF && mid<REF && right<REF) เปนการตรวจสอบวา หุนยนต  เคลื่อนที่พน จากเสนมาทางขวาหรือไม ถาเปนจริง จะควบคุมใหหุนยนต  เลี้ยวซายดวยคาเวลาสันๆ ้ เพื่อใหหุนยนต  เคลื่อนที่กลับ มาครอมเสนอีกครัง้ 3. กรณี else if(left<REF && mid<REF && right>REF) เปนการตรวจสอบวา หุนยนต  เคลื่อนที่พน จากเสนมาทางซายหรือไม ถาเปนจริง จะควบคุมใหหุนยนต  เลี้ยวขวาดวยคาเวลาสันๆ ้ เพื่อใหหุนยนต  เคลื่อนที่กลับ มาครอมเสนอีกครัง้ 4. กรณี else if(left>REF && mid>REF && right>REF) เปนการตรวจสอบวา หุนยนต  พบเสนตัดสี ขาวหรือไม ถาพบ จะควบคุมใหหุนยนต  หยุดอยูทีตํ่ าแหนงนั้น 3 วินาที จากนั้นจึงเคลื่อนที่ตรงเพือข ่ ามเสนตัด อยางไรก็ตาม สําหรับการกําหนดคาของเวลาในแตละชวงของการเคลื่อนทีนั่ ้นผูพัฒนาสามารถปรับแกไดเพือ่ ใหเหมาะสมกับสถานการณและสภาพแวดลออมของสนามในขณะนั้น

โปรแกรมที่ L20-1 ไฟล robo_line4.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุม หุนยนต  AT-BOT เคลือนที ่ ตามเส ่ นสีขาว โดยใชตัวตรวจจับเสน 3 ตัว (จบ)


158 Robo-Creator : AT-BOT activity book


Robo-Creator : AT-BOT activity book  159



    ในบทนีจะกล ้ าวถึงการประยุกตใชงานโมดูลตรวจจับและวัดระยะทางดวยแสงอินฟราเรดเบอร GP2D120 รวมกับหุนยนต AT-BOT ทําใหหุนยนตมีความสามารถในการตรวจจับวัตถุไดโดยไมตองสัมผัสกับวัตถุ สงผลให หุนยนตสามารถเคลือนที ่ เข ่ าหาหรือหลบหลีกไดอยางฉลาดขึน้

9.1 คุณสมบัติของโมดูล GP2D120 GP2D120 เปนโมดูลตรวจจับระยะทางแบบอินฟราเรดมีขาตอใชงาน 3 ขาคือ ขาตอไฟเลียง ้ (Vcc), ขากราวด (GND) และขาแรงดันเอาตพุต (Vout) การอานคาแรงดันจาก GP2D120 จะตองรอใหพนชวงเตรียมความ พรอมของโมดูลกอน ซึงใช ่ เวลาประมาณ 32.7 ถึง 52.9 มิลลิวินาที (1 มิลลิวินาทีเทากับ 0.001 วินาที) ดังนันการ ้ อานคาแรงดันจึงควรรอใหพนชวงเวลาดังกลาวไปกอน คาแรงดันเอาตพุตของ GP2D120 ที่ระยะทาง 30 เซนติเมตรที่ไฟเลียง ้ +5V อยูในชวง 0.25 ถึง 0.55V โดย คากลางคือ 0.4V ชวงของการเปลี่ยนแปลงแรงดันเอาตพุตทีระยะทาง ่ 4 เซนติเมตรคือ 2.25V 0.3V LED อินฟราเรดตัวสง

กราฟแสดงการทํางานของ GP2D120

ตัวรับแสงอินฟราเรด

แรงดันเอาตพุต (V) 2.8

GP2D12 GP2D120

2.4 Vout GND

Vcc

2.0 1.6

ไฟเลี้ยง

1.2 38.3ฑ9.6 มิลลิวินาที

การวัดระยะหาง

วัดครั้งที่ 1

แรงดันเอาตพุต

ไมแนนอน

0.8

วัดครั้งที่ 2

0.4

วัดครั้งที่ n

0

เอาตพุตครั้งที่ 1 เอาตพุตครั้งที่ 2

เอาตพุตครั้งที่ n

0

4

8

12

16

20

24

28

32

ระยะหางจากวัต ถุที่ตรวจจับ (cm)

5 มิลลิว ินาที

รูปที่ 9-1รูปราง, การจัดขา และกราฟคุณสมบัติของ GP2D120 โมดูลวัดระยะทางดวยแสงอินฟราเรด


160 Robo-Creator : AT-BOT activity book

9.2 การติดตังโมดู ้ ล GP2D120 เขากับหุนยนต  AT-BOT จากบทที่ 7 หุนยนต  AT-BOT สามารถหลบหลีกสิงกี ่ ดขวางไดดวยการสัมผัสหรือชน สําหรับในบทนีจะเป ้ น การพัฒนาความสามารถของหุนยนต  AT-BOT ไปอีกระดับหนึงด ่ วยการใชโมดูล GP2D120 มาชวยในการตรวจจับระยะ หางจากสิงกี ่ ดขวาง เพือให ่ หุนยนต  สามารถเคลือนที ่ เพื ่ อหลบหลี ่ กสิงกี ่ ดขวางไดโดยไมสัมผัส การติดตังโมดู ้ ล GP2D120 มีดังนี้ (1) นําชิ้นตอมุมฉากยึดเขาดานหนาของหุนยนตในแนวกึงกลางด ่ วยสกรู 3x10 มม. และนอต 3 มม. (2) ยึดแทงตอ 5 รูเขากับชิ้นตอมุมฉากจากขั้นตอนที่ (1) ดวยสกรู 3x10 มม. และนอต 3 มม. โดยยึดเขาที่ รูที่ 3 (กึงกลาง) ่ ของแทงตอ (3) นําโมดูล GP2D120 ยึดเขากับแทงตอดวยสกรู 3x10 มม. และนอต 3 มม. 2 ชุด โดยรอยสกรูผานรูของ ปกที่ใชยึดตัวโมดูลและรองบากที่ปลายของของแทงตอ

  

GP2D120 GP2D120

43 ADC3 42 ADC2 41 A DC1 40 ADC0 46 ADC6

SW1 SW2

44 ADC4

50 48

MOTOR

BATTERY LEVEL

45 ADC5

49

PC6

C r e a t o r e > >> > > > > >

ADC7

SERVO PORT

S

14 15 PC7

c o n t r o l l er R b o a r d

KNOB

+

44 ADC4

5

10 11 12 13

45 ADC5

4

9

46 ADC6

3

8

40 ADC0

48

2

-

USB DATA

41 A DC1

50

MOTOR

1

7.2-9V BATT.

42 ADC2

SW2

15 PC7

BATTERY LEVEL

START

0

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

43 ADC3

49

PC6

C r e a t o r e > >> > > > > >

14

SW1

+

c o n t r o l l er R b o a r d

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

ADC7

10 11 12 13

SERVO PORT

9 S

E2

RESET

USB DATA

KNOB

8

-

ON

ON E2

RESET

7.2-9V BATT.



START

0

1

2

3

4

5


Robo-Creator : AT-BOT activity book  161

(4) เสียบสายสัญญาณของโมดูล GP2D120 เขาที่จุดตอ ADC3 จะไดหุนยนต AT-BOT ที่สามารถตรวจจับ สิงกี ่ ดขวางแบบไมสัมผัส พรอมสําหรับการเขียนโปรแกรมควบคุมตอไป

9.3 ไฟลไลบรารี gp2d120_lib.h สําหรับใชงานเพื่อติดตอกับโมดูล GP2D120 ไฟลไลบรารี gp2d120_lib.h บรรจุชุดคําสังหรื ่ อฟงกชันโปรแกรมภาษา ่ C เพือใช ่ งานโมดูล GP2D120 กอน เรียกใชงานฟงกชั่นภายในไลบรารีนีผู้ พัฒนาตองผนวกไฟลไลบรารีในตอนตนของโปรแกรมดวยคําสั่ง

#include <gp2d120_lib.h>

9.3.1 การเชื่อมตอทางฮารดแวร เนืองจากโมดู ่ ล GP2D120 เปนตัวตรวจจับทีให ่ ผลการทํางานเปนแรงดันไฟตรงทีสั่ มพันธกับระยะทางทีวั่ ด ได การใชงานจึงตองตอกับชองอินพุตอะนาลอกใดๆ ของแผงวงจรควบคุมหุนยนต  ในทีนี่ คื้ อ จุดตอ ADC0 ถึง ADC6

9.3.2 ฟงกชัน่ getdist ในไลบรารี gp2d120_lib.h มีฟงกชั่นทีสนั ่ บสนุนการทํางานหนึ่งฟงกชั่นคือ getdist ใชอานคาระยะทาง ที่วัดไดจากโมดูล GP2D120 ในหนวยเซนติเมตร รูปแบบ

unsigned int getdist(char adc_ch) พารามิเตอร adc_ch ใชกําหนดชองอินพุตอะนาลอกทีตอกับโมดูล GP2D120 การคืนคา คืนคาเปนระยะทางในหนวยเซนติเมตร


162 Robo-Creator : AT-BOT activity book

  การทดลองนีเป ้ นการเขียนโปรแกรมเพื่ออานคาระยะทางจากโมดูล GP2D120 โดยนําคาที่อานไดมาแสดง ที่โมดูล LCD ของหุนยนต AT-BOT

การตอฮารดแวรเพิ่มเติม 

ใชหุนยนต AT-BOT ที่ติดตังโมดู ้ ล GP2D120 ตอสายสัญญาณเขาที่จุดตอ ADC3

ขันตอนการทดลอง ้ L21.1 สรางไฟลโปรเจ็กตชื่อ gp2d120_test และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L21-1 L21.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน #include <atx.h> // ผนวกไลบรารีหลัก #include <gp2d120_lib.h> // ผนวกไฟลไลบรารีสําหรับฟงกชัน่ getdist unsigned int dist; // กําหนดตัวแปรเก็บคาระยะทางจาก GP2D120 void setup() {} void loop() { dist = getdist(3); // อานคาระยะทางจาก GP2D120 ทีต่ อกับชอง ADC3 if(dist>=4 && dist<=32) // เปรียบเทียบระยะทางวาอยูในขอบเขตที่ถูกตองหรือไม { lcd(“Distance: %d cm “,dist); // แสดงคาระยะทางที่อานไดจาก GP2D120 ที่โมดูล LCD } else { lcd(“Out of Range! “); // แสดงขอความแจงเตือนระยะทางอยูนอกเหนือขอบเขตการวัด } sleep(100); // หนวงเวลาแตละรอบในการทํางาน } คําอธิบายโปรแกรม โปรแกรมทํางานภายในฟงกชัน่ loop คาระยะทางที่อานไดจากโมดูล GP2D120 ดวยคําสัง่ getdist จะถูก เก็บไวทีตั่ วแปร dist จากนั้นนําไปวิเคราะหวา อยูในชวง 4 ถึง 32 เซนติเมตรหรือไมกอนนําไปแสดงผลทีโมดู ่ ล LCD ถาพบวา คาที่ไดอยูนอยกวา 4 และมากกวา 32 จะถือวาขอมูลที่ไดมานั้นเชือถื ่ อไมได จากนั้นแสดงขอความที่โมดูล LCD เปน Out of Range!

โปรแกรมที่ L21-1 ไฟล gp2d120_test.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับอานคาจากโมดูล GP2D120 ของหุนยนต  AT-BOT


Robo-Creator : AT-BOT activity book  163

L21.3 เริ่มตนรันโปรแกรม ที่โมดูล LCD ของหุนยนตแสดงขอความ Distance: xxx cm

โดยที่ xxx คือคาระยะทางที่วัดไดในหนวยเซนติเมตร และแสดงผลเปน Out of Range!

เมื่อระยะทางที่วัดไดอยูนอกเหนือขอบเขต 4 ถึง 32 เซนติเมตร L8.4 นําวัตถุหรือมือขวางดานหนาของโมดูล GP2D120 ในระยะทําการคือ 4 ถึง 32 เซนติเมตร จากนั้นเลื่อนวัตถุ เขาและออกหางจากโมดูล GP2D120 สังเกตคาระยะทางที่อานไดที่โมดูล LCD ถาหากวัตถุอยูในระยะทําการของโมดูล GP2D120 ที่โมดูล LCD จะแสดงคาของระยะหางระหวางวัตถุ กับโมดูล GP2D120 ในหนวยเซนติเมตรออกมา แตถาหากวัตถุหรือสิงกี ่ ดขวางนันไม ้ อยูในระยะทําการ ที่โมดูล LCD จะแสดงขอความ Out of Range! แทน

 7.2-9V BATT.

14

PC6

15 PC7

MOTOR

+ S

8

9

10 11 12 13

BATTERY LEVEL

SERVO PORT

0



RESET

KNOB

ADC7

SW1

49

SW2

50

48

1 E2

TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

ON USB DATA

3

GP2D120

2

c o n t r o l l er R b o a r d C r e a t o r e > >> > > > > >

4 43 ADC3

42 ADC2

41 ADC1

40 ADC0

46 ADC6

45 ADC5

44 ADC4

5

START






164 Robo-Creator : AT-BOT activity book

  การทดลองนีเป ้ นการพัฒนาความสามารถของหุนยนต AT-BOT จากทีเคยเคลื ่ อนที ่ ่หลบหลีกสิงกี ่ ดขวาง ดวยการชน มาถึงในการทดลองนีจะใช ้ โมดูล GPD120 เขามาชวยในการตรวจจับและหลบหลีกสิงกี ่ ดขวางแบบไม สัมผัส โดยมีเงื่อนไขการทํางานดังนี้ 1. กรณีไมพบสิงกี ่ ดขวางในระยะ 14 เซนติเมตร หุนยนตเคลือนที ่ ตรงไปข ่ างหนา 2. กรณีพบสิงกี ่ ดกวางในระยะตํากว ่ า 14 เซนติเมตร หุนยนตจะเคลือนที ่ ถอยหลั ่ งแลวหมุนตัวไป ทางซายเพื่อเปลี่ยนทิศทางเคลือนที ่ ่

ขั้นตอน L9.1 สรางไฟลโปรเจ็กตชื่อ robo_ranger และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L9-1 L9.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L9.3 เริ่มตนรันโปรแกรม ที่โมดูล LCD ของหุนยนตแสดงขอความ SW1 Press! แจงใหกดสวิตช SW1 ที่หุนยนต AT-BOT L9.4 กดสวิตช SW1 ทีหุ่ นยนต AT-BOT สังเกตการเคลือนที ่ ของหุ ่ นยนต  แลวทดลองใชมือหรือวางวัตถุเพื่อกีดขวาง การเคลือนที ่ ่ของหุนยนต หุนยนต AT-BOT จะเคลือนที ่ ตรงไปข ่ างหนาอยางตอเนือง ่ จนกระทั่งตรวจจับพบสิ่งกีดขวาง หุนยนตจะ ถอยหลังแลวหมุนตัวไปทางซาย จากนั้นเคลือนที ่ ตรงเพื ่ ่อทําใหสามารถหลบหลีกสิงกี ่ ดขวางไปได แตถาหมุนตัว แลวยังพบสิงกี ่ ดขวาง หุนยนตจะถอยหลังอีกครั้ง แลวหมุนตัวไปทางซาย จะเปนเชนนี้จนกวาจะพนสิ่งกีดขวาง จึงเคลื่อนทีตรงผ ่ านไปได 








Robo-Creator : AT-BOT activity book  165

#include <atx.h> #include <gp2d120_lib.h> #define POW 80 unsigned int dist; void forward(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,POW); motor(3,POW); sleep(time); } void backward(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,-POW); motor(3,-POW); sleep(time); } void turn_left(unsigned int time) { motor(0,-POW); motor(1,-POW); motor(2,POW); motor(3,POW); sleep(time); } void turn_right(unsigned int time) { motor(0,POW); motor(1,POW); motor(2,-POW); motor(3,-POW); sleep(time); }

// ผนวกไลบรารีหลัก // เพือเรี ่ ยกใชงานฟงกชัน่ getdist // กําหนดกําลังขับของมอเตอรคงที่ที่ 80 % ของกําลังขับสูงสุด // กําหนดตัวแปรเก็บคาระยะทางจากโมดูล GP2D120 // ฟงกชันขั ่ บเคลื่อนหุนยนตตรงไปขางหนา // ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เคลื่อนที่ตรงไปขางหนา

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  ถอยหลังตรง

// ขับมอเตอร 0 หมุนกลับหลัง // ขับมอเตอร 1 หมุนกลับหลัง // ขับมอเตอร 2 หมุนไปขางหนา // ขับมอเตอร 3 หมุนไปขางหนา // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวซาย

// ขับมอเตอร 0 หมุนไปขางหนา // ขับมอเตอร 1 หมุนไปขางหนา // ขับมอเตอร 2 หมุนกลับหลัง // ขับมอเตอร 3 หมุนกลับหลัง // หนวงเวลาเพือให ่ หุนยนต  เลี้ยวขวา

โปรแกรมที่ L22-1 ไฟล robo_ranger.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT หลบหลีกสิงกี ่ ดขวางแบบไมสัมผัส (มีตอ)


166 Robo-Creator : AT-BOT activity book

void setup() { lcd(“SW1 Press!”); // แสดงขอความแจงผูใชงานใหกดสวิตช SW1 sw1_press(); // รอจนกระทังสวิ ่ ตช SW1 ถูกกด } void loop() { dist = getdist(3); // อานคาระยะทางจาก GP2D120 จากชอง ADC3 if(dist>=4 && dist<15) // ตรวจสอบวา พบสิ่งกีดขวางในชวง 4 ถึง 14 ซม. หรือไม { backward(500); // ถอยหลัง 0.5 วินาทีเพือเตรี ่ ยมหลบสิงกี ่ ดขวาง turn_left(800); // เลี้ยวซาย 0.8 วินาที เพือเปลี ่ ่ยนทิศทางการเคลื่อนที่ } else { forward(1); // หุนยนตเคลื่อนที่ตรงไปขางหนาในชวงเวลาสันๆ ้ } } คําอธิบายโปรแกรม เริ่มตนการทํางานของโปรแกรมจะแสดงขอความที่โมดูล LCD เปน Press SW1 เมือพบการกดสวิ ่ ตช SW1 ซีพียูเขาไปทํางานภายในฟงกชัน่ loop เพือวนอ ่ านคาจากโมดูล GP2D120 ซึงต ่ อกับชอง ADC3 มาเก็บทีตั่ วแปร dist จากนั้นโปรแกรมจะนําคาระยะทางที่ไดไปเปรียบเทียบนี้ กรณีที่ 1 : if(dist>=4 && dist<15) เปนการตรวจสอบวาพบสิงกี ่ ดขวางในชวง 4 ถึง 14 เซนติเมตร หรือไม ซึงถ ่ าเปนจริง (มีสิงกี ่ ดขวาง) จะตอบสนองใหหุนยนต  ถอยหลังแลวเลียวซ ้ ายเพือหลบสิ ่ งกี ่ ดขวาง กรณี ที่ 2 : else หากเงื่อนไขจากกรณีที่ 1 ไมเปนจริง นั่นหมายความวา ไมมีสิงกี ่ ดขวางในระยะทีสนใจ ่ จึงกําหนดใหหุนยนต  AT-BOT เคลื่อนที่ตรงไปขางหนา เพิมเติ ่ ม การพัฒนาโปรแกรมควบคุมหุนยนต AT-BOT รวมกับโมดูล GP2D120 นั้นจะเรียกใชงานฟงกชั่น getdist จากไลบรารี gp2d120_lib.h เพืออ ่ านคาระยะทางจากสิงกี ่ ดขวางในหนวยเซนติเมตร

โปรแกรมที่ L22-1 ไฟล robo_ranger.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมหุนยนต  AT-BOT หลบหลีกสิงกี ่ ดขวางแบบไมสัมผัส (จบ)


Robo-Creator : AT-BOT activity book  167



   ในบทนีนํ้ าเสนอการควบคุมเซอรโวมอเตอรของหุนยนต  AT-BOT โดยแผงวงจรควบคุมหลักของหุนยนต  สามารถขับเซอรโวมอเตอรขนาด 4.8 ถึง 6V ได 6 ตัว ผานทางจุดตอ 8 ถึง 13

10.1 หลักการทํางานของเซอรโวมอเตอร เซอรโวมอเตอรที่ใชในหุนยนต AT-BOT เปนเซอรโวมอเตอรแบบอะนาลอกขนาดเล็ก บางครั้งเรียกวา R/ C เซอรโวมอเตอร โดย R/C มาจากคําวา Radio Control เนืองจากในอดี ่ ต เซอรโวมอเตอรมักนําไปใชในการขับ เคลือนกลไกในเครื ่ ่องบิน, รถ หรือเรือที่บังคับดวยคลืนวิ ่ ทยุ การกําหนดชือ่ R/C เพื่อใหทราบถึงประเภทของงาน ที่นําเซอรโวมอเตอรนีไปใช ้ นันเอง ่ เซอรโวมอเตอรเปนอุปกรณแมเหล็กไฟฟาแบบหนึงที ่ ใช ่ ในการหมุนตัวขับ (actuator) ไปยังตําแหนงตางๆ ดวย ความแมนยํา ปกติแลวเซอรโวมอเตอรทียั่ งไมไดรับการปรับแตงใดๆ นันจะใช ้ งานกันอยูในรถ,  เรือ หรือเครืองบิ ่ นบังคับ วิทยุ เพือทํ ่ าหนาทีควบคุ ่ มตําแหนงของอุปกรณ เชน การบังคับเลียวของรถบั ้ งคับวิทยุ หรือใชสําหรับปรับหางเสือของ เรือหรือเครืองบิ ่ น ซึงงานเหล ่ านีต้ องการแรงบิดของมอเตอรทีสู่ งพอสมควรดังนันเซอร ้ โวมอเตอรจึงมีอัตราทดทีมาก ่ พอสมควรเพือให ่ สามารถรองรับงานดังกลาวได เซอรโวมอเตอรมีมุมในการหมุนมาตรฐานคือ 0 ถึง 90 องศา และ 0 ถึง 180 องศา ปจจุบันนิยมในแบบ 0 ถึง 180 องศา โดยสามารถดัดแปลงใหหมุนไดครบรอบ 360 องศาดวย สายตอใชงานมาตรฐานมี 3 เสนคือ สายสัญญาณ (S), สายไฟเลียง ้ (+V) และสายกราวด (G)

(ก)

(ข)

(ค)

รูปที่ 10-1 แสดงรูปรางและสวนประกอบของเซอรโวมอเตอร (ก) รูปรางภายนอก (ข) ระบบเฟองทดภายใน (ค) แผงวงจรอิเล็กทรอนิกสทีใช ่ ควบคุม


168 Robo-Creator : AT-BOT activity book

S

S

  รูปที่ 10-2 ลักษณะคอนเน็กเตอรของเซอรโวมอเตอร ปจจุบันเซอรโวมอเตอรมีดวยกัน 2 ชนิดหลักๆ คือ ชนิดอะนาลอกและดิจิตอล รูปรางภายนอกของเซอรโว มอเตอรทังสองชนิ ้ ดจะคลายกันมาก ความแตกตางจะอยูที วงจรควบคุ ่ มทีอยู ่ ภายใน  โดยในชนิดอะนาลอกจะใชวงจร อิเล็กทรอนกสทีประกอบด ่ วยอุปกรณสารกึงตั ่ วนํา จําพวก ทรานซิสเตอร มอสเฟต หรือไอซีออปแอมปเปนหลัก ใน ขณะทีชนิ ่ ดดิจิตอลจะใชไมโครโปรเซสเซอรหรือไมโครคอนโทรลเลอรเปนตัวควบคุมหลัก ในรูปที่ 10-1 แสดงรูปราง ของเซอรโวมอเตอรมาตรฐาน

10.1.1 คอนเน็กเตอรของเซอรโวมอเตอร รูปที่ 10-2 แสดงลักษณะของคอนเน็กเตอรทีใช ่ ในการเชือมต ่ อของเซอรโวมอเตอร มีดวยกัน 2 มาตรฐานคือ แบบ S และแบบ J การจัดขาจะเหมือนกัน ความแตกตางคือ ลักษณะของคอนเน็กเตอรและการกําหนดสีของสาย สัญญาณ สําหรับยีห่ อ Futaba ของญีปุ่ น กําหนดใหคอนเน็กเตอรแบบ J มีปกยืนออกมาเพิ ่ มขึ ่ นในด ้ านเดียวกับสาย สัญญาณ และกําหนดใหสายสัญญาณมีสีขาว สวนแบบ S สายสัญญาณจะเปนสีขาว และคอนเน็กเตอรจะเรียบเหมือน กันทังสองด ้ านของสายเชือมต ่ อ สวนสายไฟเลียงเป ้ นสีแดง และสายกราวดเปนสีดําเหมือนกันทังสองแบบ ้ อยางไรก็ตาม มีความเปนไปไดที่ผูผลิตอืนๆ ่ อาจกําหนดรูปแบบและสีของสายสัญญาณแตกตางออกไป แตการจัดเรียงตําแหนงจะเหมือนกัน

10.1.2 โครงสรางของเซอรโวมอเตอร ในรูปที่ 10-3 แสดงโครงสรางภายในของเซอรโวมอเตอร สวนประกอบหลักคือ มอเตอรไฟตรงขนาดเล็ก, ชุดเฟองทด, แผงวงจรควบคุม และตัวตานทานปรับคาได (POT : Potentiometer) แกนของมอเตอรไฟตรงจะตอ เขากับชุดเฟอง เพื่อลดความเร็วรอบลง สงผลใหแรงบิดทีแกนหมุ ่ นมากขึ้น ทั้งหมดทํางานรวมกันภายใตความ สัมพันธ


Robo-Creator : AT-BOT activity book  169

แกนหมุน ชุดเฟอง

POT

ตัวตานทาน ปรับคาได

มอเตอร ไฟตรง

แผงวงจร ควบคุม สายสัญญาณ (สีเหลืองหรือขาว) ไฟเลีย้ ง (+Vm - สีแดง) กราวด (สีดาํ )

รูปที่ 9-3 โครงสรางภายในของเซอรโวมอเตอร P = kwg โดยที่ P คือ พลังงานทีป่ อนใหแกมอเตอร k คือ คาคงที่ w คือ ความเร็วรอบ ในหนวย รอบตอนาที (rpm : round per minute) g คือ แรงบิดหรือทอรค (torque) ถาหากพลังงานทีจ่ ายใหคงที่ เมื่อลดความเร็วรอบลง นันย ่ อมทําแรงบิดของมอเตอรเพิ่มขึ้น การหมุนของมอเตอรไดรับการควบคุมจากวงจรควบคุม โดยมี POT เปนตัวกําหนดขอบเขตของแกนหมุน ซึงหากไม ่ มีการปรับแตงใดๆ แกนหมุนของมอเตอรจะสามารถหมุนไดในขอบเขต 0 ถึง 180 องศา ดังนันในการปรั ้ บ แตงใหเซอรโวมอเตอรสามารถขับแกนหมุนไดรอบตัวจึงมักจะใชวีการถอด POT ออก แลวแทนทีด่ วยตัวตานทานคา คงที่ 2 ตัว หรือดัดแปลงใหแกนหมุนของ POT สามารถหมุนไดรอบตัว แกนหมุนของเซอรโวมอเตอรจะมีสวนปลายเปนรองเฟอง (spline) เพือให ่ สามารถติดตังอุ ้ ปกรณทีใช ่ ในการ เชือมโยงไปยั ่ งตัวขับหรือกลไกอืนๆ ่ อุปกรณทีใช ่ เชือมโยงนั ่ นเรี ้ ยกวา ฮอรน (horn) ซึงมี ่ ดวยกันหลายรูปแบบทังแบบ ้ เปนแขน, เปนแทง, กากบาท, แผนกลม เปนตน สําหรับรองเฟองของเซอรโวมอเตอรแตละยีห่ อก็มีจํานวนไมเทากัน โดยของ Hitec จะมี 24 รองเฟอง สวนของ Futaba มี 25 รองเฟอง ทําใหฮอรนของทังสองยี ้ ห่ อใชรวมกันไมได


170 Robo-Creator : AT-BOT activity book

พัลสกวาง 1 ถึง 2 มิลลิวินาที

คาบเวลา 20 มิลลิวินาที

(ก) ลักษณะของสัญญาณพัลสที่ใช ในการควบคุมเซอรโวมอเตอร

พัลสกวาง 1 มิลลิวนิ าที

(ข) สัญญาณพัลสกวาง 1 มิลลิวินาที ทําใหมอเตอรขับแกนหมุนไปยัง ตําแหนงซายสุด

STANDARD SERVO MOTOR

พัลสกวาง 1.5 มิลลิวินาที

(ค) สัญญาณพัลสกวาง 1.5 มิลลิวินาที ทําใหมอเตอรขับแกนหมุนไปกึ่งกลาง

STANDARD SERVO MOTOR

พัลสกวาง 2 มิลลิวนิ าที

(ง) สัญญาณพัลสกวาง 2 มิลลิวินาที ทําใหมอเตอรขับแกนหมุนไปยัง ตําแหนงขวาสุด

รูปที่ 10-4 แสดงพัลสทีใช ่ ควบคุมเซอรโวมอเตอร

STANDARD SERVO MOTOR


Robo-Creator : AT-BOT activity book  171

10.1.3 สัญญาณพัลสสําหรับควบคุมเซอรโวมอเตอร การควบคุมเซอรโวมอเตอรทําไดโดยการสรางสัญญาณพัลสปอนใหกับวงจรควบคุมภายในเซอรโวมอเตอร ดังใน รูปที่ 10-4 เริมต ่ นใหสรางพัลสคาบเวลา 20 มิลลิวินาที แลวปรับความกวางของพัลสชวงบวก โดยพัลสกวาง 1 มิลลิวินาที มอเตอรจะหมุนไปตําแหนงซายมือสุด ถาสงพัลสกวาง 1.5 มิลลิวินาที แกนหมุนของมอเตอรจะเคลือนที ่ ไปยั ่ งตําแหนง กึงกลาง ่ และถาสงพัลสกวาง 2 มิลลิวินาที แกนหมุนของมอเตอรจะเคลือนที ่ ไปยั ่ งตําแหนงขวามือสุด การปอนสัญญาณพัลสที่มีคาบเวลาชวงบวกตั้งแต 1.5 ถึง 2 มิลลิวินาทีจะทําใหเซอรโวมอเตอรหมุนทวน เข็มนาฬิกา โดยถาคาความกวางพัลสยิ่งหางจาก 1.5 มิลลิวินาทีมากเทาใด ความเร็วในการหมุนก็จะมากขึ้นเทานัน้ นันคื ่ อ ความเร็วสูงสุดของการหมุนทวนเข็มนาฬิกาจะเกิดขึ้นเมือสั ่ ญญาณพัลสควบคุมที่ความกวาง 2 มิลลิวินาที การปอนสัญญาณพัลสที่มีคาบเวลาชวงบวกตั้งแต 1 ไปจนถึง 1.5 มิลลิวินาที ทําใหเซอรโวมอเตอรหมุน ตามเข็มนาฬิกา ซึงถ ่ าคาความกวางพัลสเขาใกล 1 มิลลิวินาทีความเร็วในการหมุนของเซอรโวมอเตอรก็จะมาก นันคื ่ อ ความเร็วสูงสุดของการหมุนตามเข็มนาฬิกาจะเกิดขึ้นเมือสั ่ ญญาณพัลสควบคุมที่ความกวาง 1 มิลลิวินาที

10.1.4 การทํางานของแผงวงจรควบคุมในเซอรโวมอเตอรชนิดอะนาลอก การหมุนของเซอรโวมอเตอรนันจะไม ้ ไดหมุนเปนอิสระเหมือนมอเตอรทั่วๆ ไป โดยชวงระยะการหมุน ปกติจะอยูระหว  าง 0 ถึง 180 องศา ตําแหนงการหมุนของแกนมอเตอรในเซอรโวมอเตอรนีสามารถควบคุ ้ มไดอยาง แมนยํา เนืองจากภายในเซอร ่ โวมอเตอรมีวงจรอิเล็กทรอนิกสทําหนาที่ตรวจสอบตําแหนงของเซอรโวมอเตอรอยู ตลอดเวลา ลักษณะการตรวจสอบจะใชการปอนกลับคาตําแหนงจากตัวตานทานปรับคาได แลวนําคานีไปเปรี ้ ยบ เทียบกับคาพัลสที่ปอนเขาทางขาควบคุม คาของผลตางที่ไดจะไปปรับตําแหนงของมอเตอรจนไมเกิดคาผลตาง ก็จะไดตําแหนงของมอเตอรที่แมนยํา ในรูปที่ 10-5 แสดงไดอะแกรมการทํางานของแผงวงจรควบคุมในเซอรโวมอเตอรชนิดอะนาลอก สัญญาณ พัลสควบคุมถูกสงเขามาทางอินพุต จะถูกสงไปยังวงจรกําเนิดสัญญาณพัลสภายในดวย โดยมีความกวางที่เปนสัด สัญญาณพัลสที่ตางกัน อินพุต

วงจรเปรียบเทียบ ความกวาง สัญญาณพัลส

วงจรกําเนิด สัญญาณพัลสภายใน

วงจรเพิ่มความกวาง สัญญาณพัลส

สัญญาณกําหนดทิศทาง

แกนหมุน วงจรขับ มอเตอร H-บริดจ

มอเตอร

ชุดเฟอง ตัวตานทาน ปรับคาได

สัญญาณตําแหนงปอนกลับ

รูปที่ 10-5 ไดอะแกรมการทํางานของแผงวงจรควบคุมในเซอรโวมอเตอรชนิดอะนาลอก


172 Robo-Creator : AT-BOT activity book

สวนกับตําแหนงของแกนหมุนในปจจุบัน ทั้งสัญญาณพัลสที่กําเนิดขึนภายในกั ้ บสัญญาณพัลสควบคุมจะถูกสงไป ยังวงจรเปรียบเทียบ เพือทํ ่ าการหักลางสัญญาณ โดยทิศทางของสัญญาณจะขึ้นอยูกับวา ระหวางสัญญาณพัลสควบ คุมทางอินพุตกับสัญญาณพัลสภายใน สัญญาณพัลสใดมีความกวางมากกวา โดยเอาตพุตทีได ่ เปนสัญญาณลอจิก “0” หรือ “1” แลวสงไปยังวงจรขับมอเตอรแบบ H-บริดจ เพื่อกําหนดทิศทางการหมุน ทางดานคาความแตกตางที่ เกิดขึ้นระหวางพัลสทั้งสองสัญญาณจะถูกสงไปยังวงจรเพิ่มความกวางพัลส เพื่อสรางสัญญาณพัลสสําหรับสงไป ขับมอเตอรผานวงจรขับมอเตอรแบบ H-บริดจ โดยความแตกตางของความกวางพัลส 1% ทําใหเกิดสัญญาณพัลส สําหรับขับมอเตอรในระดับ 50% และความเร็วนีจะลดลงเมื ้ อแกนหมุ ่ นของมอเตอรเคลือนที ่ เข ่ าสูตํ าแหนงทีกํ่ าหนด อันเปนผลมาจากความแตกตางของความกวางสัญญาณพัลสเริ่มลดลง และหยุดลงเมือสั ่ ญญาณพัลสที่นํามาเปรียบ เทียบมีคาความกวางเทากัน

10.1.5 วัสดุของเฟองในเซอรโวมอเตอร ชุดเฟองในเซอรโวมอเตอรโดยสวนใหญผลิตมาจากวัสดุ 3 ชนิดคือ (1) ไนลอน : เปนวัสดุทีนิ่ ยมนํามาใชผลิตเฟองมากทีสุ่ ด เนืองจากมี ่ นําหนั ้ กเบา และมีเสียงรบกวน นอยเมื่อทํางาน ความทนทานพอสมควร มักพบในเซอรโวมอเตอรขนาดเล็กและราคาถูก (2) โลหะ : เฟองทีผลิ ่ ตดวยโลหะมีความทนทานสูง แข็งแรง สามารถทนแรงเสียดทานเมือเฟ ่ องขบ กันไดสูงมาก ทําใหสามารถนํามาสรางเซอรโวมอเตอรทีมี่ แรงบิดสูงมากได โลหะทีพบมากที ่ สุ่ ดในการนํามาผลิตเฟอง คือ ทองเหลือง และถาหากมีงบประมาณมากเพียงพอ ควรเลือกใชเซอรโวมอเตอรทีใช ่ เฟองทีผลิ ่ ตจากไทเทเนียม (3) คารบอไนต (Karbonite) : เปนวัสดุพิเศษที่ทํามาจากคารบอน แลวแปรรูปมาเปนวัสดุที่คลาย พลาสติก Hitec เปนผูที ่นําเทคโนโลยีนีมาใช ้ เปนวัตถุดิบในการผลิตเฟอง โดยคารบอไนตจะมีความแข็งแรงและ ทนทานมากกวาเฟองไนลอน ในขณะทีมี่ นําหนั ้ กเบา ดังในเซอรโวมอเตอรสมัยใหมจึงนิยมใชเฟองที่ผลิตจากวัสดุ ชนิดนี้ โดยเฉพาะอยางยิ่งในเซอรโวมอเตอรชนิดดิจิตอลที่ใชหุนยนต Humanoid

10.1.6 คุณสมบัติทางเทคนิคที่สําคัญของเซอรโวมอเตอร มี 2 คาคือ ความเร็ว (speed) และ แรงบิดหรือทอรค (torque) ความเร็วหมายถึง ระยะเวลาทีทํ่ าใหแกนหมุน ของมอเตอรเคลือนที ่ สู่ ตํ าแหนงมุมทีกํ่ าหนด อาทิ เซอรโวมอเตอรมีความเร็ว 0.15 วินาทีสําหรับ 60 องศา หมายถึง เซอรโวมอเตอรตัวนีสามารถขั ้ บใหแกนหมุนเคลือนที ่ ไปยั ่ งตําแหนงมุม 60 องศาภายในเวลา 0.15 วินาที สวนแรงบิดมักจะปรากฏในหนวยของออนซ-นิว้ (ounce-inches : oz-in) หรือ กิโลกรัม-เซนติเมตร (kg-cm) เปนคุณสมบัติที่จะบอกตอผูใชงานวา เซอรโวมอเตอรตัวนี้มีแรงในการขับโหลดที่มีนําหนั ้ กในหนวยออนซให สามารถเคลือนที ่ ไปได ่ 1 นิว้ หรือนําหนั ้ กในหนวยกิโลกรัมใหเคลือนที ่ ไปได ่ 1 เซนติเมตร (นํ้าหนัก 1 ออนซเทา กับ 0.028 กิโลกรัมโดยประมาณ หรือ 1 กิโลกรัมเทากับ 35.274 ออนซ) อยางไรก็ตาม คาของความเร็วและแรงบิดตองสัมพันธกับแรงดันไฟเลียงที ้ จ่ ายใหแกเซอรโวมอเตอรดวย ซึง่ มักจะแรงดัน 4.8 หรือ 6V นอกจากนันยั ้ งมีปจจัยเกียวกั ่ บแรงเสียดทานในระบบเฟองภายในเซอรโวมอเตอร การหลอลืน่ การเชือมโยงระหว ่ างเฟองตอเฟองในชุดเฟองทด ทีส่ งผลใหความเร็วและแรงบิดของเซอรโวมอเตอรเปลียนแปลงไปได ่


Robo-Creator : AT-BOT activity book  173

10.2 การจัดการควบคุมเซอรโวมอเตอรของหุนยนต  AT-BOT

41 ADC1

40 ADC0

46 ADC6

45 ADC5

44 ADC4

5

42 ADC2

4

43 ADC3

START

ในหุนยนต AT-BOT ใชขาพอรต 8 ถึง 13 (เรียงตามขอกําหนดของ Wiring I/O และตองใชชื่อขาตามนี้ใน การเขียนโปรแกรมใน Wiring IDE) ในการขับสัญญาณพัลสเพื่อขับเซอรโวมอเตอร แรงดันไฟเลียงเซอร ้ โวมอเตอรไดมาจากแบตเตอรีที่ ต่ อเขากับแผงวงจร ATX ผานวงจรควบคุมไฟเลียงคง ้ ที่ที่ +6V จายกระแสไฟฟาได 1500mA จึงทําใหใชไดกับเซอรโวมอเตอรขนาดเล็กทุกรุนที  ่ใชไฟเลียงในช ้ วง 4.8 ถึง 6V

C r e a t o r e > >> > > > > > 3

c o n t r o l l er R b o a r d USB DATA

2

ON TWI UART1 0 SCL 1 SDA 2 RX1 3 TX1

1

E2

KNOB

ADC7

SW1

49

SW2

50

48

SERVO PORT 9

BATTERY LEVEL

10 11 12 13 S

8

+

-

7.2-9V BATT.

0

RESET

14

PC6

15

PC7

MOTOR

จุดตอเซอรโวมอเตอร 6 ตัว ชอง 8 ถึง 13 รูปที่ 10-6 แสดงตําแหนงจุดตอเซอรโวมอเตอรของหุนยนต  AT-BOT


174 Robo-Creator : AT-BOT activity book

10.3 ไลบรารี servo.h สําหรับควบคุมการขับเซอรโวมอเตอร หัวใจหลักของการควบคุมเซอรโวมอเตอรประการหนึงคื ่ อ การสรางสัญญาณพัลส ซึงได ่ มาจากการเขียน โปรแกรมเพื่อกําหนดใหไมโครคอนโทรลเลอรทําการสรางสัญญาณพัลสตามที่ตองการออกมา เพื่อชวยใหการ เขียนโปรแกรมควบคุมดวยภาษา C ในหุนยนต AT-BOT สะดวกขึนจึ ้ งตองผนวกไฟลไลบรารี servo.h เขามา ไฟลไลบรารี servo.h บรรจุชุดคําสั่งที่จําเปนในการควบคุมเซอรโวมอเตอร สามารถรองรับการควบคุม เซอรโวมอเตอรไดถึง 6 ตัวในเวลาเดียวกัน กอนเรียกใชงานฟงกชั่นภายในไลบรารีกลุมนี  ผู้ พัฒนาตองผนวกไฟล ไลบรารีในตอนตนของโปรแกรมดวยคําสั่ง

#include <servo.h> เปนไฟลไลบรารีควบคุมเซอรโวมอเตอร มีฟงกชั่นสนับสนุนการควบคุมตําแหนงแกนหมุนของเซอรโว มอเตอร ควบคุมได 6 ตัวในเวลาเดียวกัน กอนใชงานตองผนวกไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง

#include <servo.h> หรือ #inclue <atx.h> ในไฟลไลบรารีนีมี้ 1 ฟงกชั่นคือ servo เปนฟงกชั่นกําหนดตําแหนงแกนหมุนของเซอรโวมอเตอร รูปแบบ

void servo(unsigned char _ch, int _pos)

พารามิเตอร _ch - ชองเอาตพุตเซอรโวมอเตอร มีคา 8 ถึง 13 กําหนดเปน 8 เมือต ่ อใชงานเซอรโวมอเตอรชองที่ 1 (8) กําหนดเปน 9 เมือต ่ อใชงานเซอรโวมอเตอรชองที่ 2 (9) กําหนดเปน 10 เมือต ่ อใชงานเซอรโวมอเตอรชองที่ 3 (10) กําหนดเปน 11 เมือต ่ อใชงานเซอรโวมอเตอรชองที่ 4 (11) กําหนดเปน 12 เมือต ่ อใชงานเซอรโวมอเตอรชองที่ 5 (12) กําหนดเปน 13 เมือต ่ อใชงานเซอรโวมอเตอรชองที่ 6 (13) _pos - กําหนดตําแหนงแกนหมุนของเซอรโวมอเตอร มีคาในชวง 0 ถึง 180 และ -1 ถากําหนดเปน -1 หมายถึง ไมใชงานเซอรโวมอเตอรทีช่ องนั้นๆ


Robo-Creator : AT-BOT activity book  175

   ในการทดลองนีเป ้ นการเขียนโปรแกรมทดสอบควบคุมตําแหนงของเซอรโวมอเตอรชอง 10 ของหุนยนต AT-BOT ดวยการกดสวิตช SW1 (เพื่อเพิ่มคาตําแหนง) และ SW2 (เพื่อลดคาตําแหนง) พรอมกับตรวจสอบคา ตําแหนงอางอิงของเซอรโวมอเตอรที่นํามาตอใชงานดวย โดยแสดงผลคาตําแหนงอางอิงที่โมดูล LCD บนหุนยนต AT-BOT

การตอฮารดแวรเพิ่มเติม 

ตอเซอรโวมอเตอรเขากับชองขับเซอรโวมอเตอรชอง 10

ขั้นตอน L22.1 สรางไฟลโปรเจ็กตชื่อ servo_test และพิมพโปรแกรมภาษา C ตามโปรแกรมที่ L22-1 L22.2 คอมไพลและดาวนโหลดโปรแกรมเพื่อทดสอบผลลัพธการทํางาน L22.3 เริ่มตนรันโปรแกรม ที่โมดูล LCD ของหุนยนตแสดงคาตําแหนงการขับปจจุบันของเซอรโวมอเตอร โดยแสดงผลเปน Position: xx

โดยที่ xx คือคาตําแหนงของเซอรโวมอเตอร L22.4 จากนันทดลองกดสวิ ้ ตช SW1 (กดคางได) บนหุนยนต  AT-BOT เพื่อปรับเพิมค ่ าตําแหนงของเซอรโวมอเตอร ตําแหนงแกนหมุนของเซอรโวมอเตอรจะเพิมขึ ่ นพร ้ อมกับมีการแสดงคาตําแหนงบนโมดูล LCD ดวย เมือ่ คาตําแหนงเกินจาก 90 มากๆ อาจทําใหเซอรโวมอเตอรขาดเสถียรภาพในการรักษาตําแหนง L22.5 กดสวิตช SW2 (กดคางได) บนหุนยนต AT-BOT เพื่อปรับลดคาตําแหนงของเซอรโวมอเตอร ตําแหนงแกนหมุนของเซอรโวมอเตอรจะเพิมขึ ่ นพร ้ อมกับมีการแสดงคาตําแหนงบนโมดูล LCD ดวย เมือ่ คาตําแหนงตํากว ่ า 20 มากๆ อาจทําใหเซอรโวมอเตอรขาดเสถียรภาพในการรักษาตําแหนง หมายเหตุ สําหรับชวงตําแหนงของเซอรโวมอเตอรในแตละผูผลิตทีผู่ พัฒนาจัดหามาใชงานนันอาจมี ้ ชวง ตําแหนงหรือทิศทางของตําแหนงแตกตางกันบาง ผูพัฒนาจึงตองเขียนโปรแกรมทดสอบคาตําแหนงของเซอรโว มอเตอร เพื่อที่จะไดทราบวาเมื่อตองการบังคับใหเซอรโวมอเตอรไปอยูในตําแหนงที่ตองการจะตองกําหนดคา ตําแหนงเปนเทาใดภายในโปรแกรมควบคุม โดยคาที่กําหนดไดจะอยูในชวง 0 ถึง 180


176 Robo-Creator : AT-BOT activity book

#include <atx.h> // ผนวกไลบรารีหลัก unsigned int pos=0; // กําหนดตัวแปรสําหรับควบคุมตําแหนงของเซอรโวมอเตอร void setup() { } void loop() { lcd(“Position: %d “,pos); // แสดงคาตําแหนงของเซอรโวมอเตอร servo(10,pos); // กําหนดตําแหนงการขับของเซอรโวมอเตอรชอง 10 จากตัวแปร pos if(sw1()==0) // ตรวจสอบการกดสวิตช SW1 { pos++; // เพิมค ่ าตําแหนงขึ้น 1 คา sleep(100); // หนวงเวลาเพือลดสั ่ ญญาณรบกวนของสวิตช } if(sw2()==0) // ตรวจสอบการกดสวิตช SW2 { pos - - ; // ลดคาตําแหนงลง 1 คา sleep(100); // หนวงเวลาเพือลดสั ่ ญญาณรบกวนของสวิตช } } คําอธิบายโปรแกรม โปรแกรมจะทํางานภายในฟงกชัน่ loop เพือวนแสดงผลค ่ าตําแหนงของเซอรโวมอเตอรชอง 10 และกําหนด คาตําแหนงอยางตอเนือง ่ พรอมทั้งตรวจสอบการเพิมและลดค ่ าตําแหนงของเซอรโวมอเตอรจากการกดสวิตช SW1 และ SW2 ตามลําดับ โดยโปรแกรมจะวนทํางานเชนนี้อยางตอเนือง ่

โปรแกรมที่ L22-1 ไฟล servo_test.pde โปรแกรมภาษา C/C++ ของ Wiring สําหรับควบคุมตําแหนง การหมุนของเซอรโวมอเตอรของหุนยนต  AT-BOT

AT-BOT Activity book  

AT-BOT ทดลองและใช้งานหุ่นยนต์อัตโนมัติ ขับเคลื่อน 4 ล้อ ควบคุมด้วยโปรแกรมภาษา C/C++

Read more
Read more
Similar to
Popular now
Just for you