at-bot activity book

176
Robo-Creator : AT-BOT ctivity book 1 AT-BOT activity book AT-BOT

Upload: innovative-experiment-coltd

Post on 22-Feb-2016

252 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: AT-BOT Activity book

Robo-Creator : AT-BOT ctivity book 1

AT-BOT activity book

AT-BOT

Page 2: AT-BOT Activity book

2Robo-Creator : AT-BOT activity book

AT-BOT activity book

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

ใครควรใช หน ังส ือเล มนี ้

1. น ักเร ียน น ิส ิต น ักศ ึกษา และบ ุคคลทั ่วไปที ่ม ีความสนใจในการน ําไมโครคอนโทรลเลอร ไปประย ุกต ใช ในการทดลองเก่ี ยวกั บการทํ างานของระบบอ ัตโนม ัต ิ หรื อสนใจในการเร ียนรู และทดลองไมโครคอนโทรลเลอร ในแนวทางใหม ที ่ใช ก ิจกรรมหุ นยนต อ ัตโนม ัต ิเป นสื ่อ

2. สถาบ ันการศึ กษา โรงเร ียน วิ ทยาลั ย มหาว ิทยาลั ย ที่ ม ีการเป ดการเรี ยนการสอนวิ ชาอิ เล็ กทรอน ิกส หรื อภาคว ิชาว ิศวกรรมอ ิเล ็กทรอน ิกส และคอมพ ิวเตอร

3. คณาจารย ที่ มี ความต องการศึ กษา และเตรี ยมการเรี ยนการสอนวิ ชาไมโครคอนโทรลเลอร รวมถึ งวิ ทยาศาสตร ประยุ กต ที่ ต องการบู รณาการความรู ทางอิ เล็ กทรอนิ กส -ไมโครคอนโทรลเลอร --การเขี ยนโปรแกรมคอมพิ วเตอร -การทดลองทางวิ ทยาศาสตร ในระดั บม ัธยมศึ กษา อาชี วศึ กษา และปริ ญญาตรี

รายละเอ ียดที่ ปรากฏในหนั งสื อเล มนี้ ได ผ านการตรวจทานอย างละเอี ยดและถ วนถี่ เพื ่อให มี ความสมบ ูรณ และถ ูกต องมากที ่ส ุดภายใต เงื ่อนไขและเวลาที ่พ ึงม ีก อนการจ ัดพ ิมพ เผยแพร ความเส ียหายอ ันอาจเก ิดจากการน ําข อม ูลในหน ังสื อเล มนี ้ไปใช ทางบร ิษ ัท อ ินโนเวต ีฟ เอ ็กเพอร ิเมนต จ ําก ัด ม ิได ม ีภาระในการร ับผ ิดชอบแต ประการใดความผ ิดพลาดคลาดเคลื ่อนที ่อาจม ีและได ร ับการจ ัดพ ิมพ เผยแพร ออกไปนั ้น ทางบร ิษ ัทฯ จะพยายามชี ้แจงและแก ไขในการจ ัดพ ิมพ ครั ้งต อไป

สงวนลิ ขสิ ทธิ์ ตาม พ.ร.บ. ลิ ขสิ ทธิ์ พ.ศ. 2537

ห ามการลอกเลี ยนไม ว าส วนหนึ่ งส วนใดของหนั งสื อเล มนี้ นอกจากจะได รั บอน ุญาต

ดํ าเนิ นการจั ดพิ มพ และจํ าหน ายโดยบริ ษั ท อิ นโนเวตี ฟ เอ็ กเพอริ เมนต จํ ากั ด108 ซ.สุ ขุ มวิ ท 101/2 ถ.สุ ขุ มวิ ท แขวงบางนา เขตบางนา กรุ งเทพฯ 10260โทรศั พท 0-2747-7001-4โทรสาร 0-2747-7005

Page 3: AT-BOT Activity book

Robo-Creator : AT-BOT ctivity book 3

การน ําเสนอข อม ูลเกี ่ยวก ับข อมู ลทางเทคน ิคและเทคโนโลยี ในหน ังส ือเล มนี ้ เก ิดจากความต องการที ่จะอธ ิบายกระบวนการและหล ักการทํ างาน ของอุ ปกรณ ในภาพรวมด วยถ อยคํ าที ่ง ายเพื ่อสร างความเข าใจแก ผู อ าน ด ังน้ั นการแปลค ําศ ัพท ทางเทคน ิคหลายๆ คํ าอาจไม ตรงตามข อบ ัญญ ัต ิของราชบั ณฑิ ตยสถาน และม ีหลายๆ คํ าที ่ยั งไม มี การบั ญญั ติ อย างเป นทางการ คณะผู เขี ยนจึ งขออนุ ญาตบ ัญญ ัต ิศ ัพท ขึ ้นมาใช ในการอธ ิบาย โดยม ีข อจ ําก ัดเพื ่ออ างอ ิงในหน ังส ือเล มนี ้เท านั ้น

ทั ้งนี ้สาเหตุ หลั กของข อชี ้แจงนี ้มาจาก การรวบรวมข อม ูลของอ ุปกรณ ในระบบสมองกลฝ งต ัวและเทคโนโลย ีหุ นยนต ส ําหร ับการศ ึกษาเพื ่อน ํามาเร ียบเร ียงเป นภาษาไทยนั ้นท ําได ไม ง ายน ัก ทางคณะผู เข ียนต องท ําการรวบรวมและทดลองเพื ่อให แน ใจว า ความเข าใจในกระบวนการท ํางานต าง ๆนั ้นม ีความคลาดเคล่ื อนน อยที ่ส ุด

เมื ่อต องท ําการเร ียบเร ียงออกมาเป นภาษาไทย ศ ัพท ทางเทคน ิคหลายค ําม ีความหมายที ่ท ับซ อนก ันมาก การบ ัญญ ัต ิศ ัพท จ ึงเก ิดจากการปฏ ิบ ัต ิจร ิงร วมก ับความหมายทางภาษาศาสตร ด ังนั ้นหากม ีความคลาดเคลื ่อนหร ือผ ิดพลาดเก ิดขึ ้น ทางคณะผู เข ียนขอน อมร ับและหากได ร ับค ําอธ ิบายหร ือชี ้แนะจากท านผู รู จะได ท ําการชี ้แจงและปร ับปร ุงข อผ ิดพลาดที ่อาจม ีเหล านั ้นโดยเร ็วที ่ส ุด

ทั้ งน้ี เพื ่อให การพั ฒนาส่ื อทางว ิชาการ โดยเฉพาะอย างยิ ่งกั บความรู ของเทคโนโลยี สมั ยใหม สามารถดํ าเนิ นไปได อย างต อเนื ่อง ภายใต การมี ส วนร วมของผู รู ในท ุกภาคส วน

บริ ษ ัท อิ นโนเวตี ฟ เอ็ กเพอร ิเมนต จ ํากั ด

Page 4: AT-BOT Activity book

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

Page 5: AT-BOT Activity book

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)

ON

MOTOR

BATTERY LEVEL1312111098

SERVO PORT

7.2

-9V B

ATT.

E2

RESET

+

-S

14 15PC6 PC7

C r e

c o n

a t o r e > > > >

t r o l l r b o a

>

e r dR

>

4850SW249SW1ADC7KNOB

TWI UART1

0 SCL 1 SDA 2 RX1 3 TX1

44 ADC446 ADC640 ADC041 ADC142 ADC2

START

45 ADC5

> >

USB DATA

43 ADC3

32

10

45

Page 6: AT-BOT Activity book

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 ล อ, แผ นสนามกระดาษส ําหร ับทดสอบ และซ ีด ีรอมบรรจ ุซอฟต แวร และต ัวอย างโปรแกรม

Page 7: AT-BOT Activity book

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 ช ุดหุ นยนต อั ตโนม ัติ เพื ่อการศึ กษาแบบสร างสรรค

Page 8: AT-BOT Activity book

8Robo-Creator : AT-BOT activity book

1.1 รายการอุ ปกรณ ที่ ใช ในหุ นยนต AT-BOT1. แผงวงจรควบคุ ม 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. สนามสํ าหรั บทดสอบการเคลื่ อนที่ ตามเส น

Page 9: AT-BOT Activity book

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) สํ าหรั บทดลองการทํ างานของวงจรแปลงสั ญญาณอะนาลอกเป นดิ จิ ตอลภายในชิ ปไมโครคอนโทรลเลอร ได โดยไม ต องต ออุ ปกรณ ภายนอก

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

ON

MOTOR

BATTERY LEVEL1312111098

SERVO PORT

7.2

-9V B

ATT

.

E2

RESET

+

-S

14 15PC6 PC7

C r e

c o n

a t o r e > > > >

t r o l l r b o a

>

e r dR

>

4850SW249SW1ADC7KNOB

TWI UART1

0 SCL 1 SDA 2 RX1 3 TX1

44 ADC446 ADC640 ADC041 ADC142 ADC2 START

45 ADC5

> >

USB DATA

43 ADC3

32

10

45

Page 10: AT-BOT Activity book

10Robo-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สํ าหรั บวงจรขั บเซอร โวมอเตอร ทั้ งนี้ เพื่ อป องกั นความเสี ยหายกรณี จ ายไฟเกิ นแก เซอร โวมอเตอร

Page 11: AT-BOT Activity book

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 กิ โลกรั ม-เซนติ เมตร

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

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

เฟ องส ง (1) 8 ฟ น

เฟ องส ง (2) 9 ฟ น

เฟ องส ง (3) 17 ฟ น

เฟ องส ง (4) 17 ฟ น

เฟ องรั บ (2) 36 ฟ น

เฟ องรั บ (3) 28 ฟ น

เฟ องรั บ (4) 28 ฟ น

Page 12: AT-BOT Activity book

12Robo-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 นิ้ ว

DATAR3220

R210k

R1510

LED1

S1

Switch GND

+V

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

1.4 คุ ณสมบั ติ ของชุ ดอุ ปกรณ ตรวจจั บสั ญญาณ

1.4.1 แผงวงจรสวิ ตช

ม ีวงจรแสดงในรู ปที ่ 1-4 ประกอบด วยสว ิตช พร อมไฟแสดงผล ให เอาต พ ุตเป นลอจ ิก “0” เมื ่อม ีการกดสวิ ตช

ที่ ช องเอาต พุ ต ถ ากดสวิ ตช จะส งลอจิ ก “0” ไฟสี แดงติ ด

ถ าไม มี การกด LED ดั บ ลอจิ กที่ ได เป นลอจิ ก “1”

(ก)(ข) (ค)

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

Page 13: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 13

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

10k

LED1

220

+V

GND

OUTSFH310

1.4.2 แผงวงจรตรวจจั บแสงสะท อน : ZX-03R

ม ีวงจรและหน าตาของแผงวงจรแสดงในร ูปที ่ 1-5 เป นแผงวงจรที ่ใช ในการตรวจสอบการสะท อนของแสงจากพื้ นผิ วหรื อจากเส น

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

ด วยการใช แสงสี แดงเป นแสงหลั กในการตรวจจั บ ทํ าให นํ าตั วตรวจจั บแบบนี้ ไปใช วั ดความแตกต างของสี บนพื้ นผิ วที่ พิ มพ ด วยหมึ กกั นแสงอิ นฟราเรดหรื อหมึ กกั นรั งสี อั ลตร าไวโอเล็ ตได

เนื ่องจากแผงวงจรตรวจจ ับแสงสะท อนอ ินฟราเรด ZX-03R ให ผลการทํ างานเป นแรงด ันไฟตรง ด ังนั ้นในการใช งานกั บหุ นยนต QuadMover จึ งต องต อสั ญญาณเข ากั บช องอิ นพุ ตอะนาลอกของแผงวงจรหลั ก Creatorcontroller 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

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

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

Page 14: AT-BOT Activity book

14Robo-Creator : AT-BOT activity book

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

GP2D12

GNDVout Vcc

GP2D120

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

ไมแนนอน เอาตพุตครั้งที่ 1 เอาตพุตครั้งที่ 2 เอาตพุตครั้งที่ n

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

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

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

การวัดระยะหาง

แรงดันเอาตพุต

ไฟเล้ียง

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

4 8 12 16 20 24 28 3200

0.4

0.8

1.2

1.6

2.0

2.4

2.8

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

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

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

หล ักการท ํางานของโมด ูลว ัดระยะทางด วยแสงอ ินฟราเรด

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

L F

A X

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

F AL

X

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

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

L

A

F

X

วัตถุ

GP2D120

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

สวนรับแสง

Page 15: AT-BOT Activity book

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 อั น) และชุ ดสกรู ที่ จํ าเป น

Page 16: AT-BOT Activity book

16Robo-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 ชิ้ นต อชุ ด

Page 17: AT-BOT Activity book

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 ต ัว

Page 18: AT-BOT Activity book

18Robo-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 มม. ระยะหางระหวางขา 2 มม.

GNDS

+5V

Page 19: AT-BOT Activity book

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 LosAndes ในประเทศโคล ัมเบ ีย

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 ขึ้ นไป

Page 20: AT-BOT Activity book

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 DevelopmentEnvironment) ไม ว าจะเป นเท ็กซ เอด ิเตอร ส ําหร ับพ ิมพ โค ดโปรแกรม, C คอมไพเลอร , ส วนของการดาวน โหลดโปรแกรมและหน าต าง Serial monitor ส ําหร ับร ับส งข อม ูลอน ุกรมก ับหุ นยนต AT-BOT โปรแกรม Wiring ถ ูกออกแบบมาให ใช ง ายและภาษาที ่ใช ในการเข ียนโปรแกรมค ือ ภาษา C/C++ สามารถทํ างานบนระบบปฏ ิบ ัต ิการว ินโดวส XP ขึ ้นไป, Linuxและ MAC OS X โดยม ีไฟล ต ิดตั ้งส ําหร ับแต ละแพลตฟอร มแยกจากก ัน

2.3.1 การติ ดตั้ งซอฟต แวร

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

Page 21: AT-BOT Activity book

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 ได แล ว

Page 22: AT-BOT Activity book

22Robo-Creator : AT-BOT activity book

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

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

MOTOR

BATTERY LEVEL1312111098

SERVO PORT

7.2

-9V B

ATT.

E2

RESET

+

-S

14 15PC6 PC7

R o b

> o R

o - C r e a o r >

u n n i n . . o a

t

g r d.

>

4850SW249SW1ADC7KNOB

TWI UART1

0 SCL 1 SDA 2 RX1 3 TX1

44 ADC446 ADC640 ADC041 ADC142 ADC2 STAR

T

45 ADC5

> >

USB DATA

43 ADC3

32

10

45

2

4 1

3

Page 23: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 23

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

Page 24: AT-BOT Activity book

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 แล ว

Page 25: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 25

เฟ ร มแวร (firmware) ในที ่นี ้ค ือ โปรแกรมควบค ุมขนาดเล ็กที ่ท ําหน าที ่ในการเข ียนหน วยความจ ําโปรแกรมของไมโครคอนโทรลเลอร ATmega128 จะเร ียกการท ํางานในล ักษณะนี ้ว า บ ูตโหลดเดอร (bootloader) ทั ้งนี ้เพื ่อช วยให ผู ใช งานสามารถดาวน โหลดโปรแกรมลงในหน วยความจ ําของไมโครคอนโทรลเลอร ได โดยไม ต องใช เครื ่องโปรแกรมภายนอก

การเล ือกเวอร ช ันของเฟ ร มแวร ในซอฟต แวร Wiring เป นการเล ือกร ูปแบบการสื ่อสารข อม ูลหร ือโปรโตคอลที ่ใช ในการสื ่อสารข อม ูล ไม เก่ี ยวข องก ับค ุณสมบั ต ิทางฮาร ดแวร , การทํ างานหร ือความสามารถของบอร ดแต อย างใด

บู ตโหลดเดอร (boot loader) เป นโค ดหรื อโปรแกรมขนาดเล็ กท่ี บรรจุ ลงในหน วยความจํ าโปรแกรมเพื่ อทํ าการโปรแกรมหรื อเขี ยนข อมู ลของไฟล .hex ลงในหน วยความจํ าโปรแกรมและข อมู ลภายในไมโครคอนโทรลเลอร ATmega128 เอง ผ านทางพอร ตสื่ อสารข อมู ลอนุ กรม USART ของตั วไมโครคอนโทรลเลอร ซึ่ งการโปรแกรมบู ตโหลดเดอร ลงในหน วยความจ ําโปรแกรมจะต องใช กระบวนการโปรแกรมผ านทางพอร ต ISP โดยใช เครื ่องโปรแกรมภายนอก หล ังจากนั ้นจะสามารถโปรแกรมไมโครคอนโทรลเลอร ได โดยต อก ับพอร ตอน ุกรมโดยตรงและไม ต องใช เครื ่องโปรแกรมภายนอกใดๆ อี ก โดยบู ตโหลดเดอร ที่ ใช ในแผงวงจรควบคุ มหลั ก ATX ของชุ ดหุ นยนต Robo-Creatorทุ กกิ จกรรม จะใช รู ปแบบสื่ อสารตามข อกํ าหนดของ STK500 Version 2

* Integrated development environment (IDE) คื อ ลั กษณะของซอฟต แวร ที่ รวบรวมเครื ่องมื อที่ ใช ในการพ ัฒนาโปรแกรมเอาไว ภายใต หน าต างหล ักในร ูปแบบของกราฟ กที ่สามารถสื ่อสารก ับผู ใช งานได อย างสะดวก (หร ือเร ียกว าGUI : Graphic User Interface) โดยสามารถเข าถึ งหร ือเรี ยกใช เครื่ องม ือเหล านั้ นจากหน าต างหลั กของโปรแกรม

Note

Page 26: AT-BOT Activity book

26Robo-Creator : AT-BOT activity book

Page 27: 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 IDEWiring IDE ประกอบไปด วย 2 ส วนที่ สํ าคั ญคื อ เท็ กซ เอดิ เตอร (text editor) และ ตั วแปลภาษา C (C

compiler) ด านเครื ่องม ือหร ือปุ มค ําสั ่งที ่ช วยในการพ ัฒนาโปรแกรมก ็ม ีหลากหลายสามารถสร ุปได ด ังร ูปที ่ 3-1

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

Page 28: AT-BOT Activity book

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 ทั ้งหมด

Page 29: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 29

3.1.1.2 เมนู Edit

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

Undo (Ctrl+Z) : ยกเล ิกการกระทํ าคํ าสั ่งก อนหน านี้ หร ือที ่พิ มพ ล าส ุด ค ุณสามารถยกเลิ กคํ าสั ่ง Undo ได โดยเลื อก Edit Redo

Redo (Ctrl+Y) : กล ับไปท ําค ําสั ่งที ่ท ําก อนหน าค ําสั ่ง Undo ค ําสั ่งนี ้จะใช ได ก ็ต อเมื ่อได ท ําการ Undo ไปแล ว

Cut (Ctrl+X) : ลบและค ัดลอกข อความที ่เล ือกไปเก ็บที ่คล ิปบอร ด ซึ ่งท ําหน าที ่เป นหน วยความจํ าชั ่วคราว

ส ําหร ับพ ักข อม ูล

Copy (Ctrl+C) : ค ัดลอกข อความที ่เล ือกไปเก ็บที ่คล ิปบอร ด

Paste (Ctrl+V) : วางข อม ูลที ่อยู ในคล ิปบอร ดไปย ังต ําแหน งที ่กํ าหนดหร ือแทนที ่ข อความที ่เล ือก

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

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

ที ่ด วยข อความอื ่นได

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

Page 30: AT-BOT Activity book

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

Board : ใช เล ือกรุ นของฮาร ดแวร ที ่ใช ก ับ Wiring 1.0

Serial Port : ใช เล ือกตํ าแหน งของพอร ตอนุ กรมที่ ใช ติ ดต อก ับฮาร ดแวร Wiring I/O

Page 31: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 31

3.1.1.5 Help

Getting Started : เป ดหน าต างเกี ่ยวก ับการเริ ่มต นเรี ยนรู และใช งาน Wiring ของเว ็บไซต Wiring

Examples : เล ือกเป ดไฟล สเก ็ตช ของโปรแกรมตั วอย าง

Reference : เป ดหน าต าง Reference ของเว็ บไซต Wiring ซึ่ งประกอบไปด วย language, programmingenvironment, libraries, และ language comparison จะต องต ออ ินเทอร เน ็ต หากต องการด ูข อม ูล

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

Wiring Hardware : เล ือกดู ข อม ูลของฮาร ดแวร Wiring I/O ผ านทางเคร ือข ายอ ินเทอร เน ็ต

Troubleshooting : เป ดหน าต างเกี่ ยวกั บการแก ไขป ญหาในการใช งาน Wiring ของเว็ บไซต Wiring

Visit wiring.org.co (Ctrl+5) : เป ดเว็ บบราวเซอร เพื่ อเยี่ ยมชมโฮมเพจของ Wiring ที่ http://wiring.org.co จะต องต ออ ินเตอร เน ็ต หากต องการดู ข อม ูล

About Wiring : แสดงข อม ูลล ิขส ิทธิ ์เกี ่ยวกั บซอฟต แวร Wiring

Page 32: AT-BOT Activity book

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 monitorWiring IDE ได ผนวกเครื ่องม ือสํ าหร ับแสดงผลและส งข อม ูลผ านพอร ตอน ุกรมเพื ่อต ิดต อก ับฮาร ดแวร Wiring

I/O นั ่นคื อ Serial monitor โดยในการเขี ยนโปรแกรมจะต องบรรจุ คํ าสั่ ง Serial.println() ลงในโปรแกรมด วย อย างไรก ็ตามก อนการใช คํ าสั ่ง Serial.println()จะต องม ีการกํ าหนดค าอั ตราเร็ วในการถ ายทอดข อม ูลหรื ออั ตราบอดหรื อบอดเรต (baud rate) ก อน โดยใช คํ าสั่ ง Serial.begin()ซึ่ งโดยปกติ กํ าหนดค าเป น 9600บ ิตต อวิ นาที และควรบรรจุ คํ าสั่ ง Serial.begin()ให อยู ในส วน setup()ของโปรแกรมท ุกครั ้ง

การเร ียกให หน าต าง Serial Monitor ให ท ํางาน ท ําได ง ายมากเพ ียงคล ิกที ่ปุ ม บนแถบเครื ่องม ือ หน าต าง Serial

Monitor จะปรากฏขึ ้นเพื ่อแสดงข อความที ่ร ับมาจากฮาร ดแวร Wiring ผ านทางพอร ตอน ุกรม ที ่ด านบนของหน าต าง SerialMonitor จะเป นช องส ําหร ับป อนข อม ูลเพื ่อส งค าจากโปรแกรมมาย ังฮาร ดแวร Wiring

Page 33: AT-BOT Activity book

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> // Include main libraryint ledPin = 48; // LED connected to pin 48 (bootloader)void setup(){

lcd("Hello Robot!"); // Title message on LCDpinMode(ledPin, OUTPUT); // Sets the digital pin as output

}void loop(){

digitalWrite(ledPin, HIGH); // Sets the LED ondelay(1000); // Waits for a seconddigitalWrite(ledPin, LOW); // LED offdelay(1000);

}

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

Page 34: AT-BOT Activity book

34Robo-Creator : AT-BOT activity book

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

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

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

Page 35: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 35

หากการคอมไพล ถ ูกต อง ที ่ช องแสดงสถานะจะแจ งแสดงข อความ Done compiling

หล ังจากการคอมไพล ส ําเร ็จ ในโฟลเดอร test จะม ีโฟลเดอร ใหม เก ิดขึ ้นชื ่อว า Build ภายในโฟลเดอร Build จะบรรจุ ไฟล ซอร สโปรแกรมภาษา C++ และไฟล ประกอบ

(6) ต อสาย USB เข ากั บแผงวงจรควบคุ ม ATX จากน้ั นเป ดสวิ ตช จ ายไฟเลี้ ยง แล วรอให การเชื่ อมต อกั บคอมพ ิวเตอร เสร็ จสมบ ูรณ (ด ูจากไฟแสดงผลสี นํ ้าเงิ นที ่ตํ าแหน ง USB ต ิดสว าง)

(7) กดสว ิตช START บนแผงวงจรควบคุ ม ATX ค างไว 3 วิ นาที ที่ จอแสดงผล LCD แสดงข อความแจ งการเข าสู โหมดโปรแกรม ในร ูปที ่ 3-2 แสดงขั ้นตอนทั ้งหมดของการก ําหนดให หุ นยนต AT-BOT เข าสู โหมดโปรแกรม

ร ูปที ่ 3-2 แสดงการกํ าหนดให หุ นยนต AT-BOT เข าสู โหมดโปรแกรม

MOTOR

BATTERY LEVEL1312111098

SERVO PORT

7.2

-9V B

ATT.

E2

RESET

+

-S

14 15PC6 PC7

R o b

> o B

o - C r e a o r >

o o t l o d r o a

t

a r de

>

4850SW249SW1ADC7KNOB

TWI UART1

0 SCL 1 SDA 2 RX1 3 TX1

44 ADC446 ADC640 ADC041 ADC142 ADC2 START

45 ADC5

> >

USB DATA

43 ADC3

32

10

45

2

5

4

1

3

Page 36: AT-BOT Activity book

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 ติ ดกะพริ บ

Page 37: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 37

3.3 การแก ป ญหาในกรณ ีที่ อั ปโหลดโปรแกรมไม ได

3.3.1 กรณี ที่ คลิ กปุ ม Upload แล ว ไม มี การทํ างานใดๆ ต อ หรื อโปรแกรมค าง

สาเหตุ :

ซอฟต แวร Wiring ไม สามารถติ ดต อก ับแผงวงจรควบคุ ม ATX ของหุ นยนต AT-BOT ได เนื ่องจากไม ได อยู ในโหมดโปรแกรม

ทางแก ไข :

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

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

Page 38: AT-BOT Activity book

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 ด วย

Page 39: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 39

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

ไฟล .cpp

คอมไพล

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

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

ไฟลไลบรารี

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

ไฟล .pdesetup(){ ................... ...................}loop(){ .................... ....................}

โฟลเดอร Applet

init()

{

ตั้งคาเบื้องตนของระบบ}

int main(void){ init(); setup(); for (;;) { loop(); } return 0;}

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

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

สเก็ตชบุก :พื้นที่โคดโปรแกรมที่ผูพัฒนา

ตองเขียนขึ้นเอง

Page 40: AT-BOT Activity book

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

Page 41: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 41

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

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

Page 42: AT-BOT Activity book

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 แต ไม ควรบั นทึ กทั บไฟล สเก็ ตช เดิ มที่ ไม ได ถู กเป ดข้ึ นมาเพราะจะทํ าให การเชื่ อมโยงไฟล สั บสน และทํ าให เกิ ดความผิ ดพลาดในการเป ดใช งานครั้ งต อไปได ถ าหากมี ความต องการบั นทึ กทั บไฟล เก็ ตช เดิ มที่ ไม ได ถู กเป ดข้ึ นมา จะต องทํ าการลบโฟลเดอร ของไฟล สเก็ ตช นั ้นออกไปเส ียก อน

Page 43: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 43

การพั ฒนาโปรแกรมภาษา C/C++ ด วย Wiring สํ าหรั บหุ นยนต AT-BOT ดํ าเนิ นการภายใต การสนั บสนุ น

ของไฟล ไลบรารี atx.h ทั้ งนี้ เพื่ อช วยลดข้ั นตอนและความซั บซ อนในการเขี ยนโปรแกรมเพื่ อควบคุ มส วนต างๆของฮาร ดแวร ลง เนื่ องจากต องการให ความสํ าคั ญของการพั ฒนาโปรแกรมควบคุ มหุ นยนต AT-BOT ไปอยู ที่ การเขี ยนโปรแกรมสํ าหรั บรองรั บกิ จกรรมการแข งขั น

โครงสร างของไฟล ไลบรารี atx.h แสดงดั งรู ป รายละเอี ยดของไฟล ไลบรารี ย อยทั้ งหมดมี้ ดั งนี้

Page 44: AT-BOT Activity book

44Robo-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

Hel

Wir

l ooLCD boa

i ngI/ b obo

r

O tdR

rdr

ตั วอย างที่ 4-2lcd(“abcdefghijklmnopqrstuvwxyz”);// แสดงผลข อความเมื่ อสายอั กขระเกิ น 16 ตั วอั กษร อ ักขระตั วถั ดไปจะขึ้ นบรรทั ดที่ 2 (บรรทั ดล าง) ทั นที ผลลั พธ ที่ โมดู ล LCD

abc

qrs

d efghi klm

t uvwx z obo

j

y tdR

nop

Page 45: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 45

ตั วอย างที่ 4-3

lcd(“Value: %d unit “,518); // แสดงข อความร วมกั บข อมู ลตั วเลข (518) ที่ โมดู ล LCD

ผลลั พธ ที่ โมดู ล LCD

Val

qrs

u e:g51 kun

t uvwx z obo

8

y tdR

itp

ตั วอย างที่ 4-4

lcd(“Value: %d “,analog(4)); // แสดงผลค าอะนาลอกช อง ADC4 ที่ โมดู ล LCD

ผลลั พธ ที่ โมดู ล LCD

Val

qrs

u e:gxx kun

t uvwx z obo

x

y tdR

itp

โดยที่ xxx คื อค าที่ อ านได มี ค าตั้ งแต 0 ถึ ง 1023

ตั วอย างที่ 4-5

char c_test=’j’;

lcd(“abcd%cxyz”,c_test); // แสดงอั กขระ j ร วมกั บข อความอื่ นๆ

abc

qrs

d jxyzx kun

t uvwx z obo

x

y tdR

itp

ผลลั พธ ที่ โมดู ล LCD

ตั วอย างที่ 4-6

lcd(“Value: %f “,125.450); // แสดงข อความร วมกั บตั วเลขที่ โมดู ล LCD (แสดงทศนิ ยม 3 หลั ก)

ผลลั พธ ที่ โมดู ล LCD

Val

qrs

u e:g12 .45

t uvwx z obo

5

y tdR

0tp

Page 46: AT-BOT Activity book

46Robo-Creator : AT-BOT activity book

ตั วอย างที่ 4-7

lcd(“count1: %d #ncount2: %d”,12,48);

// แสดงข อความร วมกั บ 2 รหั สควบคุ ม และคี ย พิ เศษ #n// เพื่ อกํ าหนดให กลุ มข อความที่ ต อท าย #n จะถู กนํ ามาแสดงผลยั งบรรทั ดที่ 2 (บรรทั ดล าง)

ผลลั พธ ที่ โมดู ล LCD

cou

cou

n t1:11 .45

n t2:x 8 obo

2

4 tdR

0tp

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 วิ นาที

Page 47: AT-BOT Activity book

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-9char x; // ประกาศตั วแปร x เพื่ อเก็ บค าผลลั พธ จาการอ านค าระดั บสั ญญาณx = in(49); // อ านค าดิ จิ ตอลจากพอร ตหมายเลข 49 แล วเก็ บค าไว ที่ ตั วแปร x

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

4.3.2 outเป นฟ งก ชั่ นกํ าหนดระดั บสั ญญาณหรื อข อมู ลดิ จิ ตอลไปยั งขาพอร ตที่ กํ าหนด

รู ปแบบ

out(char _bit,char _dat)

พารามิ เตอร

_bit - กํ าหนดขาพอร ตที่ ต องการ มี ค า 0 ถึ ง 50

ตั วอย างที่ 4-11out(43,1); // กํ าหนดให ขาพอร ต 43 เป น “1”out(45,0); // กํ าหนดให ขาพอร ต 45 เป น “0”

Page 48: AT-BOT Activity book

48Robo-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

Page 49: AT-BOT Activity book

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-16int val=0; // ก ําหนดต ัวแปรส ําหร ับเก ็บค าของอ ินพ ุตอะนาลอกที ่ได จากการแปลงส ัญญาณแล วval = analog(2); // อ านค าของอิ นพุ ตอะนาลอกช อง 2 ซึ่ งตรงกั บพอร ต ADC2 ซึ่ งผ านการแปลง

// เป นข อมู ลดิ จิ ตอลแล วมาเก็ บไว ที่ ตั วแปร val

ตั วอย างที่ 4-17int val=0; // ก ําหนดต ัวแปรส ําหร ับเก ็บค าของอ ินพ ุตอะนาลอกที ่ได จากการแปลงส ัญญาณแล วval = knob(); // อ านค าจากอ ินพ ุต knob ซ่ึ งผ านการแปลงเป นข อม ูลด ิจ ิตอลแล วมาเก ็บไว ที ่ต ัวแปร val

Page 50: AT-BOT Activity book

50Robo-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-18motor(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-20motor_stop(1); // หยุ ดขั บมอเตอร ช อง 1motor_stop(4); // หยุ ดขั บมอเตอร ช อง 4

ตั วอย างที่ 4-21

motor_stop(ALL); // มอเตอร ทั้ ง 6 ช องหยุ ดทํ างานพร อมกั น

Page 51: AT-BOT Activity book

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,767time - กํ าหนดค าเวลาในการกํ าเนิ ดสั ญญาณเสี ยงในหน วย 1 มิ ลลิ วิ นาที มี ค า 0 ถึ ง 32,767

ตั วอย างที่ 4-22beep(); // กํ าเนิ ดเสี ยงความถี่ 500Hz นาน 100 มิ ลลิ วิ นาที sound(1200,500); // กํ าเนิ ดสั ญญาณเสี ยงความถี่ 1200Hz นาน 500 มิ ลลิ วิ นาที

Page 52: AT-BOT Activity book

52Robo-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 บิ ตต อวิ นาที

Page 53: AT-BOT Activity book

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!”); // แสดงข อความเพื่ อตอบสนองต อการตรวจพบว ามี การคี ย asleep(1000); // หน วงเวลาแสดงข อความประมาณ 1 วิ นาที

}else{

lcd(“#c”); // เคลี ยร ข อความที่ หน าจอโมดู ล LCD}

}}หมายเหตุ เมื ่อเร ียกใช ฟ งก ชั ่น uart เพื ่อส งข อม ูลออกทางโมด ูลพอร ตอน ุกรมหร ือ UART และ uart_getkey เพื ่อ

ตรวจจ ับอ ักขระใดๆ นั ้น อ ัตราบอดจะถ ูกก ําหนดเป น 152,000 บ ิตต อว ินาท ี ข อม ูล 8 บ ิต และไม ม ีการตรวจสอบพาร ิตี ้โดยอ ัตโนม ัต ิ และเป นค าตั ้งต น เพื ่อลดความซ ับซ อนในการเข ียนโปรแกรมลง หากต องการเปลี ่ยนอ ัตราบอดต องใช uart_set_baudอย างไรก ็ตาม ต องค ําน ึงด วยว า เมื ่ออ ัตราบอดส ูงขึ ้นอาจส งผลกระทบต อความถ ูกต องในการสื ่อสารข อม ูล

Page 54: AT-BOT Activity book

54Robo-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-27char x =uart1_available();// ตรวจสอบว ามี ข อมู ลเข ามาทางภาครั บของโมดู ล UART1 หรื อไม // ถ า x มี ค ามากกว า 0 แสดงว ามี ข อมู ลเข ามาแล ว ควรอ านออกไปด วยฟ งก ชั่ น uart1_getkey ทั นที

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

รู ปแบบ

char uart1_getkey(void)การคื นค า

- เป น 0 เมื่ อยั งไม มี การรั บอั กขระใดๆ- เป นค าของอั กขระที่ รั บได ในรู ปแบบของรหั สแอสกี้

Page 55: AT-BOT Activity book

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 องศาไป

ในทิ ศทวนเข็ มนาฬิ กา

Page 56: AT-BOT Activity book

56Robo-Creator : AT-BOT activity book

Page 57: 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 สื่ อสารข อมู ลอนุ กรมกั บคอมพิ วเตอร

Page 58: AT-BOT Activity book

58Robo-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 จะร ันโปรแกรมที ่อ ัปโหลดล าส ุดท ันท ี

Page 59: AT-BOT Activity book

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!

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

#include <atx.h> // ผนวกไฟล ไลบรารี หลั กvoid setup(){ lcd(“Hello Robot!”); // แสดงข อความที่ โมดู ล LCD}void loop(){}คํ าอธิ บายโปรแกรม

โปรแกรมทํ างานภายในฟ งก ชั ่น setup ซึ่ งมี เพี ยงคํ าสั่ งเดี ยวคื อ สั่ งให โมดู ล LCD แสดงข อความ Hello Robot!จากนั้ นโปรแกรมจะหลุ ดไปทํ างานในฟ งก ชั่ น loop ซึ่ งไม มี การกํ าหนดคํ าสั่ งใดๆ ภายในโปรแกรม ผลลั พธ โดยรวมจึ งเห็ นการแสดงข อความเท านั้ น

Page 60: AT-BOT Activity book

60Robo-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

Page 61: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 61

#include <atx.h> // ผนวกไฟล ไลบรารี หลั กint i = 0; // กํ าหนดตั วแปรเก็ บค าการนั บvoid setup(){}void loop(){

lcd(“Count: %d “,i); // แสดงค าการนั บที่ โมดู ล LCDsleep(1000); // หน วงเวลา 1 วิ นาที i++; // เพิ่ มค าการนั บ 1 ค า

}

คํ าอธิ บายโปรแกรม

โปรแกรมเริ่ มต นทํ างานภายในส วนฟ งก ชั่ น setup จากนั้ นวนทํ างานภายในฟ งก ชั่ น loop ซึ่ งกํ าหนดให แสดงค าการนั บที่ มี การเพิ่ มค าขึ้ นทุ กๆ 1 วิ นาที โดยมี ตั วแปร i ทํ าหน าที่ เก็ บค าการนั บ

การทดลองที่ 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 วิ นาที

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

Page 62: AT-BOT Activity book

62Robo-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!”); // แสดงข อความเริ่ มต นที่ โมดู ล LCDsw1_press(); // รอการกดสวิ ตช SW1lcd(“#c”); // เคลี ยร ข อความเดิ มก อนแสดงข อความต อไป

}void loop(){

lcd(“Count: %d “,i); // แสดงค าการนั บที่ โมดู ล LCDsleep(1000); // หน วงเวลา 1 วิ นาที i++; // เพิ่ มค าการนั บขึ้ น 1 ค า

}คํ าอธิ บายโปรแกรม

โปรแกรมเริ ่มต นทํ างานภายในฟ งก ชั ่น setup เพื ่อรอการกดสว ิตช SW1 โดยม ีการแจ งเตื อนด วยข อความ SW1Press! ที่ โมดู ล LCD หลั งจากที่ มี การกดสวิ ตช SW1 โปรแกรมจะวนทํ างานภายในฟ งก ชั่ น loop ซึ่ งกํ าหนดให แสดงค าการนั บที่ เพิ่ มค าขึ้ นทุ กๆ 1 วิ นาที โดยมี ตั วแปร i ทํ าหน าที่ เก็ บค าการนั บ

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

Page 63: AT-BOT Activity book

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; // กํ าหนดตั วแปรเก็ บค าการนั บให มี ค าเริ่ มต นที่ 10void setup(){}void loop(){

lcd(“Count: %d “,i); // แสดงค าการนั บที่ โมดู ล LCDif(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

Page 64: AT-BOT Activity book

64Robo-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 ค า

Page 65: AT-BOT Activity book

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 ที่ โมดู ล LCDsleep(100); // หน วงเวลา 0.1 วิ นาที เพื่ อให แสดงผลได ชั ดเจนขึ้ น

}

คํ าอธิ บายโปรแกรม

โปรแกรมเริ่ มต นทํ างานภายในฟ งก ชั่ น setup จากนั้ นวนทํ างานภายในฟ งก ชั่ น loop ซึ่ งกํ าหนดให แสดงค าที่ อ านได จาก KNOB ที่ โมดู ล LCD

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

Page 66: AT-BOT Activity book

66Robo-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

ในกรณี ที่ ทํ างานในโหมดนั บลง

โดยที่ xxx คื อค าการนั บ ค าเริ่ มต นของโปรแกรมเท ากั บ 100

โปรแกรมจะทํ าการนั บขึ้ นหรื อลงขึ้ นอยู กั บค าของ KNOB ซึ่ งเกิ ดจากการหมุ นแกนของตั วต านทานปรั บค าได ที่ ตํ าแหน ง KNOB ของแผงวงจรควบคุ ม ATX

L3.2.4 ปรั บแกนหมุ น KNOB ให เลยตํ าแหน งกึ่ งกลางมาทางซ าย (หรื ออาจปรั บมาซ าย)

จะพบว า โปรแกรมทํ างานในโหมดนั บลง ค าการนั บจะลดลง 1 ค าทุ กๆ 1 วิ นาที

L3.2.5 ปรั บแกนหมุ น KNOB ให เลยตํ าแหน งกึ่ งกลางมาทางขวา (หรื ออาจปรั บมาขวาสุ ด)

จะพบว า โปรแกรมทํ างานในโหมดนั บขึ้ น ค าการนั บจะถู กเพิ่ มขึ้ น 1 ค าทุ กๆ 1 วิ นาที

Page 67: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 67

#include <atx.h> // ผนวกไฟล ไลบรารี หลั กint i=100; // กํ าหนดตั วแปรเก็ บค าการนั บ มี ค าเริ่ มต นเท ากั บ 100int k; // กํ าหนดตั วแปรเก็ บค าที่ อ านได จาก KNOBvoid setup(){}void loop(){

lcd(“Count: %d “,i); // แสดงค าการนั บที่ โมดู ล LCDk = knob(); // อ านค า KNOB มาเก็ บที่ ตั วแปร kif(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 ค า พร อมทั้ งแสดงข อความ CountUp เพื่ อแจ งว า ขณะนี้ ทํ าการนั บขึ้ น

2. เมื่ อพบว า ค าของ KNOB น อยกว า 512 (ทํ างานในส วน else)

โปรแกรมตอบสนองด วยการลดค าการนั บของตั วแปร i ลง 1 ค า พร อมทั้ งแสดงข อความ CountDown เพื่ อแจ งว า ขณะนี้ กํ าลั งนั บลง

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

Page 68: AT-BOT Activity book

68Robo-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 ส ําหร ับทดสอบการก ําเน ิดเส ียง

Page 69: AT-BOT Activity book

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; // กํ าหนดตั วแปรเก็ บค าที่ อ านได จาก KNOBint f; // กํ าหนดตั วแปรเก็ บค าความถี่ เสี ยงvoid setup(){}void loop(){

k = knob(); // อ านค า KNOB มาเก็ บที่ ตั วแปร kf = 2*k; // คํ านวณค าความถี่ เสี ยงให เป น 2 เท าของค า KNOBlcd(“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

Page 70: AT-BOT Activity book

70Robo-Creator : AT-BOT activity book

การทดลองที่ 5.1 ควบคุ มทิ ศทางการหมุ นของมอเตอร ไฟตรงในการทดลองน้ี เป นการเขี ยนโปรแกรมเพื่ อควบคุ มมอเตอร ไฟตรงที่ เอาต พุ ตช อง 0 และ 1 ให หมุ นกลั บ

ทิ ศทางทุ กๆ 3 วิ นาที อย างต อเนื่ อง

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

ต อมอเตอร ไฟตรงตั วที่ 2 เข ากั บเอาต พุ ตมอเตอร ไฟตรงช อง 1 ของแผงวงจรควบคุ ม ATX

ON

MOTOR

BATTERY LEVEL1312111098

SERVO PORT

7.2

-9V B

ATT.

E2

RESET

+

-S

14 15PC6 PC7

C r e

c o n

a t o r e > > > >

t r o l l r b o a

>

e r dR

>

4850SW249SW1ADC7KNOB

TWI UART1

0 SCL 1 SDA 2 RX1 3 TX1

44 ADC446 ADC640 ADC041 ADC142 ADC2 START

45 ADC5

> >

USB DATA

43 ADC3

32

10

45

Page 71: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 71

#include <atx.h> // ผนวกไฟล ไลบรารี หลั กvoid setup(){}void loop(){

motor(0,70); // ขั บมอเตอร ช อง 0 ด วยกํ าลั ง 70% ของกํ าลั งสู งสุ ดmotor(1,70); // ขั บมอเตอร ช อง 1 ด วยกํ าลั ง 70% ของกํ าลั งสู งสุ ดsleep(3000); // หน วงเวลา 3 วิ นาที ก อนกลั บทิ ศทางการหมุ นของมอเตอร

motor(0,-70); // ขั บมอเตอร ช อง 0 ด วยกํ าลั ง 70% มี ทิ ศทางการหมุ นตรงข ามกั บค ากํ าลั งที่ เป นบวกmotor(1,-70); // ขั บมอเตอร ช อง 1 ด วยกํ าลั ง 70% มี ทิ ศทางการหมุ นตรงข ามกั บค ากํ าลั งที่ เป นบวกsleep(3000); // หน วงเวลา 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 วิ นาที

Page 72: AT-BOT Activity book

72Robo-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); // หยุ ดขั บมอเตอร ช อง 0motor_stop(1); // หยุ ดขั บมอเตอร ช อง 1sleep(3000); // หน วงเวลา 3 วิ นาที

}

คํ าอธิ บายโปรแกรม

โปรแกรมเริ่ มต นทํ างานภายในฟ งก ชั่ น setup จากนั้ นวนทํ างานภายในฟ งก ชั่ น loop ซึ่ งกํ าหนดให ขั บมอเตอร ไฟตรงช อง 0 และ 1 พร อมกั นด วยกํ าลั งขั บ 90% เท ากั นทั้ งคู เมื่ อครบ 3 วิ นาที มอเตอร จะหยุ ดหมุ นเป นเวลา 3วิ นาที แล ววนกลั บไปหมุ นอี กครั้ ง สลั บการทํ างานกั นอย างต อเนื่ อง

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

Page 73: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 73

การทดลองที่ 6.1 ควบคุ มตํ าแหน งแกนหมุ นของเซอร โวมอเตอร ในการทดลองนี้ เป นการเขี ยนโปรแกรมควบคุ มแกนหมุ นของเซอร โวมอเตอร ที่ ต อกั บเอาต พุ ตเซอร โว

มอเตอร ช อง 12 ให หมุ นไปยั งตํ าแหน ง 60 องศา แล วหยุ ดเพื่ อล็ อกตํ าแหน งไว เป นเวลา 5 วิ นาที จากน้ั นเปลี่ ยนมายั งตํ าแหน ง 120 องศา แล วหยุ ดล็ อกตํ าแหน งไว 5 วิ นาที เช นกั น จากน้ั นหมุ นแกนกลั บไปยั งตํ าแหน ง 60 องศาอี กครั้ ง สลั บตํ าแหน งไปมาเช นน้ี อย างต อเนื่ อง

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

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

ON

MOTOR

BATTERY LEVEL1312111098

SERVO PORT

7.2

-9V B

ATT.

E2

RESET

+

-S

14 15PC6 PC7

C r e

c o n

a t o r e > > > >

t r o l l r b o a

>

e r dR

>

4850SW249SW1ADC7KNOB

TWI UART1

0 SCL 1 SDA 2 RX1 3 TX1

44 ADC446 ADC640 ADC041 ADC142 ADC2 START

45 ADC5

> >

USB DATA

43 ADC3

32

10

45

STANDARDSERVO MOTOR

Page 74: AT-BOT Activity book

74Robo-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

Page 75: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 75

#include <atx.h> // ผนวกไฟล ไลบรารี หลั กint p=90; // กํ าหนดตั วแปรเก็ บค าตํ าแหน งเซอร โวมอเตอร ค าเริ่ มต นเป น 90void setup(){}void loop(){

servo(12,p); // ขั บเซอร โวมอเตอร ช อง 12 ไปยั งตํ าแหน งที่ กํ าหนดด วยค าของตั วแปร plcd(“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

Page 76: AT-BOT Activity book

76Robo-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 ใหม

Page 77: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 77

การทดลองที่ 7.1 ส งข อมู ลไปยั งคอมพิ วเตอร ในการทดลองน้ี เป นการเขี ยนโปรแกรมทดสอบส งข อมู ลจากแผงวงจรควบคุ ม ATX ไปยั งคอมพิ วเตอร

เพื่ อแสดงผลที่ หน าต าง Serial Monitor ของ Wiring ผ านทางสาย USB ที่ เชื่ อมต อระหว างแผงวงจรควบคุ ม ATXกั บพอร ต USB ของคอมพิ วเตอร โดยส งข อความ Hello Robot! ไปแสดงทุ กๆ 2 วิ นาที

ON

MOTOR

BATTERY LEVEL1312111098

SERVO PORT

7.2

-9V B

ATT.

E2

RESET

+

-S

14 15PC6 PC7

C r e

c o n

a t o r e > > > >

t r o l l r b o a

>

e r dR

>

4850SW249SW1ADC7KNOB

TWI UART1

0 SCL 1 SDA 2 RX1 3 TX1

44 ADC446 ADC640 ADC041 ADC142 ADC2 STAR

T

45 ADC5

> >

USB DATA

43 ADC3

32

10

45

ขั้ นตอน

L7.1.1 สร างไฟล สเก็ ตช ของ Wiring ขึ้ นใหม ตั้ งชื่ อเป น uart_01 พิ มพ โปรแกรมที่ L7-1

L7.1.2 คอมไพล และอั ปโหลดโปรแกรมไปยั งแผงวงจรควบคุ ม ATX โดยยั งเชื่ อมต อสาย USB กั บคอมพิ วเตอร ไว ก อน

Page 78: AT-BOT Activity book

78Robo-Creator : AT-BOT activity book

L7.1.3 รั นโปรแกรม คลิ กที่ ปุ ม เพื่ อเป ดหน าต าง Serial Monitor

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

#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

Page 79: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 79

#include <atx.h> // ผนวกไฟล ไลบรารี หลั กvoid setup(){}void loop(){

uart(“KNOB: %d \r\n”,knob()); // ส งค าของ KNOB ไปแสดงที่ คอมพิ วเตอร sleep(100); // หน วงเวลาเล็ กน อย

}

คํ าอธิ บายโปรแกรม

โปรแกรมเริ่ มต นทํ างานภายในฟ งก ชั่ น setup จากนั้ นวนทํ างานภายในฟ งก ชั่ น loop เพื่ อจะส งที่ อ านได จากการปรั บแกนหมุ นของ KNOB ไปแสดงยั งคอมพิ วเตอร ในทุ กๆ 0.1 วิ นาที อย างต อเนื่ อง

การทดลองที่ 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

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

Page 80: AT-BOT Activity book

80Robo-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 วิ นาที

Page 81: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 81

#include <atx.h> // ผนวกไฟล ไลบรารี หลั กchar c; // กํ าหนดตั วแปรเก็ บข อมู ลที่ ได รั บจากคอมพิ วเตอร void setup(){}void loop(){

if(uart_available()) // ตรวจสอบว า มี ข อมู ลส งมาจากคอมพิ วเตอร หรื อไม {

c = uart_getkey(); // อ านข อมู ลที่ ได รั บจากคอมพิ วเตอร มาเก็ บที่ ตั วแปร cif(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

Page 82: AT-BOT Activity book

82Robo-Creator : AT-BOT activity book

Page 83: 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เคลื่ อนที่ ในแบบพื้ นฐาน ไม ว าจะเป นการเคลื่ อนที่ ตรง, ถอยหลั ง และการเลี้ ยวหรื อหมุ นตั วในแบบต างๆ

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

ON

MO

TO

R

BATTER

Y LE

VEL

13

12

11

10

98

SERV

O P

ORT

7.2-9V BATT.

E2

RESE

T

+

- S

1415

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IUART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DAT

A

43

AD

C3

3210 4 5

Page 84: AT-BOT Activity book

84Robo-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%ทั้ งหมดเป นต น เพื่ อไม ให เกิ ดการหมุ นตั ว

ON

MO

TO

R

BATTERY LE

VEL

13

1211

109

8

SERVO

PO

RT

7.2-9V BATT.

E2

RES

ET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

ON

MO

TO

R

BATTERY LE

VEL

13

1211

109

8

SERVO

PO

RT

7.2-9V BATT.

E2

RES

ET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

Page 85: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 85

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

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

ON

MO

TO

R

BATTERY L

EVEL

1312

1110

98

SERVO

PO

RT

7.2-9V BATT.

E2

RES

ET

+

- S

1415

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1ADC7

KN

OB

TW

IUAR

T1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

ON

MO

TO

R

BATTERY L

EVEL

1312

1110

98

SERVO

PO

RT

7.2-9V BATT.

E2

RES

ET

+

- S

1415

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1ADC7

KN

OB

TW

IUAR

T1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

6.2.3 เลี้ ยวซ าย

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

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

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

ON

MO

TO

R

BAT

TERY LE

VEL

13

12

11

10

98

SE

RVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0S

CL

1SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

ADC

3

3210 4 5

ON

MO

TO

R

BAT

TERY LE

VEL

13

12

11

10

98

SE

RVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0S

CL

1SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

ADC

3

3210 4 5

Page 86: AT-BOT Activity book

86Robo-Creator : AT-BOT activity book

6.2.3.2 เลี้ ยวซ ายด วยการหมุ นตั ว

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

ON

MO

TO

R

BATTERY L

EVEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0S

CL

1S

DA

2RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

ON

MO

TO

R

BATTERY L

EVEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0S

CL

1S

DA

2RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

6.2.4 เลี้ ยวขวา

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

6.2.4.1 เลี้ ยวขวาด วย 2 ล อ

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

ON

MO

TO

R

BAT

TERY

LEVE

L1

31

211

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RES

ET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0S

CL

1SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

ON

MO

TO

R

BAT

TERY

LEVE

L1

31

211

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RES

ET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0S

CL

1SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

Page 87: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 87

6.2.4.2 เลี้ ยวขวาแบบหมุ นตั ว

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

ON

MO

TO

R

BATTERY L

EVEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART

1

0SCL

1SD

A2

RX1

3TX

1

44

AD

C4

46

ADC

640

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

ADC

3

3210 4 5

ON

MO

TO

R

BATTERY L

EVEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART

1

0SCL

1SD

A2

RX1

3TX

1

44

AD

C4

46

ADC

640

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

ADC

3

3210 4 5

Page 88: AT-BOT Activity book

88Robo-Creator : AT-BOT activity book

ในการทดลองนี้ เป นการทดลองที่ ต องกระทํ าเป นการทดลองแรกของการเขี ยนโปรแกรมเพื่ อควบคุ มให หุ นยนต AT-BOT ให เคลื ่อนที ่ โดยนํ าเสนอกระบวนการปรั บแต งการข ับมอเตอร ของหุ นยนต เพื ่อทดสอบการเคลื ่อนที่ ขั้ นพื้ นฐาน

หุ นยนต AT-BOT ได รั บการกํ าหนดการเชื่ อมต อมอเตอร ของล อทั้ งสี่ ของหุ นยนต เข ากั บวงจรขั บมอเตอร บนแผงวงจร Creator controller บนตั วหุ นยนต AT-BOT ดั งนี้

ล อหน าซ ายต อกั บวงจรขั บมอเตอร ช อง 0

ล อหลั งซ ายต อกั บวงจรขั บมอเตอร ช อง 1

ล อหลั งขวาต อกั บวงจรขั บมอเตอร ช อง 2

ล อหน าขวาต อกั บวงจรขั บมอเตอร ช อง 3

เพื ่อให การทดสอบเป นไปในแนวทางเด ียวก ัน จ ึงต องม ีการกํ าหนดท ิศทางการหม ุนของล อในแต ละตํ าแหน งในที ่นี ้ก ําหนดให เมื ่อมอเตอร ของล อใดก็ ตามถ ูกสั ่งข ับด วยก ําล ังที ่เป นค าบวก (+) จากฟ งก ชั ่น motor มอเตอร ต ัวด ังกล าวจะหม ุนไปในท ิศที ่ทํ าให หุ นยนต เคลื ่อนที ่ไปข างหน า ยกต ัวอย าง เมื ่อข ับมอเตอร ช อง 1 ด วยก ําล ังเป นค าบวก แกนหม ุนของมอเตอร จะต องหม ุนไปในท ิศทางที ่ท ําให หุ นยนต เคลื ่อนที ่ไปข างหน า แต ถ าหม ุนกล ับท ิศทางให ทํ าการแก ไขด วยการสล ับท ิศทางการต อขั ้วของสายมอเตอร ที ่ช อง 1 และทํ าการทดสอบเช นนี ้ก ับมอเตอร และช ุดล ออ ีก 3 ล อที ่เหล ือ

ON

MO

TO

R

BATTERY LE

VEL

1312

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

1415

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1A

DC7

KN

OB

TW

IU

AR

T1

0SCL

1SD

A2

RX1

3TX1

44AD

C4

46

AD

C6

40ADC0

41

ADC1

42

AD

C2

START

45

ADC5

>>

USB

DATA

43

AD

C3

3210 4 5

Page 89: AT-BOT Activity book

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);

}

ขั้ นตอน

L8.1 ปลดสายต อมอเตอร ออกทั้ งหมด

L8.2 สร างไฟล สเก็ ตช ของ Wiring ขึ้ นใหม ตั้ งชื่ อเป น motor_test พิ มพ โปรแกรมที่ L8-1

L8.3 คอมไพล และอั ปโหลดโปรแกรมไปยั งหุ นยนต AT-BOT

L8.4 ต อสายมอเตอร ของล อหน าซ ายเข ากั บจุ ดต อมอเตอร ช อง 0

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

ON

MO

TO

R

BAT

TERY LE

VEL

13

1211

109

8

SERVO

PO

RT

7.2-9V BATT.

E2

RE

SET

+

- S

14

15PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

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

คํ าอธิ บายโปรแกรมในโปรแกรมทํ าการขั บมอเตอร ช อง 0,1, 2 และ 3

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

Page 90: AT-BOT Activity book

90Robo-Creator : AT-BOT activity book

L8.5 ต อสายมอเตอร ของล อหลั งซ ายเข ากั บจุ ดต อมอเตอร ช อง 1

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

ON

MO

TO

R

BAT

TERY LE

VEL

13

1211

109

8

SERVO

PO

RT

7.2-9V BATT.

E2

RE

SET

+

- S

14

15PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

L8.6 ต อสายมอเตอร ล อหลั งด านขวาเข ากั บจุ ดต อมอเตอร ช อง 2

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

ON

MO

TO

R

BAT

TERY LE

VEL

13

1211

109

8

SERVO

PO

RT

7.2-9V BATT.

E2

RE

SET

+

- S

14

15PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

Page 91: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 91

L8.7 ต อสายมอเตอร ล อหน าขวาเข ากั บจุ ดต อมอเตอร ช อง 3

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

ON

MO

TO

R

BAT

TERY LE

VEL

13

1211

109

8

SERVO

PO

RT

7.2-9V BATT.

E2

RE

SET

+

- S

14

15PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

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

Page 92: AT-BOT Activity book

92Robo-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!”); // แสดงข อความแจ งการดกสวิ ตช SW1sw1_press(); // รอจนกระทั่ งมี การกดสวิ ตช SW1

}void loop(){

forward(); // ขั บเคลื่ อนหุ นยนต ไปข างหน า}

คํ าอธิ บายโปรแกรม

เมื ่อโปรแกรมเริ ่มทํ างาน จะแสดงข อความที่ โมด ูล LCD แล วรอการกดสวิ ตช SW1 เมื ่อกดสว ิตช แล ว โปรแกรมจึ งเข ามาทํ างานภายในฟ งก ชั่ น setup แล ววนทํ างานภายในฟ งก ชั่ น loop เพื่ อขั บมอเตอร ให หุ นยนต เคลื่ อนที่ ไปข างหน าอย างต อเนื่ อง

เพิ่ มเติ ม ผู พั ฒนาโปรแกรมสามารถกํ าหนดกํ าลั งขั บของมอเตอร ได ตามความเหมาะสม โดยทั่ วไปจะกํ าหนดค าก ําล ังข ับมอเตอร ของท ุกล อให เท ากั น แต ถ าในกรณ ีที ่มอเตอร แต ละต ัวทํ างานได แตกต างก ัน ผู พ ัฒนาต องทดสอบปร ับค ากํ าลั งขั บของมอเตอร แต ละตั วให ไม เท ากั น ทั้ งนี้ เพื่ อให ได ค าที่ ทํ าให หุ นยนต เคลื่ อนที่ ได ดี ที่ สุ ดเท าที่ จะทํ าได

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

Page 93: AT-BOT Activity book

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 Pressและหุ นยนต AT-BOT เคลื่ อนที่ ไปข างหน าหลั งจากที่ กดสวิ ตช SW1

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

ขั้ นตอน

L9.2.1 สร างไฟล สเก็ ตช ของ Wiring ขึ้ นใหม ตั้ งชื่ อเป น robo_move_backward พิ มพ โปรแกรมที่ L9-2

L9.2.2 คอมไพล และอั ปโหลดโปรแกรมไปยั งหุ นยนต AT-BOT

L12.1.3 รั นโปรแกรม

ที่ โมดู ล LCD ของหุ นยนต AT-BOT แสดงข อความ SW1 Press และหุ นยนต AT-BOT เคลื่ อนท่ี ถอยหลั งหลั งจากที่ กดสวิ ตช SW1

#include <atx.h> // ผนวกไลบรารี หลั กvoid backward() // ฟ งก ชั่ นขั บเคลื่ อนหุ นยนต ถอยหลั ง{

motor(0,-40); // ขั บมอเตอร ของล อหน าซ ายให หมุ นกลั บหลั งด วยกํ าลั ง 40 %motor(1,-40); // ขั บมอเตอร ของล อหลั งซ ายให หมุ นกลั บหลั งด วยกํ าลั ง 40 %motor(2,-40); // ขั บมอเตอร ของล อหลั งขวาให หมุ นกลั บหลั งด วยกํ าลั ง 40 %motor(3,-40); // ขั บมอเตอร ของล อหน าขวาให หมุ นกลั บหลั งด วยกํ าลั ง 40 %

}void setup(){

lcd(“SW1 Press!”); // แสดงข อความแจ งการกดสวิ ตช SW1sw1_press(); // รอจนกระทั่ งมี การกดสวิ ตช SW1

}void loop(){

backward(); // ขั บเคลื่ อนหุ นยนต ถอยหลั ง}

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

Page 94: AT-BOT Activity book

94Robo-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 Pressและหุ นยนต AT-BOT เลี้ ยวซ ายด วยการหมุ นตั วหลั งจากที่ กดสวิ ตช SW1

#include <atx.h> // ผนวกไลบรารี หลั กvoid turn_left() // ฟ งก ชั่ นขั บเคลื่ อนหุ นยนต ให หมุ นตั วเลี้ ยวซ าย{

motor(0,-40); // ขั บมอเตอร ของล อหน าซ ายให หมุ นกลั บหลั งด วยกํ าลั ง 40 %motor(1,-40); // ขั บมอเตอร ของล อหลั งซ ายให หมุ นกลั บหลั งด วยกํ าลั ง 40 %motor(2,40); // ขั บมอเตอร ของล อหลั งขวาให หมุ นไปข างหน าด วยกํ าลั ง 40 %motor(3,40); // ขั บมอเตอร ของล อหน าขวาให หมุ นไปข างหน าด วยกํ าลั ง 40 %

}void setup(){

lcd(“SW1 Press!”); // แสดงข อความแจ งการดกสวิ ตช SW1sw1_press(); // รอจนกระทั่ งมี การกดสวิ ตช SW1

}void loop(){

turn_left(); // ขั บเคลื่ อนให หุ นยนต หมุ นตั วเลี้ ยวซ าย}

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

Page 95: AT-BOT Activity book

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); // ขั บมอเตอร ของล อหน าซ ายให หมุ นไปข างหน าด วยกํ าลั ง 40 %motor(1,40); // ขั บมอเตอร ของล อหลั งซ ายให หมุ นไปข างหน าด วยกํ าลั ง 40 %motor(2,-40); // ขั บมอเตอร ของล อหลั งขวาให หมุ นกลั บหลั งด วยกํ าลั ง 40 %motor(3,-40); // ขั บมอเตอร ของล อหน าด านขวาหมุ นกลั บหลั งด วยกํ าลั ง 40 %

}void setup(){

lcd(“SW1 Press!”); // แสดงข อความแจ งการดกสวิ ตช SW1sw1_press(); // รอจนกระทั่ งมี การกดสวิ ตช SW1

}void loop(){

turn_right(); // ขั บเคลื่ อนหุ นยนต หมุ นตั วเลี้ ยวขวา}

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

Page 96: AT-BOT Activity book

96Robo-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); // ขั บมอเตอร ของล อหน าซ ายให หมุ นไปข างหน าด วยกํ าลั ง 40 %motor(1,40); // ขั บมอเตอร ของล อหลั งซ ายให หมุ นไปข างหน าด วยกํ าลั ง 40 %motor(2,40); // ขั บมอเตอร ของล อหลั งขวาให หมุ นไปข างหน าด วยกํ าลั ง 40 %motor(3,40); // ขั บมอเตอร ของล อหน าขวาให หมุ นไปข างหน าด วยกํ าลั ง 40 %

}void setup(){

lcd(“SW1 Press!”); // แสดงข อความแจ งการดกสวิ ตช SW1sw1_press(); // รอจนกระทั่ งมี การกดสวิ ตช SW1

}void loop(){

forward(); // ขั บเคลื่ อนหุ นยนต ไปข างหน าsleep(2000); // หน วงเวลา 2 วิ นาที motor_stop(ALL); // หยุ ดการขั บเคลื่ อนหุ นยนต sleep(3000); // หน วงเวลา 3 วิ นาที

}

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

Page 97: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 97

การเร ียนรู ในล ําดั บต อมาหล ังจากการข ับเคลื่ อนหุ นยนต ได คื อ การอ านค าจากตั วตรวจจั บเพื่ อนํ ามากํ าหนดเป นเงื่ อนไขในการเคลื่ อนที่ ตั วตรวจจั บพื้ นฐานที่ สุ ดที่ ทํ าหน าที่ นี้ คื อ สวิ ตช (switch) ในบทนี้ จะกล าวถึ งการประยุ กต ใช งานแผงวงจรสวิ ตช ร วมกั บหุ นยนต AT-BOT เพื่ อนํ ามาใช ตรวจจั บการสั มผั สกั บสิ่ งกี ดขวางทํ าให หุ นยนต รั บรู ได ว า เคลื่ อนที่ ไปพบสิ่ งกี ดขวาง จากน้ั นประมวลผลเพื่ อกํ าหนดการเคลื่ อนที่ ให สามารถเคลื่ อนที่ พ นสิ่ งกี ดขวางไปได

อุ ปกรณ สํ าคั ญที่ ใช ในการเรี ยนรู นี้ คื อ แผงวงจรสวิ ตช มี วงจรและการทํ างานแสดงในรู ปที่ 7-1 เมื่ อสวิ ตช ถู กกดซึ่ งเที ยบได กั บการสั มผั สหรื อชนกั บสิ่ งกี ดขวาง สั ญญาณลอจิ กที่ เอาต พุ ตจะเปลี่ ยนจากลอจิ ก “1” เป น “0”จนกว าจะปล อยหรื อไม เกิ ดการชน สั ญญาณเอาต พุ ตจะเปลี่ ยนกลั บไปเป น “1” อี กครั้ ง

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

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

DATAR3220

R210k

R1510

LED1

S1สวิตช

ไฟแสดงผล

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

+V

สวิ ตช

จุ ดต อสั ญญาณ

ไฟแสดงผล

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

Page 98: AT-BOT Activity book

98Robo-Creator : AT-BOT activity book

การทดลองนี ้เป นการทดสอบการท ํางานของแผงวงจรสว ิตช ของหุ นยนต AT-BOT โดยแผงวงจรควบค ุม ATXจะอ านค าสถานะของการกดสว ิตช จากแผงวงจรสว ิตช ที ่ต อก ับพอร ต ADC0 (หร ือพอร ต 40) มาแสดงที ่โมดู ล LCD

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

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

ON

MO

TO

R

BAT

TERY LE

VEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SCL

1SDA

2RX1

3T

X1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

ADC

5

>>

USB

DATA

43

AD

C3

3210 4 5

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

#include <atx.h> // ผนวกไลบรารี หลั กvoid setup(){}void loop(){

lcd(“Switch1: %d “,in(40)); // อ านค าสถานะของแผงวงจรสว ิตช ที ่พอร ต ADC0/40 มาแสดงท่ี โมด ูล LCD}

Page 99: AT-BOT Activity book

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 อี กครั้ ง

Page 100: AT-BOT Activity book

100Robo-Creator : AT-BOT activity book

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

1. ในกรณี ที่ หุ นยนต ไม พบการชน หุ นยนต จะเคลื่ อนที่ ตรงไปข างหน าอย างต อเนื่ อง

2. ในกรณี ที่ หุ นยนต เกิ ดการชน จะมี การขั บเสี ยงเตื อนออกมา 1 ครั้ ง จากน้ั นเคลื่ อนที่ ถอยหลั งแล วเปลี่ ยนทิ ศทางการเคลื่ อนที่ มาทางซ าย แล วเคลื่ อนที่ ตรงต อไปเพื่ อหลบหลี กสิ่ งกี ดขวาง

ON

MO

TO

R

BATTERY LE

VEL

13

1211

109

8

SER

VO

POR

T

7.2-9V BATT.

E2

RESET

+

- S

1415

PC6

PC7

Cre

con

atore>>>>

troll

rboa

>

erd

R

>

48

50

SW

24

9SW

1AD

C7

KN

OB

TW

IUAR

T1

0SC

L1

SD

A2

RX1

3TX1

44

ADC

446

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

ADC

3

3210 4 5

ON

MO

TO

R

BATTERY LE

VEL

13

12

11

10

98

SERVO

PO

RT

7 .2 -9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART

1

0SCL

1SD

A2

RX1

3TX1

44

AD

C4

46

ADC

640

AD

C0

41

ADC

142

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

ON

MO

TO

R

BATTERY LE

VEL

1312

11

10

98

SERVO

PO

RT

7.2 -9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART

1

0SCL

1SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

ADC

14

2A

DC

2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

ON

MO

TO

R

BATTERY LE

VEL

1312

11

10

98

SERVO

PO

RT

7.2-9V BATT.E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART

10

SCL

1SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

ADC

14

2A

DC

2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

ON

MOTO

R

BATTERY LEVEL

13

12

11

10

9

8SERVO PO

RT

7.2-9

V BA

TT.

E2

RESET

+

-

S

14

15

PC6

PC7

Crec

onatore>

>>>

troll

r

boa

>e

rd

R>

48

50

SW

2

49

SW

1

ADC7

KNO

B

TWI

UART

1

0SCL

1SD

A2

RX13

T X1

44AD

C4

46

ADC6

40AD

C0

41

ADC 1

42

ADC2

START

45AD

C5

>>

USB

DA TA

43AD

C3

3

2

1

0

4

5

ON

MO

TO

R

BATTERY LE

VEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART

10

SCL

1SD

A2

RX1

3TX1

44

AD

C4

46

ADC

640

AD

C0

41

ADC

142

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

ON

MO

TO

R

BATTERY LE

VEL

13

1211

109

8

SER

VO

POR

T

7 .2 -9V BATT.

E2

RESET

+

- S

1415

PC6

PC7

Cre

con

atore>>>>

troll

rboa

>

erd

R

>

48

50

SW

24

9SW

1AD

C7

KN

OB

TW

IUAR

T1

0SC

L1

SD

A2

RX1

3TX1

44

ADC

446

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

ADC

3

3210 4 5

ขั้ นตอนL11.1 สร างไฟล สเก็ ตช ของ Wiring ขึ้ นใหม ตั้ งชื่ อเป น robo_bumper1 พิ มพ โปรแกรมที่ L11-1

L11.2 คอมไพล และอั ปโหลดโปรแกรมไปยั งหุ นยนต AT-BOT

L11.3 นํ าหุ นยนต มาวางบนพื้ น แล ววางกล องหรื อสิ่ งกี ดขวางเพื่ อใช ทดสอบการทํ างาน

L11.4 รั นโปรแกรม

เมื่ อเริ่ มต นการทํ างาน โปรแกรมจะแสดงข อความที่ โมดู ล LCD เป น Press SW1

L11.5 กดสวิ ตช SW1 ที่ หุ นยนต

หุ นยนต จะเคลื่ อนที่ ตรงไปข างหน า หากชนสิ่ งกี ดขวาง หุ นยนต จะเคลื่ อนที่ ถอยหลั ง แล วเปลี่ ยนทิ ศทางไปทางซ าย จากน้ั นเคลื่ อนที่ ตรงต อไป

Page 101: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 101

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

#include <atx.h> // ผนวกไลบรารี หลั ก#define POW 80 // กํ าหนดกํ าลั งขั บของมอเตอร คงที่ ที่ 80% ของกํ าลั งขั บสู งสุ ดchar mid; // กํ าหนดตั วแปรอ านสถานะของแผงวงจรสวิ ตช 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); // หน วงเวลาเพื่ อให หุ นยนต เลี้ ยวขวา}

Page 102: AT-BOT Activity book

102Robo-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 ตั ว (จบ)

Page 103: AT-BOT Activity book

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

MO

TO

R

BATT

ERY LE

VEL

1312

1110

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

1415

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SCL

1SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 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

Page 104: AT-BOT Activity book

104Robo-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 อี กครั้ ง

Page 105: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 105

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

1. ในกรณี ที่ หุ นยนต ไม พบการชน หุ นยนต จะเคลื่ อนที่ ไปข างหน าอย างต อเนื่ อง

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

ON

MO

TO

R

BATTERY

LEVEL

13

12

11

10

98

SER

VO

PORT

7.2 -9V BATT.

E2

RES

ET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0S

CL1

SD

A2

RX

13

TX1

44

AD

C4

46

AD

C6

40

ADC0

41

AD

C1

42

AD

C2

START

45AD

C5

>>

USB

DATA

43AD

C3

3210 4 5

ON

MO

TO

R

BAT

TERY

LEVEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V B ATT.

E2

RES

ET

+

- S

14

15

PC

6PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1A

DC7

KNO

B

TW

IU

ART1

0S

CL1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42AD

C2

START

45AD

C5

>>

USB

DAT

A

43

ADC3

3210 4 5

ON

MOTO

R

BA

TTERY LE

VEL

13

12

11

10

98

SERVO

PORT

7.2-9V BATT.

E2

RES

ET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SCL

1SD

A2

RX1

3TX

1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C142

AD

C2

START

45

AD

C5

>>

US

BD

ATA

43

AD

C3

3210 4 5

ON

MO

TO

R

BATTER

Y LEV

EL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RES

ET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1ADC

7KNO

B

TW

IU

ART1

0S

CL1

SD

A2

RX1

3TX1

44AD

C4

46

AD

C6

40

AD

C0

41AD

C1

42

ADC2

START

45

AD

C5

>>

USB

DAT

A

43

AD

C3

3210 4 5

ON

MO

TO

R

BATTERY

LEVEL

13

12

11

10

98

SER

VO

PORT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SCL

1SD

A2

RX

13

TX1

44

AD

C4

46AD

C6

40

ADC0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DATA

43AD

C3

3210 4 5

ON

MO

TOR

BATTERY LEVEL

13

12

11

10

9

8

SERVO PORT

7.2- 9V BATT .

E2

RESET

+-S

14

15

PC6

PC7

Cre

con

atore>

>>>

troll

r

boa

>

e

rd

R

>

48

50

SW2

49

SW1

ADC7

KNOB

TWI

UART1

0SCL

1SDA

2RX1

3TX1

44AD

C4

46ADC6

40AD

C0

41ADC1

42AD

C2

START

45ADC5

>>

USBDATA

43ADC3

3

2

1

0

4

5

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

ON

MO

TO

R

BAT

TERY LE

VEL

13

12

11

10

98

SERV

O P

ORT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42AD

C2

START

45

AD

C5

>>

US

BD

AT

A

43

AD

C3

3210 4 5

ON

MO

TO

R

BAT

TERY L

EVEL

13

12

11

10

98

SERV

O P

ORT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42AD

C2

START

45

AD

C5

>>

US

BD

AT

A

43

AD

C3

3210 4 5

ON

MOTO

R

BA

TTE

RY LE

VEL

13

12

11

10

98

SERVO

PORT

7.2-9V BAT T.

E2

RESE

T

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART

1

0SCL

1SD

A2

RX1

3TX

1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

ST ART

45

AD

C5

>>

USB

DAT

A

43AD

C3

3210 4 5

ON

MO

TO

R

BA

TTERY LE

VE

L13

12

11

10

98

SERVO

PO

RT

7.2-9V BAT T.

E2

RESE

T

+

- S

14

15

PC

6PC7

Cre

con

atore>>>>

troll

rboa

>

erd

R

>

4850

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SDA

2RX

13

TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

ST ART

45AD

C5

>>

USB

DAT

A

43

AD

C3

3210 4 5

ON

MO

TO

R

BAT

TERY LE

VEL

13

12

11

10

98

SERV

O P

ORT

7.2-9V BATT.

E2

RESE

T

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1ADC

7KN

OB

TW

IUA

RT1

0SC

L1

SDA

2RX1

3TX1

44

AD

C4

46AD

C6

40AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

US

BD

ATA

43

AD

C3

3210 4 5

ON

MOTO

R

BATTERY LEVEL

13

12

11

10

9

8SERVO PORT

7 .2-9V

BATT

.

E2

RESET

+

-

S

14

15

PC6

PC 7

Crec

onatore>

>>>

troll

r

boa

>e

rd

R>

48

50

SW

2

49

S W1

ADC7

KNOB

TWI

UART1

0SCL

1SD

A2

RX13

TX1

44ADC 4

46AD

C6

40ADC0

41ADC1

42ADC2

STAR

T

45ADC5

>>

U SBDATA

43A D

C3

3

2

1

0

4

5

Page 106: AT-BOT Activity book

106Robo-Creator : AT-BOT activity book

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

ON

MO

TOR

BAT

TERY LE

VEL

13

12

11

10

98

SERV

O P

ORT

7.2-9V B ATT.

E2

RESE

T

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SD

A2

RX

13

TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DAT

A

43

AD

C3

3210 4 5

ON

MO

TO

R

BAT

TERY LE

VEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESE

T

+- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART

1

0SCL

1SD

A2

RX

13

TX

1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DAT

A

43AD

C3

3210 4 5O

N

MO

TO

R

BA

TTE

RY LE

VE

L13

12

11

10

98 S

ERVO

PO

RT

7.2-9V BATT.

E2

RESE

T

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollrboa

>

erd

R

>

4850

SW

249

SW

1AD

C7

KN

OB

TW

IUART1

0SC

L1

SDA

2RX1

3TX

1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

US

BD

ATA

43

AD

C3

3210 4 5O

N

MO

TOR

BAT

TERY LE

VEL

13

12

11

10

98

SERVO

PORT

7.2-9V BATT.

E2

RESE

T

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KNO

B

TW

IU

ART1

0SC

L1

SDA

2RX

13

TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DAT

A

43

AD

C3

3210 4 5

ON

MOTO

R

BA

TTE

RY LE

VE

L13

12

11

10

98 S

ERVO

PO

RT

7.2-9V BAT T.

E2

RESE

T

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollrboa

>

erd

R

>

4850

SW

249

SW

1AD

C7

KN

OB

TW

IUA

RT1

0SC

L1

SDA

2RX1

3TX

1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

US

BD

ATA

43

AD

C3

3210 4 5

ON

MOTOR

BATTERY LEVEL

13

12

11

109

8

SERVO PORT

7.2-9

V B

ATT.

E2

RES ET

+

-S

14

15

PC6

PC7

Crec

onatore>

>>>

troll

r

boa

>e

rd

R >

48

50

SW2

49

SW1

ADC7

KNOB

TWI

UART1

0SC L 1

SDA2

R X1 3TX1

44ADC4

46ADC6

40ADC0

41ADC1

42ADC2

START

45ADC5

>>

USBDATA

43ADC3

3

2

1

0

4

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 จะเปลี่ ยนทิ ศทางการเคลื่ อนที่ เพื่ อหลบหลี กสิ่ งกี ดขวางได

Page 107: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 107

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

#include <atx.h> // ผนวกไลบรารี หลั ก#define POW 80 // กํ าหนดกํ าลั งขั บของมอเตอร คงที่ ที่ 80 % ของกํ าลั งขั บสู งสุ ดchar left,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); // หน วงเวลาเพื่ อให หุ นยนต เลี้ ยวขวา}

Page 108: AT-BOT Activity book

108Robo-Creator : AT-BOT activity book

void setup(){ lcd(“SW1 Press!”); // แสดงข อความแจ งให กดสวิ ตช SW1 sw1_press(); // รอจนกระทั่ งสวิ ตช SW1 ถู กกด}void loop(){ left = in(40); // อ านค าสถานะสวิ ตช ด านซ ายมาเก็ บที่ ตั วแปร left right = in(41); // อ านค าสถานะสวิ ตช ด านขวามาเก็ บที่ ตั วแปร right if(left==1 && right==1) // ตรวจสอบว า แผงวงจรสวิ ตช ทั้ งสองตั วไม ถู กกด (ไม มี การชนเกิ ดขึ้ น) { forward(1); // ถ าไม มี การกดสวิ ตช ใดๆ หุ นยนต เคลื่ อนที่ ตรงไปข างหน าภายในช วงเวลาสั้ นๆ } else if(left==0 && right==1) // ตรวจสอบแผงวงจรสวิ ตช ด านซ ายถู กกดเพี ยงตั วเดี ยวหรื อไม

// (เกิ ดการชนสิ่ งกี ดขวางทางด านซ าย) { beep(); // ถ าใช ขั บเสี ยง “ติ้ ด” 1 ครั้ ง backward(500); // ถอยหลั ง 0.5 วิ นาที turn_right(800); // หมุ นตั วเลี้ ยวขวา 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 ตั ว (ม ีต อ)

Page 109: AT-BOT Activity book

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 ตั ว (จบ)

Page 110: AT-BOT Activity book
Page 111: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 111

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

ดั งนั ้นในการเรี ยนรู จึ งควรพยายามทํ าความเข าใจและทํ าการทดลองไปตามลํ าด ับ เนื่ องจากเน้ื อหาทั้ งหมดมี ความเกี่ ยวข องกั น และต องใช ความรู จากการทดลองก อนหน ามาร วมด วย

8.1 คุ ณสมบั ติ ของแผงวงจรตรวจจั บแสงสะท อนเป นแผงวงจรที่ ใช ในการตรวจสอบการสะท อนของแสง โดยบนแผงวงจรประกอบด วย LED สี แดงแบบ

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

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

Page 112: AT-BOT Activity book

112Robo-Creator : AT-BOT activity book

10k

SFH310

510

+V

GND

OUT

10k510

+V

GND

OUT

LED

SFH310

LED

ร ูปที ่ 8-1 การท ํางานของแผงวงจรตรวจจ ับแสงสะท อนเมื ่อนํ ามาใช ในการตรวจจ ับเส นด ําและพื ้นขาว

Page 113: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 113

8.2 การเตรี ยมความพร อมก อนพั ฒนาโปรแกรมสํ าหรั บหุ นยนต ตรวจจั บเส น8.2.1 เตรี ยมอุ ปกรณ สํ าหรั บสร างสนามทดสอบ

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

สํ าหรั บสนามทดสอบตั วอย างที่ ใช ในหนั งสื อเล มนี้ ท ําจากแผ นพลาสติ กลู กฟู ก (หรื อชื่ อเรี ยกกั นทั่ วไปว าแผ นฟ วเจอร บอร ด) มาติ ดเทปสี ดํ า โดยมี อุ ปกรณ และเครื่ องมื อที่ ใช ดั งนี้

1. แผ นพลาสติ กลู กฟู ก (หรื อชื่ อเรี ยกกั นทั่ วไปว า แผ นฟ วเจอร บอร ด) สี ขาว 1 แผ น ขนาด 90 x60 เซนติ เมตร อาจเล็ กใหญ กว านี้ ได ขอให มี พื้ นที่ มากพอสํ าหรั บการเคลื่ อนที่ ของหุ นยนต AT-BOT

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

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

Page 114: AT-BOT Activity book

114Robo-Creator : AT-BOT activity book

8.2.2 ติ ดตั้ งแผงวงจรตรวจจั บแสงสะท อนแก หุ นยนต AT-BOT

จ ุดประสงค ของการใช งานแผงวงจรตรวจจ ับแสงสะท อนในหุ นยนต AT-BOT ค ือ น ํามาตรวจจ ับพื ้นและเส นด ังนั ้นจ ึงต องต ิดตั ้งแผงวงจรตรวจจั บนี ้ไว ที ่ใต ฐานหุ นยนต ม ีขั ้นตอนดั งนี ้

(1) ย ึดแผงวงจรตรวจจั บแสงสะท อน 3 ตั วเข าก ับแท งต อ 12 ร ูด วยสกร ู 3x10 มม. และนอต 3 มม.โดยระหว างแผงวงจรก ับแท งต อให นํ าเสารองพลาสต ิก 3 มม. คั ่นเอาไว

Page 115: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 115

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

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

Page 116: AT-BOT Activity book

116Robo-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 มากเก ินไป

Page 117: AT-BOT Activity book

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 เซนติ เมตร

Page 118: AT-BOT Activity book

118Robo-Creator : AT-BOT activity book

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

ต อสายจากพอร ต ADC1 เข ากั บแผงวงจรตรวจจั บแสงสะท อนใต ฐานหุ นยนต ด านหน าตรงกลาง

ต อสายจากพอร ต ADC2 เข ากั บแผงวงจรตรวจจั บแสงสะท อนใต ฐานหุ นยนต ด านหน ามุ มขวา

ON

MO

TO

R

BA

TTERY LE

VEL

13

12

11

10

98

SERV

O P

ORT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SCL

1SD

A2

RX1

3TX

1

44

AD

C4

46

ADC

640

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DAT

A

43

AD

C3

3210 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

Page 119: AT-BOT Activity book

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

MO

TO

R

BA

TTERY LE

VEL

13

12

11

10

98

SER

VO

PO

RT

7.2-9V BATT.

E2

RES

ET

+

- S

14

15

PC6

PC7

Cre

con

atore>

>>>

trollr

boa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SCL

1SD

A2

RX

13

TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

AD

C1

42

AD

C2

START

45

AD

C5

>>

USB

DAT

A

43

AD

C3

3210 4 5

Page 120: AT-BOT Activity book

120Robo-Creator : AT-BOT activity book

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

แผงวงจรตรวจจั บทั ้ง 3 ช ุดควรอ านค าได ใกล เค ียงก ัน ในขั้ นตอนน้ี จากการทดสอบได ค าเฉลี ่ยประมาณ 100

ON

MO

TO

R

BATTERY LE

VEL

13

12

1110

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC

6PC7

Cre

con

atore>

>>>

troll

rboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

AR

T1

0SC

L1

SD

A2

RX1

3TX1

44

AD

C4

46

AD

C6

40AD

C0

41

ADC1

42

AD

C2

START

45

ADC5

>>

USB

DAT

A

43

AD

C3

3210 4 5

L10.6 คํ านวณหาค าอ างอิ งที่ ใช ในการแยกแยะพื้ นสนามสี ขาวกั บเส นสี ดํ าของสนาม ดั งนี้

ค าอ างอิ ง = (ค าการสะท อนแสงที่ ได จากพื้ นสนามสี ขาว + ค าการสะท อนแสงที่ ได จากเส นสี ดํ า) / 2

= (900+100) / 2 = 500

อย างไรก็ ตาม ในการใช งานจริ งอาจกํ าหนดค าให กว างกว านี้ ได แต ควรอยู ในช วง 100 ถึ ง 900 แต ไม ควรเลื อกค าที่ ใกล กั บ 100 และ 900 มากเกิ นไป สํ าหรั บการยกตั วอย างต อจากน้ี ไปจะยึ ดค าอ างอิ งไว ที่ 500

Page 121: AT-BOT Activity book

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 จะเคลื ่อนที ่อยู ภายในกรอบเส นส ีดํ า โดยเมื ่อแผงวงจรจ ับแสงสะท อนพบเส นสี ด ํา ไมโครคอนโทรลเลอร จะควบค ุมให หุ นยนต ถอยหล ัง แล วเปลี ่ยนท ิศทางการเคลื ่อนที ่ จะม ีล ักษณะคล ายๆ ก ับการหลบหล ีกวั ตถุ แบบสั มผั ส หากแต เปลี่ ยนจากการตรวจจั บการชนมาเป นการตรวจจั บเส นสี ดํ าและพื้ นสี ขาวแทน

Page 122: AT-BOT Activity book

122Robo-Creator : AT-BOT activity book

#include <atx.h> // ผนวกไลบรารี หลั ก#define POW 80 // กํ าหนดกํ าลั งขั บของมอเตอร คงที่ ที่ 80 % ของกํ าลั งขั บสู งสุ ด#define REF 500 // กํ าหนดค าอ างอิ งในการเปรี ยบเที ยบเส นและพื้ นสนามunsigned int left,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); // หน วงเวลาเพื่ อให หุ นยนต เลี้ ยวขวา}

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

Page 123: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 123

void setup(){

lcd(“SW1 Press!”); // แสดงข อความแจ งผู ใช งานให กดสวิ ตช SW1sw1_press(); // รอจนกระทั่ งสวิ ตช SW1 ถู กกด

}void loop(){

left = analog(0); // อ านค าอะนาลอกจากตั วตรวจจั บด านซ ายมาเก็ บที่ ตั วแปร leftright = analog(2); // อ านค าอะนาลอกจากตั วตรวจจั บด านขวามาเก็ บที่ ตั วแปร rightif(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 (ม ีต อ)

Page 124: AT-BOT Activity book

124Robo-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 ตั วก็ ได

หมายเหต ุ ค าอ างอิ ง REF สํ าหรั บเปรี ยบเที ยบเส นและพื้ นสนามในการทดลองนี้ คื อ 500 ได มาจากการทดลองที่ 14ผู พั ฒนาอาจได ค าที่ แตกต างออกไป ทั้ งนี้ ขึ้ นอยู กั บป จจั ยภายนอกอื่ นๆ อาทิ ปริ มาณแสงสว างโดยรอบสนามทดสอบซึ่ งมาจากดวงอาทิ ตย , หลอดไฟแบบไส หรื อแหล งกํ าเนิ ดแสงอื่ นๆรวมถึ งระยะห างจากตั วตรวจจั บถึ งพื้ นสนาม

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

Page 125: AT-BOT Activity book

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 องศา

Page 126: AT-BOT Activity book

126Robo-Creator : AT-BOT activity book

#include <atx.h> // ผนวกไลบรารี หลั ก#define POW 80 // กํ าหนดกํ าลั งขั บของมอเตอร คงที่ ที่ 80 % ของกํ าลั งขั บสู งสุ ด#define REF 500 // กํ าหนดค าอ างอิ งในการเปรี ยบเที ยบเส นและพื้ นสนามunsigned int left,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); // หน วงเวลาเพื่ อให หุ นยนต เลี้ ยวขวา}

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

Page 127: AT-BOT Activity book

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 เคลื ่อนที ่ในขอบเขตแบบสลั บฟ นปลา (ม ีต อ)

Page 128: AT-BOT Activity book

128Robo-Creator : AT-BOT activity book

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

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.4 เริ่ มต นรั นโปรแกรม

ที่ โมดู ล LCD แสดงข อความแจ งให กดสวิ ตช SW1 ที่ แผงวงจรควบคุ ม ATX ของหุ นยนต AT-BOT เพื่ อสั่ งให หุ นยนต เคลื่ อนที่

L16.5 กดสวิ ตช SW1 ของหุ นยนต AT-BOT สั งเกตการเคลื่ อนที่ ของหุ นยนต

หุ นยนต AT-BOT จะเคลื ่อนที ่ตรงอย างต อเนื ่อง จนพบเส น ก ็จะหม ุนตั วเลี ้ยวทํ ามุ มประมาณ 90 องศา จากนั ้นเคลื่ อนที่ ตรงอี กครั้ ง จนพบเส นอี กด านหนึ่ ง ก็ จะหมุ นตั วเล้ี ยวแล วเคลื่ อนที่ ตรงกลั บไปอี กด านหนึ่ งในลั กษณะซิ กแซกไปมาหรื อสลั บฟ นปลา โดยหุ นยนต จะเคลื่ อนที่ อยู ระหว างเส นสี ดํ าทั้ ง 2 ฝ ง ให ผู พั ฒนาโปรแกรมสั งเกตว าการเคลื่ อนที่ และมุ มในการเลี้ ยวเพื่ อทิ ศทางของหุ นยนต เหมาะสมแล วหรื อไม ถ ายั งไม สมบู รณ เพี ยงพอ ผู พั ฒนาโปรแกรมสามารถปรั บค าเวลาในการหน วงสํ าหรั บการเลี้ ยวภายในโปรแกรมให เหมาะสม จนกระทั่ งการทํ างานของหุ นยนต เป นที่ น าพอใจ

Page 129: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 129

หล ังจากเร ียนรู และทดลองการตรวจจ ับเส นจากการทดลองที ่ 15 และ 16 แล ว ต อไปเป นการปฏ ิบ ัต ิภาระก ิจหล ักประการหนึ ่งของหุ นยนต อั ตโนมั ติ นั ่นคื อ การเคลื ่อนที ่ตามเส น ในการทดลองนี ้เป นการควบค ุมหุ นยนต AT-BOTให เคลื ่อนที ่ตามเส นส ีดํ าและม ีเส นต ัด 2 จ ุดที ่กึ ่งกลางตามร ูปที ่ L17 -1 โดยใช แผงวงจรตรวจจ ับแสงสะท อน 2 ต ัวที ่ต ิดตั้ งใต ฐานหุ นยนต ด านหน าซ ายและขวา สํ าหรั บตั วตรวจจั บที ่อยู ตรงกลางจะถอดออกหรื อไม ก็ ได เงื่ อนไขในการกระทํ าภาระกิ จน้ี มี ด ังนี ้

1. หุ นยนต ต องเคลื่ อนที่ ตามเส นสี ดํ าที่ กํ าหนด

2. เมื่ อหุ นยนต พบเส นตั ดจะต องหยุ ดรอที่ จุ ดตั ดเป นเวลา 3 วิ นาที แล วจึ งเคลื่ อนที่ ต อไป

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

Page 130: AT-BOT Activity book

130Robo-Creator : AT-BOT activity book

หลั กการพื้ นฐานของหุ นยนต เคลื่ อนที่ ตามเส นแบบใช ตั วตรวจจั บเส น 2 ตั วหั วใจหล ักของหุ นยนต เคลื่ อนที่ ตามเส นคื อ ควบคุ มให หุ นยนต เคลื ่อนที ่โดยที่ ต ัวตรวจจั บเส นทั ้งสองตั วอยู

ในตํ าหน งที่ คร อมเส น ดั งนั้ นจะเกิ ดเหตุ การณ ขึ้ น 4 กรณี ซึ่ งนํ ามาใช กํ าหนดเงื่ อนไขของการทํ างานได ดั งนี้

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

ตํ าแหน งของตั วตรวจจั บเส นด านซ าย อยู บริ เวณพื้ นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตํ าแหน งของตั วตรวจจั บเส นด านขวา อยู บริ เวณพื้ นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

การควบคุ มหุ นยนต เมื่ อพบเหตุ การณ นี้ ควรตอบสนองให หุ นยนต เคลื่ อนที่ ตรงไปข างหน าแล วหน วงเวลาในการเคลื่ อนที่ ช วงสั้ นๆ

Page 131: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 131

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

ตํ าแหน งของตั วตรวจจั บเส นด านซ าย อยู บนเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตํ าแหน งของตั วตรวจจั บเส นด านขวา อยู บริ เวณพื้ นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

การควบคุ มหุ นยนต เมื่ อพบเหต ุการณ นี ้ ควรตอบสนองให หุ นยนต เลี ้ยวซ ายแล วหน วงเวลาในการเคลื่ อนที่ ช วงสั้ นๆ เพื่ อให หุ นยนต เคลื่ อนที่ กลั บไปคร อมเส น

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

ตํ าแหน งของตั วตรวจจั บเส นด านซ าย อยู บริ เวณพื้ นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตํ าแหน งของตั วตรวจจั บเส นด านขวา อยู บนเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

การควบค ุมหุ นยนต เมื ่อพบเหตุ การณ นี ้ ควรตอบสนองให หุ นยนต เลี ้ยวขวา แล วหน วงเวลาในการเคลื่ อนที่ ช วงสั้ นๆ เพื่ อให หุ นยนต เคลื่ อนที่ กลั บไปคร อมเส น

Page 132: AT-BOT Activity book

132Robo-Creator : AT-BOT activity book

กรณี ที่ 4 หุ นยนต พบเส นตั ดหรื ออาจเป นทางแยก

ตํ าแหน งของตั วตรวจจั บเส นด านซ าย อยู บนเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตํ าแหน งของตั วตรวจจั บเส นด านขวา อยู บนเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

การควบค ุมหุ นยนต เมื ่อพบเหตุ การณ นี้ ผู พั ฒนาอาจเลื อกให หุ นยนต เคลื ่อนที่ ตรง,เลี้ ยวซ าย ,เลี้ ยวขวา,หยุ ด หรื อถอยหลั งได ตามต องการ ขึ้ นอยู กั บเป าหมายในการทํ าภาระกิ จ

Page 133: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 133

#include <atx.h> // ผนวกไลบรารี หลั ก#define POW 80 // กํ าหนดกํ าลั งขั บของมอเตอร คงที่ ที่ 80 % ของกํ าลั งขั บสู งสุ ด#define REF 500 // กํ าหนดค าอ างอิ งในการเปรี ยบเที ยบเส นและพื้ นสนามunsigned int left,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); // หน วงเวลาเพื่ อให หุ นยนต เลี้ ยวขวา}

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

Page 134: AT-BOT Activity book

134Robo-Creator : AT-BOT activity book

void pause() // ฟ งก ชั่ นหยุ ดการขั บเคลื่ อนหุ นยนต {

motor_stop(ALL); // หยุ ดขั บมอเตอร ทุ กช องพร อมกั น}void setup(){

lcd(“SW1 Press!”); // แสดงข อความแจ งผู ใช งานให กดสวิ ตช SW1sw1_press(); // รอจนกระทั่ งสวิ ตช SW1 ถู กกด

}void loop(){

left = analog(0); // อ านค าจากตั วตรวจจั บด านซ ายมาเก็ บที่ ตั วแปร leftright = analog(2); // อ านค าจากตั วตรวจจั บด านขวามาเก็ บที่ ตั วแปร rightif(left>REF && right>REF) // ตรวจสอบว า ตั วตรวจจั บทั้ งสองด านไม พบเส น ใช หรื อไม {

forward(1); // ถ าไม พบเส น หุ นยนต เคลื่ อนที่ ตรงไปข างหน าภายในช วงเวลาสั้ นๆ}else if(left<REF && right>REF) // ตรวจสอบว า ตั วตรวจจั บเส นด านซ ายพบเส นเพี ยงตั วเดี ยวหรื อไม {

turn_left(10); // ถ าพบเส น ให เลี้ ยวซ าย 0.01 วิ นาท ีเพื่ อพยายามเคลื่ อนที่ กลั บไปคร อมเส น}else if(left>REF && right<REF) // ตรวจสอบว า ตั วตรวจจั บด านขวาพบเส นเพี ยงตั วเดี ยวหรื อไม {

turn_right(10); // ถ าพบเส น ให เลี้ ยวขวา 0.01 วิ นาที เพื่ อพยายามเคลื่ อนที่ กลั บไปคร อมเส น}else if(left<REF && right<REF) // ตรวจสอบว า ตั วตรวจจั บเส นทั้ งสองด านพบเส นหรื อไม {

pause(); // ถ าพบ แสดงว า เคลื่ อนที่ มาถึ งเส นตั ดแล ว ให หยุ ดการขั บเคลื่ อนหุ นยนต sleep(3000); // หน วงเวลา 3 วิ นาที สํ าหรั บหยุ ดการขั บเคลื่ อนหุ นยนต forward(300); // หุ นยนต เคลื่ อนที่ ตรงไปข างหน า 0.3 วิ นาที เพื่ อข ามเส นตั ด

}}

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

Page 135: AT-BOT Activity book

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 ไปวางคร อมเส นสี ดํ าในตํ าแหน งที่ ไม ใช จุ ดตั ด

Page 136: AT-BOT Activity book

136Robo-Creator : AT-BOT activity book

L17.4 เริ่ มต นรั นโปรแกรม

ที ่โมด ูล LCD ของหุ นยนต แสดงข อความ Press SW1 แจ งให กดสว ิตช SW1 เพื ่อสั ่งให หุ นยนต เคลื ่อนที ่

L17.5 กดสวิ ตช SW1 ที่ หุ นยนต AT-BOT สั งเกตการเคลื่ อนที่ ของหุ นยนต

หุ นยนต จะเคลื่ อนท่ี ตามเส นสี ดํ า เมื่ อพบเส นตั ด จะหยุ ดนิ่ งประมาณ 3 วิ นาที หลั งจากนั้ นจึ งเคลื่ อนท่ี ตามเส นต อไป

Page 137: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 137

ในการทดลองนี้ เป นการต อยอดจากการทดลองที่ 17 ด วยการเพิ่ มแผงวงจรตรวจจั บแสงสะท อนเพื ่อนํ ามาใช งานเป นตั วตรวจจั บเส นตั วที่ 3 โดยติ ดต้ั งเข าที่ ตํ าแหน งกลางระหว างตั วตรวจจั บเส นด านซ ายและขวา (หากในการทดลองที ่ 17 ไม ได ถอดแผงวงจรตรวจจั บแสงสะท อนตั วกลางที่ ต ิดต้ั งอยู ใต ฐานหุ นยนต ออก ก็ จะใช งานต อในการทดลองนี้ ได เลย) ทั้ งนี้ เพื่ อช วยให หุ นยนต AT-BOT สามารถตรวจจั บเส นตั ดหรื อทางแยกได ดี ยิ่ งขึ้ น สํ าหรั บสนามทดสอบนั้ นจะใช แบบเดี ยวกั บการทดลองที่ 17 รวมถึ งการเชื่ อมต อทางฮาร ดแวร ด วย ที ่เพิ ่มเติ มเข ามาคื อ ต องต อสายจากแผงวงจรตรวจจั บแสงสะท อนตั วที่ ติ ดต้ั งไว ตรงกลางของฐานหุ นยนต มาเข าที่ ช อง ADC1

เงื่ อนไขในการทํ างานของหุ นยนต AT-BOT ในการทดลองน้ี คื อ

1. หุ นยนต ต องเคลื่ อนที่ ตามเส นสี ดํ าที่ กํ าหนด

2. เมื่ อหุ นยนต พบเส นตั ดจะต องหยุ ดรอที่ จุ ดตั ดเป นเวลา 3 วิ นาที แล วจึ งเคลื่ อนที่ ต อไป

หลั กการพื้ นฐานของหุ นยนต เคลื่ อนที่ ตามเส นแบบใช ตั วตรวจจั บเส น 3 ตั วหั วใจหลั กของหุ นยนต เคลื่ อนที่ ตามเส นคื อ ควบคุ มให หุ นยนต เคลื่ อนที่ โดยที่ ตั วตรวจจั บเส นสองตั วทาง

ด านซ ายและขวาอยู ในตํ าหน งที่ คร อมเส น ส วนตั วตรวจจั บเส นตรงกลางจะอยู บนเส น ดั งนั้ นจะเกิ ดเหตุ การณ ขึ้ นทั้ งหมด 6 กรณี ซึ่ งสามารถนํ ามาใช กํ าหนดเงื่ อนไขของการทํ างานได ดั งนี้

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

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบพื้ นสนามสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบพื้ นสนามสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

การควบคุ มหุ นยนต เมื่ อพบเหตุ การณ นี้ ค ือ ควบคุ มให หุ นยนต เคลื ่อนที ่ตรงไปข างหน า แล วหน วงเวลาในการเคลื่ อนที่ ช วงสั้ นๆ

Page 138: AT-BOT Activity book

138Robo-Creator : AT-BOT activity book

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

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบพื้ นสนามสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบพื้ นสนามสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

การควบคุ มหุ นยนต เมื่ อพบเหตุ การณ นี้ คื อ ควบคุ มให หุ นยนต เลี้ ยวซ าย แล วหน วงเวลาในการเคลื่ อนที่ ช วงสั้ นๆ เพื่ อให หุ นยนต เคลื่ อนที่ กลั บไปคร อมเส น

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

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบพื้ นสนามสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบพื้ นสนามสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

เมื่ อพบเหต ุการณ นี้ ต องควบคุ มให หุ นยนต เลี ้ยวขวา แล วหน วงเวลาในการเคลื่ อนที่ ช วงสั้ นๆ เพื่ อให หุ นยนต เคลื่ อนที่ กลั บไปคร อมเส น

Page 139: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 139

กรณี ที่ 4 หุ นยนต พบทางแยกด านซ าย

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบพื้ นสนามสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

เมื่ อพบเหตุ การณ นี้ ผู พั ฒนาอาจเลื อกสั่ งให หุ นยนต เคลื่ อนที่ ตรงไปข างหน า,เลี้ ยวซ าย , เลี้ ยวขวา,หยุ ดหรื อถอยหลั งได ตามต องการ ขึ้ นอยู กั บเป าหมายในการทํ าภาระกิ จ

กรณี ที่ 5 หุ นยนต พบทางแยกด านขวา

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบพื้ นสนามสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบเส นสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

เมื่ อพบเหตุ การณ นี้ ผู พั ฒนาอาจเลื อกสั่ งให หุ นยนต เคลื่ อนที่ ตรงไปข างหน า,เลี้ ยวซ าย , เลี้ ยวขวา,หยุ ดหรื อถอยหลั งได ตามต องการ ขึ้ นอยู กั บเป าหมายในการทํ าภาระกิ จ

Page 140: AT-BOT Activity book

140Robo-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)

Page 141: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 141

#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); // หน วงเวลาเพื่ อให หุ นยนต เลี้ ยวขวา}

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

Page 142: AT-BOT Activity book

142Robo-Creator : AT-BOT activity book

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

void pause() // ฟ งก ชั่ นหยุ ดการขั บเคลื่ อนหุ นยนต { motor_stop(ALL); // หยุ ดขั บมอเตอร ทุ กช องพร อมกั น}void setup(){ lcd(“SW1 Press!”); // แสดงข อความแจ งผู ใช งานให กดสวิ ตช SW1 sw1_press(); // รอจนกระทั่ งสวิ ตช SW1 ถู กกด}void loop(){

left = analog(0); // อ านค าจากตั วตรวจจั บเส นด านซ ายมาเก็ บที่ ตั วแปร leftmid = analog(1); // อ านค าจากตั วตรวจจั บเส นตรงกลางมาเก็ บที่ ตั วแปร midright = analog(2); // อ านค าจากตั วตรวจจั บเส นด านขวามาเก็ บที่ ตั วแปร rightif(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 วิ นาที เพื่ อข ามเส นตั ด

}

Page 143: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 143

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

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 วิ นาที เพื่ อข ามเส นตั ด

Page 144: AT-BOT Activity book

144Robo-Creator : AT-BOT activity book

บทสรุ ปเพิ่ มเติ มจากการทดลองที่ 17 และ 18 การควบคุ มหุ นยนต ให เคลื่ อนที่ ตามเส นใช หลั กการเดี ยวกั นและมี ภาระกิ จ

เหมื อนกั น ความแตกต างอยู ที่ จํ านวนของตั วตรวจจั บเส น ทั้ งนี้ เป นเพราะสนามทดสอบไม มี ความซั บซ อนมากเกิ นไป การใช งานตั วตรวจจั บเส นเพี ยง 2 ตั วจึ งรองรั บได ทว าในกรณี ที่ สนามทดสอบมี ความซั บซ อนมากขึ้ น เช น มี ทางแยกซ ายหรื อทางแยกขวา การใช ตั วตรวจจั บเส น 3 ตั วจะให ผลลั พธ ในการวิ เคราะห เส นทางได แม นยํ ากว าพิ จารณากรณี เปรี ยบเที ยบต อไปนี้

(1) กรณี มี ทางแยกซ าย(1.1) เมื่ อใช ตั วตรวจจั บเส น 2 ตั ว

พบว า ตั วตรวจจั บเส นด านซ ายจะพบเส นเพี ยงตั วเดี ยว ทํ าให สรุ ปไม ได ว า ขณะนี้ หุ นยนต กํ าลั งเคลื่ อนที่ พ นจากเส นไปทางขวาหรื อเคลื่ อนที่ พบทางแยกซ าย

(1.2) เมื่ อใช ตั วตรวจจั บเส น 3 ตั ว

จะพบว า ตั วตรวจจั บเส นด านซ ายและตรงกลางพบเส น จึ งสรุ ปได ว า หุ นยนต พบทางแยกซ าย

Page 145: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 145

(2) กรณี มี ทางแยกขวา

(2.1) เมื่ อใช ตั วตรวจจั บเส น 2 ตั ว

จะเห็ นว า ตั วตรวจจั บเส นด านขวาจะพบเส นเพี ยงตั วเดี ยว ซึ่ งทํ าให ไม สามารถสรุ ปได ว า ขณะนี้ หุ นยนต กํ าลั งเคลื่ อนที่ พ นจากเส นไปทางซ ายหรื อเคลื่ อนที่ พบทางแยกขวา

(2.2) เมื่ อใช ตั วตรวจจั บเส น 3 ตั ว

จะพบว า ตั วตรวจจั บเส นด านขวาและตรงกลางพบเส นทํ าให สรุ ปได ชั ดเจนว า ขณะน้ี หุ นยนต เคลื่ อนที่ มาพบทางแยกขวา

Page 146: AT-BOT Activity book

146Robo-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

ทางแยกเสนตัด

จุดเร

ิ่มตน

Page 147: AT-BOT Activity book

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 ต ัว (ม ีต อ)

Page 148: AT-BOT Activity book

148Robo-Creator : AT-BOT activity book

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

void pause() // ฟ งก ชั่ นหยุ ดการขั บเคลื่ อนหุ นยนต { motor_stop(ALL); // หยุ ดขั บมอเตอร ทุ กช องพร อมๆกั น}void setup(){ lcd(“SW1 Press!”); // แสดงข อความแจ งผู ใช งานให กดสวิ ตช SW1 sw1_press(); // รอจนกระทั่ งสวิ ตช SW1 ถู กกด}void loop(){

left = analog(0); // อ านค าจากตั วตรวจจั บเส นด านซ ายมาเก็ บที่ ตั วแปร leftmid = analog(1); // อ านค าจากตั วตรวจจั บเส นตรงกลางมาเก็ บที่ ต ัวแปร midright = analog(2); // อ านค าตั วตรวจจั บเส นด านขวามาเก็ บที่ ตั วแปร rightif(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 วิ นาที เพื่ อกลั บไปคร อมเส นที่ ทางแยก

}}

Page 149: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 149

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

คํ าอธิ บายโปรแกรม

เงื่ อนไขในการตรวจสอบค าของตั วตรวจจั บ เพื่ อกํ าหนดลั กษณะการเคลื่ อนที่ สํ าหรั บการทดลองนี้ มี 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.4 เริ่ มต นรั นโปรแกรม

ที่ โมดู ล LCD ของหุ นยนต แสดงข อความ Press SW1 แจ งให กดสวิ ตช SW1

L19.5 กดสวิ ตช SW1 ที่ หุ นยนต AT-BOT สั งเกตการเคลื่ อนที่ ของหุ นยนต

หุ นยนต จะเคลื่ อนท่ี ตามเส นส ีดํ า โดยไม เลี ้ยวเมื ่อพบทางแยกซ ายและขวา จนกระทั่ งเมื ่อพบทางแยกเส นตั ด หุ นยนต จะเลี้ ยวซ ายและเคลื่ อนท่ี ตามเส นโค งในทิ ศทางวนตามเข็ มนาฬิ กาอย างต อเน่ื อง

Page 150: AT-BOT Activity book

150Robo-Creator : AT-BOT activity book

เพิ ่มเติ มจากการทดลองที่ ผ านมาสนามทดสอบจะมี เส นเป นสี ดํ าและพื้ นเป นสี ขาว ถ าเปลี่ ยนเป นพื้ นสี ดํ าและเส น

เป นสี ขาว การเขี ยนโปรแกรมเพื่ อควบคุ มการทํ างานยั งสามารถใช หลั กการในการวิ เคราะห เส นและพื้ นสนามจากการทดลองที่ 14 และหลั กการขั บเคลื่ อนหุ นยนต จากการทดลองที่ 15 ถึ ง 18 เป นแนวทางในการพั ฒนาโปรแกรมได

ยกตั วอย าง ถ าต องการทดสอบว าหุ นยนต พบเส นตั ดหรื อไม

ในกรณี ที่ พื้ นสนามเป นสี ขาวและเส นเป นสี ดํ า จะใช เงื่ อนไขต อไปนี้ ในการตรวจสอบ

else if(left<REF && mid<REF && right<REF)

แตถ าหากพื้ นสนามเป นสี ดํ าและเส นเป นสี ขาว จะใช เงื่ อนไขต อไปนี้ ตรวจสอบแทน

else if(left>REF && mid>REF && right>REF)

เนื่ องจากเส นเปลี่ ยนเป นสี ขาว ดั งนั้ นถ าอ านค าจากตั วตรวจจั บเส นตํ าแหน งใด แล วพบว ามี ค ามากกว าค าอ างอิ ง จะถื อว า ตั วตรวจจั บเส นตํ าแหน งนั้ นพบเส นสี ขาว

Page 151: AT-BOT Activity book

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

Page 152: AT-BOT Activity book

152Robo-Creator : AT-BOT activity book

หลั กการพื้ นฐานของหุ นยนต เคลื่ อนที่ ตามเส นสี ขาวแบบใช ตั วตรวจจั บเส น 3 ตั ว

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

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบพื้ นสนามสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบพื้ นสนามสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

เมื ่อพบเหต ุการณ นี ้ ต องควบค ุมให หุ นยนต เคลื ่อนที ่ตรงไปข างหน า หน วงเวลาการเคลื ่อนที ่ช วงสั ้นๆ

กรณี ที่ 2 หุ นยนต เอี ยงจากเส นทางไปด านขวา

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบพื้ นสนามสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบพื้ นสนามสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

เมื่ อพบเหตุ การณ นี้ ต องควบคุ มให หุ นยนต เลี้ ยวซ ายแล วหน วงเวลาในการเคลื่ อนที่ ช วงสั้ นๆ เพื่ อให หุ นยนต เคลื่ อนที่ กลั บไปคร อมเส น

Page 153: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 153

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

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบพื้ นสนามสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบพื้ นสนามสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

เมื่ อพบเหตุ การณ นี้ ต องควบคุ มให หุ นยนต เลี้ ยวขวาแล วหน วงเวลาในการเคลื่ อนที่ ช วงสั้ นๆ เพื่ อให หุ นยนต เคลื่ อนที่ กลั บไปคร อมเส น

กรณี ที่ 4 หุ นยนต พบทางแยกด านซ าย

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบพื้ นสนามสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

เมื่ อพบเหตุ การณ นี้ ผู พั ฒนาอาจเลื อกสั่ งให หุ นยนต เคลื่ อนที่ ตรงไปข างหน า,เลี้ ยวซ าย , เลี้ ยวขวา,หยุ ดหรื อถอยหลั งได ตามต องการ ขึ้ นอยู กั บเป าหมายในการทํ าภาระกิ จ

Page 154: AT-BOT Activity book

154Robo-Creator : AT-BOT activity book

กรณี ที่ 5 หุ นยนต พบทางแยกด านขวา

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบพื้ นสนามสี ดํ า (อ านค าได น อยกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

เมื่ อพบเหตุ การณ นี้ ผู พั ฒนาอาจเลื อกสั่ งให หุ นยนต เคลื่ อนที่ ตรงไปข างหน า,เลี้ ยวซ าย , เลี้ ยวขวา,หยุ ดหรื อถอยหลั งได ตามต องการ ขึ้ นอยู กั บเป าหมายในการทํ าภาระกิ จ

กรณี ที่ 6 หุ นยนต พบทางแยกที่ เป นเส นตั ด นั่ นคื อ

ตั วตรวจจั บเส นด านซ าย ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นตรงกลาง ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

ตั วตรวจจั บเส นด านขวา ตรวจจั บพบเส นสี ขาว (อ านค าได มากกว าค าอ างอิ ง)

เมื่ อพบเหตุ การณ นี้ ผู พั ฒนาอาจเลื อกสั่ งให หุ นยนต เคลื่ อนที่ ตรงไปข างหน า,เลี้ ยวซ าย , เลี้ ยวขวา,หยุ ดหรื อถอยหลั งได ตามต องการ ขึ้ นอยู กั บเป าหมายในการทํ าภาระกิ จ

Page 155: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 155

#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); // หน วงเวลาเพื่ อให หุ นยนต ถอยหลั งตรง}

การต อฮาร ดแวร เพิ่ มเติ ม ใช หุ นยนต 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 วิ นาที จากน้ั นจึ งเคลื่ อนที่ ตามเส นต อไป

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

Page 156: AT-BOT Activity book

156Robo-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!”); // แสดงข อความแจ งผู ใช งานให กดสวิ ตช SW1sw1_press(); // รอจนกระทั่ งสวิ ตช SW1 ถู กกด

}void loop(){

left = analog(0); // อ านค าจากตั วตรวจจั บเส นด านซ ายมาเก็ บที่ ตั วแปร leftmid = analog(1); // อ านค าจากตั วตรวจจั บเส นตรงกลางมาเก็ บที่ ตั วแปร midright = analog(2); // อ านค าจากตั วตรวจจั บเส นด านขวามาเก็ บที่ ตั วแปร rightif(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 ตั ว (มี ต อ)

Page 157: AT-BOT Activity book

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 ตั ว (จบ)

Page 158: AT-BOT Activity book

158Robo-Creator : AT-BOT activity book

Page 159: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 159

ในบทนี ้จะกล าวถ ึงการประยุ กต ใช งานโมดู ลตรวจจั บและวั ดระยะทางด วยแสงอิ นฟราเรดเบอร GP2D120

ร วมกั บหุ นยนต AT-BOT ทํ าให หุ นยนต มี ความสามารถในการตรวจจั บวั ตถุ ได โดยไม ต องสั มผั สกั บวั ตถุ ส งผลให หุ นยนต สามารถเคลื่ อนที่ เข าหาหรื อหลบหลี กได อย างฉลาดขึ้ น

9.1 คุ ณสมบั ติ ของโมดู ล GP2D120GP2D120 เป นโมดู ลตรวจจั บระยะทางแบบอิ นฟราเรดมี ขาต อใช งาน 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

ร ูปที ่ 9-1 ร ูปร าง, การจ ัดขา และกราฟค ุณสมบ ัต ิของ GP2D120 โมด ูลว ัดระยะทางด วยแสงอ ินฟราเรด

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

GP2D12

GNDVout Vcc

GP2D120

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

ไมแนนอน เอาตพุตครั้งที่ 1 เอาตพุตครั้งที่ 2 เอาตพุตครั้งที่ n

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

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

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

การวัดระยะหาง

แรงดันเอาตพุต

ไฟเล้ียง

4 8 12 16 20 24 28 3200

0.4

0.8

1.2

1.6

2.0

2.4

2.8

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

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

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

Page 160: AT-BOT Activity book

160Robo-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 ชุ ด โดยร อยสกรู ผ านรู ของป กที่ ใช ยึ ดตั วโมดู ลและร องบากที่ ปลายของของแท งต อ

ON

MO

TO

R

BAT

TERY LE

VEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollrboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SCL

1SD

A2

RX

13

TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

ADC1

42AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

GP2D120

ON

MO

TO

R

BAT

TERY LE

VEL

13

12

11

10

98

SERVO

PO

RT

7.2-9V BATT.

E2

RESET

+

- S

14

15

PC6

PC7

Cre

con

atore>>>>

trollrboa

>

erd

R

>

48

50

SW

249

SW

1AD

C7

KN

OB

TW

IU

ART1

0SCL

1SD

A2

RX

13

TX1

44

AD

C4

46

AD

C6

40

AD

C0

41

ADC1

42AD

C2

START

45

AD

C5

>>

USB

DATA

43

AD

C3

3210 4 5

GP2D120

Page 161: AT-BOT Activity book

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

การคื นค า

คื นค าเป นระยะทางในหน วยเซนติ เมตร

Page 162: AT-BOT Activity book

162Robo-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> // ผนวกไฟล ไลบรารี สํ าหรั บฟ งก ชั่ น getdistunsigned int dist; // กํ าหนดตั วแปรเก็ บค าระยะทางจาก GP2D120void 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

Page 163: AT-BOT Activity book

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! แทน

ON

MOTOR

BATTERY LEVEL13 12 11 10 9 8

SERVO PORT

7.2

-9V B

ATT.

E2

RESET

+

-S

1415 PC6PC7

Cre

con

atore>>>>

trollrboa

>

erd R

>

48 50 SW2 49 SW1 ADC7 KNOB

TWIUART10SCL1SDA2RX13TX1

44ADC4 46ADC6 40ADC0 41ADC1 42ADC2START

45ADC5

>>

USBDATA

43ADC3

32

10

45

GP2D120

Page 164: AT-BOT Activity book

164Robo-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 จะเคลื่ อนที่ ตรงไปข างหน าอย างต อเนื่ อง จนกระทั่ งตรวจจั บพบสิ่ งกี ดขวาง หุ นยนต จะถอยหลั งแล วหมุ นตั วไปทางซ าย จากน้ั นเคลื่ อนที่ ตรงเพื่ อทํ าให สามารถหลบหลี กสิ่ งกี ดขวางไปได แต ถ าหมุ นตั วแล วยั งพบสิ่ งกี ดขวาง หุ นยนต จะถอยหลั งอี กครั้ ง แล วหมุ นตั วไปทางซ าย จะเป นเช นน้ี จนกว าจะพ นสิ่ งกี ดขวางจึ งเคลื่ อนที่ ตรงผ านไปได

Page 165: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 165

#include <atx.h> // ผนวกไลบรารี หลั ก#include <gp2d120_lib.h> // เพื่ อเรี ยกใช งานฟ งก ชั่ น getdist#define POW 80 // กํ าหนดกํ าลั งขั บของมอเตอร คงที่ ที่ 80 % ของกํ าลั งขั บสู งสุ ดunsigned int dist; // กํ าหนดตั วแปรเก็ บค าระยะทางจากโมดู ล GP2D120void 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); // หน วงเวลาเพื่ อให หุ นยนต เลี้ ยวขวา}

โปรแกรมที ่ L22-1 ไฟล robo_ranger.pde โปรแกรมภาษา C/C++ ของ Wiring สํ าหรั บควบคุ มหุ นยนต AT-BOT หลบหลี กสิ ่งก ีดขวางแบบไม สั มผั ส (ม ีต อ)

Page 166: AT-BOT Activity book

166Robo-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 หลบหล ีกสิ ่งกี ดขวางแบบไม สั มผั ส (จบ)

Page 167: AT-BOT Activity book

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 แสดงร ูปร างและส วนประกอบของเซอร โวมอเตอร (ก) รู ปร างภายนอก (ข) ระบบเฟ องทดภายใน (ค) แผงวงจรอ ิเล ็กทรอน ิกส ที ่ใช ควบค ุม

(ข) (ค)(ก)

Page 168: AT-BOT Activity book

168Robo-Creator : AT-BOT activity book

ป จจ ุบ ันเซอร โวมอเตอร ม ีด วยก ัน 2 ชน ิดหล ักๆ ค ือ ชน ิดอะนาลอกและด ิจ ิตอล ร ูปร างภายนอกของเซอร โวมอเตอร ทั ้งสองชน ิดจะคล ายกั นมาก ความแตกต างจะอยู ที ่วงจรควบค ุมที ่อยู ภายใน โดยในชน ิดอะนาลอกจะใช วงจรอ ิเล ็กทรอนกส ที ่ประกอบด วยอ ุปกรณ สารกึ ่งต ัวนํ า จ ําพวก ทรานซ ิสเตอร มอสเฟต หร ือไอซ ีออปแอมป เป นหล ัก ในขณะที ่ชน ิดดิ จ ิตอลจะใช ไมโครโปรเซสเซอร หร ือไมโครคอนโทรลเลอร เป นตั วควบค ุมหล ัก ในร ูปที ่ 10-1 แสดงร ูปร างของเซอร โวมอเตอร มาตรฐาน

10.1.1 คอนเน็ กเตอร ของเซอร โวมอเตอร

ร ูปที ่ 10-2 แสดงล ักษณะของคอนเน ็กเตอร ที ่ใช ในการเชื ่อมต อของเซอร โวมอเตอร ม ีด วยก ัน 2 มาตรฐานค ือแบบ S และแบบ J การจ ัดขาจะเหมื อนกั น ความแตกต างค ือ ล ักษณะของคอนเน็ กเตอร และการกํ าหนดส ีของสายส ัญญาณ ส ําหร ับยี ่ห อ Futaba ของญี ่ปุ น กํ าหนดให คอนเน ็กเตอร แบบ J ม ีป กยื ่นออกมาเพิ ่มขึ ้นในด านเด ียวกั บสายส ัญญาณ และกํ าหนดให สายส ัญญาณม ีส ีขาว ส วนแบบ S สายส ัญญาณจะเป นส ีขาว และคอนเน ็กเตอร จะเร ียบเหม ือนก ันทั ้งสองด านของสายเชื ่อมต อ ส วนสายไฟเลี ้ยงเป นส ีแดง และสายกราวด เป นส ีด ําเหม ือนก ันทั ้งสองแบบ

อย างไรก็ ตาม มี ความเป นไปได ที่ ผู ผลิ ตอื่ นๆ อาจกํ าหนดรู ปแบบและสี ของสายสั ญญาณแตกต างออกไปแต การจั ดเรี ยงตํ าแหน งจะเหมื อนกั น

10.1.2 โครงสร างของเซอร โวมอเตอร

ในรู ปที่ 10-3 แสดงโครงสร างภายในของเซอร โวมอเตอร ส วนประกอบหลั กคื อ มอเตอร ไฟตรงขนาดเล็ ก,ชุ ดเฟ องทด, แผงวงจรควบคุ ม และตั วต านทานปรั บค าได (POT : Potentiometer) แกนของมอเตอร ไฟตรงจะต อเข ากั บชุ ดเฟ อง เพื่ อลดความเร็ วรอบลง ส งผลให แรงบิ ดที่ แกนหมุ นมากขึ้ น ทั้ งหมดทํ างานร วมกั นภายใต ความสั มพั นธ

S S

ร ูปที ่ 10-2 ล ักษณะคอนเน ็กเตอร ของเซอร โวมอเตอร

Page 169: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 169

P = kwg

โดยที่ P คื อ พลั งงานที่ ป อนให แก มอเตอร

k คื อ ค าคงที่

w คื อ ความเร็ วรอบ ในหน วย รอบต อนาที (rpm : round per minute)

g คื อ แรงบิ ดหรื อทอร ค (torque)

ถ าหากพลั งงานที่ จ ายให คงที่ เมื่ อลดความเร็ วรอบลง นั่ นย อมทํ าแรงบิ ดของมอเตอร เพิ่ มขึ้ น

การหม ุนของมอเตอร ได ร ับการควบค ุมจากวงจรควบค ุม โดยม ี POT เป นต ัวก ําหนดขอบเขตของแกนหม ุนซึ ่งหากไม ม ีการปร ับแต งใดๆ แกนหม ุนของมอเตอร จะสามารถหม ุนได ในขอบเขต 0 ถ ึง 180 องศา ด ังนั ้นในการปร ับแต งให เซอร โวมอเตอร สามารถข ับแกนหม ุนได รอบต ัวจ ึงม ักจะใช ว ีการถอด POT ออก แล วแทนที ่ด วยต ัวต านทานค าคงที ่ 2 ต ัว หร ือด ัดแปลงให แกนหม ุนของ POT สามารถหม ุนได รอบต ัว

แกนหม ุนของเซอร โวมอเตอร จะม ีส วนปลายเป นร องเฟ อง (spline) เพื ่อให สามารถติ ดต้ั งอ ุปกรณ ที ่ใช ในการเชื ่อมโยงไปย ังต ัวขั บหร ือกลไกอื ่นๆ อ ุปกรณ ที ่ใช เชื ่อมโยงน้ั นเร ียกว า ฮอร น (horn) ซึ ่งม ีด วยก ันหลายร ูปแบบทั ้งแบบเป นแขน, เป นแท ง, กากบาท, แผ นกลม เป นต น สํ าหร ับร องเฟ องของเซอร โวมอเตอร แต ละยี ่ห อก ็ม ีจํ านวนไม เท าก ันโดยของ Hitec จะม ี 24 ร องเฟ อง ส วนของ Futaba ม ี 25 ร องเฟ อง ท ําให ฮอร นของทั ้งสองยี ่ห อใช ร วมก ันไม ได

มอเตอรไฟตรง

แผงวงจรควบคุม

ตัวตานทานปรับคาได

แกนหมนุ

ชุดเฟอง

สายสญัญาณ (สเีหลอืงหรือขาว)ไฟเลีย้ง (+Vm - สแีดง)กราวด (สดีาํ)

POT

ร ูปที ่ 9-3 โครงสร างภายในของเซอร โวมอเตอร

Page 170: AT-BOT Activity book

170Robo-Creator : AT-BOT activity book

ร ูปที ่ 10-4 แสดงพั ลส ที ่ใช ควบค ุมเซอร โวมอเตอร

พลัสกวาง 1 ถึง 2 มลิลิวินาที

คาบเวลา 20 มิลลวิินาที

(ก) ลกัษณะของสัญญาณพัลสท่ีใชในการควบคุมเซอรโวมอเตอร

พลัสกวาง 1 มลิลิวนิาที

(ข) สญัญาณพัลสกวาง 1 มลิลิวินาทีทําใหมอเตอรขับแกนหมนุไปยงัตําแหนงซายสุด

พลัสกวาง 1.5 มิลลิวินาที

(ค) สัญญาณพัลสกวาง 1.5 มิลลวิินาทีทําใหมอเตอรขับแกนหมนุไปก่ึงกลาง

พัลสกวาง 2 มิลลิวนิาที

(ง) สญัญาณพัลสกวาง 2 มลิลิวินาทีทําใหมอเตอรขับแกนหมนุไปยงัตําแหนงขวาสดุ

STANDARDSERVO MOTOR

STANDARDSERVO MOTOR

STANDARDSERVO MOTOR

Page 171: AT-BOT Activity book

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 ไดอะแกรมการท ํางานของแผงวงจรควบค ุมในเซอร โวมอเตอร ชน ิดอะนาลอก

Page 172: AT-BOT Activity book

172Robo-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 นอกจากนั ้นย ังม ีป จจ ัยเกี ่ยวก ับแรงเส ียดทานในระบบเฟ องภายในเซอร โวมอเตอร การหล อลื ่นการเชื ่อมโยงระหว างเฟ องต อเฟ องในช ุดเฟ องทด ที ่ส งผลให ความเร ็วและแรงบ ิดของเซอร โวมอเตอร เปลี ่ยนแปลงไปได

Page 173: AT-BOT Activity book

Robo-Creator : AT-BOT activity book 173

ร ูปที ่ 10-6 แสดงต ําแหน งจ ุดต อเซอร โวมอเตอร ของหุ นยนต AT-BOT

10.2 การจั ดการควบคุ มเซอร โวมอเตอร ของหุ นยนต AT-BOTในหุ นยนต AT-BOT ใช ขาพอร ต 8 ถึ ง 13 (เรี ยงตามข อกํ าหนดของ Wiring I/O และต องใช ชื่ อขาตามนี้ ใน

การเขี ยนโปรแกรมใน Wiring IDE) ในการขั บสั ญญาณพั ลส เพื่ อขั บเซอร โวมอเตอร

แรงดั นไฟเลี ้ยงเซอร โวมอเตอร ได มาจากแบตเตอรี ่ที ่ต อเข าก ับแผงวงจร ATX ผ านวงจรควบคุ มไฟเลี้ ยงคงที่ ที่ +6V จ ายกระแสไฟฟ าได 1500mA จึ งทํ าให ใช ได กั บเซอร โวมอเตอร ขนาดเล ็กท ุกรุ นที่ ใช ไฟเลี้ ยงในช วง 4.8 ถึ ง6V

ON

MOTOR

BATTERY LEVEL1312111098

SERVO PORT

7.2

-9V B

ATT.

E2

RESET

+

-S

14 15PC6 PC7

C r e

c o n

a t o r e > > > >

t r o l l r b o a

>

e r dR

>

4850SW249SW1ADC7KNOB

TWI UART1

0 SCL 1 SDA 2 RX1 3 TX1

44 ADC446 ADC640 ADC041 ADC142 ADC2 START

45 ADC5

> >

USB DATA

43 ADC3

32

10

45

จดุตอเซอรโวมอเตอร 6 ตัวชอง 8 ถึง 13

Page 174: AT-BOT Activity book

174Robo-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 หมายถึ ง ไม ใช งานเซอร โวมอเตอร ที่ ช องนั้ นๆ

Page 175: AT-BOT Activity book

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

Page 176: AT-BOT Activity book

176Robo-Creator : AT-BOT activity book

โปรแกรมที่ L22-1 ไฟล servo_test.pde โปรแกรมภาษา C/C++ ของ Wiring สํ าหร ับควบคุ มตํ าแหน งการหม ุนของเซอร โวมอเตอร ของหุ นยนต AT-BOT

#include <atx.h> // ผนวกไลบรารี หลั กunsigned int pos=0; // กํ าหนดตั วแปรสํ าหรั บควบคุ มตํ าแหน งของเซอร โวมอเตอร void setup(){}void loop(){

lcd(“Position: %d “,pos); // แสดงค าตํ าแหน งของเซอร โวมอเตอร servo(10,pos); // กํ าหนดตํ าแหน งการขั บของเซอร โวมอเตอร ช อง 10 จากตั วแปร posif(sw1()==0) // ตรวจสอบการกดสวิ ตช SW1{

pos++; // เพิ่ มค าตํ าแหน งขึ้ น 1 ค าsleep(100); // หน วงเวลาเพื่ อลดสั ญญาณรบกวนของสวิ ตช

}if(sw2()==0) // ตรวจสอบการกดสวิ ตช SW2{

pos - - ; // ลดค าตํ าแหน งลง 1 ค าsleep(100); // หน วงเวลาเพื่ อลดสั ญญาณรบกวนของสวิ ตช

}}

คํ าอธิ บายโปรแกรม

โปรแกรมจะทํ างานภายในฟ งก ชั่ น loop เพื่ อวนแสดงผลค าตํ าแหน งของเซอร โวมอเตอร ช อง 10 และกํ าหนดค าตํ าแหน งอย างต อเนื่ อง พร อมทั้ งตรวจสอบการเพิ่ มและลดค าตํ าแหน งของเซอร โวมอเตอร จากการกดสวิ ตช SW1และ SW2 ตามลํ าดั บ โดยโปรแกรมจะวนทํ างานเช นนี้ อย างต อเนื่ อง