Robo-Creator : AT-BOT ctivity book 1
AT-BOT
AT-BOT activity book
2Robo-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
การนําเสนอขอมูลเกียวกั ่ บขอมูลทางเทคนิคและเทคโนโลยีในหนังสือเลมนี้ เกิดจากความตอง การทีจะอธิ ่ บายกระบวนการและหลักการทํางาน ของอุปกรณในภาพรวมดวยถอยคําทีง่ ายเพือสร ่ าง ความเขาใจแกผูอ าน ดังนันการแปลคํ ้ าศัพททางเทคนิคหลายๆ คําอาจไมตรงตามขอบัญญัติของราช บัณฑิตยสถาน และมีหลายๆ คําทียั่ งไมมีการบัญญัติอยางเปนทางการ คณะผูเขี ยนจึงขออนุญาต บัญญัติศัพทขึนมาใช ้ ในการอธิบาย โดยมีขอจํากัดเพืออ ่ างอิงในหนังสือเลมนีเท ้ านัน้ ทังนี ้ สาเหตุ ้ หลักของขอชีแจงนี ้ มาจาก ้ การรวบรวมขอมูลของอุปกรณในระบบสมองกลฝงตัว และเทคโนโลยีหุนยนต สําหรับการศึกษาเพือนํ ่ ามาเรียบเรียงเปนภาษาไทยนันทํ ้ าไดไมงายนัก ทางคณะ ผูเขี ยนตองทําการรวบรวมและทดลองเพือให ่ แนใจวา ความเขาใจในกระบวนการทํางานตางๆ นันมี ้ ความ คลาดเคลือนน ่ อยทีสุ่ ด เมือต ่ องทําการเรียบเรียงออกมาเปนภาษาไทย ศัพททางเทคนิคหลายคํามีความหมายทีทั่ บซอน กันมาก การบัญญัติศัพทจึงเกิดจากการปฏิบัติจริงรวมกับความหมายทางภาษาศาสตร ดังนันหากมี ้ ความ คลาดเคลือนหรื ่ อผิดพลาดเกิดขึน้ ทางคณะผูเขี ยนขอนอมรับและหากไดรับคําอธิบายหรือชีแนะจากท ้ าน ผูรู จะได ทําการชีแจงและปรั ้ บปรุงขอผิดพลาดทีอาจมี ่ เหลานันโดยเร็ ้ วทีสุ่ ด ทังนี ้ ้เพือให ่ การพัฒนาสื่อทางวิชาการ โดยเฉพาะอยางยิงกั ่ บความรูของเทคโนโลยีสมัยใหม สามารถดําเนินไปไดอยางตอเนือง ่ ภายใตการมีสวนรวมของผูรู ในทุ กภาคสวน บริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด
4Robo-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
6Robo-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
FA 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 ขึนไป ้
20Robo-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 ไดแลว
22Robo-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
24Robo-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
26Robo-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 ทีใช ่ ในการพัฒนาโปรแกรม
28Robo-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) : คนหาขอความคําที่เราใชคนหาตัวถัดไปภายในไฟลทีเป ่ ดอยูในเท็ กซเอดิเตอร
30Robo-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 : แสดงขอมูลลิขสิทธิเกี์ ยวกั
32Robo-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 วินาที
34Robo-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 เขาสูโหมดโปรแกรม
36Robo-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 จะกลับมาทํางานในสถานะปกติได ทําการจายไฟใหกับบอรดอีกครัง้ เลือกพอรต เชือมต ่ อใหถูกตอง จากนันเลื ้ อกใหบอรดทํางานในโหมดโปรแกรมเพือทํ ่ าการอัปโหลดโปรแกรมอีกครัง้
38Robo-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
40Robo-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 เพือตอบตกลงและยื ่ นยันการเปลียนแปลง ่
สวนพารามิเตอร หรือขอกําหนดอืนๆ ่ แนะนําใหใชตามคาที่กําหนดมา ทั้งนี้เพื่อลดขันตอนการพั ้ ฒนา โปรแกรมและความผิดพลาดทีอาจเกิ ่ ดขึนได ้ สําหรับนักพัฒนาโปรแกรมมือใหมหรือผูเริ มต ่ น
42Robo-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