1
IPST-MicroBOX Secondary Education (SE) Starter manual
2
IPST-MicoBOX (SE) Starter Manual
คูมือเริ่มตนใชงานกลองสมองกล IPST-MicroBOX (SE) ISBN 974 - 92023 - 0 -9
สงวนลิขสิทธิ์ตาม พ.ร.บ. ลิขสิทธิ์ พ.ศ. 2521 หามการลอกเลียนไมวาสวนหนึงส ่ วนใดของหนังสือเลมนี้ นอกจากจะไดรับอนุญาต ใครควรใชหนังสือเลมนี้ 1. นักเรียน นิสิต นักศึกษา และบุคคลทัวไปที ่ มี่ ความสนใจในการนําไมโครคอนโทรลเลอรไปประยุกตใชในการทดลอง ทางวิทยาศาสตร หรือสนใจในการเรียนรูและทดลองวิยาศาสตรในแนวทางใหมทีใช ่ กิจกรรมเปนสือ่ โดยมีไมโคร คอนโทรลเลอรเปนสวนประกอบ 2. สถาบันการศึกษา โรงเรียน วิทยาลัย มหาวิทยาลัย ทีมี่ การเปดการเรียนการสอนวิชาอิเล็กทรอนิกสหรือภาควิชา วิศวกรรมอิเล็กทรอนิกสและคอมพิวเตอร 3. คณาจารยทีมี่ ความตองการศึกษา และเตรียมการเรียนการสอนวิชาไมโครคอนโทรลเลอร รวมถึงวิทยาศาสตร ประยุกตทีต่ องการบูรณาการความรูทางอิเล็กทรอนิกส-ไมโครคอนโทรลเลอร-การเขียนโปรแกรมคอมพิวเตอรการทดลองทางวิทยาศาสตร ในระดับมัธยมศึกษา อาชีวศึกษา และปริญญาตรี ดําเนินการจัดพิมพและจําหนายโดย บริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด 108 ซ.สุขุมวิท 101/2 ถ.สุขุมวิท แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศัพท 0-2747-7001-4 โทรสาร 0-2747-7005 รายละเอียดทีปรากฏในคู ่ มื อเริมต ่ นใชงานกลองสมองกล IPST-MicroBOX (SE) ผานการตรวจทานอยางละเอียด และถวนถี่ เพือให ่ มีความสมบูรณและถูกตองมากทีสุ่ ดภายใตเงือนไขและเวลาที ่ ่พึงมีกอนการจัดพิมพเผยแพร ความเสียหายอันอาจเกิดจาก การนําขอมูลในหนังสือเลมนี้ไปใช ทางบริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด มิไดมีภาระในการรับผิดชอบแตประการใด ความผิดพลาดคลาดเคลือนที ่ อาจมี ่ และไดรับการจัดพิมพเผยแพรออก ไปนัน้ ทางบริษัทฯ จะพยายามชีแจงและแก ้ ไขในการจัดพิมพครั้งตอไป
3
IPST-MicroBOX (SE) จากการเริมต ่ นพัฒนาชุดกลองสมองกล IPST-MicroBOX โดยสาขาคอมพิวเตอร สถาบันสงเสริมการสอน วิทยาศาสตรและเทคโนโลยีหรือ สสวท. ทีสามารถนํ ่ าไปบูรณาการกับวิชาอืนๆ ่ ได ไดรับการตอบรับและมีการนําไป ใชในการเรียนการสอนดานวิทยาศาสตรประยุกต ดานการเขียนและพัฒนาโปรแกรมภาษา C รวมถึงในวิชาโครงงาน เพือให ่ ผูเรี ยนสามารถนําองคความรูนี ไปใช ้ และตอยอดเพือสร ่ างโครงงานวิทยาศาสตรสมัยใหม IPST-MicroBOX เพือเป ่ นสือทางเลื ่ อกหนึงสํ ่ าหรับครูผูสอนในการจั ดการเรียนการสอนวิชาการโปรแกรม วิชา โครงงาน ในระดับมัธยมศึกษา ชุดการเรียนการสอนนีจะเน ้ นการจัดกิจกรรมการเรียนรูแบบบู รณาการ นักเรียนไดรู เกียวกั ่ บอุปกรณและอิเล็กทรอนิกสเบืองต ้ น การเขียนโปรแกรมเพือควบคุ ่ มไมโครคอนโทรลเลอร การทําโครงงานซึง่ ตองบูรณาการกับวิชา ฟสิกส เคมี ชีววิทยา คณิตศาสตร และคอมพิวเตอรเขาดวยกัน ซึงจะทํ ่ าใหการเรียนการสอน มีความนาสนใจ และเปนอีกแนวทางหนึงในการสอนเพื ่ อให ่ นักเรียนรักการเขียนโปรแกรม รูจั กคิดวิเคราะหและแก ปญหาทังในวิ ้ ชาทีเรี่ ยนและในชีวิตประจําวัน จนกระทังในป ่ พ.ศ. 2556 สสวท. ไดมีการจัดตังโครงการห ้ องเรียนวิทยาศาสตรในระดับมัธยมศึกษาตอน ตนขึน้ โดยมีชุดกลองสมองกล IPST-MicroBOX เปนสือการเรี ่ ยนรูหนึงที ่ ควรมี ่ ในหองเรียนวิทยาศาสตร เนืองจาก ่ IPST-MicroBOX เดิมออกแบบมาเพือใช ่ ในระดับมัธยมศึกษาตอนปลายเปนหลัก ดังนันเมื ้ อนํ ่ ามาใชในหองเรียนวิทยา ศาสตรในระดับมัธยมศึกษาตอนตน จึงตองมีการปรับปรุงใหม เพือให ่ เหมาะกับนักเรียนในระดับนี้ กอปรกับการ เปลี่ยนแปลงของเทคโนโลยีอุปกรณอิเล็กทรอนิกส คอมพิวเตอรสมัยใหมทีมี่ ระบบปฏิบัติการที่หลากหลายทั้ง วินโดวส, ลีนุกซ หรือกระทัง่ MAC OS พอรตเชือมต ่ อของคอมพิวเตอรทีเน ่ นไปยังพอรต USB สงผลใหการปรับปรุง IPST-MicroBOX ครั้งนี้ จึงตองเลือกฮารดแวรทีสามารถรองรั ่ บกับพอรต USB เลือกซอฟตแวรทีใช ่ ในการพัฒนา โปรแกรมทีรองรั ่ บกับความหลากหลายของระบบปฏิบัติการ และยังตองมีการพัฒนาชุดคําสังต ่ างๆ ทีทํ่ าใหนักเรียน ในระดับมัธยมตนสามารถเรียนรูและทํ าความเขาใจได IPST-MicroBOX Secondary Education หรือ IPST-MicroBOX (SE) จึงเกิดขึน้ โดยในชุดจะมีอุปกรณที่ เพียงพอสําหรับการเรียนรูในเบื องต ้ น ตอยอดไปทําโครงงานอยางงายและขันกลางได ้ ทังยั ้ งมีชินส ้ วนในทีนํ่ าไปสราง เปนหุนยนต อัตโนมัติขนาดเล็กไดดวย ภายใตงบประมาณรวมทีถู่ กลง ทางดานซอฟตแวรเลือกใช ซอฟตแวร Wiring IDE (www.wiring.org.co) อันเปนซอฟตแวรสําหรับพัฒนาโปรแกรมดวยภาษา C/C++ ทีใช ่ งานไดกับระบบปฏิบัติ การวินโดวส, ลีนุกซ และ MAC OS ทังยั ้ งเปนซอฟตแวรแบบซอรสเปด ใชงานไดโดยไมมีคาใชจาย และไมจํากัด ระยะเวลาใชงาน รวมถึงมีการปรับปรุงอยางตอเนืองเพื ่ อให ่ ไดซอฟตแวรทีมี่ ประสิทธิภาพสูง ชุดกลองสมองกล IPST-MicroBOX Secondary Education หรือ IPST-MicroBOX (SE) เปนสือการเรี ่ ยนรูทาง เลือกสําหรับครู, อาจารย และนักเรียนทีมี่ ความประสงคในการตอยอดหรือประยุกตใชกลองสมองกลทีมี่ ไมโคร คอนโทรลเลอรเปนตัวควบคุมหลักในการเรียนรูและพั ฒนาโครงงานดานวิทยาศาสตรและเทคโนโลยี การจัดหาสือการเรี ่ ยนรูนี เป ้ นไปในรูปแบบสมัครใจ การบริการเกียวกั ่ บการจัดหาและซอมแซมอุปกรณอยูภายใต ความ รับผิดชอบของบริษัท อินโนเวตีฟ เอ็กเพอริเมนต จํากัด (www.inex.co.th หรือ www.ipst-microbox.com)
4
บทที่ 1 เริมต ่ นใชงานชุดกลองสมองกล IPST-MicroBOX (SE)...............................................................5 บทที่ 2 แนะนําชุดกลองสมองกล IPST-MicroBOX (SE)...................................................................19 บทที่ 3 รูจักกับ Wiring ซอฟตแวรพัฒนาโปรแกรมภาษา C/C++ สําหรับชุดกลองสมองกล IPST-MicroBOX (SE)...................................................................37 บทที่ 4 ทดสอบการควบคุมอุปกรณเบื้องตนของชุดกลองสมองกล IPST-MicroBOX (SE)...........................................................................................................51 บทที่ 5 ความรูเบื้องตนเกียวกั ่ บไฟลไลบรารีของชุดกลองสมองกล IPST-MicroBOX (SE)..........................................................................................................69 บทที่ 6 การแสดงผลดวยจอกราฟก LCD สีของชุดกลองสมองกล IPST-MicroBOX (SE).................95 บทที่ 7 ควบคุมการติดดับของ LED ดวยซอฟตแวร........................................................................117 บทที่ 8 การควบคุม LED หลายดวงของชุดกลองสมองกล IPST-MicroBOX (SE)............................125 บทที่ 9 ติดตอกับสวิตชเพืออ ่ านคาและนําไปใชงาน.......................................................................145 บทที่ 10 การอานคาสัญญาณอะนาลอกอยางงาย.........................................................................159
5
การใชงานชุดกลองสมองกล IPST-MicroBOX Secondary Education (SE) มีขันตอนโดยสรุ ้ ป ดังแผนภาพในรูปที่ 1-1 ในบทนีจะอธิ ้ บายถึงขันตอนต ้ างๆ ในการเริมต ่ นใชงานชุดกลองสมองกล IPSTเปนลําดับไป ติดตั้งซอฟตแวร - Wiring 1.0 SE ซอฟตแวรเขียนโปรแกรมภาษา C/C++ - ไดรเวอร USB ของแผงวงจรหลัก IPST-SE ----------------------------------------------
ตรวจสอบชองเชื่อมตอคอมพิวเตอร ของแผงวงจร IPST-SE - เชื่อมตอแผงวงจรหลัก IPST-SE เขากับพอรต USB - เลือกเปด Control panel > System > Hardware > Device Manager > Ports ดูที่หัวขอ USB serial port (COMx) - จําตําแหนงของ USB serial port (COMx) โดย x เปนตัวเลข ใดๆ ปกติมีคามากกวา 3 เพื่อเลือกชองติดตอสื่อสารระหวาง คอมพิวเตอรกับแผงวงจรหลัก IPST-SE
เตรียมการสรางโปรแกรมควบคุม 1. เปดซอฟตแวร Wiring 1.0 SE สรางไฟลใหม 2. เลือกชนิดของแผงวงจร ที่เมนู Tools > Board > IPST-SE > ATmega644P@16MHz 3. เลือกชองตอคอมพิวเตอร ที่เมนู Tools > Serial port > COMx โดย x เปนเลขใดๆ ไดมาจากการตรวจสอบตําแหนงที่ Device manager
เขียนโปรแกรมภาษา C/C++ แลวบันทึกไฟล คอมไพล อัปโหลดโปรแกรม โปรแกรมทีแ่ ผงวงจร IPST-SE เริ่มทํางาน
รูปที่ 1-1 แผนภาพแสดงขั้ นตอนและกระบวนการเรี ยนรู เพื่อใชงานชุดกลองสมองกล IPSTMicroBOX(SE) เริ่ มจากด านซ าย ตั้ งแต การติ ดตั้ งโปรแกรม และการตรวจสอบการเชื่อมต อ ระหวางแผงวงจรควบคุมกับคอมพิวเตอร ไลมาทางขวา เริ่มจากขั้นตอนเตรียมการสรางโปรแกรม ควบคุม, เขียนโปรแกรม, คอมไพลหรือการแปลโปรแกรมภาษา C เปนภาษาเครื่อง, อัปโหลดหรือ สงโปรแกรมไปยังแผงวงจรหลัก IPST-SE จากนั้นจึงทําการรันโปรแกรมเพื่อตรวจสอบการทํางาน
6
1.1 ติดตั้งโปรแกรมซอฟตแวรและไดรเวอร 1.1.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 ขึนไป ้
1.1.2 ขั้นตอนการติดตังโปรแกรมและไดรเวอร ้ USB ทีใช ่ งานกับชุดกลองสมองกล IPST-MicroBOX(SE) (1) นําแผนซีดีรอมทีจั่ ดมาพรอมกับชุด IPST-MicroBOX(SE) ใสลงในซีดีรอมไดรฟ แลวเลือก คลิกที่ ไฟล Wiring1000_IPST_SE_130222.exe (ตัวเลขของไฟลติดตั้งอาจเปลียนแปลงได ่ ตามการ ปรับปรุงลาสุด) จะปรากฏหนาตางตอนรับสูการติดตั้งซอฟตแวร Wiring ดังรูป
(2) จากนั้นคลิกตอบตกลงในแตละขั้นตอนของการติดตั้งเหมือนกับการติดตังแอปพลิ ้ เคชั่น อืนๆ ่ ของวินโดวส จนเสร็จสิน้
7
(3) จากนันจะปรากฏหน ้ าตางติดตังไดรเวอร ้ USB สําหรับติดตอกับแผงวงจรควบคุม IPST-SE ใหคลิกปุม Install เพื่อเริ่มการติดตั้งไดรเวอร
(4) ทดสอบเปดโปรแกรมโดยเลือกที่เมนู Start > All Programs > Wiring > Wiring1.0 SE จากนั้นครูหนึงหน ่ าตางของซอฟตแวร Wiring IDE 1.0 จะปรากฏขึน้
จากนีซอฟต ้ แวร Wiring IDE 1.0 พรอมสําหรับการพัฒนาโปรแกรมแกชุดกลองสมอง กล IPST- MicroBOX(SE) แลว
8
1.2 แผงวงจรหลัก IPST-SE ของชุดกลองสมอง IPST-MicroBOX(SE) อุปกรณหลักทีใช ่ ในการเรียนรูกลองสมองกลคือ ชุดกลองสมองกล IPST-MicroBOX(SE) ที่มี แผงวงจรหลักชือ่ IPST-SE มีหนาตาแสดงดังรูปที่ 1-2 พรอมคําอธิบายของสวนประกอบตางๆ แผงวงจร IPST-SE เปนแผงวงจรขนาดเล็กที่มีไมโครคอนโทรลเลอรเบอร ATmega644P เปนหัวใจหลักในการ ควบคุมการทํางาน โดยตัวควบคุมหลักหรือไมโครคอนโทรลเลอรจะไดรับการโปรแกรมผานทาง พอรต USB ดวยซอฟตแวร Wiring IDE 1.0 บนแผงวงจรควบคุมนี้มีจุดตอเพื่อรับสัญญาณจากตัวตรวจจับภายนอกทั้งแบบอะนาลอก และดิจิตอลเพื่อชวยใหแผงวงจรสามารถรับขอมูลจากสิ่งแวดลอม เชน แสง, อุณหภูมิ, ระยะหางจาก วัตถุของตัวตรวจจับ เปนตน นอกจากนั้นยังมีจุดตอเพื่อสงสัญญาณออกไปควบคุมอุปกรณภายนอก อาทิ ไดโอดเปลงแสง ลําโพง มอเตอรไฟตรง และเซอรโวมอเตอร ดานการแสดงผล แผงวงจร IPST-SE มีจอแสดงผลแบบกราฟก LCD สีขนาด 1.8 นิวในตั ้ ว มี ความละเอียด 128 x 160 จุด แสดงตัวอักษรไดสูงสุด 21 ตัวอักษร 16 บรรทัด แสดงภาพกราฟกสีได (ไมรองรับภาพถายที่มีความละเอียดสูง) และเลือกทิศทางในการแสดงผลได USB D 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 ON 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 G 000000000000000000000 6V 000000000000000000000 KNOB 12 000000000000000000000 G 000000000000000000000 OK 000000000000000000000 6V 000000000000000000000 13 SW1 6VG 14 UART1 G 1 2 6V 8 SCL 9 SDA
30 A6 27 A3 29 A5 26 A2
24 A0
17
19
+5
20
RESET
LOW
15
2 RxD1 3 TxD1
15 SV0 14 SV1 13 SV2 12 SV3
18
DC MOTOR
28 A4 25 A1
16
SERVO
รูปที่ 1-2 แสดงสวนประกอบและหนาทีของแผงวงจรหลั ่ ก IPST-SE ในชุดกลองสมองกล IPST-MicroBOX(SE)
9
1.3 ทดสอบการอัปโหลดโปรแกรม สําหรับการเขียนโปรแกรมลงไปบนแผงวงจร IPST-SE ครั้งแรก จะเรียกวา การอัปโหลด (upload) ปกติแลวจะใชคําวา “ดาวนโหลด” แตสําหรับการทํางานกับซอฟตแวร Wiring IDE1.0 จะ เรียกกระบวนการนี้วา อัปโหลด ขันตอนการอั ้ ปโหลดโปรแกรมครั้งแรก มี 2 ขันตอนหลั ้ กๆ คือ การตรวจสอบตําแหนงของ พอรตทีใช ่ ในการติดตอระหวางแผงวงจรหลัก IPST-SE กับซอฟตแวร Wiring IDE1.0 บนคอมพิวเตอร และขั้นตอนการตังค ้ าเพื่อใชในการอัปโหลดโปรแกรม
1.3.1 การตรวจสอบตําแหนงของพอรตอนุกรมเสมือน หรือ USB Serial port สําหรับแผงวงจร IPST-SE (1) เสียบสาย USB เชื่อมตอระหวางแผงวงจร IPST-SE กับพอรต USB ของคอมพิวเตอร เปด สวิตชเพื่อจายไฟ รอจนกระทั่งไฟสีนําเงิ ้ นทีตํ่ าแหนง USB บนแผงวงจรควบคุมติดสวาง ดังรูปที่ 1-3
2
3
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000
ON
SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
USB
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
24 A0
4
KNOB
8 SCL 9 SDA
1
SERVO
รูปที่ 1-3 การเชือมต ่ อแผงวงจร IPST-SE กับคอมพิวเตอรเพื่อเตรียมใชงานกับซอฟตแวร Wiring IDE
10
(2) คลิกที่ปุม Start แลวเลือกไปที่ Control Panel (3) จากนั้นดับเบิลคลิกเลือกที่ System (4) เลือกไปที่แท็ป Hardware แลวคลิกที่ Device Manager
(5) ตรวจสอบรายการฮารดแวรที่หัวขอ Port จะพบ USB Serial port ให ดูวามีการเลือก ตําแหนงของพอรต อนุกรม USB Serial port ไวที่ตําแหนงใด ปกติจะเปน COM3 ขึนไป ้ ใหใชคา ของตําแหนงของพอรตอนุกรมนีในการกํ ้ าหนดการเชือมต ่ อกับโปรแกรมตอไป ตามรูปตัวอยางจะเปน COM3
11
1.3.2 เชื่อมตอแผงวงจรหลัก IPST-SE กับซอฟตแวร Wiring IDE หลังจากทราบถึงตําแหนงของพอรตที่เชื่อมตอกับคอมพิวเตอรแลว ในลําดับตอไปเปนการ เชื่อมตอเขากับซอฟตแวร Wiring IDE (1) เปดโปรแกรม Wiring IDE รอสักครูหนึง่ หนาตางหลักของ Wiring IDE จะปรากฏขึน้ ในการเปดใชงาน Wiring IDE ในครั้งแรกอาจใชเวลาพอสมควร (ขึนอยู ้ กั บคอมพิวเตอรแตละเครือง) ่ (2) เลือกฮารดแวรที่ใช โดยเลือกเมนู Tools > Board > IPST-SE > ATmega644P @16MHz
(3) เลือกพอรตติดตอ โดยไปที่เมนู Tools > Serial Port เลือกตําแหนงของพอรตอนุกรมที่ใช ในการเชื่อมตอกับแผงวงจร IPST-SE ในที่นีคื้ อ COM3
ขันตอนนี ้ ควรทํ ้ าทุกครังที ้ ่เชื่อมตอแผงวงจร IPST-SE กับพอรต USB ของคอมพิวเตอรใหม เพียงเทานีแผงวงจร ้ IPST-SE พรอมสําหรับการติดตอกับซอฟตแวร Wiring IDE 1.0 แลว
12
1.3.3 ขั้นตอนการพัฒนาโปรแกรม (1) สรางไฟลใหมดวยการคลิกที่ปุม New บนแถบเครื่องมือหรือเลือกจากเมนู File > New
(2) พิมพโคดโปรแกรมตอไปนี้ #include <ipst.h> // ผนวกไฟลไลบรารีหลัก ipst.h void setup() { glcdClear(); // ลางการแสดงผล glcdMode(0); // เลือกทิศทางการแสดงผลโหมด 0 } void loop() { setTextSize(2); // เลือกขนาดตัวอักษร 2 เทา setTextColor(GLCD_YELLOW); // เลือกสีของตัวอักษรเปนสีเหลือง glcd(1,1,"Hello"); // กําหนดขอความที่บรรทัด 1 คอลัมน 1 setTextColor(GLCD_SKY); // เลือกสีของตัวอักษรเปนสีฟา glcd(3,1,"IPST"); // กําหนดขอความที่บรรทัด 3 คอลัมน 1 glcd(4,1,"MicroBOX"); // กําหนดขอความที่บรรทัด 4 คอลัมน 1 setTextSize(1); // เลือกขนาดตัวอักษรปกติ glcd(10,2,"Secondary Education"); // กําหนดขอความที่บรรทัด 10 คอลัมน 2 } โปรแกรมนีใช ้ ในการทดสอบการทํางานเบืองต ้ นของแผงวงจร IPST-SE โดยกําหนดใหแสดงขอความ ทีจอแสดงผลด ่ วยขนาดและสีของตัวอักษรทีต่ างกัน
13
(3) ไปที่เมนู File เลือกคําสั่ง Save As เพื่อบันทึกไฟลในชื่อ HelloIPST-SE ตอนนีจะมี ้ ไฟล HelloIPST-SE.pde เกิดขึ้นในโฟลเดอรชื่อวา HelloIPST-SE
(4) ตรวจสอบการเขียนโปรแกรมดวยการคลิกที่ปุม Run ที่แถบเครื่องมือหรือเลือกคําสั่งจาก เมนู Sketch > Compile/Verify
หากมีความผิดพลาดเกิดขึนจากการคอมไพล ้ จะปรากฏขอความแจงความผิดพลาดใน ชองแสดงสถานะและพื้นทีแสดงข ่ อความ ตองทําการแกไขโปรแกรม
14
หากการคอมไพลถูกตอง ที่ชองแสดงสถานะจะแจงแสดงขอความ Done compiling
หลังจากการคอมไพลสําเร็จ ในโฟลเดอร HelloIPST-SE จะมีโฟลเดอรใหมเกิดขึ้นชือ่ วา Build ภายในโฟลเดอร Build จะบรรจุไฟลซอรสโปรแกรมภาษา C++ และไฟลประกอบ (5) ตอสาย USB เขากับแผงวงจร IPST-SE จากนั้นเปดสวิตชจายไฟเลียง ้ แลวรอใหการเชื่อม ตอกับคอมพิวเตอรเสร็จสมบูรณ (ดูจากไฟแสดงผลสีนําเงิ ้ นทีตํ่ าแหนง USB ติดสวาง) (6) คลิกที่ปุม Upload to Wiring Hardware บนแถบเครื่องมือ ถาทุกอยางเปนปกติ เมื่อ ทําการอัปโหลดเสร็จ จะมีขอความแจงที่ชองแสดงสถานะวา Done uploading. RESET to start the new program. และที่พื้นทีแสดงข ่ อความจะแจงกระบวนการและผลคอมไพล รวมถึงขนาดของไฟล ผลลัพธที่เกิดขึ้น
ถามีขอผิดพลาดเกิดขึนจะมี ้ ขอความแจงเตือนในพืนที ้ แสดงข ่ อความดานลาง ของหนา ตางโปรแกรมหลัก
ซึงส ่ วนใหญแลวมักเกิดจากการเลือกพอรตอนุกรมไมถูกตอง หรือไมไดเลือกใหบอรด ทํางานในโหมดโปรแกรม การแกไขใหดูในหัวขอ การแกปญหาในกรณีที่อัปโหลดโปรแกรมไมได
15
(7) หลังจากอัปโหลดโปรแกรมแลว แผงวงจรหลัก IPST-SE จะทํางานทันที ไดผลการทํางาน ตามรูป
เพื่อใหเครื่องมือและอุปกรณอยูในสภาพที่พรอมทํางานตลอดเวลา สิ่ งที่ควรกระทําทุกครั้งที่ใชงาน ชุดกลองสมองกล IPST-MicroBOX(SE) คือ (1) ปดสวิตช POWER ทุกครั้งที่มีการถอดหรือตอสายเขากับคอมพิวเตอรและชุดโปรแกรม (2) ปดสวิตช POWER ทุกครังที ้ ่มีการตอหรือปลดสายของแผงวงจรตรวจจับสัญญาณหรืออุปกรณใดๆ เขากับแผงวงจรควบคุม IPST-SE (3) หลังจากทีทดลองเสร็ ่ จในแตละการทดลอง ควรปดสวิตชกอน ทีจะทํ ่ าการปลดสายสัญญาณเพือต ่ อ แผงวงจรใหมเขาไปเพื่อทําการทดลองในหัวขอใหม (4) ไมควรปลดหรือตอสายสัญญาณของแผงวงจรใดๆ เขาไปในแผงวงจร IPST-SE ในขณะกําลังทํางาน เวนแตมีขันตอนการปฏิ ้ บัติอืนใดที ่ ่ระบุเจาะจงวาตองสายสัญญาณในขณะทํางานของการทดลองนั้นๆ (5) หากมีความผิดพลาดใดๆ เกิดขึ้น ตองปดสวิตชจายไฟทันที (6) ไมใชอะแดปเตอรไฟตรงที่มีแรงดันขาออกเกิน +12V กับแผงวงจร IPST-SE (7) หลังจากเสร็จสิ้นการทดลอง ใหปลดสายเชื่อมตอคอมพิวเตอรและสายของอะแดปเตอรหรือแหลง จายไฟออกจากแผงวงจร IPST-SE เสมอ
16
1.4 การแกปญหาในกรณีทีอั่ ปโหลดโปรแกรมไมได 1.4.1 กรณีทีคลิ ่ กปุม Upload แลว ไมมีการทํางานใดๆ ตอ หรือโปรแกรมคาง สาเหตุ : ซอฟตแวร Wiring ไมสามารถติดตอกับแผงวงจรหลัก IPST-SE ได ทางแกไข : (1) ตรวจสอบการตอสาย miniB-USB (2) ตรวจสอบการเลือกพอรตหรือชองเชื่อมตอวา ถูกตองหรือไม (3) เกิดความผิดปกติขึนในระบบคอมพิ ้ วเตอร จึงตองหยุดการทํางานของซอฟตแวร Wiring โดยกดคี ย Ctrl, Alt และ Delete พร อมกัน หนาตาง Window Security ปรากฏขึ้น แลวคลิก เลือก Task Manager หรือในคอมพิวเตอรบางเครืองอาจเข ่ าสูหน าตาง Window Task mangaer ทันที ใหเลือกแท็ป Processes แลวหาชือไฟล ่ avrdude.exe คลิกเลือกทีไฟล ่ นัน้ แลวคลิกทีปุ่ ม End Process
จากนั้นซอฟตแวร Wiring IDE จะกลับมาทํางานในสถานะปกติได ทําการจายไฟให กับบอรดอีกครั้ง เลือกพอรตเชื่อมตอใหถูกตอง แลวทําการอัปโหลดโปรแกรมอีกครั้ง
17
1.4.2 กรณีทีคลิ ่ กปุม Upload แลว มีการแจงความผิดพลาดวา ไมพบฮารดแวร สําหรับการอัปโหลดโปรแกรม
สาเหตุ : ซอฟตแวร Wiring ไมสามารถติดตอกับแผงวงจรหลัก IPST-SE ได เนื่องจากเลือกพอรต อนุกรมที่ใชในการสื่อสารขอมูลไมถูกตอง ทางแกไข : (1) ตรวจสอบการตอสาย miniB-USB (2) ตรวจสอบการเลือกพอรตหรือชองเชื่อมตอ ใหเลือกพอรตทีใช ่ ในการเชื่อมตอใหมใหถูก ตอง โดยเลือกที่เมนู Tools > Serial port
18
1.5 การเปดไฟลตัวอยาง เพื่ออํานวยความสะดวกและลดการผิดพลาดในการพัฒนาโปรแกรมสําหรับผูเริ่มตนใชงาน Wiring จึงไดเตรียมไฟลตัวอยางไวพอสมควร การเปดไฟลตัวอยางทําไดงายมาก โดยไปที่เมนู Help > Example > IPST-SE จะเห็นชือไฟล ่ ใหเลือกเปดใชงานตามตองการ หรือเลือกเปดผานทางคําสัง่ Open ซึงจะปรากฏหน ่ าตาง Explorer ขึนมาเพื ้ อให ่ คนหาไฟล ให เลือกไปที่ C:/Wiring/Examples/IPST-SE จะพบโฟลเดอรที่ใชเก็บไฟลสเก็ตชจํานวนมาก เมือเลื ่ อกเปดโฟลเดอรทีต่ องการ จะพบไฟล .pde ซึงก็ ่ คือไฟลทีใช ่ งานกับ Wiring IDE จากนัน้ จะแกไข, คอมไฟล รวมทั้งอัปโหลดโปรแกรมก็ทําไดตามตองการ
1.6 ขอกําหนดในการแกไขและบันทึกไฟล ในกรณีทีต่ องการแกไขไฟลตัวอยางเดิม ตองเปดไฟลนันๆ ้ ขึนมา ้ ทําการแกไขโคดโปรแกรม ตรวจสอบไวยกรณดวยการคอมไพล เมื่อเรียบรอยแลว มีทางเลือกในการบันทึกไฟล 2 ทางคือ 1. บันทึกในชื่อเดิม ใหใชคําสั่ง Save 2. บันทึกในชื่อใหมดวยคําสั่ง Save As แตไมควรบันทึกทับไฟลเดิมที่ไมไดถูกเปดขึ้น มา เพราะจะทําใหการเชื่อมโยงไฟลสับสน และทําใหเกิดความผิดพลาดในการเปดใชงานครั้งตอไป ได ถาหากมีความตองการบันทึกทับไฟลเดิมที่ไมไดถูกเปดขึ้นมา จะตองทําการลบโฟลเดอรของไฟล เดิมนั้นออกไปเสียกอน
19
IPST-MicroBOX (SE) เปนชุดแผงวงจรอเนกประสงคทีใช ่ อุปกรณควบคุมแบบโปรแกรมได ขนาดเล็กทีเรี่ ยกวา “ไมโครคอนโทรลเลอร” (microcontroller) ทํางานรวมกับวงจรเชือมต ่ อคอมพิวเตอร เพือการโปรแกรมและสื ่ อสารข ่ อมูล โดยในชุดประกอบดวย แผงวงจรควบคุมหลัก IPST-SE ซึงมี ่ ไมโคร คอนโทรลเลอรเปนอุปกรณหลัก, กลุมของแผงวงจรอุ ปกรณแสดงผลการทํางานหรืออุปกรณเอาตพุต อาทิ แผงวงจรแสดงผลดวยไดโอดเปลงแสง 8 ดวง และแผงวงจรแสดงผลดวยไดโอดเปลงแสงแบบตัวเดียว ่ รวมถึงแผงวงจรอุปกรณตรวจจับสัญญาณหรือเซนเซอร (sensor)ซึงมี ่ ดวยกันหลากหลายรูปแบบ จึงทําให ผูใช งานสามารถนําชุดกลองสมองกล IPST-MicroBOX(SE) นีมาใช ้ ในการเรียนรู, ทดลองและพัฒนา โครงงานทางวิทยาศาสตรทีเกี ่ ยวข ่ องกับระบบควบคุมอัตโนมัติไดอยางสะดวกและมีประสิทธิภาพสูง IPST-MicroBOX (SE) มีดวยกัน 2 รุนคือ 1. รุนมาตรฐาน 1 ในชุดนี้ประกอบดวย แผงวงจรควบคุมหลัก IPST-SE เปนอุปกรณหลักที่มี โมดูลแสดงผลกราฟก LCD สีในตัว, แผงวงจร LED, แผงวงจรลําโพง, แผงวงจรตรวจจับสัญญาณ หรือเซนเซอร (sensor) พืนฐาน, ้ และเครื่องจายไฟ ทําใหนําชุด IPST-MicroBOX (SE) นีไปใช ้ ในการ เรียนรูและเขี ยนโปรแกรมเพือพั ่ ฒนาเปนโครงงานทางวิทยาศาสตรทีมี่ การควบคุมดวยระบบอัตโนมัติ โดยใชโปรแกรมภาษา C/C++ ในเบื้องตนไดภายใตงบประมาณที่เหมาะสม 2. รุนมาตรฐาน 2 ในชุดประกอบดวยอุปกรณหลักเหมือนกับชุด IPST-MicroBOX (SE) รุน มาตรฐาน 1 มีการเพิ่มตัวตรวจจับแสงสะทอนอินฟราเรดอีก 2 ตัว, มอเตอรไฟตรงพรอมชุดเฟองขับ หรือ DC motor gearbox และชิ้นสวนทางกลที่จําเปน เพื่อใหผูใชงานสามารถตอยอดการเรียนการส อน การใชงาน IPST-MicroBOX (SE) นีไปสร ้ างเปนหุนยนต อัตโนมัติแบบโปรแกรมได ทั้งยังรองรับ กิจกรรมการแขงขันไดเปนอยางดี
20
1.1 รายการอุปกรณของชุดกลองสมองกล IPST-MicroBOX (SE) รุนมาตรฐาน 1 ประกอบดวย 1. แผงวงจรควบคุมหลัก IPST-SE 2. แผงวงจร LED เดี่ยวพรอมสายสัญญาณ 3 ชุด 3. แผงวงจร LED 8 ดวงพรอมสายสัญญาณ 1 ชุด 4. แผงวงจรลําโพงเปยโซพรอมสายสัญญาณ 1 ชุด 5. แผงวงจรสวิตชพรอมสายสัญญาณ 2 ชุด 6. แผงวงจรตรวจจับแสงพรอมสายสัญญาณ 1 ชุด 7. แผงวงจรตัวตานทานปรับคาไดพรอมสายสัญญาณ 2 ชุด 8. ไอซีวัดอุณหภูมิพรอมสายตอ 1 ชุด 9. อะแดปเตอรไฟตรง +9V 1A 10. สายเชื่อมตอ USB-miniB สําหรับดาวนโหลดโปรแกรมและสื่อสารขอมูล 11. ซีดีรอมบรรจุซอฟตแวรและตัวอยางโปรแกรมการทดลอง 12. คูมื อการทดลอง 13. กลองบรรจุ 14. ไขควง
21
รุนมาตรฐาน 2 ประกอบดวย รายการที่ 1 ถึง 13 ของรุนมาตรฐาน 1 และอุปกรณเพิมเติ ่ มดังนี้ 14. แผงวงจรตรวจจับแสงสะทอนอินฟราเรดพรอมสายสัญญาณ 2 ชุด 15. มอเตอรไฟตรงพรอมชุดเฟองขับรุน BO2 อัตราทด 48:1 พรอมสายเชื่อมตอแบบ IDC จํานวน 2 ตัว 16. ลอพลาสติกกลมสําหรับชุดเฟองขับมอเตอรและยาง จํานวน 2 ชุด 17. แผนกริดขนาด 80 x 60 เซนติเมตรและ 80 x 80 เซนติเมตร จํานวน 2 ชุด 18. แผนฐานกลมพรอมลออิสระ 1 แผน 19. แผนฐานกลมสําหรับทําโครงหุนยนต 1 แผน 20. ชิ้นตอ/แทงตอพลาสติกและเสารองพลาสติก 21. ชุดเสารองโลหะ, นอตและสกรู 22. กะบะถาน AA 6 กอน พรอมสายและหัวตอปองกันการกลับขัวสํ ้ าหรับตอกับแผงวงจรหลัก 23. แผนทดสอบการเคลือนที ่ ตามเส ่ นของหุนยนต
22
2.1 คุณสมบัติของแผงวงจรหลัก IPST-SE มีหนาตาของแผงวงจรแสดงในรูปที่ 2-1 สวนรูปที่ 2-2 แสดงรายละเอียดที่สําคัญของแผงวงจร IPST-SE ที่ควรทราบเพื่อใชประโยชนในการอางถึงเมื่อทําการทดลอง สวนคุณสมบัติโดยสรุปของ IPST-SE เปนดังนี้ ใชไมโครคอนโทรลเลอร 8 บิตเบอร ATmega644P ของ Atmel รองรับโปรแกรมควบคุมที่ พัฒนาจากภาษาแอสเซมบลี, เบสิก และ C โดยในที่นีจะเน ้ นไปที่โปรแกรมภาษา C/C++ โดยภายใน มีโมดูลแปลงสัญญาณอะนาลอกเปนดิจิตอล ความละเอียด 10 บิต ใหคาของขอมูลในชวง 0 ถึง 1,023 จึงนํามาตอกับแผงวงจรตรวจจับทีให ่ ผลการทํางานเปนแรงดันไฟฟาไดงาย มีหนวยความจําโปรแกรม แบบแฟลชมากถึง 64 กิโลไบต โปรแกรมใหมได 10,000 ครั้ง มีหนวยความจําขอมูลอีอีพรอม 512 ไบต และหนวยความจําขอมูลแรม 1 กิโลไบต สัญญาณนาฬิกาหลัก 16MHz จากคริสตอล มีจุดตอพอรต USB มีสวิตช RESET
สําหรับดาวนโหลดโปรแกรมและสื่อสารขอมูลกับคอมพิวเตอร
การทํางาน
มีจุดตอพอรตแบบ 3 ขา (ขาไฟเลี้ยง, สัญญาณ และกราวด) จํานวน 20 จุด แบงเปนขาพอรต
ดิจิตอล 13 จุด (ขาพอรตหมายเลข 2, 3, 8, 9, 12 ถึง 20) และขาพอรตแบบดิจิตอลหรืออะนาลอก (กําหนดได) 7 จุด (หากใชเปนขาอินพุตอะนาลอกเปนขา A0 ถึง A6 และถาใชเปนขาพอรตดิจิตอล เปนขาพอรตหมายเลข 24 ถึง 30)
รูปที่ 2-1 แผงวงจรหลัก IPST-SE มีจอแสดงผล กราฟ กสี ความละเอียด 128 x 160 จุด แสดงตัวอักษรขนาดมาตรฐานไดมากถึง 21 ตัวอักษร 16 บรรทัด อัปโหลดโปรแกรมผาน พอรต USB
8 SCL 9 SDA
28 A4 25 A1
29 A5 26 A2
30 A6 27 A3
USB D 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 000000 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 ON 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 000 0 0 0 0000 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 G 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 6V 0 0 000 0 0 0 0 0000 00 00 0000 KNOB 12 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 G 00000 0 0 00 0 00 0 0 0 0 0 0 0 0 0 OK 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 6V 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 13 SW1 6VG 14 UART1 G 6V 1 2 +5 LOW 16 18 15 SERVO 17 19 20 2 RxD1 3 TxD1 RESET
24 A0
รูปที่ 2-2 แสดงสวนประกอบทีควรทราบของแผงวงจรหลั ่ ก IPST-SE 23
15 SV0 14 SV1 13 SV2 12 SV3
DC MOTOR
24
มีจุดตอระบบบัส 2 สาย (I2C) เพือขยายระบบ ่
มีจุดตอสําหรั บสื่อสารขอมูลอนุกรมหรือ UART (Universal Asynchronous Receiver Transmitter) เพื่อขยายระบบ
ใชไฟเลียงในย ้ าน +6.5 ถึง +9V กระแสไฟฟา 1,500mA กรณีตอใชงานมอเตอรไฟตรงและ เซอรโวมอเตอรรวมดวย หรือ 500mA กรณีไมใชงานมอเตอร บนแผงวงจรหลัก IPST-SE มีวงจร ควบคุมแรงดันคงที่ +5V จึงนําไปจายใหกับแผงวงจรตอพวงอืนๆ ่ รวมทังแผงวงจรตั ้ วตรวจจับดวย
มีจุดตอไฟเลียง ้ (DC INPUT) ผานทางจุดตอแบบหัวเสียบปองกันการตอกลับขั้วและแจก อะแดปเตอร รับไฟเลียงได ้ ตังแต ้ 7.2V ถึง +9V โดยมีสวิตชเปด-ปดเพือตั ่ ดตอไฟเลียงแก ้ แผงวงจร พรอม ไฟแสดงสถานะไฟเลียง ้ +5V และมีวงจรแจงสถานะแบตเตอรีอ่ อน (LOW) ดวย LED สีเหลืองในกรณี ที่ใชแหลงจายไฟเปนแบตเตอรี่ โดยกําหนดระดับแรงดันไวที่ +7V
มีวงจรควบคุมไฟเลี้ยงคงที่
+5V 2A แบบสวิตชิงสํ ่ าหรับรักษาระดับไฟเลี้ยงใหแกไมโคร
คอนโทรลเลอร มีวงจรขับมอเตอรไฟตรง 2 ชอง พรอมไฟแสดงผล มีจุดตอขาพอรตของไมโครคอนโทรลเลอรสําหรับขับเซอรโวมอเตอร 4 ชองคือ จุดตอ 15,
14, 13 และ 12 (เรียงตามลําดับ SERVO0, SERVO1, SERVO2 และ SERVO3) มีโมดูลแสดงผลแบบกราฟกสี ความละเอียด 128 x 160 จุด แสดงภาพกราฟกลายเสน และ
พื้นสี (ไมรองรับไฟลรูปภาพใดๆ) พรอมไฟสองหลัง แสดงผลเปนตัวอักษรขนาดปกติ (5x7 จุด) ได 21 ตัวอักษร 16 บรรทัด (21 x 16) ่ อกับขาพอรตหมายเลข 22 มีสวิตชกดติดปลอยดับใชงานอิสระ 1 ตัว คือ SW1 ซึงต มีสวิตชกดติดปลอยดับชื่อ สวิตช
OK ซึ่งตอรวมกับตัวตานทานปรับคาไดชื่อ KNOB ซึง่ เชื่อมตอไปยังขาพอรตดิจิตอลหมายเลข 31 (หรืออินพุตอะนาลอก A7) ทําใหอานคาสัญญาณดิจิตอล และอะนาลอกไดในขาพอรตเดียวกัน มีจุดตอ ISP
สําหรับอัปเกรดหรือกูเฟ รมแวร โดยใชชุดโปรแกรมแบบ ISP เพิ่มเติม (แนะ นําเครื่องโปรแกรม AVR-ISP mark II ของ Atmel)
25
2.2 คุณสมบัติของชุดอุปกรณเอาตพุต ้ ดมาตรฐาน 1 และ 2) 2.2.1 แผงวงจรไฟแสดงผล : ZX-LED (มีทังในชุ ใช LED ขนาด 8 มิลลิเมตร ตองการลอจิก “1” ในการขับใหสวาง มีวงจรแสดงในรูปที่ 2-3
LED1 R1 (Default = 510)
S
+
Q1 KRC102 (DTC114)
รูปที่ 2-3 รูปรางและวงจรของแผงวงจรไฟแสดงผล ZX-LED ทีใช ่ ในชุดกลองสมองกล IPST-MicroBOX(SE)
้ ดมาตรฐาน 1 และ 2) 2.2.2 แผงวงจรไฟแสดงผล 8 ดวง : ZX-LED8 (มีทังในชุ เปนแผงวงจรที่มี LED ขนาด 3 มิลลิเมตรสําหรับแสดงผล 8 ดวง พรอมจุดตอพวงเอาตพุตเพื่อ นําไปใชในการขับรีเลยไดดวย โดยแผงวงจร ZX-LED8 นีจะต ้ อเขากับขาพอรตใดของแผงวงจร IPSTSE ก็ได โดยใชขาพอรตเพียงขาเดียวในการควบคุมและขับ LED ใหติดดับตามที่ตองการไดพรอมกัน ถึง 8 ดวง มีหนาตาของแผงวงจรแสดงในรูปที่ 2-4
รูปที่ 2-4 รูปรางแผงวงจรไฟแสดงผล ZX-LED8 ทีใช ่ ในชุดกลองสมองกล IPST-MicroBOX(SE)
26
ในแผงวงจร ZX-LED8 ใชการติดตอกับแผงวงจรหลัก IPST-SE ในแบบสือสารข ่ อมูลอนุกรม รวมกับคําสังทางซอฟต ่ แวร ผูพัฒนาโปรแกรมสามารถเขียนโปรแกรมให ZX-LED8 ติดดับไดตังแต ้ 1 ถึง 8 ตัว หรือจะเขียนโปรแกรมใหทํางานเปนไฟวิงได ่ ตังแต ้ 1 ถึง 8 ดวงเชนกัน ที่ดานบนของแผงวงจร ZX-LED8 มีจุดตอ JST ซึงต ่ อพวงมาจาก LED ทํางานทีลอจิ ่ ก “1” มี ระดับแรงดันไฟตรงขาออกประมาณ +5V จึงสามารถใชสัญญาณเอาตพุตจากจุดนี้ไปตอกับวงจรขับ โหลดกระแสไฟฟาสูง อาทิ แผงวงจรขับรีเลย ไดทันที โดยไมตองเขียนโปรแกรมควบคุมเพิ่มเติม
้ ดมาตรฐาน 1 และ 2) 2.2.3 แผงวงจรลําโพงเปยโซ : ZX-SPEAKER (มีทังในชุ มีวงจรและหนาตาของบอรดแสดงในรูปที่ 2-5 คุณสมบัติทางเทคนิคที่สําคัญมีดังนี้ ใชลําโพงเปยโซ มีอิมพีแดนซ 32 มีคาความถีเรโซแนนซ ่ ในยาน1 ถึง 3kHz
K1 SOUND + S
C1 10/16V
SP1 Piezo speaker
รูปที่ 2-5 วงจรของแผงวงจรลําโพง ZX-SPEAKER
27
2.3 คุณสมบัติของชุดอุปกรณตรวจจับสัญญาณ 2.3.1 แผงวงจรสวิตช : ZX-SWITCH01
(มีทังในชุ ้ ดมาตรฐาน 1 และ 2)
D
ZX-SWITCH01
มีวงจรแสดงในรูปที่ 2- 6 ประกอบดวยสวิตชพรอมไฟแสดงผล ใหเอาตพุตคือ หากมีการกดสวิตช จะสงลอจิก “0” (ระดับแรงดัน 0V) และไฟสีแดงติด LED1
Indicator
+V
R2 10k R1 510
R3 220
DATA
Signal output S1 GND Switch
รูปที่ 2-6 รูปรางและวงจรของแผงวงจรสวิตชทีใช ่ ในชุดกลองสมองกล IPST-MicroBOX(SE)
2.3.2 แผงวงจรตรวจจับแสง : ZX-LDR
(มีทังในชุ ้ ดมาตรฐาน 1 และ 2)
ใชตรวจจับแสงสวาง เลือกเอาตพุตได 2 แบบคือ แรงดันเอาตพุตเพิ่ม เมื่อแสงตกกระทบ
+
แรงดันเอาตพุตลดลง เมื่อแสงตกกระทบ มีวงจรและรูปรางของแผงวงจรแสดงในรูปที่ 2-7
+
LDR Light
+
A
เมื่อแสงมากขึ้น แรงดันที่ไดจะลดลง เมื่อแสงมากขึ้น แรงดันที่ไดจะมากขึ้น
ZX-LDR +
10k
S
+
A
+
LDR
S
+
รูปที่ 2-7 รูปรางและวงจรของแผงวงจรตรวจจับแสงที่ใชในชุดกลองสมองกล IPST-MicroBOX(SE)
28
2.3.3 แผงวงจรตัวตานทานปรับคาไดแบบแกนหมุน : POTENTIOMETER (มี ทังในชุ ้ ดมาตรฐาน 1 และ 2) ใชกําหนดแรงดัน 0 ถึง +5V ตามการหมุนแกน นําไปใชวัดคามุมและระยะทางได มีทั้งแบบ ตัวตั้งและตัวนอน มีเอาตพุต 2 แบบคือ แรงดันมากขึนเมื ้ ่อหมุนทวนเข็มนาฬิกาหรือ ตามเข็มนาฬิกา มีวงจรและหนาตาของแผงวงจรแสดงในรูปที่ 2-8 แบบตัวตั้ง
เมื่อหมุนทวนเข็มนาฬิกา แรงดันที่ไดจะมากขึ้น
A
POTENTIOMETER
แบบตัวนอน A
ZX-POTV/POTH
A
Potentiometer
เมื่อหมุนตามเข็มนาฬิกา แรงดันที่ไดจะมากขึ้น เมื่อหมุนทวนเข็มนาฬิกา แรงดันที่ไดจะมากขึ้น เมื่อหมุนตามเข็มนาฬิกา แรงดันที่ไดจะมากขึ้น
S + S +
10kB
รูปที่ 2-8 แสดงรูปราง, วงจร และการทํางานของแผงวงจรตัวตานทานปรับคาไดแบบแกนหมุน
29
2.3.4 ไอซีวัดอุณหภูมิ MCP9701 (มีทังในชุ ้ ดมาตรฐาน 1 และ 2) เปนอุปกรณตรวจจับและวัดอุณหภูมิทีให ่ ผลการทํางานเปนแรงดันไฟฟาแบบเชิงเสน รับรูการ เปลี่ยนแปลงของอุณหภูมิภายในเวลาไมถึง 2 วินาที เชื่อมตอกับอินพุตอะนาลอก A0 ถึง A6 ของแผง วงจรหลัก IPST-SE ไดทันที ในรูปที่ 2-9 แสดงการจัดขาและกราฟคุณสมบัติของไอซีวัดอุณหภูมิเบอร MCP9701 คุณสมบัติทางเทคนิคของ MCP9701 ที่ควรทราบ เปนไอซีวัดอุณหภูมิในกลุมเทอร มิสเตอรแบบแอกตีฟที่ใหผลการทํางานแบบเชิงเสน ยานวัด -40 ถึง +125 องศาเซลเซียส ผลการวัดอางอิงกับหนวยขององศาเซลเซียสโดยตรง
่ 2 องศาเซลเซียส ความผิดพลาดเฉลีย ยานไฟเลียง ้ +3.1 ถึง +5.5V กินกระแสไฟฟาเพียง 6uA ใชแบตเตอรี่เปนแหลงจายไฟได คาแรงดันเอาตพุต
500mV (ที่ 0๐C) ถึง 2.9375V (ที่ 125๐)
คาแรงดันเอาตพุตตอการเปลียนแปลงอุ ่ ณหภูมิ 19.5mV/๐C ใชงานกับวงจรแปลงสัญญาณ
อะนาลอกเปนดิจิตอลความละเอียดตั้งแต 8 บิตได โดยมีความคลาดเคลื่อนตํ่า ไมตองการอุปกรณภายนอกตอเพิ่มเติมเพื่อชดเชยการทํางาน
รูปที่ 2-9 การจัดขาของ MCP9701, หนาตาเมื่อตอสายสัญญาณพรอมใชงานและกราฟคุณสมบัติ
30
จุดตอสัญญาณ +V TCRT5000
OUT GND
10k
510
ตั วตรวจจับแสงสะทอนอินฟราเรด
รูปที่ 2-10 หนาตาและวงจรของแผงวงจรตรวจจับแสงสะทอนอินฟราเรดทีใช ่ ในชุด IPST-MicroBOX (SE) รุนมาตรฐาน 2
2.3.5 แผงวงจรตรวจจับแสงสะทอนอินฟราเรด : ZX-03 (มีในชุดมาตรฐาน 2) มีวงจรและหนาตาของแผงวงจรแสดงในรูปที่ 2-10 เปนแผงวงจรที่ใชในการตรวจสอบการ สะทอนของแสงอินฟราเรดของตัวตรวจจับแสงสะทอนอินฟราเรดซึงรวมตั ่ วสงและตัวรับไวในตัวถัง เดียวกัน โดยตัวตรวจจับแสงสะทอนอินฟราเรดที่นํามาใชคือ TCRT5000 เมื่อจายไฟเลียง ้ LED อินฟราเรดภายในตัวโมดูล TCRT5000 จะเปลงแสงออกมาตลอดเวลา สวนตัวรับซึ่งเปนโฟโตทรานซิสเตอรจะไดรับแสงอินฟราเรดจากการสะทอนกลับ โดยปริมาณของ แสงที่ไดรับจะมากหรือนอยขึนอยู ้ กั บวา มีวัตถุมากีดขวางหรือไม และวัตถุนันมี ้ ความสามารถในการ สะทอนแสงอินฟราเรดไดดีเพียงไร ซึงขึ ่ นกั ้ บลักษณะพื้นผิวและสีของวัตถุ โดยวัตถุสีขาวผิวเรียบจะ สะทอนแสงอินฟราเรดไดดี ทําใหตัวรับแสงอินฟราเรดไดรับแสงสะทอนมาก สงผลใหแรงดันทีเอาต ่ พุตของวงจรสูงตามไปดวย ในขณะที่วัตถุสีดําสะทอนแสงอินฟราเรดไดนอย ทําใหตัวรับอินฟราเรด สงแรงดันออกมาตํา่ ดวยคุณสมบัติดังกลาวจึงนิยมนําแผงวงจรตรวจจับแสงสะทอนอินฟราเรดนีมาใช ้ ในการตรวจจับพื้นหรือเสน โดยตองติดตั้งไวดานลางของโครงหุนยนต เนืองจากแผงวงจรตรวจจั ่ บแสงสะทอนอินฟราเรด ZX-03 ใหผลการทํางานเปนแรงดันไฟตรง ดังนันในการใช ้ งานกับแผงวงจรหลัก IPST-SE จึงตองตอเขากับชองอินพุตอะนาลอก (A0 ถึง A6) ของแผงวงจรหลัก จากนั้นใชความรูจากการอานคาสัญญาณอะนาลอก เพื่ออานคาจากแผงวงจรตรวจ จับแสงสะทอนอินฟราเรดนําไปสูการตรวจจับเสนตอไป
31
2.4 ขอมูลของอุปกรณทางกลทีใช ่ ในชุด IPST-MicroBOX (SE) รุนมาตรฐาน 2 2.4.1 มอเตอรไฟตรงพรอมชุดเฟองขับ เปนชุดมอเตอรพรอมเฟองขับรุน BO-2 อัตราทด 48:1 มีสายตอ 2 เสน คุณสมบัติทางเทคนิคที่ สําคัญมีดังนี้ ตองการไฟเลียงในย ้ าน +3 ถึง +9Vdc กินกระแสไฟฟา 130mA (ที่ไฟเลียง ้ +6V และไมมีโหลด) ความเร็วเฉลีย ่ 170 ถึง 250 รอบตอนาที (ที่ไฟเลียง ้ +6V และไมมีโหลด) นําหนั ้ ก 30 กรัม แรงบิดตําสุ ่ ด 0.5 กิโลกรัม-เซนติเมตร
ติดตั้งเขากับตัวยึดพลาสติกแบบมีพุกทองเหลืองสําหรับยึดในตัว
ขนาด (กวาง x ยาว x สูง) 42 x 45 x 22.7 มิลลิเมตร
2.4.2 ลอพลาสติกสําหรับชุดเฟองขับมอตอรและยาง เปนลอกลม มีเสนผานศูนยกลาง 65 มิลลิเมตร สามารถสวมเขากับแกนของชุดเฟองขับมอเตอร ไดทันทีโดยไมตองดัดแปลงเพิมเติ ่ ม ขันยึดดวยสกรูเกลียวปลอย 2 มิลลิเมตร สวนยางขอบลอทีใช ่ รวม ดวยผลิตจากยางพารา ผิวมีดอกยางเพื่อชวยเพิ่มสมรรถนะในการเกาะพื้นผิว
32
2.4.3 แผนกริด เปนแผนพลาสติกที่ผลิตจากวัสดุ ABS ขนาด 80 x 60 มิลลิเมตร และ 80 x 80 มิลลิเมตร อยาง ละ 1 แผน ในแตละมีรูขนาด 3 มิลลิเมตรที่มีระยะหางกัน 5 มิลลิเมตร
2.4.4 แผนฐานกลม เปนแผนพลาสติกที่ผลิตจากวัสดุ ABS ขนาดเสนผานศูนยกลาง 250 มิลลิเมตร เปนแผนฐาน สําหรับยึดอุปกรณตางๆ ที่แผนฐานมีรูขนาด 3 มิลลิเมตรสําหรับติดตั้งอุปกรณหรือโครงสรางกลไก เพิ่มเติม มีรูปรางเปนแผนกลม ในชุดมีให 2 แบบ แบบมีลอกลมกึงอิ ่ สระทั้งดานหนาและหลัง และ แบบมาตรฐานไมมีลอกลมกึงอิ ่ สระ
2.4.5 ชิ้นตอพลาสติก เปนชินส ้ วนพลาสติกแข็งเหนียว มี 3 แบบคือ ชิ้นตอแนวตรง, ชิ้นตอมุมฉาก และชิ้นตอมุม ปาน สามารถเสียบตอกันได ใชตอกันเปนโครงสรางหรือตกแตง บรรจุ 3 แบบ รวม 30 ชิ้น
33
2.4.6 แทงตอพลาสติก เปนชินส ้ วนพลาสติกแข็งเหนียวในแตละชิ้นจะมีรูขนาด 3 มิลลิเมตรสําหรับรอยสกรูเพื่อติด ตั้งหรือตอกับชิ้นสวนโครงสรางอื่นๆ ที่ปลายของแทงตอสามารถเสียบเขากับชิ้นตอพลาสติกได ใน ชุดมี 3 ขนาด คือ 3, 5 และ 12 รู แตละขนาดมี 4 ชิ้น
2.4.7 สกรูและนอต เปนอุปกรณสําหรับยึดชินส ้ วนตางๆ เขาดวยกัน ในชุดประกอบดวย สกรูมือหมุน (4 ตัว), สกรูเกลียวปลอย 2 มิลลิเมตร (2 ตัว), สกรู 3 x 8 มิลลิเมตร (4 ตัว), 3 x 10 มิลลิเมตร (30 ตัว), 3 x 15 มิลลิเมตร (4 ตัว), 3 x 40 มิลลิเมตร (4 ตัว), สกรูหัวตัด 3 x 8 มิลลิเมตร (10 ตัว) และนอต 3 มิลลิเมตร (30 ตัว)
2.4.8 เสารองโลหะ เปนอุปกรณชวยยึดชินส ้ วนตางๆ และรองรับแผงวงจร, แผนกริดและแผนฐาน ทําจากโลหะ ชุบนิเกิลกันสนิม มีลักษณะเปนแทงทรงกระบอกยาว 50 มิลลิเมตร ภายในมีรูเกลียวตลอดตัวสําหรับ ขันสกรู 3 มิลลิเมตร ในชุดมี 4 ตัว
34
2.4.9 เสารองพลาสติก เป นอุ ปกรณช วยยึ ดชิ้ นสวนตางๆ และประคองรองรับแผงวงจร, แผนกริดและแผนฐาน ทําจากพลาสติก ABS เหนียว สามารถตัดได มีลักษณะเปนแทงทรงกระบอก ภายในมีรูตลอดตัวสําหรับ รอยสกรู 3 มิลลิเมตร ในชุดประกอบดวย เสารองขนาด 3 มิลลิเมตร (4 ตัว), 10 มิลลิเมตร (4 ตัว), 15 มิลลิเมตร (4 ตัว) และ 25 มิลลิเมตร (4 ตัว)
2.4.10 กะบะถาน ใชบรรจุแบตเตอรีขนาด ่ AA จํานวน 6 กอน มีสายตอขัวบวกและขั ้ วลบสํ ้ าหรับตอกับแผงวงจร ควบคุมหลัก IPST-SE ไดทันที
35
2.5 ขอมูลของสายสัญญาณทีใช ่ ในชุดกลองสมองกล IPST-MicroBOX (SE) 2.5.1 สาย JST3AA-8 : สายเชือมต ่ อระหวางแผงวงจร
สาย JST3AA-8 ใชเชื่อมตอระหวางแผงวงจรควบคุม IPST-SE กับแผงวงจรตรวจจับและแผง วงจรอุปกรณตางๆ เปนสายแพ 3 เสน ยาว 8 นิว้ ปลายสายทั้งสองดานติดตั้งคอนเน็กเตอรแบบ JST 3 ขา ตัวเมีย ระยะหางระหวางขา 2 มิลลิเมตร มีการจัดขาดังนี้ ระยะหางระหวางขา 2 มม.
ระยะหางระหวางขา 2 มม.
GND S +5V
2.5.2 สาย USB-miniB เปนสายสัญญาณสําหรับเชื่อมตอระหวางพอรต USB ของคอมพิวเตอรกับแผงวงจร IPST-SE
36
37
ในบทนีนํ้ าเสนอขอมูลในขันต ้ นของ Wiring ซึงเป ่ นเครืองมื ่ อทางซอฟตแวรสําหรับพัฒนาการ ทํางานของชุดกลองสมอง IPST-MicroBOX Secondary Edition(SE) สําหรับรายละเอียดของโปรแกรม ภาษา C/C++ ที่ Wiring รองรับอานเพิ่มเติมไดจากหนังสือ โครงสรางของโปรแกรมภาษา C/C++ สําหรับ Wiring IDE ที่จัดมาพรอมกันในชุดกลองสมองกล IPST-MicroBOX (SE) แลว
3.1 สวนประกอบของ Wiring IDE Wiring IDE ประกอบดวย 2 สวนทีสํ่ าคัญคือ เท็กซเอดิเตอร (text editor) และ ตัวแปลภาษา C (C compiler) ดานเครืองมื ่ อหรือปุมคํ าสังที ่ ช่ วยในการพัฒนาโปรแกรมก็มีหลากหลาย สรุปดังรูปที่ 3-1
รูปที่ 3-1 หนาตางหลักของซอฟตแวร Wiring IDE ทีใช ่ ในการพัฒนาโปรแกรม
38
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 ทังหมด ้
39
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) : คนหาขอความหรือคําตัวถัดไปภายในไฟลที่เปดอยูในเท็ กซเอดิเตอร
40
3.1.1.3 เมนู Sketch เป นเมนูคําสั่งที่เกียวข ่ องกับการคอมไพลไฟลสเก็ตช
Verify/Compile (Ctrl+R) : เปนคําสั่งคอมไพลโปรแกรม ทํางานเหมือนกับการกดปุม บนแถบเครื่องมือ Import Library : ใชเลือกผนวกไฟลไลบรารีที่ตองการลงในไฟลสเก็ตช Show Sketch Folder : แสดงโฟลเดอรของไฟลสเก็ตชปจจุบัน Add File : เลือกไฟลโปรแกรมที่ตองการเพิ่มลงไปในไฟลสเก็ตช
3.1.1.4 เมนู Tools เปนเมนูคําสั่งที่เกียวข ่ องกับการเลือกใชเครื่องมือชวยในการพัฒนาโปรแกรม คําสั่งสําคัญที่ ควรทราบมีดังนี้
41
Auto Format : เลือกใหมีการจัดรูปแบบของโคดใหดูเปนระเบียบ Serial Monitor : เลือกเปดการทํางานและแสดงผลของ Serial Monitor Board : ใชเลือกรุนของฮารดแวรที่ใชกับ Wiring 1.0 ในทีให ่ เลือก IPST-SE > IPST-SE, ATmega644 @ 16MHz Serial Port : ใชเลือกตําแหนงของพอรตคอมพิวเตอรทีใช ่ ติดตอกับฮารดแวรจากหัวขอ Board สําหรับแผงวงจร IPST-SE โดยปกติมีคาตังแต ้ COM3 ขึนไป ้
3.1.1.5 Help
Getting Started : เปดหนาตางเกียวกั ่ บการเริมต ่ นเรียนรูและใช งาน Wiring ของเว็บไซต http:/ /wiring.org.co/learning/tutorials/ จะตองตออินเทอรเน็ต หากตองการดูขอมูล Examples : เลือกเปดไฟลสเก็ตชของโปรแกรมตัวอยาง Reference : เปดหนาตาง Reference ของเว็บไซต Wiring ตองตออินเทอรเน็ต หากตองการดูขอมูล 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
42
3.1.2 แถบเครื่องมือ : Toolbar มีฟงกชั่นพื้นฐาน 6 ปุม และการทํางานในขั้นตนดังนี้ Run หรือ Compile ใชในการคอมไพลโคดโปรแกรม New ใชสรางไฟลสเก็ตชใหม (ใน Wiring จะเรียกไฟลที่ทําการพัฒนาวา สเก็ตช (sketch) Open เปดไฟลสเก็ตชที่มีอยู Save บันทึกไฟลสเก็ตชปจจุบันใสในโฟลเดอรของไฟลสเก็ตชที่ทํางานอยู ถาตองการ บันทึกในชื่ออืน่ ใหเลือกใชคําสั่ง Save As จากเมนู File Upload to Wiring hardware ใชสงไฟลสเก็ตชปจจุบันไปสเก็ตชบุกและอัปโหลด โปรแกรมไปยังฮารดแวร Wiring ในที่นีคื้ อ แผงวงจร IPST-SE (ใน Wiring จะเรียกกระบวนการดาวน โหลดโปรแกรมไปยังฮารดแวรวา อัปโหลด : upload) Serial monitor เปดการเชือมต ่ อระหวางแผงวงจร IPST-SE กับพื้นที่มอนิเตอรของ Wiring IDE ผานทางพอรตอนุกรมเสมือนที่เกิดจากไดรเวอรของวงจรแปลงสัญญาณพอรต USB เปนพอรตอนุกรมหรือ USB serial port เพือดู ่ ขอมูลทีส่ งกลับมาจากแผงวงจร IPST-SE ซึงมี ่ ประโยชน มากในการตรวจสอบการทํางานของโปรแกรม
43
3.1.3 Serial monitor Wiring IDE ไดผนวกเครื่องมือสําหรับแสดงผลและสงขอมูลผานพอรตอนุกรม หรือ USB เพื่อติดตอกับแผงวงจร IPST-SE นันคื ่ อ Serial monitor โดยในการเขียนโปรแกรมจะตองบรรจุคําสั่ง Serial.println() ลงในโปรแกรมดวย อยางไรก็ตามกอนการใชคําสัง่ Serial.println()จะตองมีการ กําหนดคาอัตราเร็วในการถายทอดขอมูลหรืออัตราบอดหรือบอดเรต (baud rate) กอน โดยใชคําสั่ง Serial.begin()ซึ่งโดยปกติกําหนดคาเปน 9600 บิตตอวินาที และควรบรรจุคําสั่ง Serial.begin()ให อยูในสวน setup()ของโปรแกรมทุกครั้ง บนแถบเครือง ่ การเรียกใหหนาตาง Serial Monitor ใหทํางาน ทําไดงายมากเพียงคลิกทีปุ่ ม มื อ หนาตาง Serial Monitor จะปรากฏขึนเพื ้ อแสดงข ่ อความที่รับมาจากแผงวงจร IPST-SE ผานทาง พอรต USB หรือพอรตอนุกรมที่ดานบนของหนาตาง Serial Monitor จะเปนชองสําหรับปอนขอมูล เพื่อสงคาจากโปรแกรมมายังแผงวงจร IPST-SE
44
3.2 ขั้นตอนการพัฒนาโปรแกรม (1) ตรวจสอบการติดตังฮาร ้ ดแวรและซอฟตแวรของ Wiring รวมถึงการตังค ้ าของพอรตทีเชื ่ อม ่ ตอกับฮารดแวร Wiring I/O ในทีนี่ คื้ อ แผงวงจร IPST-SE ของชุดกลองสมองกล IPST-MicroBOX (SE) (2) สรางไฟลสเก็ตชใหมดวยการคลิกทีปุ่ ม New บนแถบเครืองมื ่ อหรือเลือกจากเมนู File > New
(3) พิมพโคดโปรแกรมตอไปนี้ #include <ipst.h> void setup() { glcdClear(); glcdMode(0); } void loop() { setTextSize(2); setTextColor(GLCD_YELLOW); glcd(1,1,"Hello"); setTextColor(GLCD_SKY); glcd(3,1,"IPST"); glcd(4,1,"MicroBOX"); setTextSize(1); glcd(10,2,"Secondary Education"); }
// ผนวกไฟลไลบรารีหลัก ipst.h // ลางการแสดงผล // เลือกทิศทางการแสดงผลโหมด 0
// เลือกขนาดตัวอักษร 2 เทา // เลือกสีของตัวอักษรเปนสีเหลือง // กําหนดขอความที่บรรทัด 1 คอลัมน 1 // เลือกสีของตัวอักษรเปนสีฟา // กําหนดขอความที่บรรทัด 3 คอลัมน 1 // กําหนดขอความที่บรรทัด 4 คอลัมน 1 // เลือกขนาดตัวอักษรปกติ // กําหนดขอความที่บรรทัด 10 คอลัมน 2
โปรแกรมนีใช ้ ในการทดสอบการทํางานเบื้องตนของแผงวงจร IPST-SE โดยกําหนดให แสดงขอความที่จอแสดงผลดวยขนาดและสีของตัวอักษรที่ตางกัน
45
(4) ไปที่เมนู File เลือกคําสั่ง Save As เพื่อบันทึกไฟลในชื่อ Test ตอนนี้จะมีไฟล test.pde เกิดขึ้นในโฟลเดอรชื่อวา test
(5) ตรวจสอบการเขียนโปรแกรมดวยการคลิกที่ปุม Run ที่แถบเครื่องมือหรือเลือกคําสั่งจาก เมนู Sketch > Compile/Verify
หากมีความผิดพลาดเกิดขึ้นจากการคอมไพล จะปรากฏขอความแจงความผิดพลาด ในชองแสดงสถานะและพื้นที่แสดงขอความ ตองทําการแกไขโปรแกรม
หากการคอมไพลถูกตอง ที่ชองแสดงสถานะจะแจงแสดงขอความ Done compiling
46
2
3
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000 0000000000000 00000000
ON
SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
USB
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
24 A0
4
KNOB
8 SCL 9 SDA
1
SERVO
รูปที่ 3-1 การเชือมต ่ อแผงวงจร IPST-SE กับคอมพิวเตอรเพื่อใชงานกับซอฟตแวร Wiring IDE หลังจากการคอมไพลสําเร็จ ในโฟลเดอร Test จะมีโฟลเดอรใหมเกิดขึ้นชือว ่ า Build ภายในโฟลเดอร Build จะบรรจุไฟลซอรสโปรแกรมภาษา C++ และไฟลประกอบ (5) ตอสาย USB เขากับแผงวงจร IPST-SE จากนั้นเปดสวิตชจายไฟเลียง ้ แลวรอใหการเชื่อม ตอกับคอมพิวเตอรเสร็จสมบูรณ (ดูจากไฟแสดงผลสีนําเงิ ้ นทีตํ่ าแหนง USB ติดสวาง) (6) คลิกที่ปุม Upload to Wiring Hardware บนแถบเครื่องมือ ถาทุกอยางเปนปกติ เมื่อทําการอัปโหลดเสร็จ จะมีขอความแจงที่ชองแสดงสถานะวา Done uploading. RESET to start the new program. และที่พื้นทีแสดงข ่ อความจะแจงกระบวนการและผลคอมไพล รวมถึงขนาดของ ไฟลผลลัพธที่เกิดขึ้น
47
ถามีขอผิดพลาดเกิดขึ้นจะมีขอความแจงในพื้นที่แสดงขอความดานลางของหนาตาง โปรแกรมหลัก
ซึงส ่ วนใหญแลวมักเกิดจากการเลือกพอรตอนุกรมไมถูกตอง การแกไขใหดูในหัวขอ การแกปญหาในกรณีที่อัปโหลดโปรแกรมไมได ในบทที่ 1 (7) หลังจากอัปโหลดโปรแกรมแลว แผงวงจรหลัก IPST-SE จะทํางานทันทีดังรูป
48
3.3 ตําแหนงการเก็บไฟลสเก็ตชของ Wiring ผูพั ฒนาโปรแกรมบันทึกไฟลสเก็ตชไวทีใดในพื ่ นที ้ จั่ ดเก็บแฟมขอมูลของคอมพิวเตอรก็ได แต เพืออํ ่ านวยความสะดวกและจดจํางาย Wiring IDE จึงกําหนดคาตังต ้ น (default) ของตําแหนงจัดเก็บ โฟลเดอรของไฟลสเก็ตชที่พัฒนาขึนไว ้ ที่ C:\Documents and Settings\Admin (หรือชื่อผูใช) \My Documents\Wiring สามารถตรวจสอบรวมถึงกําหนดตําแหนงใหมได โดยไปทีเมนู ่ File > Preference จะปรากฏหนาตาง Preference ขึนมาดั ้ งรูป หากตองการเปลี่ยนแปลงตําแหนงโฟลเดอรที่จัด เก็บไฟลสเก็ตชทีช่ อง Sketchbook location โดยใชเมาสคลิกทีปุ่ มคนหาทางดานขวามือ หรือจะพิมพ ตําแหนงลงไปในชอง Sketchbook location โดยตรงก็ได จากนั้นคลิกปุม OK เพื่อตอบตกลงและ ยืนยันการเปลียนแปลง ่
สวนพารามิเตอรหรือขอกําหนดอืนๆ ่ แนะนําใหใชตามคาทีกํ่ าหนดมา ทังนี ้ เพื ้ อลดขั ่ นตอนการ ้ พัฒนาโปรแกรมและความผิดพลาดทีอาจเกิ ่ ดขึ้นไดสําหรับนักพัฒนาโปรแกรมมือใหมหรือผูเริ่มตน
49
3.4 การเปดไฟลสเก็ตชตัวอยาง เพื่ออํานวยความสะดวกและลดการผิดพลาดในการพัฒนาโปรแกรมสําหรับผูเริ่มตนใชงาน Wiring ผูเขียนจึงไดเตรียมไฟลสเก็ตชตัวอยางไวเปนจํานวนมาก ซึ่งรวมถึงไฟลสเก็ตชตัวอยางของ การทดลองทั้งหมดในหนังสือเลมนี้ และถาหากติดตั้งโปรแกรมจากแผนซีดีรอมไฟลสเก็ตชตัวอยาง จะไดรับการติดตั้งมาพรอมกันดวย การเป ดไฟลสเก็ตช ตัวอย างทํ าไดง ายมาก โดยไปที่เมนู Help > Example > IPST-SE จะเห็นชื่อไฟลสเก็ตชใหเลือกเปดใชงานไดตามตองการ
หรือเลือกเปดผานทางคําสั่ง Open ซึ่งจะปรากฏหนาตาง Explorer ขึ้นมาเพื่อใหคนหาไฟล ใหเลือกไปที่ C:/Wiring/Examples/IPST-SE จะพบโฟลเดอรที่ใชเก็บไฟลสเก็ตชสําหรับใชงานกับแผง วงจร IPST-SE เมื่อเลือกเปดโฟลเดอรที่ตองการ จะพบไฟล .pde ซึงก็ ่ คือไฟลสเก็ตชที่ใชงานกับ Wiring IDE จากนั้นจะทําการแกไข, คอมไฟล รวมทั้งอัปโหลดโปรแกรมไดตามตองการ
50
3.5 ขอกําหนดในการแกไขและบันทึกไฟลสเก็ตช ในกรณีที่ตองการแกไขไฟลสเก็ตชเดิม ตองเปดไฟลสเก็ตชนั้นๆ ขึนมา ้ ทําการแกไขโคด โปรแกรม ตรวจสอบไวยกรณดวยการคอมไพล เมื่อเรียบรอยแลว มีทางเลือกในการบันทึกไฟล 2 ทางคือ 1. บันทึกในชื่อเดิม ใหใชคําสั่ง Save 2. บันทึกในชื่อใหมดวยคําสั่ง Save As แตไมควรบันทึกทับไฟลสเก็ตชเดิมที่ไมไดถูก เปดขึ้นมา เพราะจะทําใหการเชื่อมโยงไฟลสับสน และทําใหเกิดความผิดพลาดในการเปดใชงานครั้ง ตอไปได ถาหากมีความตองการบันทึกทับไฟลเก็ตชเดิมทีไม ่ ไดถูกเปดขึนมา ้ จะตองทําการลบโฟลเดอร ของไฟลสเก็ตชนั้นออกไปเสียกอน
51
หลังจากการแนะนําขั้นตอนแนวทางการพัฒนาโปรแกรมภาษา C/C++ ดวยซอฟตแวร Wiring1.0 ไปแลวในบทที่ 3 เพื่อใหการเรียนรูเปนไปอยางตอเนือง ่ ในบทนีจึ้ งนําเสนอตัวอยางการ ทดสอบการทํางานในสวนตางๆ ที่สําคัญของแผงวงจร IPST-SE อันเปนแผงวงจรควบคุมหลักของ ชุดกลองสมองกล IPST-MicroBOX (SE) เพื่อเปนแนวทางในการตอยอดสูการพั ฒนาโปรแกรมเพื่อ สรางโครงงานและหุนยนตอัตโนมัติอยางเต็มรูปแบบตอไป หัวขอกิจกรรมสําหรับทดสอบเบื้องตนมีทั้งสิ้น 4 กิจกรรม ประกอบดวย กิจกรรมที่ 1 แสดงผลขอความที่หนาจอภาพกราฟก LCD (มีกิจกรรมยอย 5 กิจกรรม) กิจกรรมที่ 2 อานคาจากปุม KNOB และสวิตช OK บนแผงวงจร IPST-SE กิจกรรมที่ 3 ขับอุปกรณเอาตพุตอยางงาย กิจกรรมที่ 4 ขับเสียงออกลําโพงเปยโซ ขันตอนการพั ้ ฒนาโปรแกรมในแตละกิจกรรมจะเหมือนกัน นันคื ่ อ เปดซอฟตแวร Wiring1.0 ทําการเขียนโปรแกรม คอมไพล และอัปโหลดลงบนแผงวงจร IPST-SE ของชุดกลองสมองกล IPSTMicroBOX (SE) จากนั้นทดสอบการทํางาน
้ เป ่ ดสวิตชจายไฟแกแผงวงจร IPST-SE ตองรอ สิงสํ ่ าคัญทีต่ องเนนยํ้าคือ ทุกครังที ใหตัวควบคุมพรอมทํางานเสียกอน ซึงใช ่ เวลาประมาณ 3 ถึง 5 วินาทีหลังจากเปด ไฟเลี้ยงหรือหลังจากการกดสวิตช RESET หากมีการอัปโหลดกอนที่แผงวงจร IPST-SE จะ พรอมทํางาน อาจทําใหเกิดความผิดพลาดในการเชื่อมตอ หรือโคดทีอั่ ปโหลดลงไปไมทํางานตามที่ ควรจะเปน แตจะไมสงผลจนทําใหแผงวงจรเกิดความเสียหาย สิงที ่ ่เกิดขึ้นมีเพียงแผงวงจรไมทํางาน หรือทํางานไมถูกตองเทานัน้
52
(A1.1.1) เปดซอฟตแวร Wiring 1.0 SE พิมพโปรแกรมที่ A1-1 แลวบันทึกไฟล (A1.1.2) เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร 2
3
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000 00 0000000000000000 000
ON
SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
USB
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
24 A0
4
KNOB
8 SCL 9 SDA
1
SERVO
(A1.1.3) เลือกชนิดหรือรุนของฮารดแวรใหถูกตอง โดยเลือกที่เมนู Tools > Board > IPST-SE > ATmega644P @16MHz ดังรูป
53
#include <ipst.h> // ผนวกไลบรารีหลัก void setup() { glcd(1,0,"Hello World"); // แสดงขอความบนจอแสดงผล } void loop() {} คําอธิบายโปรแกรม โปรแกรมนีจะทํ ้ างานโดยสงขอความ Hello World ออกไปแสดงผลทีบรรทั ่ ด 1 คอลัมน 0 ของจอ แสดงผล จะทํางานเพียงครังเดี ้ ยว จึงเขียนโปรแกรมไวทีตํ่ าแหนงของ void setup() เทานัน้
โปรแกรมที่ A1-1 ไฟล HelloGLCD.pde สําหรับทดสอบการแสดงผลของแผงวงจร IPST-SE (A1.1.4) เลือกพอรตสําหรับติดตอกับแผงวงจร IPST-SE โดยเลือกที่เมนู Tools > Serial Port ดังรูป (ตําแหนงของพอรตที่ใชเชื่อมตออาจแตกตางกันในคอมพิวเตอรแตละเครื่อง)
(A1.1.5) คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม File > Upload to Wiring Hardware
หรือเลือกทีเมนู ่
ทีหน ่ าจอแสดงผลกราฟก LCD ของแผงวงจร IPST-SE แสดงขอความ Hello World 30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
Hel lo 0Wo rld00 0000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0 000 00000000000000000 0
ON
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
24 A0 KNOB
8 SCL 9 SDA
USB
54
จอแสดงผลของแผงวงจร IPST-SE มีขนาด 128 x 160 พิกเซล แสดงตัวอักษรความละเอียด 5 x 7 จุด จํานวน 21 ตัวอักษร 16 บรรทัด ผูใชงานสามารถระบุตําแหนงบรรทัดและตําแหนงคอลัมน ทีต่ องการแสดงผลได โดยกําหนดผานคําสั่ง glcd ซึงมี ่ อยูในไฟล ไลบรารี ipst.h นอกจากนันคํ ้ าสั่ง glcd ยังมีอักขระพิเศษเพื่อระบุตําแหนงแทนการใชคาตัวเลข ดังแสดงใน โปรแกรมที่ A1-2 #include <ipst.h> // ผนวกไฟลไลบรารีหลัก int i,j; void setup() { glcdFillScreen(GLCD_WHITE); // กําหนดใหสีของพืนหลั ้ งของจอแสดงผลเปนสีขาว setTextColor(GLCD_BLACK); // กําหนดสีตัวอักษรเปนสีดํา setTextBackgroundColor(GLCD_WHITE); // กําหนดสีพืนหลั ้ งของตัวอักษรเปนสีขาว for (i=0;i<16;i++) // วนลูป 16 รอบเพือแสดงข ่ อความ { glcd(i,i,"Row %d ",i); // แสดงขอความที่จอแสดงผล } } void loop() {} คําอธิบายโปรแกรม ในโปรแกรมนีเพิ ้ มเติ ่ มคําสังสํ ่ าหรับการใชงานจอแสดงผลอีก 3 คําสังคื ่ อ 1. glcdFillScreen เปนคําสังกํ ่ าหนดสีพืนหลั ้ งของจอแสดงผล 2. setTextColor สําหรับกําหนดสีใหแกตัวอักษร 3. setTextBackground สําหรับกําหนดสีพืนหลั ้ งของตัวอักษร เมื่อตังค ้ าของจอแสดงผลแลว จึงทําการสงขอความ Row ตามดวยหมายเลขบรรทัดซึงมาจากการ ่ เพิมค ่ าของตัวแปร i และมีการเลือนตํ ่ าแหนงตามคาของ i ดวย ดังนันที ้ บรรทั ่ ดแรก ขอความ Row0 ถูกแสดง ทีคอลั ่ มน 0 ทีบรรทั ่ ด 2 แสดงขอความ Row 1 ทีคอลั ่ มน 1 ไลไปตามลําดับจนถึงบรรทัด 15 (บรรทัดที่ 16) จะแสดงเปน Row 15 ทีคอลั ่ มน 15
โปรแกรมที่ A1-2 ไฟล GLCDmultipleline.pde สําหรับทดสอบการแสดงผลของแผงวงจร IPST-SE
55
(A1.2.1) เปดซอฟตแวร Wiring1.0 SE พิมพโปรแกรมที่ A1-2 แลวบันทึกไฟล (A1.2.2) เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร (A1.2.3) คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม File > Upload to Wiring Hardware
หรือเลือกทีเมนู ่
ทีหน ่ าจอแสดงผลกราฟก LCD ของแผงวงจร IPST-SE แสดงขอความ Row 0 ถึง Row 15 เรียงไปบรรทัดละขอความ 30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
Rowl00 Wo rld0000000000 0Row01000000000000000 00Row0200000000000000 000Row030000000000000 0000Row04000000000000 00000Row0500000000000 000000R00060000000000 0000000R0007000000000 00000000Row0800000000 000000000Row090000000 0000000000Row01000000 00000000000Row0110000 000000000000Row012000 0000000000000Row01300 00000000000000Row0140 000000000000000Row015
ON
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
24 A0 KNOB
8 SCL 9 SDA
USB
56
ขนาดตัวอักษรปกติทีแสดงบนจอแสดงผลของแผงวงจร ่ IPST-SE เมื่อเริมต ่ นทํางานเปนขนาด เล็กสุด ใชจํานวนจุดตอตัวอักษรคือ 6 x 10 จุด (อักษรจริงมีขนาด 5 x 7 จุด) ถาตองการปรับขนาด ตัวอักษรใหใหญขึ้น จะมีคําสั่ง setTextSize ไวสําหรับปรับขนาด โดยคาทีกํ่ าหนดจะเปนจํานวนเทา ของตัวอักษรปกติ เชน setTextSize(2) หมายถึงขนาดตัวอักษรใหญขึ้นเปน 2 เทา ใช 12 x 20 พิกเซลตอ 1 ตัวอักษร setTextSize(3) หมายถึงขนาดตัวอักษรใหญขึ้นเปน 3 เทา ใช 18 x 30 พิกเซลตอ 1 ตัวอักษร เมื่อปรับขนาดตัวอักษรมีขนาดใหญขึ้น จํานวนตัวอักษรตอบรรทัดก็ตองลดลง จากเดิม 21 ตัวอักษร 16 บรรทัด เมื่อขนาดของตัวอักษรเพิ่มขึ้นเปนสองเทา ก็จะทําใหแสดงได 10 ตัวอักษร 8 บรรทัดแทน ดังนั้นเมื่อเขียนโปรแกรมจะตองคํานึงถึงคาเหลานีด้ วย #include <ipst.h> int x,m; void setup() { //glcdSetColorWordRGB(); setTextColor(GLCD_RED); } void loop() { for (x=1;x<6;x++) { setTextSize(x); for(m=0;m<4;m++) { glcdClear(); glcdMode(m); glcd(0,0,"%dX",x); glcd(1,0,"M=%d",m); sleep(500); } } }
// หากสีของการแสดงผลผิด ใหเปดใชฟงกชันนี ่ ้ // กําหนดสีตัวอักษรเปนสีแดง
// กําหนดขนาดตัวอักษร // เคลียรหนาจอ // กําหนดทิศทาง // แสดงขนาดตัวอักษร // แสดงโหมดทิศทาง
โปรแกรมที่ A1-3 ไฟล GLCDtextFlip.pde สําหรับทดสอบการเพิ่มขนาดตัวอักษรในการแสดงผล และการเปลี่ยนทิศทางของการแสดงผลของแผงวงจร IPST-SE
57
นอกจากขนาดตัวอักษรแลว ยังกําหนดทิศทางการแสดงผลของจอแสดงผลได โดยใชคําสั่ง glcdMode() โดยมีคาตั้งตนคือ โหมด 0 (glcdMode(0)) นั่นคือ แสดงผลในแนวตั้ง สําหรับอีก 3 โหมดคือ โหมด 1, 2 และ 3 ใชปรับใหการแสดงผลหมถนไปโหมดละ 90 องศา นันคื ่ อ โหมด 1 หมุน ไป 90 องศา, โหมด 2 หมุนไป 180 องศา และโหมด 3 หมุนไป 270 องศา (A1.3.1) เปดซอฟตแวร Wiring1.0 SE พิมพโปรแกรมที่ A1-3 แลวบันทึกไฟล (A1.3.2) เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร (A1.3.3) คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม File > Upload to Wiring Hardware
หรือเลือกทีเมนู ่
ทีหน ่ าจอแสดงผลของแผงวงจร IPST-SE แสดงขอความแจงขนาดของตัวอักษรและโหมดการ แสดงผลในทิศทางทีต่ างกัน เริมจากมุ ่ มบนซาย, มุมบนขวา, มุมลางขวา และมุมลางซาย โดยรอบการ แสดงผลจะเริมจาก ่ 1X, 2X, 3X , 4X และ 5X แตละรอบมีการแสดงผล 4 ทิศทาง โดยดูจากคา M M = 0 จอแสดงขอความแนวตัง้ ตัวอักษรขนาด 3 เทา
M = 1 หมุนการแสดงผลไป 90 องศาทางขวา ตัวอักษรขนาด 4 เทา
M = 2 หมุนการการแสดงผลไป 180 องศา M = 3 หมุนการแสดงผลไป 270 องศา จะไดภาพทีกลั ่ บหัวเมื่อเทียบกับ M = 0 ตัวอักษรขนาด 5 เทา ตัวอักษรขนาด 4 เทา
58
ฟงกชัน่ glcd เปนฟงกชันหลั ่ กในการติดตอกับจอแสดงผลกราฟก LCD นอกจากมีคําสังแสดง ่ ขอความแลว ยังมีคําสั่งในการวาดลายเสนกราฟกอีกหลายคําสั่ง ประกอบดวย glcdRect(int x1,int y1,int width,int height,uint color)
เปนคําสั่งสราง
รูปสีเหลี ่ ่ยม glcdFillRect(int x1,int y1,int width,int height,uint color)
เปนคําสัง่
สรางพืนสี ้ เหลี ่ ยม ่ glcdLine(int x1, int y1, int x2, int y2,uint color) glcdCircle(int x, int y, int radius,uint color)
เปนคําสั่งลากเสน
เปนคําสั่งวาดเสนวงกลม
glcdFillCircle(int x, int y, int radius,uint color)
เปนคําสั่งสรางพื้นที่
วงกลม glcdClear(uint color)
เปนการเคลียรหนาจอแสดงผล
โดยทดสอบเขียนโปรแกรมไดดังโปรแกรมที่ A1-4 แลวอัปโหลดเพื่อทดสอบการทํางานไปยัง แผงวงจร IPST-SE จะไดผลดังรูป
ถาหากสีของการแสดงผลไมถูกตอง อาจเกิดจากรุนของจอแสดงผลเนืองจากจอภาพแบบนี ่ ้ มี 2 รุน มีการเรียงขอมูลทีสร ่ างสีแตกตางกันเล็กนอย ทางแกไขคือ นําเครื่องหมาย // ทีหน ่ าฟงกชัน่ glcdSetColorWordRGB(); ออก เพื่อเปลี่ยนรูปแบบการเรียงขอมูลสี
59
#include <ipst.h> // ผนวกไฟลไลบรารีหลัก int i,j; void setup() { //glcdSetColorWordRGB(); // หากสีของการแสดงผลผิด ใหเปดใชฟงกชันนี ่ ้ } void loop() { glcdClear; // เคลียรหนาจอและพืนหลั ้ งเปนสีดํา sleep(300); for (i=0;i<160;i+=4) { glcdLine(0,0,128,i,GLCD_WHITE); // วาดเสนสีขาวจากพิกัด 0,0 ไปยังจุดที่กําหนด } for (i=0;i<128;i+=4) { glcdLine(0,0,i,160,GLCD_RED); // วาดเสนสีแดงจากพิกัด 0,0 ไปยังจุดที่กําหนด } sleep(2000); glcdRect(32,40,64,80,GLCD_BLUE); // วาดเสนกรอบสีเหลี ่ ยมสี ่ นํ้าเงิน sleep(300); glcdFillCircle(32,40,31,GLCD_GREEN); // สรางวงกลมพืนสี ้ เขียว glcdFillCircle(96,40,31,GLCD_YELLOW); // สรางวงกลมพืนสี ้ เหลือง glcdFillCircle(32,120,31,GLCD_MAGENTA); // สรางวงกลมพืนสี ้ บานเย็น glcdFillCircle(96,120,31,GLCD_SKY); // สรางวงกลมพืนสี ้ ฟา sleep(1000); glcdCircle(64,40,31,GLCD_GREEN); // วาดเสนรอบวงกลมสีเขียว glcdCircle(32,80,31,GLCD_BLUE); // วาดเสนรอบวงกลมสีนํ้าเงิน glcdCircle(64,120,31,GLCD_YELLOW); // วาดเสนรอบวงกลมสีเหลือง glcdCircle(96,80,31,GLCD_SKY); // วาดเสนรอบวงกลมเสนสีฟา sleep(1000); glcdFillRect(0,0,128,160,GLCD_YELLOW); // สรางรูปสี่เหลียมสี ่ เหลือง sleep(1000); }
โปรแกรมที่ A1-4 ไฟล GLCDsimpleGraphic.pde สําหรับทดสอบการแสดงผลของแผงวงจร IPST-SE
60
นอกจากวงกลมและสี่เหลี่ยมแลว เสนโคงก็เปนสวนประกอบสําคัญในการสรางภาพกราฟก ในชุดคําสั่งเกียวกั ่ บการแสดงผลจอภาพแบบกราฟกสีของแผงวงจร IPST-SE ยังมีคําสั่ง glcdArc() สําหรับสรางเสนโคง โดยมีพารามิเตอรหรือตัวแปรทีต่ องกําหนดอยูพอสมควร ดูรายละเอียดเพิ่มเติม ในบทที่ 6 เกี่ยวกับการใชงานจอแสดงผลแบบกราฟก LCD สีตัวนี้ (A1.5.1) เปดซอฟตแวร Wiring1.0 SE พิมพโปรแกรมที่ A1-5 แลวบันทึกไฟล (A1.5.2) เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร #include <ipst.h> int i; // ฟงกชันสร ่ างรูปหนายิ้ม void face() { glcdFillCircle(64,70,50,GLCD_WHITE); glcdArc(48,60,16,30,150,GLCD_RED); glcdCircle(48,55,5,GLCD_BLUE); glcdCircle(80,55,5,GLCD_BLUE); glcdArc(80,60,16,30,150,GLCD_RED); glcdFillCircle(64,70,7,GLCD_YELLOW); glcdArc(64,80,30,220,320,GLCD_RED); glcdArc(64,80,29,220,320,GLCD_RED); } void setup() { //glcdSetColorWordRGB(); // หากสีของการแสดงผลผิด ใหเปดใชฟงกชันนี ่ ้ } void loop() { for(i=0;i<4;i++) { glcdClear(); glcdMode(i); // สังหมุ ่ นการแสดงผล face(); sleep(1000); } }
โปรแกรมที่ A1-5 ไฟล GLCDarcTest.pde สําหรับทดสอบการวาดเสนโคงของแผงวงจร IPST-SE
(A1.5.3) คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม File > Upload to Wiring Hardware
61
หรือเลือกทีเมนู ่
(A1.5.4) รันโปรแกรม ดูผลการทํางานที่จอแสดงผลของแผงวงจร IPST-SE ทีจอแสดงผลแสดงเป ่ นรูปการตูนหนายิมนาน ้ 1 วินาที แลวหมุนไปครั้งละ 90 องศา แลววน กลับมาทีหน ่ าเริมต ่ น จะวนแสดงผลไปตลอดเวลา
62
ในระบบควบคุมพืนฐานจะต ้ องมีการปรับตังค ้ า มีเมนู มีสวิตชในการสังงานต ่ างๆ บนแผงวงจร IPST-SE ก็มีสวนติดตตอกับผูใชงานดวยเชนกัน ประกอบดวยปุม KNOB สําหรับปรับเลือกรายการ และสวิตช OK กับ SW1 สําหรับยืนยันการเขาสูรายการทางเลือกนั้นๆ 30 A6 27 A3
USB D
28 A4 25 A1 OK
Hello 0Wo rld00 00000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
ON
UART1
16
18
17
19
+5
20
RESET
LOW
1
2
2 RxD1 3 TxD1
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
29 A5 26 A2
KNOB
8 SCL 9 SDA
24 A0
SERVO
เขียนโปรแกรมที่ A2-1 แลวบันทึกไฟลชือ่ KnobSwitchTest.pde จากนั้นทําการคอมไพลและ อัปโหลดไปยังแผงวงจร IPST-SE แลวรันโปรแกรมทดสอบการทํางาน เมื่อโปรแกรมเริ่มทํางาน ทีหน ่ าจอแสดงผลของแผงวงจร IPST-SE แสดงขอความ Press OK
(ขนาดตัวอักษรใหญขนาด 2x)
ใหกดสวิตช OK เพื่อทํางานตอ หนาจอแสดงรูปวงกลมสีเหลือง 1 วินาที จากนันแสดงข ้ อความ Knob value
(ขนาดตัวอักษรใหญขนาด 2x)
XXXX (ขนาดตัวอักษรใหญขึ้นเปนขนาด 3x) โดยที่ xxxx มีคาไดตั้งแต 94 ถึง 1023 ทดลองปรับปุม KNOB บนแผงวงจร IPST-SE คาของ Knob ทีจอแสดงผลจะต ่ องเปลียนแปลงตามการปรั ่ บที่ปุม KNOB
63
จากนันกดสวิ ้ ตช OK แลวปลอย หนาจอแสดงรูปวงกลมสีเขียว 1 วินาที แลวกลับไปแสดงขอความและคาของ KNOB ทดลองกดสวิตช SW1 แลวปลอย หนาจอแสดงรูปวงกลมสีแดง 1 วินาที แลวกลับไปแสดงขอความและคาของ KNOB #include <ipst.h> void setup() { //glcdSetColorWordRGB(); glcdClear(); setTextSize(2); glcd(1,1,"Press OK"); sw_OK_press(); glcdClear(); glcdFillCircle(64,70,50,GLCD_YELLOW); delay(1000); glcdClear(); } void loop() { if (sw_OK()) { glcdClear(); glcdFillCircle(64,70,50,GLCD_GREEN); delay(1000); glcdClear(); } if(sw1()) { glcdClear(); glcdFillCircle(64,70,50,GLCD_RED); delay(1000); glcdClear(); } glcd(1,0,"Knob value"); setTextSize(3); glcd(2,2,"%d ",knob()); setTextSize(2); }
// ผนวกไฟลไลบรารีหลัก // หากสีของการแสดงผลผิด ใหใชฟงกชันนี ่ ้ // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความออกหนาจอแสดงผล // วนรอจนกระทั่งกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // วาดวงกลมสีเหลือง // แสดงผลวงกลมสีเหลือง 1 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // ตรวจสอบการกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // วาดวงกลมสีเขียว // แสดงผลวงกลมสีเขียว 1 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // ตรวจสอบสวิตช SW1 วามีการกดหรือไม // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // วาดวงกลมสีแดง // แสดงผลวงกลมสีแดง 1 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // แสดงขอความที่จอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาทีอ่ านไดจากการปรับปุม KNOB ที่หนาจอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ
โปรแกรมที่ A2-1 ไฟล KnobSwitchTest.pde สําหรับทดสอบอานคาจากปุม KNOB, สวิตช OK และ SW1
64
ในไฟลไลบรารี ipst.h มีคําสั่ง out(int num,int _dat) ซึงช ่ วยใหสามารถสงลอจิก “0” หรือ “1” ออกไปยังขาพอรตที่ตองการได ทําใหนําแผงวงจร IPST-SE ไปใชขับอุปกรณเอาตพุตพื้นฐานได งายขึน้ ยกตัวอยางงายที่สุดคือ ไดโอดเปลงแสงหรือ LED ในกิจกรรมนีจึ้ งนําแผงวงจร ZX-LED อันเปนแผงวงจร LED แสดงผลแบบเดี่ยวที่จะติดสวาง เมื่อไดรับลอจิก “1” และดับลงเมื่อไดรับลอจิก “0” มาตอกับแผงวงจร IPST-SE เพื่อทดลองใชงาน (A3.1) นํา ZX-LED ชุดที่ 1 ตอเขากับจุดตอพอรต 17 และชุดที่ 2 ตอกับจุดตอพอรต 18 30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
Hello0Wo rld00 00000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
ON
UART1
16
18
17
19
+5
20
RESET
1
LOW
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
24 A0 KNOB
8 SCL 9 SDA
USB
SERVO
2 RxD1 3 TxD1
ZX-LED LED 510 KRC102 + S
ZX-LED LED 510 KRC102 S
+
#include <ipst.h> void setup() { setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press(); } void loop() { out(17,1); out(18,0); sleep(400); out(17,0); out(18,1); sleep(400); }
65
// ผนวกไฟลไลบรารีหลัก // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความออกหนาจอ GLCD // วนรอการกดสวิตช OK
// ทําให LED ที่ตออยูกั บพอรต 17 ติดสวาง // ทําให LED ที่ตออยูกั บพอรต 18 ดับ // ทําให LED ที่ตออยูกั บพอรต 17 ดับ // ทําให LED ที่ตออยูกั บพอรต 18 ติดสวาง
โปรแกรมที่ A3-1 ไฟล LEDTest.ino สําหรับทดสอบการขับอุปกรณเอาตพุตอยางงาย (A3..2) เขียนโปรแกรมที่ A3-1 บันทึกไฟลชือ่ LEDTest.pde (A3.3) เปดสวิตชจายไฟแกแผงวงจร IPST-SE จากนันทํ ้ าการคอมไพลและอัปโหลดโปรแกรมไปยัง แผงวงจร IPST-SE (A3.4) รันโปรแกรม สังเกตการทํางานของ ZX-LED เมื่อรันโปรแกรม ทีหน ่ าจอแสดงผลของแผงวงจร IPST-SE แสดงขอความ Press OK
ใหกดสวิตช OK เพื่อเริ่มการทํางาน จะเห็น LED บนแผงวงจร ZX-LED ทังสองชุ ้ ดติดและ ดับสลับกันไปอยางตอเนือง ่
66
ในชุดกลองสมองกล IPST-MicfoBOX (SE) มีแผงวงจรขับเสียงโดยใชลําโพง เปยโซ (ZX-SPEAKER) โดยตัวลําโพงเปยโซขนาดเล็กนีตอบสนองความถี ้ ่เสียงใน ชวงความถีประมาณ ่ 300 ถึง 3,000Hz ในการเขียนโปรแกรมเพื่อสั่งงานแผงวงจร IPST-SE ใหขับเสียงออกทางแผงวงจร ZX-SPEAKER นีทํ้ าไดโดยใชคําสั่ง beep() และ sound() ในโปรแกรมที่ A4-1 เปนตัวอยางการใชคําสัง่ beep() เพื่อขับเสียง “ติ้ด” ความถีเดี ่ ยวออกทาง ลําโพงทุกๆ 1 วินาที สวนในโปรแกรมที่ A4-2 เปนตัวอยางการใชคําสั่ง sound() เพื่อขับเสียงที่มีความถี่ตามที่ กําหนดออกทางลําโพงเปยโซ ตามเวลาทีกํ่ าหนดในโปรแกรม (A4.1) นําแผงวงจรขับเสียง ZX-SPEAKER ตอเขากับจุดตอพอรต 19 ของแผงวงจร IPST-SE 30 A6 27 A3
D
ON
28 A4 25 A1
UART1
16
18
17
19
+5
LOW
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
29 A5 26 A2 OK
Hel lo 0Wo rld00 00000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000
SPEAKER
RESET
2 RxD1 3 TxD1
SERVO
+
+ S
20
S
24 A0 KNOB
8 SCL 9 SDA
USB
O
#include <ipst.h> void setup() {} void loop() { beep(19); sleep(1000); }
67
// ผนวกไฟลไลบรารีหลัก
// ขับเสียง “ติด” ้ ออกลําโพงผานทางจุดตอพอรต 19
โปรแกรมที่ A4-1 ไฟล BeepTest.ino สําหรับทดสอบการขับเสียงออกลําโพงของแผงวงจร IPST-SE #include <ipst.h> void setup() {} void loop() { sound(19,500,500); sound(19,2500,500); }
// ผนวกไฟลไลบรารีหลัก
// ขับเสียงความถี่ 500Hz นาน 0.5 วินาที ออกลําโพงผานทางจุดตอพอรต 19 // ขับเสียงความถี่ 2500Hz นาน 0.5 วินาที ออกลําโพงผานทางจุดตอพอรต 19
โปรแกรมที่ A4-2 ไฟล SoundTest.ino สําหรับทดสอบการขับเสียงออกลําโพงของแผงวงจร IPST-SE แบบกําหนดความถี่และเวลาได (A4..2) เขียนโปรแกรมที่ A4-1 บันทึกไฟลชือ่ BeepTest.pde (A4.3) เปดสวิตชจายไฟแกแผงวงจร IPST-SE จากนันทํ ้ าการคอมไพลและอัปโหลดโปรแกรมไปยัง แผงวงจร IPST-SE (A4.4) รันโปรแกรม จะไดยินเสียง “ติ้ด” ดังเปนจังหวะในทุกๆ 1 วินาทีจากลําโพงของแผงวงจร ZX-SPEAKER (A4.5) เขียนโปรแกรมที่ A4-2 บันทึกไฟลชือ่ SoundTest.pde แลวอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE เพื่อทดสอบการทํางานอีกครั้ง จะไดยินสัญญาณเสียง 2 ความถีดั่ งสลับกันออกจากลําโพงของแผงวงจร ZX-SPEAKER
68
69
การพัฒนาโปรแกรมภาษา C/C++ สําหรับชุดกลองสมองกล IPST-MicroBOX (SE) ดําเนินการ ภายใตการสนับสนุนของไฟลไลบรารี ipst.h ทั้งนีเพื ้ ่อชวยลดขั้นตอนและความซับซอนในการเขียน โปรแกรมเพื่อควบคุมสวนตางๆ ของฮารดแวรลง โครงสรางของไฟลไลบรารี ipst.h แสดงดังรูป
TB6612FNG
M
M
70
5.1 ไฟลไลบรารี ipst.h ในการเรียกใชงานชุดคําสั่งยอยตางๆ เพื่อการพัฒนาโปรแกรมควบคุมสําหรับชุดกลองสมอง กล IPST-MicroBOX (SE) ผูพั ฒนาตองผนวกไฟลไลบรารีหลัก ipst.h ไวในตอนตนของโปรแกรมดวย คําสั่ง #include <ipst.h>
เพือประกาศให ่ ใหตัวแปลภาษา C หรือคอมไพเลอรรูจักชุดคําสังย ่ อยทีกํ่ าลังจะถูกเรียกใชงาน จากไฟลไลบรารี ipst.h ไลบรารียอยของไฟลไลบรารี ipst.h ประกอบดวย บรรจุฟงกชั่ นและคําสั่งสําหรับแสดงผลขอความ, ตัวเลข และสราง ภาพกราฟกสีที่จอแสดงผลแบบกราฟก LCD สีบนแผงวงจร IPST-SE (ยังไมรองรับการทํางานกับไฟล รูปภาพ) ฟงกชั่นนี้มีการกําหนดขาใชงานที่เฉพาะเจาะจง (มีรายละเอียดอธิบายในบทที่ 6) ipst_sleep.h บรรจุฟงกชั่นและคําสั่งสําหรับการหนวงเวลา ipst_in_out.h บรรจุฟงกชั่นและคําสั่งสําหรับอานคาอินพุตดิจิตอลและสงคาออกทาง ขาพอรตเอาตพุตดิจิตอล ipst_analog.h บรรจุฟงกชั่ นและคําสั่งอานคาจากอินพุ ตอะนาลอกชอง A0 ถึง A6 ที่ตอกับตัวตรวจจับและปุม KNOB กับสวิตช OK ipst_sound.h บรรจุฟงกชั่นและคําสั่งสําหรับสรางเสียงเพื่อขับออกลําโพง ่ าสังสํ ่ าหรับขับมอเตอรไฟตรง 2 ชอง ตองทํางานรวม ipst_motor.h บรรจุฟงกชันและคํ กับวงจรขับมอเตอรที่ใชไอซี TB6612 และใชไฟเลียงอี ้ กสวนหนึงสํ ่ าหรับเลี้ยงมอเตอรไฟตรง ipst_servoMotor.h บรรจุฟงกชันและคํ ่ าสังสํ ่ าหรับขับเซอรโวมอเตอร ตองทํางานรวม กับเซอร โวมอเตอร และตองใชไฟเลี้ยง +6V อีกสวนหนึ่งสําหรับเซอรโวมอเตอร ฟงกชั่นนี้มีการ กําหนดขาใชงานที่เฉพาะเจาะจง ่ าสังสํ ่ าหรับสือสารข ่ อมูลอนุกรมผานทางพอรต USB ipst_serial.h บรรจุฟงกชันและคํ และผานทางจุดตอพอรต TxD1 และ RxD1 ของแผงวงจร IPST-SE ipst_led8.h บรรจุฟงกชันและคํ ่ าสังสํ ่ าหรับแสดงผล LED 8 ดวงบนแผงวงจร ZX-LED8 โดยสั่งให LED ติดทีละดวง หรือหลายดวงก็ได ipst_glcd.h
71
5.2 ไฟลไลบรารีของ Wiring1.0 Wiring1.0 มีไลบรารีจํานวนมาก เพื่อชวยใหการเขียนโปรแกรมเพื่อติดตอและใชงานอุปกรณ ฟงกชั่นพิเศษ ตลอดจนตัวตรวจจับแบบตางๆ ทําไดสะดวกและงายขึน้ สรุปไดดังนี้ 1. EEPROM.h ไลบรารีสําหรับการจัดการหนวยความจําขอมูลอีอีพรอมภายในไมโคร คอนโทรลเลอร ATmega644P ที่ใชในแผงวงจร IPST-SE 2. LiquidCrystal.h ไลบรารีติดตอกับโมดูล LCD แบบตัวอักษร 3. Encoder.h ไลบรารีสําหรับการใชงานวงจรเขารหัสขันพื ้ นฐาน ้ (ตองการอุปกรณเฉพาะ) 4. Wire.h ไลบรารีสําหรับติดตอกับอุปกรณระบบบัส 2 สายและบัส I2C 5. Matrix.h ไลบรารีสําหรับใชงาน LED ด็อตเมตริกซ (ตองการอุปกรณเฉพาะ) 6. Sprite.h ไลบรารีทําภาพเคลือนไหวบน ่ LED ดอตเมตริกซ (ตองการอุปกรณเฉพาะ) 7. SoftwareSerial.h ไลบรารีสําหรับสื่อสารขอมูลอนุกรมกับอุปกรณภายนอกผานทาง ขาพอรตดิจิตอลปกติ 8. Stepper.h ไลบรารีติดตอกับวงจรขับสเต็ปเปอรมอเตอร (ตองการอุปกรณเฉพาะ) 9. OneWire.h ไลบรารีสําหรับติดตอกับอุปกรณบัสหนึงสาย ่ (เปนไลบรารีเสริม) ในการเรียนรูเพื่อใชงานแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE) จะใชไฟลไลบรารีทั้งแบบมาตรฐานที่มากับซอฟตแวร Wiring 1.0 และไฟลไลบรารี ipst.h รวมกัน เพือช ่ วยใหการพัฒนาโปรแกรมสําหรับการใชงานมีประสิทธิภาพสูงสุด และทําความเขาใจไดงาย ทัง้ นีเพื ้ ่อประโยชนในการตอยอดการเรียนรูของผูใชงานในวงกวาง
5.3 การเรียกใชไลบรารี ipst.h และไลบรารียอย ไฟลไลบรารี ipst.h ประกอบดวยไลบรารีหลายไฟล การเรียกใชงานทําได 2 วิธีคือ 1. เรียกใชทังหมดผ ้ านทาง #include <ipst.h> วิธีนีง้ าย สะดวก และลดโอกาสทีผู่ เขียน โปรแกรมจะลืมผนวกไฟลไลบรารีที่ตองใชงาน 2. เรียกใชเฉพาะไลบรารีที่ตองการ ดวยคําสัง่ #include <ipst_xxxx.h> ตัวอักษร xxxx คือชื่อใดๆ ของไฟลไลบรารีภายในไฟล ipst.h ดูไดจากหัวขอ 5.1 ในบทนี้ วิธีนีมี้ ขอดีคือ ลดขนาด ของไฟลโปรแกรมภาษา C/C++ ลง เนืองจากมี ่ การเรียกใชงานฟงกชั่นหรือชุดคําสั่งเทาที่จําเปน
72
ในหัวขอตอไปนีเป ้ นการอธิบายถึงขอมูลที่ผูพัฒนาโปรแกรมสําหรับชุดกลองสมองกล IPSTMicroBOX (SE) ควรทราบเกี่ยวกับฟงกชั่นสําคัญทีอยู ่ ในไฟลไลบรารียอยของไลบรารีหลัก ipst.h
5.4 ipst_sleep.h ไฟลไลบรารียอยการหนวงเวลา เปนไฟลไลบรารีบรรจุชุดคําสังเกี ่ ยวกั ่ บการหนวงเวลา กอนเรียกใชงานควรผนวกไฟลไลบรารีไว ในตอนตนของโปรแกรมดวยคําสัง่ #include <ipst_sleep.h> หรือเรียก #include <ipst.h>
5.4.1 sleep และ delay sleep และ delay เปนฟงกชันหน ่ วงเวลาโดยประมาณในหนวยมิลลิวินาที มีรายละเอียดดังนี้ รูปแบบ void sleep(unsigned int ms) void delay(unsigned int ms) พารามิเตอร ms - กําหนดคาเวลาทีต่ องการหนวงในหนวยมิลลิวินาที มีคา 0 ถึง 65,535 ตัวอยางที่ 5-1 sleep(20); delay(1000);
// หนวงเวลาประมาณ 20 มิลลิวินาที // หนวงเวลาประมาณ 1 วินาที
5.4.2 delay_us เปนฟงกชั่นหนวงเวลาโดยประมาณภายในโปรแกรมในหนวยไมโครวินาที รูปแบบ void delay_us(unsigned int us) พารามิเตอร us - กําหนดคาเวลาทีต่ องการหนวงในหนวยไมโครวินาที มีคา 0 ถึง 65,535 ตัวอยางที่ 5-2 delay_us(100); // หนวงเวลาประมาณ 100 ไมโครวินาที
73
5.5 ipst_sound.h ไฟลไลบรารีสรางสัญญาณเสียง เปนไฟลไลบรารีบรรจุชุดคําสั่งเกียวกั ่ บการสรางและขับสัญญาณเสียงไปยังลําโพงหรือแผง วงจรลําโพงเปยโซ กอนเรียกใชงานควรผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง #include <ipst_sound.h> หรือเรียก #include <ipst.h>
5.5.1 beep เปนฟงกชันกํ ่ าเนิดเสียง “ติด” ๊ มีความถี่ 500Hz นาน 100 มิลลิวินาที เพือขั ่ บออกลําโพงเปยโซ ตอง ตอวงจรขับลําโพงเปยโซหรือแผงวงจร ZX-SPEAKER เขาทีจุ่ ดตอพอรตใดๆ ของแผงวงจร IPST-SE รูปแบบ void beep(int pin) พารามิเตอร pin - ขาพอรตใดๆ ของแผงวงจร IPST-SE มีคา 0 ถึง 30 (แนะนําใหใชจุดตอพอรต 19 หรือ 20) ตัวอยางที่ 5-3 beep(19);
// กําเนิดเสียงความถี่ 500Hz นาน 100 มิลลิวินาทีออกทางจุดตอพอรต 19
5.5.2 sound เปนฟงกชั่นกําเนิดสัญญาณเสียงทีกํ่ าหนดความถี่, ระยะเวลาในการกําเนิดสัญญาณ และจุดตอ พอรตทีเลื ่ อกใชงานได รูปแบบ void sound(int pin, int freq, int time) พารามิเตอร pin - ขาพอรตใดๆ ของแผงวงจร IPST-SE มีคา 0 ถึง 30 (แนะนําใหใชจุดตอพอรต 19 หรือ 20) freq - กําหนดความถี่สัญญาณเสียง มีคา 0 ถึง 32,767 time - กําหนดคาเวลาในการกําเนิดสัญญาณเสียงในหนวย 1 มิลลิวินาที มีคา 0 ถึง 32,767 ตัวอยางที่ 5-4 sound(19,1200,500);
// กําเนิดสัญญาณเสียงออกทางจุดตอพอรต 19 // ดวยความถี่ 1200Hz นาน 500 มิลลิวินาที
74
5.6 ipst_in_out.h ไฟลไลบรารียอยสําหรับติดตอพอรต เปนไลบรารีทีมี่ คําสังเกี ่ ยวกั ่ บการอานและเขียนคากับพอรตของแผงวงจร IPST-SE ในชุดกลอง สมองกล IPST-MicroBOX (SE) กอนเรียกใชงานฟงกชั่นตองผนวกไฟลไลบรารีนีไว ้ ในตอนตนของ โปรแกรมดวยคําสั่ง #include <ipst_in_out.h> หรือเรียก #inclue <atx.h> ฟงกชั่นทีสํ่ าคัญของไฟลไลบรารีนีประกอบด ้ วย
5.6.1 in เปนฟงกชั่นอานคาสถานะลอจิกของพอรตที่กําหนด รูปแบบ char in(x) พารามิเตอร x - กําหนดขาพอรตทีต่ องการอานคา มีคาตั้งแต 0 ถึง 50 สําหรับ IPST-SE ใชไดถึง 30 หมายเหตุ : ไมแนะนําใหใชฟงกชันนี ่ ้กับจุดตอ 19 และ 20 บนแผงวงจร IPST-SE การคืนคา เปน 0 หรือ 1 ตัวอยางที่ 5-5 char x; x = in(16);
// ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจาการอานคาระดับสัญญาณ // อานคาดิจิตอลจากพอรตหมายเลข 16 แลวเก็บคาไวที่ตัวแปร x
5.6.2 out เปนฟงกชั่นกําหนดระดับสัญญาณหรือขอมูลดิจิตอลไปยังขาพอรตที่กําหนด รูปแบบ out(char _bit,char _dat) พารามิเตอร _bit - กําหนดขาพอรตทีต่ องการ มีคา 0 ถึง 50 สําหรับ IPST-SE ใชไดถึง 30 _dat - กําหนดขอมูลทีต่ องการสงออก มีคาเปน 0 หรือ 1 ตัวอยางที่ 5-6 out(17,1); out(18,0);
// กําหนดใหขาพอรต 17 เปน “1” // กําหนดใหขาพอรต 18 เปน “0”
75
5.5.3 sw1_press เปนฟงกชั่นวนตรวจสอบการกดสวิตช SW1 บนแผงวงจร IPST-SE ตองรอจนกระทั่ง SW1 ถูกปลอยหลังจากมีการกดสวิตช จึงจะผานพนการทํางานของฟงกชั่นนี้ไป รูปแบบ void sw1_press() ตัวอยางที่ 5-7 ............ sw1_press(); ................
// รอจนกระทั่งสวิตช SW1 ถูกกดและปลอย
5.5.4 sw1 เปนฟงกชั่นตรวจสอบการกดสวิตช SW1 ในขณะใดๆ รูปแบบ char sw1() การคืนคา เปน “0” เมือสวิ ่ ตช SW1 ถูกกด และ เปน “1” เมือไม ่ มีการกดสวิตช SW1 ตัวอยางที่ 5-8 char x; x = sw1();
// ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจากการอานคาดิจิตอล // อานคาสถานะของสวิตช SW1 มาเก็บไวที่ตัวแปร x
76
5.6 ipst_analog.h ไฟลไลบรารีจัดการสัญญาณอะนาลอก เปนไฟลไลบรารีที่บรรจุชุดคําสั่งที่เกียวกั ่ บการอานคาอินพุตอะนาลอก (A0 ถึง A6 และปุม KNOB) ของแผงวงจร IPST-SE ซึงใช ่ ในการเชือมต ่ อกับตัวตรวจจับทีให ่ ผลการทํางานในรูปแรงดันไฟฟา ในยาน 0 ถึง +5V กอนเรียกใชงานตองผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสัง่ #include <ipst_analog.h> หรือ #inclue <ipst.h>
5.6.1 analog เปนฟงกชั่นอานคาจากการแปลงสัญญาณอะนาลอกของแผงวงจร IPST-SE ที่จุดตอ A0 ถึง A6 รูปแบบ unsigned int analog(unsigned char channel) พารามิเตอร channel - กําหนดชองอินพุตทีต่ องการ มีคา 0 ถึง 6 ซึงตรงกั ่ บขาพอรต A0 ถึง A6 การคืนคา เปนขอมูลทีได ่ จากการแปลงสัญญาณไฟฟา 0 ถึง +5V จากชองอินพุตทีกํ่ าหนด มีคา 0 ถึง 1,023
77
ตัวอยางที่ 5-9 #include <ipst.h> int val=0; void setup() { glcdClear(); setTextSize(2); } void loop() { glcd(1,0,"AnalogTest"); val = analog(2); setTextSize(3); glcd(2,2,"%d ",val); setTextSize(2); }
// ผนวกไฟลไลบรารีหลัก // กําหนดตัวแปรสําหรับเก็บคาทีได ่ จากการแปลงสัญญาณแลว
// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ
// แสดงขอความที่จอแสดงผล // อานคาของสัญญาณชอง A2 มาเก็บไวที่ตัวแปร val // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาทีอ่ านไดจากจุดตอ A2 ที่หนาจอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ
A
ZX-POTV
POTENTIOMETER
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1
0000000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
AnalogTest
ON
KNOB
OK SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
543
Potentiometer
DC MOTOR
ZX-POTH
8 SCL 9 SDA
24 A0
A
USB
78
5.6.2 knob( ) เปนฟงกชันอ ่ านคาขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาทีขาพอร ่ ต A7 ซึงต ่ อกับตัวตานทาน ปรับคาไดที่ตําแหนง KNOB รูปแบบ unsigned int knob() การคืนคา เปนขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาทีมาจากการปรั ่ บคาทีปุ่ ม KNOB บนแผงวงจร IPSTSE มีคา 95 ถึง 1,023 ตัวอยางที่ 5-10 #include <ipst.h> void setup() { glcdClear(); setTextSize(2); } void loop() { glcd(1,0," KnobTest"); setTextSize(3); glcd(2,2,"%d ",knob()); setTextSize(2); }
// ผนวกไฟลไลบรารีหลัก
// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ
// แสดงขอความที่จอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาทีอ่ านไดจากปุม KNOB ที่จอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ 8 SCL 9 SDA
30 A6 27 A3 24 A0
D
29 A5 26 A2 28 A4 25 A1
00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
KnobTest
ON
KNOB
OK SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
958
DC MOTOR
USB
79
5.6.3 sw_OK() เปนฟงกชั่นตรวจสอบสถานะสวิตช OK บนแผงวงจร IPST-SE โดยใหสถานะ “เปนจริง” เมื่อ มีการกดสวิตชและ “เปนเท็จ” เมื่อไมมีการกดสวิตช รูปแบบ unsigned char sw_ok() การคืนคา 1 (เปนจริง) เมือมี ่ การกดสวิตช 0 (เปนเท็จ) เมือไม ่ มีการกดสวิตช หมายเหตุ การกดสวิตช OK มีผลทําใหคาที่อานไดจาก knob() เปน 0 ดวย ตัวอยางที่ 5-11 #include <ipst.h> void setup() { glcdClear(); } void loop() { if (sw_OK()) { glcdFillScreen(GLCD_YELLOW); delay(3000); } glcdClear(); }
// ผนวกไฟลไลบรารีหลัก
// ตรวจสอบการกดสวิตช OK // เปลียนสี ่ พืนเป ้ นสีเหลือง // แสดงสีพืนใหม ้ นาน 3 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา
5.6.4 sw_OK_press() เปนฟงกชั่นวนตรวจสอบการกดสวิตช OK บนแผงวงจร IPST-SE ตองรอจนกระทั่งสวิตชถูก ปลอยหลังจากการกดสวิตชจึงจะผานฟงกชั่นนี้ไปกระทําคําสั่งอื่นๆ ตัวอยางที่ 5-12 ............ sw_OK_press(); .............
// รอจนกระทั่งเกิดกดสวิตช OK
80
5.7 ipst_led8.h ไฟลไลบรารีขับ LED 8 ดวง เปนไฟลไลบรารีบรรจุชุดคําสังที ่ เกี ่ ยวกั ่ บการติดตอกับแผงวงจร ZX-LED8 เพื่อขับ LED 8 ดวง ใหแสดงผลตามตองการ กอนเรียกใชงานตองผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสัง่ #include <ipst_led8.h> หรือ #inclue <ipst.h>
5.7.1 การเชือมต ่ อทางฮารดแวร ไฟลไลบรารีนีใช ้ งานกับจุดตอพอรตดิจิตอลทั้งหมดของแผงวงจร IPST-SE โดยใชเพียง 1 จุดตอพอรตในการติดตอกับแผงวงจร ZX-LED8 ดังในรูปที่ 5-1 7
6
5
4
3
2
1
0
7 MSB
6
5
4
3
2
1
0 LSB
Serial LED-8 UART communication 9600 bps. Baud
+5V RxD GND
LED8
Secondary Education
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
Rowl00 Wo rld00 00000000 0Row01000000000000000 00Row0200000000000000 000Row030000000000000 0000Row04000000000000 00000Row0500000000000 000000R00060000000000 0000000R0007000000000 00000000Row0800000000 000000000Row090000000 0000000000Row01000000 00000000000Row0110000 000000000000Row012000 0000000000000Row01300 00000000000000Row0140 000000000000000Row015
ON
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
รูปที่ 5-1 การเชือมต ่ อเพือใช ่ งานแผงวงจร ZX-LED8 ของแผงวงจร IPST-SE เพือขั ่ บ LED 8 ดวง
15 SV0 14 SV1 13 SV2 12 SV3
24 A0 KNOB
8 SCL 9 SDA
USB
81
5.7.2 pinLED8 เปนฟงกชันกํ ่ าหนดจุดตอพอรตของแผงวงจร IPST-SE ที่ตองการเชื่อมตอกับแผงวงจร ZXLED8 รูปแบบ void pinLED8(int pin) พารามิเตอร pin - ขาพอรตใดๆ ของแผงวงจร IPST-SE มีคา 0 ถึง 30 (แนะนําใหใชจุดตอพอรต 16 ถึง 20) ตัวอยางที่ 5-13 pinLED8(20);
// เลือกจุดตอพอรต 20 ของแผงวงจร IPST-SE ในการตอกับแผงวงจร ZX-LED8
5.7.3 LED8 เปนฟงกชั่นกําหนดขอมูลสําหรับแสดงผลบนแผงวงจร ZX-LED8 รูปแบบ void LED8(unsigned char _dat) (ใชในกรณีทีมี่ การกําหนดขาเชือมต ่ อดวย pinLED8) void LED8(int pin, unsigned char _dat) พารามิเตอร pin - ขาพอรตใดๆ ของแผงวงจร IPST-SE มีคา 0 ถึง 30 (แนะนําใหใชจุดตอพอรต 16 ถึง 20) _dat - ขอมูลสําหรับนําไปแสดงผล มีคา 0 ถึง 255 ตัวอยางที่ 5-14 #include <ipst.h> void setup() { pinLED8(20); } void loop() { unsigned char i=0; while(1) { LED8(i++); delay(500); } }
// include file for IPST-SE // ใชจุดตอพอรต 20 ในการตอกับแผงวงจร ZX-LED8
// แสดงคาเลขฐานสอง 8 บิต (00000000 ถึง 11111111) // หนวงเวลา 0.5 วินาที
82
ตัวอยางที่ 5-15 #include <ipst.h> void setup() {} void loop() { unsigned char i=0; while(1) { LED8(20,i++); }
// include file for IPST-SE
// เลือกจุดตอพอรต 20 ในการเชือมต ่ อกับแผงวงจร ZX-LED8 // แลวแสดงคาเลขฐานสอง 8 บิต (00000000 ถึง 11111111) // หนวงเวลา 0.5 วินาที
delay(500);
} 7
6
5
4
3
2
1
0
7 MSB
6
5
4
3
2
1
0 LSB
LED8
+5V RxD GND
Serial LED-8 UART communication 9600 bps. Baud
Secondary Education
7
6
5
4
3
2
1
0
7 MSB
6
5
4
3
2
1
0 LSB
LED8
+5V RxD GND
Serial LED-8 UART communication 9600 bps. Baud
Secondary Education
7
6
5
4
3
2
1
0
7 MSB
6
5
4
3
2
1
0 LSB
LED8
+5V RxD GND
Serial LED-8 UART communication 9600 bps. Baud
Secondary Education
7
6
5
4
3
2
1
0
7 MSB
6
5
4
3
2
1
0 LSB
+5V RxD GND
LED8 Serial LED-8 UART communication 9600 bps. Baud
Secondary Education
83
5.8 ipst_motor.h ไลบรารีขับมอเตอรไฟตรง แผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE) ขับมอเตอรไฟตรงได 2 ตัว โดยตอมอเตอรไฟตรงขนาด 3 ถึง 9V เขาที่จุดตอมอเตอรชอง 1 และ 2 ฟงกชันที ่ ใช ่ ในการขับมอเตอร ไฟตรงมีดังนี้
5.8.1 motor เปนฟงกชั่นขับเคลือนมอเตอร ่ ไฟตรง รูปแบบ void motor(char _channel,int _power) พารามิเตอร _channel - กําหนดชองเอาตพุตมอเตอรไฟตรง มีคา 1 และ 2 _power - กําหนดกําลังขับมอเตอร มีคาในชวง -100 ถึง 100 ถากําหนดคา _power เปนบวก (1 ถึง 100) ทําใหมอเตอรหมุนไปในทิศทางหนึ่ง ถากําหนดคา _power เปนลบ (-1 ถึง -100) มอเตอรจะถูกขับใหหมุนไปในทิศทางตรงขาม ถากําหนดคา _power เปน 0 มอเตอรหยุดหมุน ไมแนะนําใหกําหนดคาเปน 0 หากตอง การใหมอเตอรหยุดหมุนควรเรียกใชฟงกชัน่ motor_stop ตัวอยางที่ 5-16 30 A6 27 A3
USB D
28 A4 25 A1 OK
Rowl00 Wo rld000 0000000 0Row0100000000 0000000 00Row020000000 0000000 000Row03000000 0000000 0000Row0400000 0000000 00000Row050000 0000000 000000R0006000 0000000 0000000R000700 0000000 00000000Row080 0000000 000000000Row09 0000000 0000000000Row0 1000000 00000000000Row 0110000 000000000000Ro w012000 0000000000000R ow01300 00000000000000 Row0140 00000000000000 0Row015
ON
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
29 A5 26 A2
KNOB
8 SCL 9 SDA
24 A0
#include <ipst.h> // ผนวกไลบรารีหลัก void setup() {} void loop() { motor(1,60); // ขับมอเตอรชองที่ 1 ดวย // กําลัง 60% delay(500); // ขับนาน 0.5 วินาที motor(1,-60); // ขับมอเตอรชองที่ 1 // กลับทิศทางดวยกําลัง 60% delay(500); // ขับนาน 0.5 วินาที }
84
5.8.2 motor_stop เปนฟงกชั่นหยุดขับมอเตอร รูปแบบ void motor_stop(char _channel) พารามิเตอร _channel - กําหนดชองเอาตพุตมอเตอรไฟตรง มีคา 1, 2 และ ALL โดย ALLเปนการเลือกใหมอเตอรทังหมดหยุ ้ ดทํางาน ตัวอยางที่ 5-17 #include <ipst.h> void setup() { sw_OK_press(); } void loop() { motor(1,60); delay(500); motor(1,-60); delay(500); if (sw1()) { motor_stop(1); while (1); } }
// ผนวกไลบรารีหลัก // ตรวจสอบการกดสวิตช OK
// มอเตอร 1 หมุนดวยกําลังไฟฟา 60% // หนวงเวลา 0.5 วินาที // มอเตอร 1 หมุนกลับทิศดวยกําลังไฟฟา 60% // หนวงเวลา 0.5 วินาที // ตรวจสอบการกดสวิตช SW1 // ถาสวิตช SW1 ถูกกด มอเตอรชอง 1 หยุดหมุน
ตัวอยางที่ 5-18 #include <ipst.h> void setup() {} void loop() { motor(1,50); motor(2,50); sleep(3000); motor(1,-50); motor(2,-50); sleep(3000); motor_stop(ALL); sleep(3000); } 30 A6 27 A3
USB D
Rowl00 Wo rld00 00000000 0Row01000000000000000 00Row0200000000000000 000Row030000000000000 0000Row04000000000000 00000Row0500000000000 000000R00060000000000 0000000R0007000000000 00000000Row0800000000 000000000Row090000000 0000000000Row01000000 00000000000Row0110000 000000000000Row012000 0000000000000Row01300 00000000000000Row0140 000000000000000Row015
ON
28 A4 25 A1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
29 A5 26 A2 OK
// ขับมอเตอรชอง 1 ดวยกําลัง 50% ของกําลังสูงสุด // ขับมอเตอรชอง 2 ดวยกําลัง 50% ของกําลังสูงสุด // หนวงเวลา 3 วินาที // ขับมอเตอรชอง 1 กลับทิศทางดวยกําลัง 50% ของกําลังสูงสุด // ขับมอเตอรชอง 2 กลับทิศทางดวยกําลัง 50% ของกําลังสูงสุด // หนวงเวลา 3 วินาที // หยุดขับมอเตอรทั้งสองชอง // หนวงเวลา 3 วินาที 8 SCL 9 SDA
24 A0 KNOB
// ผนวกไฟลไลบรารีหลัก
SERVO
85
86
5.9 ipst_servoMotor.h ไฟลไลบรารีขับเซอรโวมอเตอร เปนไฟลไลบรารีควบคุมเซอรโวมอเตอร มีฟงกชั่นสนับสนุนการควบคุมตําแหนงแกนหมุน ของเซอรโวมอเตอร โดยแผงวงจร IPST-SE ควบคุมเซอรโวมอเตอรได 4 ตัวในเวลาเดียวกัน กอนใช งานตองผนวกไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง #include <ipst_servoMotor.h> หรือ #inclue <atx.h> ในไฟลไลบรารีนีมี้ 1 ฟงกชั่นคือ servo เปนฟงกชั่นกําหนดตําแหนงแกนหมุนของเซอรโว มอเตอร รูปแบบ void servo(unsigned char _ch, int _angle) พารามิเตอร _ch - ชองเอาตพุตเซอรโวมอเตอร มีคา 0 ถึง 3 _pos - กําหนดตําแหนงแกนหมุนของเซอรโวมอเตอร มีคาในชวง 0 ถึง 180 และ -1 ถากําหนดเปน -1 หมายถึง ไมใชงานเซอรโวมอเตอรทีช่ องนั้นๆ ตัวอยางที่ 5-19 #include <ipst.h> void setup() {} void loop() { servo(0,60); sleep(5000); servo(0,120); sleep(5000); }
// ผนวกไฟลไลบรารีหลัก
// ขับเซอรโวมอเตอรชอง 0 ไปยังตําแหนง 60 องศา // หนวงเวลา 5 วินาที // ขับเซอรโวมอเตอรชอง 0 ไปยังตําแหนง 120 องศา // หนวงเวลา 5 วินาที
87
5.10 ipst_serial.h ไลบรารีรับสงขอมูลอนุกรม เป นไฟลไลบรารี ที่ บรรจุชุ ดคําสั่งเกียวกั ่ บการรับสงขอมูลอนุกรมผานวงจรสื่อสารขอมูล อนุกรม (UART) ของไมโครคอนโทรลเลอรบนแผงวงจร IPST-SE ในชุดกลองสมองกล IPSTMicroBOX (SE) กอนเรียกใชงานตองผนวกไฟลไลบรารีไวในตอนตนของโปรแกรมดวยคําสั่ง #include <ipst_serial.h> หรือ #inclue <atx.h>
5.10.1 การเชือมต ่ อทางฮารดแวร เมือต ่ องการใชงานชอง UART0 (ทํางานผานพอรต USB) ใหตอสายจากจุดตอพอรต USB บนแผงวงจร IPST-SE (เปนจุดตอเดียวกับทีใช ่ ในการอัปโหลด) เขากับพอรต USB ของคอมพิวเตอร
เมือต ่ องการใชงานชอง UART1 ตอสายสัญญาณเขากับจุดตอ RXD1 (จุดตอพอรต 2) และ TXD1 (จุดตอพอรต 3) บนแผงวงจร IPST-SE
รูปที่ 5-2 แสดงจุดตอสัญญาณของแผงวงจร IPST-SE เมือมี ่ การใชงานไลบรารี ipst_serial.h
88
5.10.2 uart เป นฟงกชั่นสําหรับสงขอมูลกลุมอักษรหรือสายอักขระหรือสตริง (string) ออกจากโมดูล UART0 ไปยังคอมพิวเตอรผานพอรต USB มีอัตราการถายทอดขอมูลเริ่มตนที่ 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 กําหนดใหขอความขึ้นบรรทัดใหม
ตัวอยางที่ 5-20 #include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() {} void loop() { uart(“Hello IPST-MicroBOX (SE)!\r\n”); // สงขอมูลไปยังคอมพิวเตอรแบบขึนบรรทั ้ ดใหม sleep(2000); // หนวงเวลา 2 วินาที } ในการรันโปรแกรมนี้ตองตอสาย USB ระหวางแผงวงจร IPST-SE กับพอรต USB ของคอมพิวเตอรไว หรือเลือกเมนู Tools > Serial Monitor ตลอดเวลา จากนันเป ้ ดหนาตาง Serial Monitor โดยคลิกทีปุ่ ม
89
จากนันรอสั ้ กครู หนาตาง Serial Monitor จะปรากฏขึนมา ้ พรอมกับแสดงขอความตามรูป ใหทําการ คลิกทําเครื่องหมายที่ชอง Auto Scroll และเลือก No line ending สวนชองสุดทายเลือกเปน 115200 Baud
5.10.3 uart_set_baud เปนฟงกชันกํ ่ าหนดอัตราหรือความเร็วในการสือสารข ่ อมูลของโมดูล UART0 กับคอมพิวเตอร รูปแบบ void uart_set_baud(unsigned int baud) พารามิเตอร baud - อัตราบอดในการสือสารของโมดู ่ ล UART0 กับคอมพิวเตอร มีคา 2400 ถึง 115,200 ตัวอยางที่ 5-21 uart_set_baud(4800);
// กําหนดอัตราบอดในการสือสารข ่ อมูลเปน 4,800 บิตตอวินาที
5.10.4 uart_available เปนฟงกชั่นตรวจสอบการรับขอมูลเขามาของโมดูล UART0 เมื่อติดตอกับคอมพิวเตอร รูปแบบ unsigned char uart_available(void) การคืนคา - เปน “0” เมื่อยังไมมีขอมูลเขามา - มากกวา 0 เมื่อมีขอมูลเขามา โดยมีคาเทากับจํานวนของอักขระที่ไดรับ ตัวอยางที่ 5-22 char x =uart_available(); // ตรวจสอบวา มีขอมูลเขามาทางภาครับของโมดูล UART0 หรือไม ถา x มีคามากกวา 0 แสดงวา // มีขอมูลเขามายังภาครับแลว ควรอานขอมูลออกดวยฟงกชัน่ uart_getkey ในลําดับถัดไปทันที
90
5.10.5 uart_getkey เปนฟงกชั่นอานขอมูลจากบัฟเฟอรตัวรับของโมดูล UART0 รูปแบบ char uart_getkey(void) การคืนคา - เปน “0” เมื่อไมมีการรับอักขระใดๆ เขามายังวงจรภาครับของโมดูล UART - เปนคาของอักขระทีรั่ บไดในรูปแบบของรหัสแอสกี้ ตัวอยางที่ 5-23 #include <ipst.h> void setup() {} void loop() // ลูปการทํางานหลัก { if(uart_available()) // ตรวจสอบวามีขอมูลเขามาหรือไม { if(uart_getkey()==’a’) // ตรวจจับการกดคีย a วา ถูกกดหรือไม { glcd(3,1,“Key a Active!”); // แสดงขอความเพือตอบสนองต ่ อการตรวจพบวามีการคีย a sleep(2000); // หนวงเวลาแสดงขอความประมาณ 2 วินาที } else { glcdClear(); // เคลียรขอความที่หนาจอแสดงผล } } } หมายเหตุ เมือเรี ่ ยกใชฟงกชัน่ uart เพือส ่ งขอมูลออกทางโมดูลพอรตอนุกรมหรือ UART และ uart_getkey เพือ่ ตรวจจับอักขระใดๆ นัน้ อัตราการสื่อสารขอมูลจะถูกกําหนดเปน 115,200 บิตตอวินาที ขอมูล 8 บิต และไมมีการตรวจ สอบพาริตีโดยอั ้ ตโนมัติ และเปนคาตังต ้ น เพือลดความซั ่ บซอนในการเขียนโปรแกรมลง หากตองการเปลียนอั ่ ตราเร็วใน การสือสารข ่ อมูลตองใชคําสัง่ uart_set_baud อยางไรก็ตาม ตองคํานึงดวยวา เมืออั ่ ตราการสือสารสู ่ งขึนอาจส ้ งผลกระทบ ตอความถูกตองในการสือสารข ่ อมูลได ในการรันโปรแกรมนี้ตองตอสาย USB ระหวางแผงวงจร IPST-SE กับพอรต USB ของคอมพิวเตอรไวตลอด เวลา จากนันเป ้ ดหนาตาง Serial Monitor โดยคลิกทีปุ่ ม หรือเลือกเมนู Tools > Serial Monitor
91
จากนันรอสั ้ กครู หนาตาง Serial Monitor จะปรากฏขึนมา ้ ใหกดปอนตัวอักษร a ที่ชองบนสุด แลวคลิก กดปุม Send ทางขวามือ โดยที่ชองดานลางเลือก No line ending สวนชองสุดทายดานลางขวามือเลือกเปน 115200 Baud
เมือส ่ งตัวอักษร a จากคอมพิวเตอรไปยังแผงวงจร IPST-SE แลว ที่แผงวงจร IPST-SE จะตรวจสอบการเขา มาของขอมูล หากถูกตอง จะแสดงขอความ Key a Active !
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
00 00000000 0 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 Key a Active! 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000 0 00000000000000000000
ON
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
24 A0 KNOB
8 SCL 9 SDA
USB
92
5.10.6 uart1 เปนฟงกชั่นสงขอมูลสายอักขระออกทางภาคสงของโมดูล UART1 มีอัตราการรับสงขอมูล เริ่มตนที่ 9,600 บิตตอวินาที โดยการใชงานตองตอสายสัญญาณเขาที่จุด TXD1 รูปแบบ void uart1(char *p,...) พารามิเตอร p - รับรหัสของกลุมข อความทีต่ องการสงออกจากภาคสงของโมดูล UART1 โดยสามารถกําหนด รูปแบบการแทรกสัญลักษณพิเศษเพือใช ่ รวมในการแสดงผลเหมือนกับฟงกชัน่ uart1
5.10.7 uart1_set_baud เปนฟงกชั่นกําหนดอัตราการรับสงขอมูลของโมดูล UART1 กับอุปกรณภายนอก รูปแบบ void uart1_set_baud(unsigned int baud) พารามิเตอร baud - กําหนดคาอัตราการรับสงขอมูลในการสือสารข ่ อมูลของโมดูล UART1 ตัวอยางที่ 5-24 uart1_set_baud(19200);
// กําหนดอัตราบอดในการสือสารเป ่ น 19,200 บิตตอวินาที
5.10.8 uart1_available เปนฟงกชั่นตรวจสอบการรับขอมูลเขามาของโมดูล UART1 เมื่อติดตอกับอุปกรณภายนอก โดยการใชงานตองตอสายสัญญาณเขาที่จุด RXD1 และ TXD1 รูปแบบ unsigned char uart1_available(void) การคืนคา - เปน 0 เมื่อไมมีขอมูลเขามา - มากกวา 0 โดยมีคาเทากับจํานวนของอักขระที่ไดรับ ตัวอยางที่ 5-25 char x =uart1_available(); // ตรวจสอบวามีขอมูลเขามาทางภาครับของโมดูล UART1 หรือไม // ถา x มีคามากกวา 0 แสดงวามีขอมูลเขามาแลว ควรอานออกไปดวยฟงกชัน่ uart1_getkey ทันที
93
5.10.9 uart1_getkey เปนฟงกชั่นอานขอมูลจากบัฟเฟอรตัวรับของโมดูล UART1 รูปแบบ char uart1_getkey(void) การคืนคา - เปน 0 เมื่อยังไมมีการรับอักขระใดๆ - เปนคาของอักขระทีรั่ บไดในรูปแบบของรหัสแอสกี้
1. เมื่อตองการติดตอกับอุปกรณสื่อสารขอมูลไรสาย อาทิ โมดูลบลูทูธ, โมดูล XBEE เปนตน
Tx
TXD1
Rx
RXD1
2. เมื่อตองการสื่อสารขอมูลระหวางแผงวงจร IPST-SE 2 ชุด
28 A4 25 A1
29 A5 26 A2 28 A4 25 A1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
SERVO
15 SV0 14 SV1 13 SV2 12 SV3
ON
G 6V 12 G 6V 13 G 6V 14 G 6V 15
D
KNOB
OK
0 0 0000 0000 0 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000 0 000000 00000 00000 0000
ON
SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
30 A6 27 A3
00 0 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00 000 00000 000000 00000 00
DC MOTOR
8 SCL 9 SDA 0
USB
29 A5 26 A2
OK
30 A6 27 A3
KNOB
24 A0
24 A0
D
8 SCL 9 SDA
USB
SERVO
3. เมือต ่ องการติดตอกับอุปกรณภายนอกทีต่ องการรูปแบบขอมูลอนุกรมในการสือสาร ่ อาทิ แผงวงจรขับเซอร โวมอเตอร 16 ชอง (ZX-SERVO16i) , แผงวงจรโมดูล LCD แบบอนุกรม (SLCD16x2), แผงวงจรฐานเวลา นาฬิกาจริงแบบอนุกรม (ZX-17)
94
95
ในการพัฒนาโครงงานวิทยาศาสตรสมัยใหม ที่เกียวข ่ องกับการเขียนโปรแกรมและตองมี ระบบควบคุมอัตโนมัติเขามาเกียวข ่ อง รวมถึงตองมีการติดตอกับตัวตรวจจับ ซึงผู ่ ใช งานตองการทราบ ถึงคาที่ตัวตรวจจับวัดหรือตรวจจับได อุปกรณตัวหนึ่งที่มีความสําคัญคือ อุปกรณแสดงผล อุปกรณ พื้นฐานทีสุ่ ดทีใช ่ ในการแสดงผลคือ LED หากตองการใหมีการแสดงผลเปนตัวเลข ก็จะเปลี ๋ ่ยนมาใช LED ตัวเลข 7 สวน หากมีความตองการเพิ่มขึ้นไปอีก นันคื ่ อ ตองการแสดงเปนขอความ เปนตัวอักษร จํานวนมากขึน้ โมดูล LCD แบบอักขระ (character LCD module) ก็จะเขามาทําหนาที่นี้ ในชุดกลองสมองกล IPST-MicroBOX Secondary Education (SE) รองรับทั้งการแสดงผล ดวยอุปกรณพื้นฐานอยาง LED และจอแสดงผลแบบกราฟก LCD สี ทําใหชุดกลองสมองกล IPSTMicroBOX (SE) นีความสมบู ้ รณพรอมในการแสดงผลการทํางานอยางเพียงพอ ในบทนีเป ้ นการนํา เสนอขอมู ลสําหรั บการใชงานจอแสดงผลแบบกราฟก LCD สีที่เปนอุปกรณแสดงผลหลักของ ชุดกลองสมองกล IPST-MicroBOX (SE) เพื่อใหนําไปใชงานไดอยางเกิดประโยชนสูงสุด
6.1 คุณสมบัติของจอแสดงผลแบบกราฟก LCD สีของแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE) คุณสมบัติที่สําคัญโดยสรุปของจอแสดงผลแบบกราฟก LCD สีของแผงวงจร IPST-SE มีดังนี้ ขนาดจอแสดงผล 1.8 นิว ้ ความละเอียด 128 x 160 จุด ้ 65,536 สี (ไมรองรับไฟลรูปภาพโดยตรง) พรอมไฟสองหลัง แสดงภาพกราฟกลายเสนและพืนสี แสดงผลเปนตัวอักษรขนาดปกติ (5 x 7 จุด) ได 21 ตัวอักษร 16 บรรทัด (หรือ 21 x16) มีไฟลไลบรารี ipst_glcd.h รองรับเพื่อชวยใหการเขียนโปรแกรมเพื่อกําหนดรูปแบบการ แสดงผลทําไดหลากหลายแบบและสะดวกขึนอย ้ างมาก โดยเฉพาะการพัฒนาโปรแกรมภาษา C/C++ กับซอฟตแวร Wiring 1.0 IPST-SE
96
012345 67 89abc defghijk 100000000000000000000 200000 0000d 0000000000 300000000000000000000 400000000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000
รูปที่ 6-1 แสดงการกําหนดตําแหนงของการแสดงผลสําหรับจอแสดงผลกราฟก LCD สีทีใช ่ บนแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE)
6.2 การเรียกใชไฟลไลบรารีสําหรับจอแสดงผลแบบกราฟก LCD สี ไฟลไลบรารีที่ใชในการติดตอและควบคุมการทํางานของจอแสดงผลกราฟก LCD สีจะไดรับ การติดตังไปพร ้ อมกับการติดตั้งติดตั้งซอฟตแวร Wiring 1.0 รุน IPST-SE แลว ไฟลไลบรารีชื่อ ipst_glcd.h ไดรับการคัดลอกลงในโฟลเดอร C:\WiringIPST\libraries\IPST ในการประกาศเพื่อผนวกไฟลไลบรารีนีในโปรแกรมหรื ้ อสเก็ตชของ Wiring 1.0 ทําไดดังนี้ #include <ipst_glcd.h> หรือ #include <ipst.h>
97
6.3 ฟงกชันเกี ่ ่ยวกับการแสดงผลจอภาพแบบกราฟก LCD สี 6.3.1 glcd เปนฟงกชั่นแสดงขอความที่หนาจอแสดงผลกราฟก LCD สี โดยแสดงตัวอักษรขนาดปกติได 21 ตัวอักษร 16 บรรทัด รูปแบบ void glcd(unsigned char x, unsigned char y ,char *p,...) พารามิเตอร x คือตําแหนงบรรทัดมีคาตั้งแต 0 ถึง 15 y คือตําแหนงตัวอักษรมีคาตั้งแต 0 ถึง 20 *p คือขอความทีต่ องการนํามาแสดงรวมถึงรหัสที่ใชกําหนดรูปแบบพิเศษเพือร ่ วมแสดงผลขอมูลตัวเลขใน รูปแบบอืนๆ ่ ประกอบดวย %c หรือ %C - รับคาแสดงผลตัวอักษร 1 ตัวอักษร %d หรือ %D - รับคาแสดงผลตัวเลขจํานวนเต็มในชวง -32,768 ถึง 32,767 %l หรือ %L - รับคาแสดงผลตัวเลขจํานวนเต็มในชวง -2,147,483,648 ถึง 2,147,483,647 %f หรือ %F - รับคาเพือแสดงผลตั ่ วเลขจํานวนจริง (แสดงทศนิยม 3 หลัก)
ตัวอยางที่ 6-1 glcd(2,0,“Hello World”); // แสดงขอความ Hello World ทีตํ่ าแหนงซายสุดของบรรทัด 2 (บรรทัดที่ 3)
012345 67 89abc defghijk 100000000000000000000 Hello 0 World 0000000000 300000000000000000000 400000000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000
98
ตัวอยางที่ 6-2 int x=20; glcd(1,2,”Value = %d”,x); // แสดงตัวอักษรและตัวเลขบนบรรทัดเดียวกัน เริ่มตนที่คอลัมน 2 ของบรรทัด 1 (บรรทัดที่ 2) 8 SCL 9 SDA
USB
30 A6 27 A3 29 A5 26 A2
24 A0
D Hello0 Wo rld0000000000 00 Valu e0=020000000000 Hello0 World 0000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
ON
28 A4 25 A1
6.3.2 colorRGB เปนฟงกชั่นเปลี่ยนคาสีในรูปแบบ RGB (แดง เขียว นําเงิ ้ น) ใหอยูในรูปของตัวเลข 16 บิต โดย แบงเปนคาของสีแดง 5 บิต ตอดวยสีเขียว 6 บิต และปดทายดวยคาของสีนําเงิ ้ น 5 บิต รูปแบบ unsigned int colorRGB(uint red,uint green,uint blue) พารามิเตอร red - เปนคาของสีแดง มีคา 0 ถึง 31 ถาคาทีป่ อนมากกวา 31 จะปรับลดใหเทากับ 31 green - คาของสีเขียว มีคา 0 ถึง 63 ถาคาทีป่ อนมากกวา 63 จะถูกปรับลดใหเทากับ 63 blue - คาของสีนํ้าเงิน มีคา 0 ถึง 31 ถาคาทีป่ อนมากกวา 31 จะปรับลดใหเทากับ 31
ตัวอยางที่ 6-3 #include <ipst.h> int colors; void setup() { int colors; colors=colorRGB(31,0,0); glcdFillScreen(colors); } void loop() {}
// สงคาสี 16 บิตของสีแดงใหตัวแปร colors // นําคาไปแสดงเปนสีพืนของจอแสดงผล ้
99
6.3.3 color[ ] เปนตัวแปรอะเรยทีใช ่ กําหนดสีจํานวน 8 สีที่เปนสีพืนฐาน ้ ผูพัฒนาโปรแกรมสามารถเรียกใช ตัวแปร color[] หรือเรียกใชชื่อสีตรงๆ ก็ได รูปแบบ unsigned int color[]={ GLCD_RED, GLCD_GREEN, GLCD_BLUE, GLCD_YELLOW, GLCD_BLACK, GLCD_WHITE, GLCD_SKY, GLCD_MAGENTA}; พารามิเตอร GLCD_RED - ใชกําหนดสีแดง GLCD_GREEN - ใชกําหนดสีเขียว GLCD_BLUE - ใชกําหนดสีนํ้าเงิน GLCD_YELLOW - ใชกําหนดสีเหลือง GLCD_BLACK - ใชกําหนดสีดํา GLCD_WHITE - ใชกําหนดสีขาว GLCD_SKY - ใชกําหนดสีฟา GLCD_MAGENTA - ใชกําหนดสีบานเย็น
ตัวอยางที่ 6-4 glcdFillScreen(color[5]);
// กําหนดใหพืนหลั ้ งเปนสีขาว
ตัวอยางที่ 6-5 glcdFillScreen(GLCD_BLUE); // กําหนดใหพืนหลั ้ งเปนสีนํ้าเงิน
100
6.3.4 glcdSetColorWordBGR เปนฟงกชั่นกําหนดการเรียงบิตขอมูลสีใหเปนแบบ BGR (5-6-5) นันคื ่ อ คาของสีนําเงิ ้ น 5 บิต ตอดวยสีเขียว 6 บิต และปดทายดวยคาของสีแดง 5 บิต ทั้งนีเนื ้ องจากผู ่ ผลิตจอแสดงผลกราฟก LCD สีมีการผลิตจอแสดงที่มีคุณสมบัติเหมือนกันออกมา 2 รุน แตมีการเรียงบิตขอมูลสีตางกัน คือ เรียง แบบ BGR และเรียงแบบ RGB อยางไรก็ตาม คาตังต ้ นของไฟลไลบรารี ipst_glcd.h เลือกใชการเรียงบิตขอมูลสีใหเปนแบบ BGR นันคื ่ อ มีการเรียกใชฟงกชั่นนี้ตังแต ้ ตน จึงไมตองเขียนฟงกชั่นนี้ลงในโปรแกรม รูปแบบ glcdSetColorWordBGR() ตัวอยางที่ 6-6 #include <ipst.h> void setup() { glcdSetColorWordBGR(); // เขียนฟงกชันนี ่ ้ลงไปหรือไมก็ได } void loop() {}
6.3.5 glcdSetColorWordRGB( );
เปนฟงกชั่นกําหนดการเรียงบิตขอมูลสีใหเปนแบบ RGB (5-6-5) นั่นคือ คาของสีแดง 5 บิต ตอดวยสีเขียว 6 บิต และปดทายดวยคาของสีนําเงิ ้ น 5 บิต ทังนี ้ เนื ้ องจากผู ่ ผลิตจอแสดงผลกราฟก LCD สีมีการผลิตจอแสดงผลแบบนี้ 2 รุน โดยมีการเรียงบิตขอมูลสีแบบ BGR และแบบ RGB หากผูใชงานแผงวงจร IPST-SE และทดลองกําหนดสีของภาพหรือตัวอักษรแลวพบวา สีที่ได ไมถูกตอง จะตองเรียกใชฟงกชั่นนี้ โดยบรรจุไวใน setup() ที่ตอนตนของโปรแกรม รูปแบบ glcdSetColorWordRGB() ตัวอยางที่ 6-7 #include <ipst.h> void setup() { glcdSetColorWordBGR(); // เลือกรูปแบบการเรียงบิตสีเปนแบบ RGB } void loop() {}
101
6.3.6 setTextColor เปนการกําหนดคาสีของตัวอักษรที่แสดงดวยฟงกชั่น glcd() โดยคาตังต ้ นกําหนดเปนสีขาว รูปแบบ void setTextColor(unsigned int newColor) พารามิเตอร newColor คือสีที่ตองการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
ตัวอยางที่ 6-8 setTextColor(GLCD_YELLOW); // กําหนดใหสีของตัวอักษรเปนสีเหลือง
6.3.7 setTextBackgroundColor เปนฟงกชั่นกําหนดสีของพื้นหลังตัวอักษร โดยคาตังต ้ นเปนสีดํา สีของพื้นหลังตัวอักษรจะ เปนคนละสวนกับสีของพืนจอภาพ ้ (screen background) ซึงต ่ องกําหนดคาผานฟงกชัน่ glcdFillScreen รูปแบบ void setTextBackgroundColor(unsigned int newColor) พารามิเตอร newColor คือสีที่ตองการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
ตัวอยางที่ 6-9 setTextBackgroundColor(GLCD_GREEN); // กําหนดใหสีพืนหลั ้ งตัวอักษรเปนสีเขียว
29 A5 26 A2 28 A4 25 A1 SW1
D Hello0Wo rl d0000000000 000000000000000000000 Hello 0World0000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
ON
G 6V 12 G 6V 13 G 6V 14
14 SV1 13 SV2 12 SV3
30 A6 27 A3 OK
8 SCL 9 SDA
24 A0 KNOB
USB
102
6.3.8 glcdClear เปนการเคลียรหนาจอแสดงผล โดยสีของพืนหลั ้ งจะเปนสีพืนหลั ้ งของตัวอักษรลาสุด โดยถาไม ไดกําหนดดวยคําสัง่ setTextBackGroundColor() มากอนหนานี้ หลังจากทําคําสัง่ glcdClear()แลว พืนหลั ้ งจะเปนสีดํา รูปแบบ void glcdClear() ตัวอยางที่ 6-10 glcdClear();
// เคลียรหนาจอแสดงผล
IPST-SE
103
6.3.9 glcdFillScreen เปนการเคลียรหนาจอแสดงผล แลวเปลียนสี ่ พื้นหลังของจอแสดงผลดวยสีที่ระบุ รูปแบบ void glcdFillScreen(unsigned int color) พารามิเตอร Color คือสีที่ตองการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
ตัวอยางที่ 6-11 glcdFillScreen(GLCD_YELLOW); // กําหนดสีพืนหลั ้ งของจอภาพเปนสีเหลือง
104
6.3.10 glcdMode เปนการกําหนดทิศทางแสดงผลของจอกราฟก LCD สี โดยกําหนดใหขอความหรือภาพหนา จอใหแสดงภาพตังฉากตรงหน ้ า (โหมด 0), หมุนขวา 90 องศา (โหมด 1), หมุน 180 องศาหรือกลับ หัว (โหมด 2) และหมุน 270 องศา (โหมด 3) รูปแบบ glcdMode(unsigned int modeset) พารามิเตอร modeset คือคาทิศทางของการหมุนมีคา 0 ถึง 3 โดยใชแทนทิศทาง 0, 90, 180 หรือ 270 องศา โดยมีคา เริ่มตนคือ 0 องศา ทํางานอยูในแนวตั ้ง
IPST-SE
IPST-SE
IPST-SE
IPST-SE
ตัวอยางที่ 6-12 #include <ipst.h> void setup() { setTextSize(2); } void loop() { glcdClear(); glcdMode(0); glcd(0,0,"IPST-SE"); sw_ok_press(); glcdClear();
// ขนาดตัวอักษร 2 เทา
// เคลียรหนาจอ // โหมด 0 องศา // แสดงขอความ // รอกดสวิตชเขาโหมดตอไป
}
glcdMode(1); glcd(0,0,"IPST-SE"); sw_ok_press(); glcdClear(); glcdMode(2); glcd(0,0,"IPST-SE"); sw_ok_press(); glcdClear(); glcdMode(3); glcd(0,0,"IPST-SE"); sw_ok_press();
105
6.3.11 setTextSize เปนการกําหนดขนาดตัวอักษรโดยระบุเปนจํานวนเทาของขนาดปกติ คาตังต ้ นเมือเริ ่ ่มทํางาน ทุกครั้งคือ ขนาดตัวอักษรปกติ ใชพื้นทีรวมระยะช ่ องไฟคือ 6 x 10 พิกเซลตอ 1 ตัวอักษร จึงแสดงได 21 ตัวอักษร 16 บรรทัดในแนวตั้ง
รูปแบบ setTextSize(unsigned int newSize) พารามิเตอร newSize คือคาขนาดจํานวนเทาของขนาดปกติ มีคา 1 ถึง 16 เพือให ่ ตัวอักษรที่แสดงไมลนหนาจอ ถาหากกําหนดเปน 1 เทา แสดงตัวอักษรได 21 ตัว 16 บรรทัด ถาหากกําหนดเปน 2 เทา แสดงตัวอักษรได 10 ตัว 8 บรรทัด ถาหากกําหนดเปน 3 เทา แสดงตัวอักษรได 7 ตัว 5 บรรทัด ถาหากกําหนดเปน 4 เทา แสดงตัวอักษรได 5 ตัว 4 บรรทัด ถาหากกําหนดเปน 5 เทา แสดงตัวอักษรได 4 ตัว 3 บรรทัด ถาหากกําหนดเปน 6 และ 7 เทา แสดงตัวอักษรได 3 ตัว 2 บรรทัด ถาหากกําหนดเปน 8 เทา แสดงตัวอักษรได 2 ตัว 2 บรรทัด ถาหากกําหนดเปน 9 และ 10 เทา แสดงตัวอักษรได 2 ตัว 1 บรรทัด ถาหากกําหนดเปน 11 ถึง 16 เทา แสดงตัวอักษรได 1 ตัว 1 บรรทัด (แบบไมลนจอแสดงผล)
106
ตัวอยางที่ 6-13 #include <ipst.h> void setup() { setTextSize(1); setTextColor(GLCD_GREEN);
//
glcd(0,0,"Size1"); setTextSize(2); glcd(1,0,"Size2"); setTextSize(3);
//
กําหนดขนาดขอความ 1 เทา สีตัวอักษรเปนสีเขียว แสดงขอความ
//
กําหนดขนาดขอความ 2 เทา
glcd(2,0,"Size3"); setTextSize(4); glcd(3,0,"Size4");
//
กําหนดขนาดขอความ 3 เทา
//
กําหนดขนาดขอความ 4 เทา
//
} void loop() {}
6.3.12 getTextColor เปนคําสั่งคืนคาสีปจจุบันของตัวอักษร รูปแบบ unsigned int getTextColor() การคืนคา textColor เปนคาสีแสดงอยูในรูปของตัวเลข 16 บิต ดูรูปแบบไดจากฟงกชัน่ colorRGB()
ตัวอยางที่ 6-14 unsigned int color; color=getTextColor();
// นําคาสีของตัวอักษรเก็บไวที่ตัวแปร color
107
6.3.13 getTextBackgroundColor เปนคําสั่งคืนคาสีพื้นหลังของตัวอักษรในปจจุบัน รูปแบบ unsigned int getTextBackgroundColor() การคืนคา ปของตัวเลข 16 บิต ดูรูปแบบไดจากฟงกชัน่ colorRGB() textBackgroundColor เปนคาสีแสดงอยูในรู
ตัวอยางที่ 6-15 unsigned int color; color=getTextBackgroundColor();
// นําคาสีพืนหลั ้ งของตัวอักษรเก็บในตัวแปร color
6.3.14 getTextSize คืนคาขนาดของตัวอักษรออกมาเปนจํานวนเทาของคาปกติ รูปแบบ unsigned int getTextSize() การคืนคา textSize เปนคาจํานวนเทาของขนาดตัวอักษร
ตัวอยางที่ 6-16 unsigned int textSize; textSize=getTextSize(); // นําคาจํานวนเทาของขนาดของตัวอักษรเก็บในตัวแปร textSize
6.3.15 glcdGetMode เปนคําสังคื ่ นคาของโหมดทิศทางการแสดงผลในปจจุบัน รูปแบบ unsigned int glcdGetMode() การคืนคา mode เปนคาของโหมดทิศทางการแสดงผล เปนตัวเลข 0 ถึง 3 เพือแสดงผลในทิ ่ ศทาง 0 องศา, หมุน 90 องศา, หมุน 180 องศา และหมุน 270 องศาตามลําดับ
ตัวอยางที่ 6-17 unsigned int Mode; Mode=glcdGetMode(); // คืนคาทิศทางการแสดงผลของหนาจอ GLCD
108
6.3.16 glcdPixel เปนคําสั่งพล็อตจุดบนจอภาพตามพิกัดทีกํ่ าหนด โดยอางอิงจอภาพขนาด 128 x 160 พิกเซล รูปแบบ void glcdPixel(unsigned int x,unsigned int y,unsigned int color) พารามิเตอร x คือคาพิกัดในแนวนอนหรือแกน x มีคาระหวาง 0 ถึง 127 y คือคาพิกัดในแนวตังหรื ้ อแกน y มีคาระหวาง 0 ถึง 159 color คือคาของสีที่ตองการ เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
ตัวอยางที่ 6-18 #include <ipst.h> int i; void setup() { for (i=0;i<128;i+=4) { glcdPixel(i,80,GLCD_RED); } for (i=0;i<160;i+=4) { glcdPixel(64,i,GLCD_RED); } } void loop() {}
// พล็อตจุดทุกๆ 4 พิกเซลในแนวแกน x กลางจอ
// พล็อตจุดทุกๆ 4 พิกเซลในแนวแกน y กลางจอ
109
6.3.1.17 glcdRect เปนฟงกชันลากเส ่ นจากพิกัดทีกํ่ าหนดมายังพิกัดปลายทาง โดยอางอิงถึงตําแหนงของพิกเซล หรือจุดของจอแสดงผลที่ความละเอียด 128 x 160 จุด ดังรูปที่ 6-2 รูปแบบ void glcdRect(unsigned int x1,unsigned int y1,unsigned int width,unsigned int height,unsigned int color) พารามิเตอร x1 คือ คาตําแหนงเริ่มตนของรูปสี่เหลียมในแกน ่ x มีคาระหวาง 0 ถึง 127 y1 คือ คาตําแหนงเริ่มตนของรูปสี่เหลียมในแกน ่ y มีคาระหวาง 0 ถึง 159 width คือ คาความกวางของรูปสี่เหลียม ่ (แนวนอน) มีคาระหวาง 1 ถึง 128 height คือ คาความสูงของรูปสี่เหลียม ่ (แนวตั้ง) มีคาระหวาง 1 ถึง 158 color คือ สีของเสน เปนคาตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
รูปที่ 6-2 แสดงการกําหนดตําแหนงของพิกเซลหรือจุดของจอแสดงผลกราฟก LCD สีทีใช ่ บนแผงวงจร IPST-SE ในชุดกลองสมองกล IPST-MicroBOX (SE)
110
ตัวอยางที่ 6-19 #include <ipst.h> void setup() { glcdRect(32,40,64,80,GLCD_RED); // วาดรูปสี่เหลียมเส ่ นสีแดง ขนาด 64 x 80 พิกเซล } void loop() {}
300000000000000000000 400000000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000
111
6.3.18 glcdFillRect เปนการระบายสีพื้นของรูปสีเหลี ่ ยม ่ โดยกําหนดจุดเริ่มตนและความกวางยาวของรูปสีเหลี ่ ยม ่ ที่ตองการ ฟงกชั่นนี้เปนการสรางรูปสี่เหลี่ยมที่มีสีพื้นแตไมมีเสนกรอบ ในขณะที่ฟงกชั่น glcdRect เปนการวาดรูปกรอบสี่เหลี่ยมที่กําหนดสีของเสนกรอบได แตภายในกรอบไมมีสี รูปแบบ void glcdFillRect(unsigned int x1, unsigned int y1, unsigned int width, unsigned int height,unsigned int color) พารามิเตอร x1 คือ คาตําแหนงเริ่มตนของรูปสี่เหลียมในแกน ่ x มีคาระหวาง 0 ถึง 127 y1 คือ คาตําแหนงเริ่มตนของรูปสี่เหลียมในแกน ่ y มีคาระหวาง 0 ถึง 159 width คือ คาความกวางของรูปสี่เหลียม ่ (แนวนอน) มีคาระหวาง 1 ถึง 128 height คือ คาความสูงของรูปสี่เหลียม ่ (แนวตั้ง) มีคาระหวาง 1 ถึง 158 color คือ สีของเสน เปนคาตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
ตัวอยางที่ 6-20 #include <ipst.h> void setup() { glcdFillRect(32,40,64,80,GLCD_RED); // สรางภาพสีเหลี ่ ยมพื ่ ้นสีแดง ขนาด 64 x 80 พิกเซล } void loop() {}
300000000000000000000 400000000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000
112
6.3.19 glcdLine เปนฟงกชั่นลากเสนจากจุดหนึ่งไปยังอีกจุดหนึ่ง กําหนดเปนพิกัดในแนวแกนนอน (x) และ แกนตั้ง (y) รูปแบบ void glcdLine(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2,unsigned int color) พารามิเตอร x1 คือคาตําแหนงเริ่มตนของเสนบนแกน x มีคาระหวาง 0 ถึง 127 y1 คือคาตําแหนงเริ่มตนของเสนบนแกน y มีคาระหวาง 0 ถึง 159 x2 คือคาตําแหนงสิ้นสุดของเสนบนแกน x มีคาระหวาง 0 ถึง 127 y2 คือคาตําแหนงสิ้นสุดของเสนบนแกน y มีคาระหวาง 0 ถึง 159 color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
ตัวอยางที่ 6-21 #include <ipst.h> void setup() { glcdLine(0,0,127,159,GLCD_RED); // ลากเสนสีแดงทแยงมุมจากดานบนซายลงมาดานลางขวา } void loop() {} 3 4
0 0 0000000000000000 0000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000000000000 a00000000000000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000
34
0 0
113
6.3.20 glcdCircle เปนฟงกชั่นวาดเสนรูปวงกลมจากการกําหนดจุดกึ่งกลางของวงกลมและความยาวของรัศมี รูปแบบ void glcdCircle(unsgined int x, unsgined int y, unsgined int radius,unsgined int color) พารามิเตอร x คือ พิกัดจุดศูนยกลางของวงกลมบนแกน x มีคาระหวาง 0 ถึง 127 y คือ พิกัดจุดศูนยกลางของวงกลมบนแกน y มีคาระหวาง 0 ถึง 159 radius คือ คารัศมีของวงกลม color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
ตัวอยางที่ 6-22 #include <ipst.h> void setup() { glcdCircle(32,120,31,GLCD_RED);// } void loop() {}
สรางเสนวงกลมสีแดง มีรัศมี 31 พิกเซล
0000000000000000 0000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000 00000000 a000000000 0000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000
114
6.3.21 glcdFillCircle เปนฟงกชันวาดรู ่ ปวงกลมที่มีสีพืนจากการกํ ้ าหนดจุดศูนยกลางของวงกลม และความยาวของ รัศมี ฟงกชั่นนี้เปนการสรางรูปวงกลมที่มีสีพื้นแตไมมีเสนกรอบ ในขณะที่ฟงกชั่น glcdCircle เปน การวาดรูปวงกลมที่กําหนดสีของเสนรอบวงได แตภายในวงกลมไมมีสี รูปแบบ void glcdFillCircle(unsigned int x,unsigned int y,unsigned int radius,unsigned int color) พารามิเตอร x คือ พิกัดจุดศูนยกลางของวงกลมบนแกน x มีคาระหวาง 0 ถึง 127 y คือ พิกัดจุดศูนยกลางของวงกลมบนแกน y มีคาระหวาง 0 ถึง 159 radius คือ คารัศมีของวงกลม color คือ คาสีของเสน เปนตัวเลข 16 บิต หรือเปนคาตัวแปรที่กําหนดคาไวแลวจากตัวแปร color[]
ตัวอยางที่ 6-23 #include <ipst.h> void setup() { glcdFillCircle(32,120,31,GLCD_RED); // สรางรูปวงกลมพืนสี ้ แดง รัศมี 31 พิกเซล } void loop() {}
0000000000000000 0000000000000000 500000000000000000000 600000000000000000000 700000000000000000000 800000000000000000000 900000000000 00000000 a000000000 0000000000 b00000000000000000000 c00000000000000000000 d00000000000000000000 e00000000000000000000 f00000000000000000000
115
6.3.22 glcdArc เปนฟงกชั่นวาดสวนโคงของวงกลม โดยระบุตําแหนงจุดกึ่งกลาง รัศมี ตําแหนงจุดเริม่ จุดสิน้ สุดและสีของเสน รูปแบบ void glcdArc(unsigned int x,unsigned int y,unsigned int r,int start_angle,int end_angle,uint color) พารามิเตอร x คือตําแหนงจุดกึ่งกลางในแนวแกน x y คือตําแหนงจุดกึ่งกลางในแนวแกน y r คือรัศมีของเสนโคง start_angle คือตําแหนงมุมของจุดเริ่มตนของวงกลม end_angle คือตําแหนงมุมจุดสินสุ ้ ดของวงกลม color คือสีของเสนวงกลม
ตัวอยางที่ 6-24 #include <ipst.h> void setup() { glcdArc(48,80,16,30,150,GLCD_RED); glcdCircle(48,75,5,GLCD_YELLOW); glcdCircle(80,75,5,GLCD_YELLOW); glcdArc(80,80,16,30,150,GLCD_RED); glcdFillCircle(64,90,7,GLCD_GREEN); glcdArc(64,100,30,220,320,GLCD_RED); } void loop() {}
116
117
7.1 LED คืออะไร LED (Light Emiting Diode) หรือไดโอดเปลงแสงเปนอุปกรณเอาตพุตสําหรับการแสดงผล ซึงสามารถติ ่ ดสวางไดเมื่อไดรับแรงดันกระตุนอย างเหมาะสม โดย LED มีใหเลือกใชงานไดหลายสี อาทิ สีแดง, เหลือง, เขียว, นําเงิ ้ น, ขาว, สม, มวง เปนตน LED สามารถกําเนิดแสงออกมาไดเมื่อไดรับจายไฟอยางถูกตอง การจายไฟให LED ทํางาน เรียกวา การไบแอส (bias) และการไบแอสที่ทําให LED ทํางาน เรียกวา การไบแอสตรง (forward bias) โดยปกติแรงดันทีใช ่ ในการขับหรือไบแอสให LED ทํางานจะมีคาอยูระหวาง 1-4.5 V ขึนอยู ้ กั บ สารทีนํ่ ามาใชทํา LED และขึนอยู ้ กั บปริมาณกระแสทีไหลผ ่ าน กลาวคือ ถากระแสไหลผาน LED มาก มีผลทําใหแรงดันที่ตกครอม LED มีคามากและแสงที่ LED กําเนิดออกมาก็จะสวางมากขึนด ้ วย โดย ปกติมักจะกําหนดใหแรงดันไบแอสตรงของ LED เทากับ 2V ในรูปที่ 7-1 เปนสัญลักษณ, โครงสราง และการจัดขาของ LED LED สามารถเปลงแสงออกไดหลายสีขึนอยู ้ กั บวา นําสารกึงตั ่ วนําชนิดใดมาสรางเปน LED ถาหากเปนสีแดงและเหลืองทํามาจากแกลเลียมอาร ่ เซไนดฟอสไฟด (GaAsP) สวนสีเขียวทํามาจาก แกลเลียมฟอสไฟด ่ (GaP) และ LED ที่ใหแสงอินฟาเรดซึงทํ ่ ามาจากแกลเลียมอาร ่ เซไนด (GaAs) R1
A
K
(ก) สัญลักษณของ LED
ขาแคโทด
ขาแอโนด
(ข) โครงสรางภายในของ LED
Vs
LED1
+
I1
รูปที่ 7-1 แสดงสัญลักษณ, โครงสรางและการจัดขาของไดโอด รูปที่ 7-2 การตอตัวตานทานเพื่อ เปลงแสงหรือ LED จํากัดกระแสใหแก LED
118
7.2 การใชงาน LED LED ตองการแรงดันไบแอสตรงประมาณ 2V และยอมใหกระแสไฟฟาไหลผานไดไมเกิน 40mA แตปริมาณกระแสไฟฟาทีเหมาะสมคื ่ อ 10 ถึง 20mA ดังนันการใช ้ งาน LED จึงตองมีตัวตานทานจํากัด กระแสไฟฟาตออนุกรมรวมอยูดวย ดังในรูปที่ 7-2 การหาคาของตัวตานทานที่ใชในการจํากัดกระแสไฟฟาให LED ทําไดโดยใชสูตร RS
Vcc VF IF
โดยที่ VCC คือไฟเลี้ยง VF คือแรงดันไบแอสตรงที่ตกครอม LED IF คือกระแสไฟฟาทีไหลผ ่ าน LED เมื่อไดรับไบแอสตรง ในทางตรงกันขาม หากจายแรงดันไบแอสกลับแก LED นอกจาก LED จะไมทํางานแลว อาจ ทําให LED เสียหายเนืองจาก ่ LED มีอัตราการทนแรงดันยอนกลับไดไมสูงนัก เพียง 3 ถึง 10V เทานัน้
7.3 การควบคุม LED ดวยไมโครคอนโทรลเลอรและโปรแกรมภาษา C การควบคุมการติด/ดับของ LED นันผู ้ พั ฒนาสามารถใชสญญาณจากจุ ั ดตอพอรตใดๆ ของแผง วงจร IPST-SE ก็ได โดยในการเขียนโปรแกรมควบคุมการติด/ดับของ LED นันใช ้ กลุมคํ าสังเอาต ่ พุตเพือ่ ควบคุมสถานะของจุดตอพอรตทีเชื ่ อมต ่ อกับ LED ฟงกชันหรื ่ อคําสังหลั ่ กของโปรแกรมภาษา C/C++ สําหรับชุดกลองสมองกล IPST-MicroBOX (SE) ที่นํามาใชควบคุมการทํางานของ LED คือ out ซึงบรรจุ ่ อยูในไลบรารี ipst_in_out.h ในการใช งานจึงตองผนวกไฟลไบรารี ipst_in_out.h หรือ ipst.h ดวยคําสั่ง #include ที่สวนหัวของโปรแกรม กอนเสมอ ฟงกชั่น out มีรูปแบบและการเรียกใชดังนี้ out เปนฟงกชันกํ ่ าหนดระดับสัญญาณหรือขอมูลดิจิตอลไปยังขาพอรตที่กําหนด รูปแบบ out(char _bit,char _dat) พารามิเตอร _bit - กําหนดขาพอรตทีต่ องการ มีคา 0 ถึง 50 สําหรับ IPST-SE ใชไดถึง 30 _dat - กําหนดขอมูลที่ตองการสงออก มีคาเปน 0 หรือ 1
ตัวอยางที่ 7-1 out(17,1); out(18,0);
// กําหนดใหขาพอรต 17 เปน “1” // กําหนดใหขาพอรต 18 เปน “0”
119
เพื่อใหเครื่องมือและอุปกรณอยูในสภาพที พร ่ อมทํางานตลอดเวลา สิ่งที่ควรกระทําทุกครั้ง ทีใช ่ งานชุดกลองสมองกล IPST-MicroBOX คือ 1. ปดสวิตชไฟเลี้ยงทุกครั้งทีมี่ การถอดหรือตอสายเขากับคอมพิวเตอรและชุดโปรแกรม 2. ปดสวิ ตชไฟเลี้ยงทุกครั้งที่มีการตอหรือปลดสายของแผงวงจรตรวจจับสัญญาณหรือ อุปกรณใดๆ เขากับแผงวงจรควบคุม IPST-SE 3. หลังจากทีทดลองเสร็ ่ จในแตละการทดลอง ควรปดสวิตชไฟเลียงก ้ อนทีจะทํ ่ าการปลดสาย สัญญาณเพือต ่ อแผงวงจรใหมเขาไปเพื่อทําการทดลองในหัวขอใหม 4. ไมควรปลดหรือตอสายสัญญาณของแผงวงจรใดๆ เขากับแผงวงจร IPST-SE ในขณะที่ แผงวงจรกําลังทํางาน เวนแตมีขันตอนการปฏิ ้ บัติอืนใดที ่ ระบุ ่ เจาะจงวาตองสายสัญญาณในขณะ ทํางานของการทดลองนั้นๆ 5. หากมีความผิดพลาดใดๆ เกิดขึ้น ตองปดสวิตชไฟเลี้ยงทันที 6. ไมใชอะแดปเตอรไฟตรงที่มีแรงดันขาออกเกิน +9V กับแผงวงจร IPST-SE 7. หลังจากเสร็จสินการทดลอง ้ ใหปลดสายเชือมต ่ อคอมพิวเตอรและสายของอะแดปเตอร หรือแหลงจายไฟออกจากแผงวงจร IPST-SE เสมอ
120
ปฏิบัติการที่ 1-1 สั่งการให LED ติดสวาง การเชือมต ่ อทางฮารดแวร เขากับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE 30 A6 27 A3 28 A4 25 A1
S
O
KNOB
OK
Hello0Wo rld00 00000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
ON
SW1
UART1
16
18
17
19
+5
20
RESET
#include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() {} void loop() { out(17,1); // สั่งให LED ที่จุดตอพอรต 17 ติดสวาง delay(500); // หนวงเวลา 0.5 วินาที out(17,0); // สั่งให LED ที่จุดตอพอรต 17 ดับ delay(500); // หนวงเวลา 0.5 วินาที }
LOW
1
2 RxD1 3 TxD1
2
DC MOTOR
D
29 A5 26 A2
+
USB
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
24 A0
ZX-LED + S
8 SCL 9 SDA
่ อแผงวงจร ZX-LED เชือมต
SERVO
คําอธิบายโปรแกรม โปรแกรมจะสั่งใหสงสัญญาณ “1” ออกมา ทางจุดตอพอรต 17 สัญญาณ “1” มีแรงดัน ไฟฟา +5V จึงทําให LED ติดสวางได และ กําหนดใหติดนาน 0.5 วินาที จากนันจึ ้ งสั่งให ดับดวยการสงสัญญาณ “0” ซึงมี ่ แรงดันไฟฟา 0V ทําใหไมมีแรงดันและกระแสไฟฟาสงไปขับ LED ได LED ที่แผงวงจร ZX-LED จึงดับลง
โปรแกรมที่ L1-1 : ไฟล LedTest01.pde โปรแกรมภาษา C สําหรับทดลองขับ LED เบืองต ้ น
121
ขันตอนการทดลอง ้ 1.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชือ่ LEDtest01 1.1.2 เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร 2
3
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
ON
SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
USB
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
24 A0
4
KNOB
8 SCL 9 SDA
1
SERVO
1.1.3 เลือกชนิดหรือรุนของฮาร ดแวรใหถูกตอง โดยเลือกทีเมนู ่ Tools > Board > IPST-SE > ATmega644P ดังรูป
122
1.1.4 เลือกพอรตติดตอกับแผงวงจร IPST-SE โดยเลือกที่เมนู Tools > Serial Port ดังรูป (ตําแหนงของพอรตที่ ใชเชือมต ่ ออาจแตกตางกันในคอมพิวเตอรแตละเครื่อง)
1.1.5 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม to Wiring Hardware
หรือเลือกทีเมนู ่ File > Upload
1.1.6 รันโปรแกรม สังเกตการทํางานของ LED LED ที่ตอกับจุดตอพอรต 17 ติด-ดับทุกๆ 0.5 วินาที เพิ่มเติม ผูพั ฒนาสามารถกําหนดอัตราในการติด-ดับหรืออัตราการกะพริบของ LED ได ดวยการ ปรับคาเวลาในฟงกชัน่ delay(); ภายในโปรแกรมที่ L1-1 1.1.7 ทดลองแกไขโปรแกรมที่ L1-1 ให LED มีความเร็วในการติด-ดับชาลง 1.1.8 ทดลองแกไขโปรแกรมที่ L1-1 ให LED มีความเร็วในการติด-ดับเร็วขึ้น 1.1.9 ทดลองแกไขโปรแกรมที่ L1-1 เพื่อเปลียนจุดตอพอรตจากเดิมพอรตหมายเลข 17 เปนพอรตอืนๆ ่ เชน 18, 19 และ 20
123
ปฏิบัติการที่ 1-2 ควบคุม LED ดวยเวลา การเชือมต ่ อทางฮารดแวร ่ อแผงวงจร ZX-LED กับจุดตอพอรต 17 เชือมต
ของแผงวงจรหลัก IPST-SE
ขันตอนการทดลอง ้ 1.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-2 บันทึกในชือ่ LEDtimer 1.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกทีปุ่ ม to Wiring Hardware
หรือเลือกทีเมนู ่ File > Upload
1.2.3 รันโปรแกรม สังเกตการทํางานของ LED LED จะติดนาน 4 วินาที หลังจากนั้นจึงดับลง 1.2.4 แกไขโปรแกรมที่ L1-2 ให LED ติดสวางนานขึ้น 1.2.5 แกไขโปรแกรมที่ L1-2 ให LED ดับเร็วขึ้น #include <ipst.h> void setup() {} void loop() { out(17,1); delay(4000); out(17,0); while(1); } คําอธิบายโปรแกรม
// ผนวกไฟลไลบรารีหลัก
// สั่งให LED ทีจุ่ ดตอพอรต 17 ติดสวาง // หนวงเวลา 4 วินาที // สั่งให LED ทีจุ่ ดตอพอรต 17 ดับ // วนทํางานทีคํ่ าสั่งนี้
ในโปรแกรมจะกําหนดใหเขียนขอมูล “1” ไปยังขาพอรต 17 ซึงต ่ อกับ ZX-LED ทําให LED ติดสวางนาน ประมาณ 4 วินาทีกอนทีจะดั ่ บลง เนืองจากเมื ่ อสั ่ งให ่ LED ติดสวางจากการสังขั ่ บสัญญาณเอาตพุตเปน “1”แลว ตอดวยการหนวงเวลาดวยฟงกชัน่ delay หรือ sleep โปรแกรมจะทํางานอยูที คํ่ าสังนี ่ นานเป ้ นเวลาประมาณ 4000 มิลลิวินาที หรือ 4 วินาที หลังจากครบรอบเวลา จึงสงสัญญาณ “0” เพือควบคุ ่ มให LED ดับ และวนอยูที ่คําสั่ง while(); ทําใหไมมีการทํางานใดๆ LED จึงดับจนกวาจะมีการกดสวิตช RESET หรือปดเปดไฟเลียงใหม ้
โปรแกรมที่ L1-2 : ไฟล Ledtimer.c โปรแกรมภาษา C สําหรับทดลองควบคุม การทํางานของ LED ดวยเวลา
124
125
ในบทที่ผานมาเปนการนําเสนอการควบคุม LED ดวยกระบวนการทางซอฟตแวร แต LED ที่ควบคุมนันมี ้ เพียงชองเดียว ในบทนีนํ้ าเสนอการควบคุม LED ในจํานวนมากชองขึนถึ ้ ง 8 ชองใน เวลาเดียวกัน อุปกรณเอาตพุตที่นํามาใชในการเรียนรูคือ แผงวงจร ZX-LED8 ซึงมี ่ LED 8 ดวงพรอมวงจร ประกอบ การควบคุม LED ทั้ง 8 ดวงใหทํางานพรอมกัน หรือทํางานแยกกันตองใชความรูเกียวกั ่ บ ระบบเลขฐานสองและโครงสรางของขอมูลทังแบบบิ ้ ตและไบตในการกําหนดรูปแบบของขอมูลทีนํ่ า มาแสดงผล
8.1 เลขฐานสอง ในระบบตัวเลขฐานสองนี้มีตัวเลขเพียง 2 ตัวคือ “0” และ “1” ซึงสามารถใช ่ แทนสถานะตํา่ สูง, เปด-ปด, ไมตอ-ตอ, ดับ-ติด เปนตน แตถาหากนําตัวเลขฐานสองมากกวา 1 หลักมาพิจารณา เชน 2 หลัก จะทําใหเกิดจํานวนของการเปลียนแปลงเป ่ น 4 สถานะ หากแทนดวยการติด-ดับของหลอด ไฟ จะได ดับ-ดับ, ดับ-ติด, ติด-ดับ และติด-ติด ถาหากมี 3 หลักก็จะเกิดการเปลี่ยนแปลง 8 สถานะ จึงสามารถสรุปเปนสมการคณิตศาสตรและความสัมพันธของจํานวนหลักและสถานะของการเปลียน ่ แปลงไดดังนี้ จํานวนของการเปลี่ยนแปลง = 2 จํานวนหลัก ถามี 2 หลักจะไดจํานวนของการเปลี่ยนแปลง 22 = 4 ถามี 3 หลักจะไดจํานวนของการเปลี่ยนแปลง 23 = 8 ถามี 4 หลักจะไดจํานวนของการเปลี่ยนแปลง 24 = 16
126
8.1.1 การนับจํานวนของระบบเลขฐานสอง เนืองจากเลขฐานสองมี ่ ตัวเลขเพียง 2 ตัวคือ 0 และ 1 เมือมี ่ การนับจํานวนขึน้ จึงตองมีการเพิม่ จํานวนหลัก ดังนันเพื ้ อให ่ เห็นการเปลียนแปลงอย ่ างชัดเจนจะใชเลขฐานสิบเปนตัวเปรียบเทียบดังนี้ เลขฐานสอง 00 01 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111
เลขฐานสิบ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
8.1.2 ตัวแปรของเลขฐานสอง (bit variables) เมือเลขฐานสองถู ่ กนํามาใชงานมากขึนจาก ้ 1 หลักเปน 2, 3 จนถึง 8 หลัก ทําใหเกิดตัวแปรใหมๆ ดังนี้ (1) บิต (bit) หมายถึง หนึ่งหลักของเลขฐานสอง (binary digit) มีเลข 0 กับ 1 เทานัน้ (2) ไบต (byte) หมายถึง เลขฐานสองจํานวน 8 หลักหรือเทากับ 8 บิต ไบตมีความสําคัญ มากเพราะในระบบคอมพิวเตอรจะประมวลขอมูลเลขฐานสองครังละ ้ 8 บิตหรือ 1 ไบตเปนอยางนอยเสมอ (3) LSB : Least Significant Bit หรือบิตนัยสําคัญตํ่าสุด หมายถึง บิตทีอยู ่ ในตําแหนง ขวาสุดของเลขฐานสอง มีคานําหนั ้ กประจําหลักตํ่าสุดคือ 20 ถาเปน “1” คาของหลักสุดทายเทากับ 1 x 20 = 1 x 1 = 1 แตถาบิตสุดทายนีเป ้ น “0” คาของหลักสุดทายจะเทากับ 0 x 20 = 0 x 1= 0
127
(4) การกําหนดชื่อหลักของเลขฐานสอง บิตทีอยู ่ ขวามือสุดจะถูกเรียกวา บิตศูนย (bit 0 : b0) หรือบิต LSB บิตถัดมาเรียกวา บิตหนึ่ง (bit 1 : b1) ไลไปทางซายจนครบ สามารถสรุปชื่อหลัก ของเลขฐานสองไดคือ b7 b6 b5 b4 b3 b2 b1 b0 โดยตัวเลขแสดงตําแหนง 0-7 ตองเขียนเปนตัวหอย เสมอ แตเพื่อความสะดวกจึงขอเขียนในระดับเดียวกันเปน b7 b6 b5 b4 b3 b2 b1 b0 (5) MSB : Most Significant Bit หรือบิตนัยสําคัญสูงสุด หมายถึงบิตทีอยู ่ ในตําแหนง ซายมือสุดของเลขฐานสองจํานวนนั้นๆ หากเลขฐานสองมีจํานวน 8 บิต บิต MSB คือบิต 7 (bit 7 : ้ กประจําหลักเทากับ 27 หรือ 128 แตถาหากจํานวนบิตมีนอยกวานัน้ เชน 6 บิต, 5 บิต b7) มีคานําหนั หรือ 4 บิต บิต MSB จะมีคานําหนั ้ กประจําหลักเปลี่ยนเปน 25, 24 และ 23 ตามลําดับ
8.1.3 คานําหนั ้ กประจําหลัก ในเลขฐานสิบจะมีคานําหนั ้ กประจําหลัก โดยคิดจากจํานวนสิบยกกําลัง โดยในหลักหนวยมี คานําหนั ้ กประจําหลักเปน 100 หรือ 1 หลักสิบมีคานําหนั ้ กประจําหลักเปน 101 หรือ 10 ในหลักรอย มีคานําหนั ้ กประจําหลักเปน 102 หรือ 100 เปนตน ในเลขฐานสองก็มีคานําหนั ้ กประจําหลักเชนกัน แตจะคิดจากจํานวนสองยกกําลัง โดยในหลัก ขวาสุดคือ บิต 0 หรือบิต LSB มีคานําหนั ้ กประจําหลักเปน 20 หรือเทากับ 1 หลักถัดมาคือบิต 1 มีคา นําหนั ้ กเปน 21 หรือ 2 ถัดมาเปนบิต 2 มีคานําหนั ้ กเปน 22 หรือ 4 เมื่อพิจารณาที่เลขฐานสอง 8 บิต คานําหนั ้ กประจําหลักสามารถสรุปไดดังนี้ บิต 0 1 2 3 4 5 6 7
คานํ้าหนักประจําหลัก 20 21 22 23 24 25 26 27
เลขฐานสิบ 1 2 4 8 16 32 64 128
จากคานําหนั ้ กประจําหลักจึงสามารถแปลงเลขฐานสองเปนฐานสิบ หรือแปลงฐานสิบเปนฐาน สองได
128
8.2 การแปลงเลขฐานสองและฐานสิบ 8.2.1 การแปลงเลขฐานสองเปนฐานสิบ เริ่มตนดวยการกําหนดคานําหนั ้ กประจําหลักของเลขฐานสองแตละหลัก แลวคูณดวยคาของ เลขฐานสองในหลักนันๆ ้ สุดทายนําผลคูณทั้งหมดมารวมกัน ก็จะไดเปนเลขฐานสิบที่ตองการ ตัวอยางที่ 8-1 จงแปลงเลขฐานสอง 1011 เปนฐานสิบ (1) กําหนดคานํ้าหนักประจําหลัก หลัก b3 b2 b1 b0 22 21 20 คานํ้าหนักประจําหลักคือ 23 เลขฐานสอง 1 0 1 1 (2) จากนั้นนําคานําหนั ้ กประจําหลักคูณกับคาของเลขฐานสองประจําบิตนั้นแลว นําผลคูณของทุกหลัก มารวมกัน เลขฐานสิบ
= (1x23) + (0x22) + (1x21) + (1x20) = (1x8) + (0x4) + (1x2) + (1x1) = 8+0+2+1 = 11
8.2.2 การแปลงเลขฐานสิบเปนเลขฐานสอง จะใชวิธีการหารเลขฐานสิบจํานวนนันด ้ วย 2 แลวเก็บคาของเศษทีได ่ จากการหารเปนเลขฐานสอง ในแตละหลัก โดยเศษทีได ่ จากการหารครังแรกไม ้ วาจะเปน “0” หรือ “1” จะเปนหลักทีมี่ นัยสําคัญตําสุ ่ ด หรือบิต LSB หรือบิต 0 (b0) และเศษตัวสุดทายจะเปนเลขฐานสองหลักทีมี่ นัยสําคัญสูงสุดหรือบิต MSB ตัวอยางที่ 8-2 จงแปลงเลขฐานสิบ 13 เปนเลขฐานสอง (1) หาร 13 ดวย 2 ได 6 เศษ 1 เศษทีได ่ จะเปนบิตศูนย (bo) หรือบิต LSB นันคื ่ อ บิต LSB = 1 (2) หาร 6 ดวย 2 ได 3 เศษ 0 เศษที่ไดจะเปนบิตหนึง่ (b1) ซึ่งก็คือ 0 (3) หาร 3 ดวย 2 ได 1 เศษ 1 เศษที่ไดจะเปนบิตสอง (b2) ซึ่งก็คือ 1 (4) หาร 1 ดวย 2 ได 0 เศษ 1 เศษที่ไดจะเปนบิตสาม (b3) และเปนบิต MSB ซึ่งก็คือ 1 ดังนั้นจะไดเลขฐานสองเทากับ 1101
129
8.3 เครื่องหมายของเลขฐานสอง ในเลขฐานสองสามารถที่จะมีทั้งคาตัวเลขที่เปนบวกและลบเชนเดียวกับเลขฐานอืนๆ ่ โดยจะ ใชบิต MSB เปนตัวกําหนดเครื่องหมายของเลขฐานสอง ถากําหนดบิต MSB เปน “0” เลขจํานวน นันจะมี ้ คาเปนบวก และหากกําหนดบิต MSB เปน “1” เลขจํานวนนั้นจะมีคาเปนลบ ขอมูลตอไปนีจะเป ้ นการแสดงคาของจํานวนเลขฐานสอง เมือคิ ่ ดเครื่องหมายและไมคิดเครือง ่ หมายโดยไดทําการแปลงเปนเลขฐานสิบเปรียบเทียบเพื่อใหเห็นความแตกตางอยางชัดเจน เลขฐานสอง 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
เลขฐานสิบ คิดเครืองหมาย ่ 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1
ไมคิดเครื่องหมาย 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
ในกรณีคิดเครื่องหมาย เมื่อนับถอยหลังจาก 0000 ก็จะเปน 1111 นันคื ่ อเกิดการถอยหลังหนึ่ง จํานวนหรือ -1 นับถอยหลังตอไปจะเปน 1110 ซึ่งก็คือ -2 เมื่อเปนเชนนี้การแปลงเลขฐานสองที่คิด เครืองหมายเป ่ นฐานสิบจึงไมสามารถใชวิธีการแปลงแบบเดิมได แตก็พอมีเทคนิคในการพิจารณา โดย ใชหลักเกณฑคานําหนั ้ กประจําหลัก ยกตัวอยาง เลขฐานสอง 1000 เลข 1 ที่อยูหนาสุด มีคานําหนั ้ ก ประจําหลักเทากับ 23 หรือ 8 จากการกําหนดวา ถาคิดเครื่องหมาย เมื่อบิต MSB เปน “1” จะตองเปน คาลบ ดังนันจึ ้ งเปน -8 สวนอีก 3 หลักที่เหลือจะเปนเลขบวกจึงกลายเปน -8+0 = -8 มาพิจารณาที่เลข ฐานสอง 1101 บิตแรกเปนลบเทากับ -8 สวน 3 บิตหลังเปนบวกมีคา +5 จึงได -8+5= -3 เปนตน
130
8.4 สวนประกอบของขอมูล ขอมูลทีใช ่ ในการประมวลผลของไมโครคอนโทรลเลอรนันสามารถกระทํ ้ าไดตังแต ้ 1 บิตขึนไป ้ สําหรับไมโครคอนโทรลเลอร ATmega16 ในชุด IPST-MicroBOX จะทํางานกับขอมูล 1 ถึง 16 บิต โดย มีการกําหนดโครงสรางสวนประกอบของขอมูลทีเป ่ นมาตรฐานเดียวกับไมโครคอนโทรลเลอรตัวอืน่ ทัวโลกและเหมื ่ อนกับในคอมพิวเตอรดวย ดังนี้ เวิรด ไบตสูง (8 บิตบน) ไบตต่ํา (8 บิตลาง) MSB LSB 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
บิต ขอมูล * 1 1 1 0 1 1 1 0 0 0 1 1 1 0 0 1 คาน้ําหนัก 215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20 * สามารถเปลี่ยนแปลงได
บิต-นิบเบล-ไบต ิ -เวริ ด เปนชือหน ่ วยของขอมูลทีใช ่ ในการประมวลผลของไมโครคอนโทรลเลอร บิต (bit) เปนขนาดของขอมูลเลขฐานสองที่เล็กที่สุด เทากับ 1 หลักของเลขฐานสอง นิบเบิล (nibble) มีขนาดเทากับ 4 บิต ไบต (byte) มีขนาดเทากับ 8 บิต เวิรด (word) มีขนาดเทากับ 16 บิต หรือ 2 ไบต
8.5 แผงวงจรไฟแสดงผล 8 ดวง : ZX-LED8 เปนแผงวงจรที่มี LED ขนาด 3 มิลลิเมตรสําหรับแสดงผล 8 ดวง พรอมจุดตอพวงเอาตพุตเพื่อ นําไปใชในการขับรีเลยไดดวย โดยแผงวงจร ZX-LED8 นีจะต ้ อเขากับขาพอรตใดของแผงวงจร IPSTSE ก็ได โดยใชขาพอรตเพียงขาเดียวในการควบคุมและขับ LED ใหติดดับตามที่ตองการไดพรอมกัน ถึง 8 ดวง มีหนาตาและวงจรทางไฟฟาของแผงวงจร ZX-LED8 แสดงในรูปที่ 8-1 ในแผงวงจร ZX-LED8 ใชการติดตอกับแผงวงจรหลัก IPST-SE ในแบบสือสารข ่ อมูลอนุกรม รวมกับคําสังทางซอฟต ่ แวร ผูพัฒนาโปรแกรมสามารถเขียนโปรแกรมให ZX-LED8 ติดดับไดตังแต ้ 1 ถึง 8 ตัว หรือจะเขียนโปรแกรมใหทํางานเปนไฟวิงได ่ ตังแต ้ 1 ถึง 8 ดวงเชนกัน
131
MSB D7
D6
D5
D4
D3
D2
D1
LSB D0
7
6
5
4
3
2
1
0
+5V
47
47
47
47
47
47
47
47
7
6
5
4
3
2
1
510
510
510
510
510
9
8
5
6
7
D7
D6
D5
D4
D3
510
510
14
15
D2
XT2
2
3
RXD 12
+5V 4k7
VDD
RST
1
4
510
16
D1
D0
ZX-LED controller PIC18F14K50 with firmware UART 9600 bps. to 8 bit parallel outputs XT1
0
VDDU
VSS 20
PGD 19
PGC 18
17
0.1F 63V
4k7
Ceramic Resonator (Option) 47F 6.3V
0.1F 63V
GND RxD +5V
ICSP
รูปที่ 8-1 ลักษณะและวงจรทางไฟฟาของแผงวงจรไฟแสดงผล ZX-LED8 ทีใช ่ ในชุดกลองสมองกล IPSTMicroBOX (SE)
132
7
6
5
4
3
2
1
0
7 MSB
6
5
4
3
2
1
0 LSB
LED8 +5V RxD GND
Serial LED-8 UART communication 9600 bps. Baud
Secondary Education
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
Rowl00 Wo rld00 00000000 0Row01000000000000000 00Row0200000000000000 000Row030000000000000 0000Row04000000000000 00000Row0500000000000 000000R00060000000000 0000000R0007000000000 00000000Row0800000000 000000000Row090000000 0000000000Row01000000 00000000000Row0110000 000000000000Row012000 0000000000000Row01300 00000000000000Row0140 000000000000000Row015
ON
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
24 A0 KNOB
8 SCL 9 SDA
USB
SERVO
รูปที่ 8-2 แนวทางการตอใชงานแผงวงจรไฟแสดงผล ZX-LED8 กับแผงวงจรหลัก IPST-SE ในชุดกลอง สมองกล IPST-MicroBOX (SE) ที่ดานบนของแผงวงจร ZX-LED8 มีจุดตอ JST ซึงต ่ อพวงมาจาก LED ทํางานทีลอจิ ่ ก “1” มี ระดับแรงดันไฟตรงขาออกประมาณ +5V ดังแสดงในรูปที่ 8-3 จึงสามารถใชสัญญาณเอาตพุตจากจุด นีไปต ้ อกับวงจรขับโหลดกระแสไฟฟาสูง อาทิ แผงวงจรขับรีเลย ไดทันที โดยไมตองเขียนโปรแกรม ควบคุมเพิ่มเติม
8.6 กลุมคําสั่งโปรแกรมภาษา C/C++ ของไลบรารี ipst.h ทีใช ่ ควบคุม LED 8 ดวงบนแผงวงจร ZX-LED8 pinLED8(); LED8
ใชกําหนดจุดตอพอรตของแผงวงจร IPST-SE ทีต่ อกับแผงวงจร ZX-LED8 ใชกําหนดคาการแสดงผลของ LED 8 ดวงบนแผงวงจร ZX-LED8
133
+5V
+5V +5V
+5V
7
6
5
4
3
2
1
0
7 MSB
6
5
4
3
2
1
0 LSB
Serial LED-8 UART communication 9600 bps. Baud
+5V RxD GND
LED8
Secondary Education
30 A6 27 A3
D
28 A4 25 A1 OK
Rowl00Wo rld000 0000000 0Row0100000000 0000000 00Row020000000 0000000 000Row03000000 0000000 0000Row0400000 0000000 00000Row050000 0000000 000000R0006000 0000000 0000000R000700 0000000 00000000Row080 0000000 000000000Row09 0000000 0000000000Row0 1000000 00000000000Row 0110000 000000000000Ro w012000 0000000000000R ow01300 00000000000000 Row0140 00000000000000 0Row015
ON
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
29 A5 26 A2
KNOB
8 SCL 9 SDA
24 A0
USB
SERVO
รูปที่ 8-3 แสดงความสัมพันธของการติดดับของ LED กับระดับแรงดันไฟฟาทีจุ่ ดตอเอาตพุต 0 ถึง 7 ของ แผงวงจรไฟแสดงผล ZX-LED8
134
ปฏิบัติการที่ 2-1 ควบคุม LED ดวยขอมูลเลขฐานสอง ในการทดลองนีเป ้ นการเขียนโปรแกรมภาษา C เพือควบคุ ่ มให LED 8 ดวงบนแผงวงจร ZX-LED8 ติดหรือ ดับดวยขอมูลทีกํ่ าหนดไว
การเชือมต ่ อทางฮารดแวร เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก
IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย
สายสัญญาณ JST3AA-8
ขั้นตอนการทดลอง 2.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L2-1 บันทึกในชื่อ LED8test.pde 2.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม
7
6
5
4
3
2
1
0
7 MSB
6
5
4
3
2
1
0 LSB
Serial LED-8 UART communication 9600 bps. Baud
+5V RxD GND
LED8 Secondary Education
30 A6 27 A3
D
29 A5 26 A2 28 A4 25 A1 OK
Rowl00 Wo rld00 0000 0000 0Row010000000 0000 0000 00Row0200 0000 0000 0000 000Row0300000 0000 0000 0000Ro w040000 0000 0000 00000Row050000000 0000 000000 R000600 0000 0000 000000 0R0 00700000 0000 000000 00Row080000 0000 000000 000Row090000000 000000 0000Row01000000 000000 00000Ro w011 0000 000000 000000Row012000 000000 0000000 Row01300 000000 0000000 0Row0140 000000 0000000 00Ro w015
ON
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
รูปที่ L2-1 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 2 และ 3
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
24 A0 KNOB
8 SCL 9 SDA
USB
#include <ipst.h> void setup() { pinLED8(20); }
135
// ผนวกไลบรารีหลัก // เชือมต ่ อ ZX-LED8 ผานทางจุดตอพอรต 20
void loop() { LED8(0b10000001); } คําอธิบายโปรแกรม
// LED บิต 7 และ 0 ติดสวาง ที่เหลือดับหมด
การทํางานของโปรแกรมนี้ ขอมูลเลขฐานสอง 10000001 ถูกสงไปยังแผงวงจร ZX-LED8 ผานฟงกชั่น LED8 โดยใชจุดตอพอรต 20 ซึ่งประกาศไวดวยฟงกชั่น pinLED8 ทีส่ วนของ setup() ขอมูล 8 บิตที่สงไปในรูปของเลขฐานสองสามารถเทียบเคียงไดกับตําแหนงหลักของ LED ทัง้ 8 ดวง นันเอง ่ โดยคาของหลักขอมูลใดเปน “1” LEDประจําหลักนั้นจะติดสวาง ในทางกลับกันถามีคาเปน “0” LED ก็จะดับ ดังนั้นถาทําการแกไขโปรแกรมเพื่อสงคาใหมจะไดผลลัพธทีแตกต ่ างกันไป
โปรแกรมที่ L2-1 : ไฟล LED8test.pde โปรแกรมภาษา C สําหรับทดลองควบคุม LED 8 ดวง 2.1.3 สังเกตผลการทํางานทีแผงวงจร ่ ZX-LED8 LED ทีหลั ่ ก 0 และ 7 ของแผงวงจร ZX-LED8 ติดสวาง จากผลของขอมูล 10000001 ทีกํ่ าหนดในโปรแกรม 7
6
5
4
3
2
1
0
2.1.4 ทดลองแกไขขอมูลแสดงผลเปน LED8(0b11110000); ทําการคอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE ไดผลการทํางานดังนี้ 7
6
5
4
3
2
1
0
2.1.5 ทดลองแกไขขอมูลแสดงผลเปน led8(0b00011000); ทําการคอมไพลไฟลโปรเจ็กตใหม แลวดาวนโหลด โปรแกรมไปยังแผงวงจร IPST-SE ไดผลการทํางานดังนี้ 7
6
5
4
3
2
1
0
136
#include <ipst.h> // ผนวกไลบรารีหลัก void setup() {} void loop() { unsigned char i=0; while(1) { LED8(20,i++); // กําหนดใหใชจุดตอพอรต 20 ในการควบคุม ZX-LED8 // โดยแสดงผลดวยคาของ i ที่เปลียนแปลงจาก ่ 00000000 ถึง 11111111 delay(300); } } คําอธิบายโปรแกรม การทํางานของโปรแกรมนี้ ขอมูลเลขฐานสองทีกํ่ าหนดโดยตัวแปร i ถูกสงออกไปยังแผงวงจร ZX-LED8 ผานฟงกชั่น LED8 ทีเขี ่ ยนในแบบใหม ใหเหลือเพียงบรรทัดเดียว โดยกําหนดพอรตที่ใชในการติดตอแลวตอ ดวยขอมูลทีต่ องการแสดงผล ทําใหโปรแกรมกระชับขึน้ โดยขอมูล 8 บิตที่สงไปในรูปของเลขฐานสองนันมี ้ คา 00000000 ถึง 11111111 ตามชนิดของตัวแปร i ทีกํ่ าหนดใหเปนแบบ char ซึ่งมีขนาด 8 บิต
โปรแกรมที่ L2-2 : ไฟล LED8binary.pde โปรแกรมภาษา C/C++ สําหรับทดลองควบคุม LED 8 ดวง ใหแสดงผลตามคาของเลขฐานสองขนาด 8 บิต จาก 00000000 ถึง 11111111 2.1.6 เขียนโปรแกรมที่ L2-2 บันทึกไฟลเปน LED8binary.pde จากนั้นทําการคอมไพลและอัปโหลดโปรแกรมไป ยังแผงวงจร IPST-SE โดยคลิกที่ปุม 2.1.6 สังเกตผลการทํางานทีแผงวงจร ่ ZX-LED8 LED ทัง้ 8 ดวงแสดงเปนรหัสเลขฐานสอง 8 บิต เริ่มจาก 00000000 ถึง 11111111 แลวกลับมาเริมต ่ น ที่ 00000000 ใหมอีกครั้ง โดยมีอัตราการเปลี่ยนขอมูลทุกๆ 0.3 วินาที
137
ปฏิบัติการที่ 2-2 ไฟกะพริบ LED 8 ดวง ในการทดลองนีเป ้ นการเขียนโปรแกรมแกรมควบคุมให LED 8 ดวงบนแผงวงจร ZX-LED8 ติดหรือดับ ดวยขอมูลทีกํ่ าหนด โดยในการทดลองนีจะส ้ งขอมูล 11111111 ไปแสดงผลในแบบไฟกะพริบ
การเชือมต ่ อทางฮารดแวร เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก
IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย
สายสัญญาณ JST3AA-8
ขั้นตอนการทดลอง 2.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L2-3 บันทึกในชื่อ LED8blink.pde 2.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 2.2.3 รันโปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8 LED ทัง้ 8 ดวงของแผงวงจร ZX-LED8 ติดกะพริบในทุกๆ 1 วินาที โดยประมาณ #include <ipst.h> void setup() {} void loop() { LED8(20,0b11111111); sleep(500); LED8(20,0b00000000); sleep(500); } คําอธิบายโปรแกรม
// ผนวกไลบรารีหลัก
// กําหนดให LED ทั้ง 8 ดวงติดหมด // หนวงเวลา 0.5 วินาที // กําหนดให LED ทั้ง 8 ดวงดับหมด // หนวงเวลา 0.5 วินาที
การทํางานของโปรแกรมนี้ มีขอมูลเลขฐานสอง 2 ชุดที่สงออกไปยังแผงวงจร ZX-LED8 ดวยฟงกชั่น LED8 ที่เขียนในแบบกําหนดพอรตที่ใชในการติดตอแลวตอดวยขอมูลที่ตองการแสดงผล โดยชุดแรกคือ 11111111 ทําให LED 8 ดวงติดสวางทังหมด ้ สวนชุดที่ 2 คือ 00000000 ทําให LED ทังหมดดั ้ บ อัตราการติดดับหรือกะพริบถูกกําหนดโดยฟงกชั่น sleep() ซึ่งมีการทํางานเหมือนกับ delay() โดยใน โปรแกรมนี้กําหนดใหเทากับ 500 มิลลิวินาทีหรือ 0.5 วินาที
โปรแกรมที่ L2-3 : ไฟล LED8blink.pde โปรแกรมภาษา C/C++ สําหรับควบคุม LED กะพริบ 8 ดวง
138
ปฏิบัติการที่ 3-1 ไฟวิ่ง LED 8 ดวง ในการทดลองนีเป ้ นการเขียนโปรแกรมภาษา C เพือควบคุ ่ มให LED 8 ดวงบนแผงวงจร ZX-LED8 ทํางาน ในลักษณะไฟวิงทางซ ่ ายและขวา
การเชือมต ่ อทางฮารดแวร เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก
IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย สายสัญญาณ JST3AA-8 (รูปที่ L2-1 ในปฏิบัติการที่ 2 ของบทที่ 8)
ขั้นตอนการทดลอง 3.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L3-1 บันทึกในชื่อ LED8running.pde 3.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 3.1.3 รันโปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร DSP-4 LED จะติดครั้งละ 1 ดวงจากตําแหนงที่อยูทางขวาสุด (บิต 0) ไลมาตามลําดับในลักษณะไฟวิ่งจาก ขวาไปซายจนสุดทางขวา (บิต 7) จากนั้นจะไลกลับทิศทางเปนติดจากดวงซายสุด (บิต 7) กลับมายังดวงขวา สุด (บิต 0) ในลักษณะไฟวิ่งจากซายมาขวา วนทํางานเชนนี้ไปตลอด 7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
139
#include <ipst.h> // ผนวกไฟลไลบรารีหลัก void setup() { // แสดงขอความของการทดลอง glcdClear(); glcd(0,0,"Example: LED8_02"); glcd(2,0,"connect LED8 to (20)"); glcd(4,0,"LED running LEFT"); glcd(5,0," and RIGHT"); }
pinLED8(20);
void loop() { int i; for (i=0;i<8;i++) { LED8(0x01<<i); delay(300); } for (i=6;i>0;i--) { LED8(0x01<<i); delay(300); } } คําอธิบายโปรแกรม
// ใชจุดตอพอรต 20 ในการเชือมต ่ อ
// กําหนดใหเลื่อนขอมูลไปทางซาย // เลื่อนบิตไปทางซายแลวสงไปแสดงที่ ZX-LED8 โดยมีคาตั้งตนที่ 00000001 // หนวงเวลา 0.3 วินาที // กําหนดใหเลื่อนขอมูลไปทางขวา // เลื่อนบิตไปทางขวาแลวสงไปแสดงที่ ZX-LED8 // หนวงเวลา 0.3 วินาที
โปรแกรมนีทํ้ างานโดยอาศัยการสงขอมูลผานฟงกชัน่ LED8 เพือให ่ LED ติดครังละ ้ 1 ดวงนานประมาณ 0.3 วินาที โดยไลลําดับจากบิต 0 ไปยังบิต 7 และวนกลับจากบิต 7 กลับมายังบิต 0 เปนเชนนี้อยางตอเนือง ่ การทํางานของ LED ในลักษณะไฟวิ่งนี้ของโปรแกรมนี้เกิดจากการเลื่อนบิตขอมูลทังทางซ ้ ายและขวา โดยหลังจากเลื่อนขอมูล 1 ครั้งก็จะสงไปแสดงผลนาน 0.3 วินาที จากนั้นจึงเลือนข ่ อมูลในครั้งตอไป ดานอัตราเร็วในการแสดงผลของ LED จะขึนอยู ้ กับคาหนวงเวลาของฟงกชัน่ delay (หรืออาจใช sleep ก็ได) ถากําหนดใหมีคานอยกวา 300 ก็จะทําให LED แสดงผลการเปลี่ยนแปลงไดเร็วมากขึ้น นันคื ่ อ ไดเห็น ไฟวิงเร็ ่ วขึ้นนั่นเอง
โปรแกรมที่ L3-1 : ไฟล LED8running โปรแกรมภาษา C/C++ สําหรับทดลองควบคุมไฟวิง่ LED 8 ดวง
140
ปฏิบัติการที่ 3-2 ขับ LED 8 ดวง ดวยรูปแบบขอมูลทีกํ่ าหนดลวงหนา ในการทดลองนีเป ้ นการเขียนโปรแกรมภาษา C เพือควบคุ ่ มให LED 8 ดวงบนแผงวงจร ZX-LED8 ทํางาน ในลักษณะไฟวิ่งตามรูปแบบขอมูลทีกํ่ าหนดไวลวงหนา โดยใชตัวแปรแบบอะเรยในการเก็บตารางรูปแบบขอมูล
การเชือมต ่ อทางฮารดแวร เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก
IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย สายสัญญาณ JST3AA-8 (รูปที่ L2-1 ในปฏิบัติการที่ 2 ของบทที่ 8)
ขั้นตอนการทดลอง 3.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L3-2 บันทึกในชื่อ LED8pattern.pde 3.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 3.2.3 รันโปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8 LED จะติดตามขอมูลทีกํ่ าหนด ซึ่งมีดวยกัน 4 แบบ โดยเริ่มจากแบบที่ 1 ไปถึง 4 แลวทํางานยอนกลับ จากแบบที่ 4 มายังแบบที่ 1 วนทํางานเชนนี้ไปตลอด
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
2
1
0
3
#include <ipst.h>
// ผนวกไลบรารีหลัก
int pattern[]={ 0b00011000, 0b00111100, 0b01111110, 0b11111111};
// กําหนดรูปแบบขอมูลแสดงผล // รูปแบบขอมูล #1 // รูปแบบขอมูล #2 // รูปแบบขอมูล #3 // รูปแบบขอมูล #4
141
void setup() { // แสดงขอความของการทดลอง glcdClear(); glcd(0,0,"Example: LED8_pattern"); glcd(2,0,"connect LED8 to (20)"); glcd(4,0,"Pattern LED demo"); }
pinLED8(20);
void loop() { int i; for (i=0;i<4;i++) { LED8(pattern[i]); delay(300); } for (i=2;i>0;i--) { LED8(pattern[i]); delay(300); } } คําอธิบายโปรแกรม
// ใชจุดตอพอรต 20 ในการเชือมต ่ อ
// เปลียนรู ่ ปแบบขอมูลแสดงผล // แสดงผลตามรูปแบบขอมูลจาก 1 ถึง 4 // เปลียนรู ่ ปแบบขอมูลแสดงผล // แสดงผลตามรูปแบบขอมูลจาก 4 ถึง 1
ขอมูลสําหรับการแสดงผลของโปรแกรมจะแตกตางไปจากตัวอยางทีผ่ านๆ มา ในโปรแกรมมีการกําหนด ตารางรูปแบบขอมูลไวลวงหนาเก็บไวในตัวแปร pattern ทีเป ่ นตัวแปรแบบอะเรย 4 ชุด จากนั้นโปรแกรมจะ ใชตัวแปร i เปนตัวชีข้ อมูลของ pattern ออกมาแสดงผลโดยผานฟงกชั่น LED8 ขอมูลแตละชุดจะไดรับการ แสดงผลนานประมาณ 0.3 วินาที
โปรแกรมที่ L3-2 : ไฟล LED8pattern.pde โปรแกรมภาษา C/C++ สําหรับควบคุมไฟวิง่ LED 8 ดวง ในแบบกําหนดรูปแบบการแสดงผลดวยตัวแปรชนิดอะเรย
142
ปฏิบัติการที่ 3-3 ขับ LED 8 ดวง แสดงผลในแบบกราฟแทง ในการทดลองนีเป ้ นการเขียนโปรแกรมภาษา C เพือควบคุ ่ มให LED 8 ดวงบนแผงวงจร ZX-LED8 ทํางาน ในลักษณะไฟวิ่งตามรูปแบบขอมูลทีกํ่ าหนดไวลวงหนา โดยใชตัวแปรแบบอะเรยในการเก็บตารางรูปแบบขอมูล
การเชือมต ่ อทางฮารดแวร เชื่อมตอสัญญาณจากจุดตอ 20 ของแผงวงจรหลัก
IPST-SE เขากับจุดตอ RXD ของแผงวงจร ZX-LED8 ดวย สายสัญญาณ JST3AA-8 (รูปที่ L2-1 ในปฏิบัติการที่ 2 ของบทที่ 8)
ขั้นตอนการทดลอง 3.3.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L3-3 บันทึกในชื่อ LED8bargraph.pde 3.3.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 3.3.3 รันโปรแกรม สังเกตการทํางานของ LED 8 ดวงบนแผงวงจร ZX-LED8 LED จะเริ่มติดจากดวงซายสุด (บิต 0) ตามดวยบิต 1 โดยที่ LED ของบิต 0 ยังติดอยู จากนั้นจะทยอย คิดสวางเพิมขึ ่ ้นทีละดวง จนครบ 8 ดวง จากนั้นจะเริ่มดับลงทีละดวงจาก LED บิต 7 ไลตามลําดับจนถึงบิต 1 จากนั้นวนกลับ LED บิต 1 ติดสวาง ตามดวยบิต 2 วนทํางานเชนนี้ไปตลอด ทําใหดูแลวคลายกราฟแทงที่มีการ เพิมค ่ าและลดคาตลอดเวลา 7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
ตอยอด ผู พัฒนาโปรแกรมสามารถนําเทคนิคนี้ไปใชในการเขียนโปรแกรมเพือแสดงค ่ าของสัญญาณไฟฟาที่ได จากตัวตรวจจับแบบอะนาลอก โดยเมื่อคาของสัญญาณไฟฟามีคาตํา้ LED จะติดดวงเดียว และคิดเพิ่มขึ้นเมื่อ ระดับสัญญาณไฟฟามีคาสูงขึ้น
143
#include <ipst.h> // ผนวกไลบรารีหลัก void setup() { // แสดงขอความของการทดลอง glcdClear(); glcd(0,0,"Example: LED8_bar"); glcd(2,0,"connect LED8 to (20)"); glcd(4,0,"Solid bargraph demo"); }
pinLED8(20);
void loop() { int i,n; n=0; for (i=0;i<8;i++) { n|=(0x01<<i); LED8(n); delay(300); } for (i=7;i>0;i--) { n&=0xff^(0x01<<i); LED8(n); delay(300); }
// ใชจุดตอพอรต 20 ในการเชือมต ่ อ
// สรางขอมูลแสดงผลดวยการออรบิต
// สรางขอมูลแสดงผลดวยการแอนดบิต
} คําอธิบายโปรแกรม
ขอมูลสําหรับการแสดงผลของโปรแกรมนีจะใช ้ ตัวดําเนินการตรรกะหรือลอจิกในระดับบิตทังการออร ้ (|) และการแอนด (&) โดยการออรบิตในโปรแกรมทําใหบิตขอมูลทีเป ่ น “1” อยูแต เดิมไมเปลียน ่ จึงนํามาใชในการ เพิมจํ ่ านวนบิตที่ทําให LED ติดสวาง สวนการแอนดบิตในโปรแกรมนีจะทํ ้ าใหบิตที่มีนัยสําคัญสูงเปลี่ยนเปน “0” ทีละบิต ทําใหจํานวนของ LED ทีติ่ ดสวางลดลง
โปรแกรมที่ L3-3 : ไฟล LED8bargraph.pde โปรแกรมภาษา C/C++ สําหรับทดลองควบคุมไฟวิง่ LED 8 ดวง ในแบบกราฟแทง
144
145
ในบทนี้ เป นการนําแผงวงจรสวิตชเขามาตอทํางานรวมกับไมโครคอนโทรลเลอรของแผง วงจร IPST-SE อันเปนการเรียนรูการอานคาจากอินพุตมาประมวลผลเพือส ่ งสัญญาณออกไปควบคุม อุปกรณทางเอาตพุตอยางงายนันเอง ่ ปฏิบัติการทังหมดที ้ นํ่ าเสนอในบทนี้ ผูพั ฒนาสามารถนําความรูไปใช สรางระบบควบคุมอยางงาย ทีมี่ การตรวจจับอินพุตจากการกดสวิตช แลวกําหนดใหโปรแกรมทีออกแบบนั ่ นมี ้ การตอบสนองอะไร บางอยางออกมา เชน เมือมี ่ การกดสวิตช ระบบตอบสนองดวยการเปด/ปดไฟ, ควบคุมมอเตอร หรือสง ขอมูลอุณหภูมิไปแสดงผลยังคอมพิวเตอรทีเชื ่ อมต ่ ออยู เปนตน
9.1 ความรูเบืองต ้ นเกี่ยวกับการทํางานของสวิตช สวิตชเปนอุปกรณพื้นฐานทีมี่ บทบาทและใชประโยชนอยางมากในวงจรอิเล็กทรอนิกส โดย เฉพาะอยางยิ่งในการใชงานเปนอุปกรณตัดตอหรืออุปกรณสําหรับสรางสัญญาณอินพุตใหแกวงจร โดยเฉพาะอยางยิ่งกับวงจรดิจิตอล
9.1.1 สวิตชกดติดปลอยดับ (Push-button switch/Tact switch) เปนอุปกรณสําหรับตัดตอวงจรไฟฟาที่นิยมใชอยางมากในระบบไมโครคอนโทรลเลอร โดย สวิตชแบบนีปกติ ้ เมือไม ่ มีการกด หนาสัมผัสของสวิตชจะแยกออกจากกันหรือเรียกวา เปดวงจร เมือมี ่ การ กดลงบนปุมด านบนซึงทํ ่ ามาจากยางสังเคราะหหรือพลาสติก ทําใหหนาสัมผัสตัวนําภายในสวิตชตอถึง กัน กระแสไฟฟาก็จะสามารถไหลผานไปได รูปรางของสวิตชกดติดปลอยดับมีดวยกันหลายแบบ ทั้งแบบบัดกรีตอสาย แบบลงแผนวงจร พิมพ แบบติดหนาปด และในบางแบบมีไฟแสดงในตัว สวนขาตอใชงานมีตังแต ้ 2 ขาขึนไป ้ ในการ ใชงานกับไมโครคอนโทรลเลอรนั้นมักใชสวิตชเปนอุปกรณสรางสัญญาณอินพุตแบบหนึ่ง โดยตอ ปลายขางหนึงกั ่ บตัวตานทาน และปลายของตัวตานทานนันต ้ อกับไฟเลียงหรื ้ อทีเรี่ ยกวา “พูลอัป” ทีจุ่ ด
146 ปุมยางสําหรับกด
+5V R1 4k7
เอาตพุต = +5V เปน ลอจิก "1" ไมม ีกระแสไฟฟาไหล เนื่องจากเปด วงจร
S1
(ก) รูปรางของสวิตชกดติดปลอยดับ +5V R1 4k7
(ข) วงจรสมมูลของสวิตชกดติดปลอยดับ
กดสวิต ช เกิด การตอ วงจร
(ค) สัญลักษณทีใช ่ ในวงจร
S1
เอาตพุต = 0V เกิดลอจิก "0" ทิศ ทางการไหลของ กระแสไฟฟา
(ง) แสดงวงจรการนําสวิตชกดติดปลอยดับไปใชใน การสรางสัญญาณลอจิกใหแกไมโครคอนโทรลเลอร
รูปที่ 9-1 แสดงรูปรางและสัญลักษณของสวิตชแบบกดติดปลอยดับทีใช ่ ในการทดลอง ตอวงจรระหวางสวิตชกับตัวตานทานจะเปนจุดที่ตอเขากับไมโครคอนโทรลเลอรเพื่ออานคาลอจิก ของการกดสวิตชดังแสดงในรูปที่ 2-1 (ง) ถาหากไมมีการกดสวิตช สถานะลอจิกขอสวิตชตัวนันจะเป ้ น “1” อันเนื่องจากการตอตัวตานทานพูลอัป และเมื่อมีการกดสวิตช จะเกิดสถานะลอจิกเปน “0” เนือง ่ จากจุดตอสัญญาณนั้นถูกตอลงกราวด
9.1.2 การตอสวิตชเพือกํ ่ าหนดลอจิกทางอินพุต ในรูปที่ 9-2 เปนการตอสวิตชกดติดปลอยดับเพื่อสรางสัญญาณอินพุตลอจิก “0” ใหแกวงจร โดยเมื่อกดสวิตช S1 จะเปนการตอขาอินพุตลงกราวด อยางไรก็ตาม การตอสวิตชเพียงตัวเดียวอาจ ทําใหสถานะลอจิกทางอินพุตในขณะที่ไมมีการกดสวิตชมีความไมแนนอน จึงควรตอตัวตานทานเขา กับไฟเลี้ยงหรือลงกราวดเพื่อกําหนดสถานะทางลอจิกในขณะที่ไมมีการกดสวิตชใหแกวงจร S1
เอาตพุตตอกับ ขาพอรตอินพุตของ ไมโครคอนโทรลเลอร
รูปที่ 9-2 การเชือมต ่ อสวิตชกดติดปลอยดับเขา กับอินพุตของไมโครคอนโทรลเลอรอยางงาย
+5V
S1
R1 10k
+5V S1
เอาตพุตตอกับ ขาพอรต อินพุตของ ไมโครคอนโทรลเลอร
รูปที่ 9-3 การเชื่อมตอสวิตชกดติดปลอยดับเขา กับอินพุตของไมโครคอนโทรลเลอรแบบมีตัวตานทาน ตอพูลอัป ทําใหสถานะลอจิกเมือไม ่ มีการกดสวิตช เปนลอจิก "1"
R1 100k
147
เอาตพุตตอกับ ขาพอรตอินพุตของ ไมโครคอนโทรลเลอร
รู ปที่ 9-4 การเชื่อมตอสวิตชกดติดปลอยดับเขา กับอินพุตของไมโครคอนโทรลเลอรแบบมีตัวตานทาน ตอพูลดาวน ทําใหสถานะลอจิกเมือไม ่ กดสวิตชเปน ลอจิก "0"
ในรูปที่ 9-3 เปนการตอสวิตชเขากับอินพุตของไมโครคอนโทรลเลอร โดยมีการตอตัวตานทาน เขาที่ขาอินพุตของวงจรและไฟเลี้ยง +5V เรียกการตอตัวตานทานแบบนีว้ า การตอตัวตานทานพูลอัป (pull-up) ดวยการตอตัวตานทานในลักษณะนีทํ้ าใหเมื่อยังไมมีการกดสวิตช สถานะลอจิกที่อินพุตตอง เปนลอจิก “1” อยางแนนอน สวนในรูปที่ 9-4 เปนการตอสวิตชเขากับอินพุตในอีกลักษณะหนึงที ่ ่มีการตอตัวตานทานเขาที่ ขาอินพุตของวงจรและกราวด จะเรียกการตอตัวตานทานแบบนีว้ า การตอตัวตานทานพูลดาวน (pulldown) ดวยการตอตัวตานทานในลักษณะนีทํ้ าใหเมื่อยังไมมีการกดสวิตชสถานะลอจิกทีขาอิ ่ นพุตเปน ลอจิก “0”
9.1.3 สัญญาณรบกวนของการกดสวิตช ในทางทฤษฎี เมือสวิ ่ ตชมีการเปดปดวงจร สัญญาณไฟฟาจะถูกปลดหรือตอเขาไปในวงจรและ สามารถวิเคราะหผลการทํางานได แตในความเปนจริง เมือมี ่ การกดและปลอยสวิตช หนาสัมผัสของสวิตช จะเกิดการสันและกว ่ าทีจะต ่ อหรือเปดวงจรอยางสมบูรณนันจะต ้ องใชเวลาชัวขณะหนึ ่ ง่ ซึงมนุ ่ ษยไมสามารถ มองเห็นภาวะนันได ้ แตวงจรอิเล็กทรอนิกสจะตรวจจับความไมคงทีนั่ นได ้ และมองเปนสัญญาณรบกวน สัญญาณรบกวนที่เกิดขึ้นนั้นเรียกวา สัญญาณรบกวนจากการสั่นของหนาสัมผัสสวิตช หรือ การเบาซ (bounce) ถาหากนําสวิตชนันไปใช ้ เปนอุปกรณเพื่อปอนสัญญาณอินพุตใหแกวงจรนับ ใน ทางอุดมคติเมื่อกดสวิตช 1 ครั้ง จะไดสัญญาณพัลสเพียง 1 ลูกเพื่อสงไปยังวงจรเพื่อเปลี่ยนคาหนึ่งคา แตทางปฏิบัติ จะมีสัญญาณพัลสสงออกไปอาจจะมีเพียง 1 ลูกตามตองการหรือมากกวานั้นก็ได ซึง่ ไมอาจคาดเดาได โดยสัญญาณพัลสที่เกิดขึ้นนั้นจะเกิดขึ้นเมือสวิ ่ ตชเริ่มตอวงจร และเมื่อสวิตชกําลัง เปดวงจรเนืองจากการปล ่ อยสวิตช ในรูปที่ 9-5 แสดงปรากฏการณดังกลาว
148
+5V
+5V
R1 10k
S1
+5V
R1 10k
OUTPUT
R1 10k
OUTPUT
S1
S1
+5V
+5V
+5V
0V
0V
0V
สัญญาณรบกวนที่เกิดขึ้น จากการกดสวิตช
สัญญาณรบกวนที่เกิดขึ้น จากการปลอยสวิตช
รูปที่ 9-5 แสดงการเกิดสัญญาณรบกวนเมือมี ่ การกดและปลอยสวิตชในวงจรดิจิตอล
9.1.4 การแกไขสัญญาณรบกวนของการกดสวิตชเมือใช ่ งานกับไมโครคอนโทรลเลอร หลักการแกไขสัญญาณรบกวนแบบนีคื้ อ หนวงเวลาการเกิดขึนของสั ้ ญญาณพัลสเล็กนอย เพือให ่ วงจรไมสนใจสัญญาณทีเกิ่ ดขึนในช ้ วงเริมต ่ นกดสวิตช เรียกการแกไขสัญญาณรบกวนนีว้ า ดีเบาซ (debounce) วิธีการแรก ทําไดโดยใชอุปกรณอิเล็กทรอนิกสพืนฐานอย ้ างตัวตานทานและตัวเก็บประจุ โดยตอ กันในลักษณะวงจร RC อินติเกรเตอร ดังในรูปที่ 9-6 ดวยวิธีการนีจะช ้ วยลดผลของสัญญาณรบกวนที่ เกิดขึนจากการกดสวิ ้ ตชไดในระดับหนึง่ โดยประสิทธิภาพของวงจรจะขึนกั ้ บการเลือกคาของตัวตานทาน และตัวเก็บประจุ หากเลือกคาของตัวเก็บประจุนอยเกินไป อาจไมสามารถลดสัญญาณรบกวนได แตถา เลือกคามากเกินไป จะทําใหความไวในการตรวจจับการกดสวิตชลดลง นันคื ่ อ อาจตองกดสวิตชมากกวา 1 ครังเพื ้ อให ่ ไดสัญญาณที่ตองการ +5V R1 10k
S1 R2
R3
OUTPUT
C1
วงจร RC อินติเกรเตอร รูปที่ 9-6 การตอวงจร RC อินติเกรเตอรเพือแก ่ ไขปญหาสัญญาณรบกวนจากการกดสวิตช
149
วิธีการที่สองคือ ใชกระบวนการทางซอฟตแวรเขามาชวย ซึงมี ่ ขันตอนโดยสรุ ้ ปดังนี้ (1) อานคาการกดสวิตชครั้งแรกเขามากอน (2) หนวงเวลาประมาณ 0.1 ถึง 1 วินาที (3) อานคาของการกดสวิตชอีกครั้ง ถาหากคาที่อานไดเหมือนกับการอานครังแรก ้ แสดงวา มีการกดสวิตชเกิดขึ้นจริง ถาคาที่อานไดไมเหมือนกับการอานครังแรก ้ แสดงวา สัญญาณที่เกิดขึ้นอาจเปนเพียงพัลสแคบๆ อาจตีความไดวา เปนสัญญาณรบกวน จึงยังไมมีการกดสวิตชเกิดขึ้นจริง
9.2 ฟงกชันโปรแกรมภาษา ่ C/C++ ในไลบรารี ipst.h ทีใช ่ ในการทดลอง สําหรับคําสั่งหรือฟงกชั่นของโปรแกรมภาษา C/C++ ที่ใชในการทดลองทั้งหมดในบทนี้ ได รับการบรรจุไวในไฟลไลบรารี ipst.h คือ คําสั่ง in, sw_OK และ sw1
9.2.1 in เปนฟงกชั่นอานคาสถานะลอจิกของพอรตที่กําหนด รูปแบบ char in(x) พารามิเตอร x - กําหนดขาพอรตทีต่ องการอานคา มีคาตั้งแต 0 ถึง 50 สําหรับ IPST-SE ใชไดถึง 30 หมายเหตุ : ไมแนะนําใหใชฟงกชันนี ่ ้กับจุดตอ 19 และ 20 บนแผงวงจร IPST-SE การคืนคา เปน 0 หรือ 1 ตัวอยางที่ 9-1 char x; x = in(16);
// ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจาการอานคาระดับสัญญาณ // อานคาดิจิตอลจากพอรตหมายเลข 16 แลวเก็บคาไวที่ตัวแปร x
150
9.2.2 sw_OK() เปนฟงกชั่นตรวจสอบสถานะสวิตช OK บนแผงวงจร IPST-SE โดยใหสถานะ “เปนจริง” เมื่อ มีการกดสวิตชและ “เปนเท็จ” เมื่อไมมีการกดสวิตช รูปแบบ unsigned char sw_ok() การคืนคา 1 (เปนจริง) เมื่อมีการกดสวิตช 0 (เปนเท็จ) เมื่อไมมีการกดสวิตช
ตัวอยางที่ 9-2
#include <ipst.h> void setup() { glcdClear(); } void loop() { if (sw_OK()) { glcdFillScreen(GLCD_YELLOW); delay(3000); } glcdClear(); }
// ผนวกไฟลไลบรารีหลัก
// ตรวจสอบการกดสวิตช OK // เปลียนสี ่ พืนเป ้ นสีเหลือง // แสดงสีพืนใหม ้ นาน 3 วินาที // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา
9.2.3 sw_OK_press() เปนฟงกชั่นวนตรวจสอบการกดสวิตช OK บนแผงวงจร IPST-SE ตองรอจนกระทั่งสวิตชถูก ปลอยหลังจากการกดสวิตชจึงจะผานฟงกชั่นนี้ไปกระทําคําสั่งอื่นๆ ตัวอยางที่ 9-3 ............ sw_OK_press(); ............
// รอจนกระทั่งเกิดกดสวิตช OK
151
9.2.4 sw1_press เปนฟงกชั่นวนตรวจสอบการกดสวิตช SW1 บนแผงวงจร IPST-SE ตองรอจนกระทั่ง SW1 ถูกปลอยหลังจากมีการกดสวิตช จึงจะผานพนการทํางานของฟงกชั่นนี้ไป รูปแบบ void sw1_press() ตัวอยางที่ 9-4 ............ sw1_press(); ................
// รอจนกระทั่งสวิตช SW1 ถูกกดและปลอย
9.2.5 sw1 เปนฟงกชั่นตรวจสอบการกดสวิตช SW1 ในขณะใดๆ รูปแบบ char sw1() การคืนคา เปน “0” เมือสวิ ่ ตช SW1 ถูกกด และ เปน “1” เมือไม ่ มีการกดสวิตช SW1 ตัวอยางที่ 9-5 char x; x = sw1();
// ประกาศตัวแปร x เพือเก็ ่ บคาผลลัพธจากการอานคาดิจิตอล // อานคาสถานะของสวิตช SW1 มาเก็บไวที่ตัวแปร x
152
ปฏิบัติการที่ 4-1 ควบคุม LED ดวยการกดสวิตช OK การเชือมต ่ อทางฮารดแวร ตอแผงวงจร ZX-LED กับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE
ขั้นตอนการทดลอง 4.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชื่อ swOK_LED 4.1.2 เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร 4.1.3 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม
30 A6 27 A3 28 A4 25 A1
S
OK
OK
ON
SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
รูปที่ L4-1 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 4
1
2
DC MOTOR
+
Hell o0World0000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000 0000 00000000000000000
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
29 A5 26 A2
O
KNOB
8 SCL 9 SDA
ZX-LED
24 A0
D
Press
+ S
USB
#include <ipst.h> void setup() { setTextSize(2); glcd(1,1,"Press OK"); sw_OK_press(); glcdClear(); } void loop() { if (sw_OK()) { out(17,0); delay(2000); } out(17,1); } คําอธิบายโปรแกรม
153
// ผนวกไฟลไลบรารีหลัก // กําหนดขนาดตัวอักษร 2 เทา // แสดงขอความออกหนาจอแสดงผล // วนรอจนกระทั่งกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา
// ตรวจสอบการกดสวิตช OK // ดับ LED ทีจุ่ ดตอพอรต 17 // นาน 2 วินาที // ขับ LED ทีจุ่ ดตอพอรต 17 ใหติดสวาง
การทํางานของโปรแกรมเริ่มตนดวยการแสดงขอความแจงใหกดสวิตช OK บนแผงวงจร IPST-SE เมื่อ กดแลว จะเขาสูลู ปการทํางานหลักในฟงกชั่น loop() เพือตรวจสอบต ่ อไปวา มีการกดสวิตช OK หรือไม ถาไม มี จะสงขอมูล “1” ออกไปยังจุดตอพอรต 17 ทําให LED ทีต่ ออยูติ ดสวาง และยังคงสวางอยูเชนนั้นจนกวาจะ มีการกดสวิตช OK เมื่อสวิตช OK ถูกกด จะทําใหเงือนไขการตรวจสอบเป ่ นจริง เกิดการตอบสนองดวยการสงขอมูล “0” ไปทีจุ่ ดตอพอรต 17 ทําให LED ทีต่ ออยูดั บลงเปนเวลา 2 วินาที ตามการทํางานของฟงกชั่น delay จากนันก็ ้ จะหลุดออกจากการตรวจสอบ มาพบฟงกชั่น out เพือขั ่ บให LED กลับมาติดอีกครั้ง แลววนรอการกดสวิตช OK ในรอบใหม
โปรแกรมที่ L4-1 : ไฟล swOK_LED.pde โปรแกรมภาษา C/C++ สําหรับทดลองควบคุม LED ดวยสวิตช 4.1.4 รันโปรแกรม ทีจอแสดงผลกราฟ ่ ก LCD จะแจงใหกดสวิตช OK ทันทีทีกดสวิ ่ ตช OK บนแผงวงจร IPST-SE จะทําให LED ของแผงวงจร ZX-LED ทีต่ อกับจุดตอพอรต 17 ติดสวาง 4.15 กดสวิตช OK อีก 1 ครั้ง แลวปลอย สังเกตการทํางานของ LED LED ของแผงวงจร ZX-LED จะดับลงนาน 2 วินาที จากนั้นจะกลับมาติดสวางใหมอีกครั้ง และจะทํา งานในลักษณะนีไปตลอด ้ จนกวาจะมีการรีเซตระบบ หรือปดเปดจายไฟเลี้ยงใหม
154
ปฏิบัติการที่ 4-2 ควบคุม LED ดวยการกดสวิตช SW1 ในการทดลองนี้จะเพิ่มเติมสวิตชเขามาอีก 1 ตัวคือ SW1 โดยสวิตช SW1 ถูกติดตั้งไวพรอมใชงานบน แผงวงจร IPST-SE อยูแลว โดยในปฏิบัติการนีต้ องการนําสวิตช SW1 มาควบคุมการเปดปด LED ในแบบท็อก เกิล (toggle) นันคื ่ อ เมื่อกดสวิตชหนึ่งครั้ง LED ติด และเมื่อกดซํ้า LED จะดับ สลับกันเชนนี้
การเชือมต ่ อทางฮารดแวร ตอแผงวงจร ZX-LED กับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE
ขั้นตอนการทดลอง 4.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชื่อ sw1_LED 4.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 4.2.3 รันโปรแกรม ทีจอแสดงผลกราฟ ่ ก LCD จะแจงใหกดสวิตช OK 4.2.4 กดสวิตช OK อีก 1 ครั้ง แลวปลอย 4.2.5 ทดลองกดสวิตช SW1 แลวปลอย 3 ครั้ง สังเกตการทํางานของ ZX-LED LED ของแผงวงจร ZX-LED จะติดและดับ กลับสถานะกันในทุกครังที ้ มี่ การกดสวิตช SW1 นันคื ่ อ จากเดิม ดับจะกลายเปนติดสวาง และจากติดสวางจะกลายเปนดับ 4.2.6 กดสวิตช SW1 คางไวครูหนึ่ง แลวจึงปลอย สังเกตการทํางานของ LED เมื่อสวิตชยังถูกกดคาง สถานะของ LED จะไมมีการเปลี่ยนแปลง จนกวาสวิตชจะถูกปลอย
#include <ipst.h> int i=0; void setup() { setTextSize(2); glcd(1,1,"Press OK"); sw_OK_press(); glcdClear(); } void loop() { if (sw1()) { out(17,i^=1); while(sw1()) delay(5); } } คําอธิบายโปรแกรม
155
// ผนวกไฟลไลบรารีหลัก
// กําหนดขนาดตัวอักษร 2 เทา // แสดงขอความออกหนาจอแสดงผล // วนรอจนกระทั่งกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา
// ตรวจสอบการกดสวิตช OK // ดับ LED ทีจุ่ ดตอพอรต 17
โปรแกรมจะมีตัวอยางการรับคาสวิตช 2 ตัวคือ สวิตช OK (ใชฟงกชัน่ sw_OK_press()) และสวิตช SW1 (ใชฟงกชั่น sw1()) โดยตัวแรกจะอยูในฟงกชั่น setup เพื่อวนรอการกดสวิตช OK เพือเริ ่ ่มตนการทํางาน หลังจากมีการกดสวิตช OK จะเขาสูลู ปการทํางานของฟงกชั่น loop เพือวนรอการกดสวิ ่ ตช SW1 เมื่อ สวิตช SW1 ถูกกด จะทําการสงสัญญาณออกมายังพอรต 17 โดยคาที่สงออกมาจะไดมาจากการเอ็กคลูซีฟ ออรคาของตัวแปร i กับ 1 จากคําสัง่ i^=1 ทําใหคาที่ไดมีการกลับสถานะทุกครังที ้ ่มีการเรียกใหทํางาน ซึ่งการ ทํางานในลักษณะนีสามารถใช ้ คําสัง่ i=~i ก็ได แตเนื่องจากในคอมพิวเตอรบางเครื่อง (โดยเฉพาะเครื่อง คอมพิวเตอร Macintosh) ไมมีคีย ~ ใหใช จึงตองเขียนคําสังด ่ วยการทําเอ็กคลูซีฟ-ออรแทน ดังนั้นเมื่อมีการกดสวิตช SW1 ทุกครั้ง ก็จะมีการกลับสถานะลอจิกเดิมที่จุดตอพอรต 17 ทําให LED ของแผงวงจร ZX-LED ทีต่ ออยูเกิ ดการติดและดับสลับกันในทุกครั้งที่กดสวิตช สําหรับคําสัง่ while(sw1()) และ dealy(5); ทําหนาทีลดสั ่ ญญาณรบกวนทีเกิ ่ ดจากการกดสวิตช ทําใหก ารกดสวิตช SW1 ในแตละครั้งมีความแนนอนมากขึน้
โปรแกรมที่ L4-2 : ไฟล sw1_LED โปรแกรมภาษา C/C++ สําหรับทดลองควบคุม LED ดวยสวิตช SW1 ในลักษณะกลับสถานะการทํางานในทุกครังที ้ ่มีการกดสวิตช SW1
156
การเชือมต ่ อทางฮารดแวร ตอแผงวงจร ZX-SWITCH01 กับจุดตอพอรต 16 ของแผงวงจรหลัก IPST-SE
ขั้นตอนการทดลอง 5.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L1-1 บันทึกในชื่อ swOK_LED 5.2 เปดสวิตชจายไฟแกแผงวงจร IPST-SE แลว เชื่อมตอสาย USB เขากับคอมพิวเตอร 5.3 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 5.4 รันโปรแกรม ทีจอแสดงผลกราฟ ่ ก LCD แสดงขอความ Start ใหกดสวิตช OK 5.5 กดสวิตช OK 1 ครั้ง แลวปลอย ทีจอแสดงผลกราฟ ่ ก LCD แสดงขอความ COUNTER ใหเริ่มการนับดวยการกดสวิตชทีต่ อกับพอรต 16 5.6 กดสวิตชทีแผงวงจร ่ ZX-SWITCH01 ทีต่ อกับพอรต 16 สังเกตการทํางานที่จอแสดงผลของแผงวงจร IPST-SE ทีจอแสดงผลจะเริ ่ ่มตนแสดงคาการนับจํานวนการกดสวิตช โดยเริ่มจาก 0 คาจะเปลียนทั ่ นที่ทีมี่ การกด สวิตชทีพอร ่ ต 16 และจะทําการับคาตอไปได ก็ตอเมื่อมีการปลอยสวิตช แลวกดใหม หากสวิตชยังถูกกดคาง คาการนับจะไมมีการเปลี่ยนแปลง จนกวาสวิตชจะถูกปลอย และกดเขามาใหม 8 SCL 9 SDA
30 A6 27 A3
D Hello0World00 00000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
28 A4 25 A1
COUNTER
27
S
KNOB
OK
SW1
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
รูปที่ L5-1 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 5
1
2
DC MOTOR
+
+ S
ON
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
29 A5 26 A2
D
24 A0
ZX-Switch01
USB
#include <ipst.h> int i=0; void setup() { setTextSize(2); glcd(1,3,"Start"); sw_OK_press(); glcdClear(); glcd(1,2,"COUNTER"); setTextSize(3); glcd(3,3,"0"); } void loop() { if (in(16)==0) { i=i++; glcd(3,3,"%d",i); while(in(16)==0) delay(5); } } คําอธิบายโปรแกรม
157
// ผนวกไฟลไลบรารีหลัก // ประกาศตัวแปรเก็บคาการนับ // กําหนดขนาดตัวอักษร 2 เทา // แสดงขอความ Start ออกหนาจอแสดงผล // วนรอจนกระทั่งกดสวิตช OK // เคลียรหนาจอแสดงผล กําหนดพืนหลั ้ งเปนสีดํา // แสดงขอความ COUNTER เพือแจ ่ งชื่อการทดลอง // กําหนดขนาดตัวอักษร 3 เทา // กําหนดคาเริ่มตนเปน 0
// ตรวจสอบการกดสวิตชที่พอรต 16 // เพิมค ่ าตัวนับ // แสดงคาการนับ // ตรวจสอบการปลอยสวิตช
โปรแกรมนีใช ้ ฟงกชัน่ in ในการตรวจจับและอานคาจากการกดสวิตชทีพอร ่ ต 16 โดยตรงสอบวาทีพอร ่ ต 16 เปนลอจิก “0” หรือไม ถาใชแสดงวา มีการกดสวิตชเปดขึน้ จากนันจะทํ ้ าการเพิมค ่ าตัวนับ แลวนํามาแสดง ผลทีจอแสดงผลกราฟ ่ ก LCD ของแผงวงจร IPST-SE คําสัง่ while(in(16)==0) และ dealy(5); ทําหนาที่ลดสัญญาณรบกวนทีเกิ ่ ดจากการกดสวิตช โดยจะ ตรวจสอบวา มีการปลอยสวิตชแลวหรือไม ถาไม ก็จะวนทํางานอยูทีคํ่ าสังนั ่ ้น ชวยใหไมเกิดการนับคาโดยไม ตั้งใจขึ้น ดังนั้นการกดสวิตชทีพอร ่ ต 16 ในแตละครั้งจึงมีความแนนอนสูง
โปรแกรมที่ L5-1 : ไฟล CounterSwitch โปรแกรมภาษา C/C++ สําหรับทดลองใชงานสวิตชในการ สรางเครื่องนับจํานวนอยางงาย จากทังสองปฏิ ้ บัติการผูพัฒนาสามารถนําไปประยุกตใชงานสวิตชหลายๆ ตัวพรอมกันและมี ความสามารถที่แตกตางกันไปแลวแตจุดประสงค เชน สวิตชบางตัวสามารถกําหนดใหเมื่อกดสวิตช คางแลวสามารถเพิ่มคาหรือลดคาขอมูลทีกํ่ าหนดได ในขณะทีสวิ ่ ตชบางตัวอาจกําหนดใหไมสามารถ กดคางได เปนตน
158
159
สัญญาณทางไฟฟาแบงออก 2 แบบหลักคือ สัญญาณอะนาลอก (analog) และดิจิตอล (digital) สัญญาณอะนาลอกก็คือ สัญญาณไฟฟาที่มีการเปลียนแปลงสั ่ มพันธกับคาเวลา โดยการเปลี่ยนแปลง นันจะเพิ ้ ่มขึ้นหรือลดลงก็ได และมีระดับแรงดันเทาใดก็ได สวนสัญญาณดิจิตอลเปนสัญญาณที่มีการ เปลี่ยนแปลงเพียง 2 ระดับที่แตกตางกัน กลาวคือ มีระดับสัญญาณสูง และตํา่ (เกือบหรือเทากับ 0V) โดยปกติจะมีระดับแรงดันเทากับ +5V สําหรับระดับแรงดันสูง หรือเรียกวา ลอจิก “1” และ 0V สําหรับ ระดับแรงดันตํ่า หรือเรียกวา ลอจิก “0” แตในปจจุบันระดับแรงดันของลอจิก “1” อาจเทากับ +3.3V หรือ 1.8V ขึนอยู ้ กั บเทคโนโลยีของอุปกรณดิจิตอล อยางไรก็ตาม สําหรับการเรียนรูโดยพื้นฐานนี้จะ อธิบายระดับลอจิก “1” ดวยคาแรงดัน +5V เปนหลัก ในรูปที่ 10-1 แสดงความแตกตางระหวางสัญญาณ อะนาลอกกับดิจิตอล V
Data
Vp
1
t
00101 10
t
V Data Vp 1
t 11010 01
V
t
Data
Vp
t
1
1010 10
(ก) ตัวอยางสัญญาณอะนาลอก ระดับของสัญญาณเปลี่ยนแปลง สัมพันธกับคาเวลา
t
(ข) ตัวอยางสัญญาณดิจิตอล จะเห็นวา มีเพียง 2 ระดับสัญญาณเทานั้นคือ ระดับสูง ("1") และระดับต่ํา ("0")
รูปที่ 10-1 ตัวอยางของสัญญาณอะนาลอกและดิจิตอล
160
10.1 สัญญาณอะนาลอก แบงได 3 แบบ คือ แบบสัญญาณไฟตรง (analog DC signals), แบบเปลียนค ่ าตามเวลา (timedomain) และ แบบเปลียนค ่ าตามความถี่ (frequency-domain) สัญญาณอะนาลอกไฟตรง มั กเปนคาที่ไดจากการวัดขนาดหรือระดับของสัญญาณ ซึ่งมีการ เปลี่ยนแปลงคาสัญญาณในเวลาที่ไมเร็วมากนัก อาทิ คาอุณหภูมิ, ระดับของไหล, ความดัน, อัตราการ ไหล, นําหนั ้ ก เปนตน สามารถใชวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล (ADC : Analog to Digital Converter) ที่มีอัตราการสุมสั ญญาณไมเร็วมากได สัญญาณอะนาลอกแบบเปลี่ยนคาตามเวลา เปนสัญญาณที่วัดเพือพิ ่ จารณาลักษณะรูปสัญญาณ เปนหลัก อาทิ สัญญาณคลืนหั ่ วใจมนุษย (ECG) ซึงมี ่ ความจําเปนตองใชวงจรแปลงสัญญาณอะนาลอก เปนดิจิตอลที่มีความเร็วในการสุมสั ญญาณสูง สัญญาณอะนาลอกแบบเปลี่ยนคาตามความถี่ ไดแก สัญญาณความถี่วิทยุ (radio frequency : RF) และสัญญาณคลืนเสี ่ ยง เปนตน ในการวิเคราะหจําเปนตองมีฮารดแวรพิเศษเพือช ่ วยวิเคราะหอยาง DSP (digital signal processing) ทํางานรวมกับวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอลดวย
10.2 ทําไมไมโครคอนโทรลเลอรตองอานคาสัญญาณอะนาลอก สาเหตุหลักที่ ไมโครคอนโทรลเลอรตองติดตอกับสัญญาณอะนาลอกคือ ต องการอานคา ปริมาณทางฟสิกสในรูปของสัญญาณไฟฟา เพือนํ ่ าไปประมวลผลและควบคุมระบบตอไป ในรูปที่ 10-2 แสดงไดอะแกรมการทํางานเบื้ องตนของการอานคาสัญญาณอะนาลอกของ ไมโครคอนโทรลเลอร มีสวนประกอบสําคัญ 4 สวนคือ 1. สวนตรวจจับสัญญาณกายภาพ (Transducer/Sensor/Detector) 2. วงจรปรับสภาพสัญญาณ (Signal conditioning) 3. วงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล (Analog to Digital Converter : ADC) 4. ไมโครคอนโทรลเลอร
10.2.1 สวนชุดตรวจจับสัญญาณกายภาพ ชุดตรวจจับสัญญาณกายภาพ หรือ ทรานสดิวเซอร (transducer) คือตัวแปลงสัญญาณทางกายภาพ เชน อุณหภูมิ ความดัน ระดับของไหล ความยาว ตําแหนงการเคลือนที ่ ่ ฯลฯ ใหเปนในรูปสัญญาณทางไฟฟา นันเอง ่ หรือบางครังเรี ้ ยกอุปกรณเหลานีว้ า ตัวตรวจจับ (sensor) ซึงมี ่ ดวยกันหลากหลายรูปแบบ อาทิ เทอรโม คัปเปล (thermocouple) , เทอรมิสเตอร (thermistor), ตัวตรวจจับการไหล (flow sensor) เปนตน
o
C
161
10001000 01110110 00011101 11100110 11111010
รูปที่ 10-2 แสดงกระบวนการอานคาสัญญาณอะนาลอกของไมโครคอนโทรลเลอร
10.1.2 สวนปรับสภาพสัญญาณ หนาที่หลักของสวนปรับสภาพสัญญาณนีคื้ อ ปรับปรุงคุณภาพของสัญญาณไฟฟาที่ไดจากชุด ตรวจจับกอนสงสัญญาณตอไปยังฮารดแวรที่เชื่อมตอกับไมโครคอนโทรลเลอร ซึงอาจมี ่ ความจําเปน ตองปรับสเกลสัญญาณ, ขยายขนาดสัญญาณ, แปลงรูปสัญญาณใหเปนเชิงเสน (linearization), กรอง คลืนสั ่ ญญาณและแยกกราวดของสัญญาณ (common-mode rejection) หนาทีเด ่ นของสวนปรับสภาพสัญญาณคือ ขยายขนาดสัญญาณ (amplifly) เพราะโดยสวนใหญ สัญญาณที่ ไดจากชุดตรวจจับจะมีขนาดสัญญาณที่ตํ่ามาก มีขนาดแรงดันไฟฟาในหนวยมิลลิโวลต (millivolt : mV) หรือ 1/1000V และมักมีสัญญาณรบกวนจากแหลงจายไฟปะปนมา ซึงอาจรบกวน ่ สัญญาณดานอินพุตในขณะที่สัญญาณเขาสูระบบ ทําใหคาสัญญาณที่วัดไมถูกตองและไมเที่ยงตรง นอกจากนั้นวงจรปรับสภาพสัญญาณยังใชในการแปลงสัญญาณไฟฟาที่ไมไดอยูในรูปของ แรงดันไฟฟา เชน กระแสไฟฟาหรือความตานไฟฟามาอยูในรู ปของแรงดันไฟฟาใหเหมาะสมกับวงจร แปลงสัญญาณอะนาลอกเปนดิจิตอล อาทิ แปลงคากระแสไฟฟา 4 ถึง 20mA จากตัวตรวจจับที่ให ผลแบบกระแสไฟฟาเปนแรงดันไฟตรง 0 ถึง +5V เปนตน
162
10.1.3 วงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล วงจรนีทํ้ าหนารับสัญญาณอะนาลอกที่ผานมาจากวงจรปรับสภาพสัญญาณ เพื่อทําการแปลง เปนขอมูลทางดิจิตอลเพือส ่ งไปยังประมวลผลยังไมโครคอนโทรลเลอรตอไป จุดทีต่ องใหความสนใจ ในสวนนี้คือ ความละเอียดในการแปลงสัญญาณ วงจรแปลงสัญญาณอะนาลอกเปนดิจิตอลที่เหมาะ สมในการนํามาใชในการทดลองวิทยาศาสตรควรมีความละเอียดไมนอยกวา 8 บิต ซึงให ่ ความแตกตาง ของขอมูล 256 คา และถายิ่งมีความละเอียดสูงเทาใดยิงดี ่ เพราะจะใหผลการแปลงที่แมนยํามากขึน้ แตนั่นจะทําใหตนทุนของระบบสูงขึนตามไปด ้ วย
10.1.4 ไมโครคอนโทรลเลอร ไมโครคอนโทรลเลอรเปนหนึงในอุ ่ ปกรณของระบบดิจิตอล ดังนันการอ ้ านคาสัญญาณอะนา ลอกโดยตรงจึงตองใชอุปกรณชวยเพิ่มเติม นันคื ่ อ วงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล (analog to digital converter) ไมโครคอนโทรลเลอรในอดีตจะไมมีวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล บรรจุอยูภายในตัวชิป จึงตองใชไอซีแปลงสัญญาณอะนาลอกเปนดิจิตอลเขามาชวย โดยไอซีแปลง สัญญาณนีจะให ้ ผลลัพธออกมาเปนขอมูลดิจิตอลที่มีความละเอียดของขอมูลตางกันไป แลวแตความ สามารถของไอซี โดยจะเริ่มตังแต ้ 8, 10, 12, 16 บิตหรือสูงกวา ในปจจุบัน ไมโครคอนโทรลเลอรไดรวมเอาวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอลเขามา ไวภายในชิป ทั้งนีเพื ้ ่อลดขนาดของระบบโดยรวมลง ทําใหการประมวลผลสัญญาณทําไดเร็วขึ้น และ ตนทุนรวมของระบบลดลงตามไปดวย ขอมูลดิจิตอลที่ไดมาจากวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล ไมวาจะเปนแบบไอซี แปลงสัญญาณภายนอก หรือจากโมดูลที่อยูภายในไมโครคอนโทรลเลอรจะถูกสงเขามาในระบบบัส ขอมูลเพื่อทําการประมวลผลและนําไปใชในการตัดสินใจเพื่อควบคุมการทํางานของระบบตอไป สําหรับในชุด IPST-microBOX ไดเลือกใชไมโครคอนโทรลเลอร ATmega16 อันเปนไมโคร คอนโทรลเลอรที่มีวงจรแปลงสัญญาณอะนาอลกเปนดิจิตอล 8 ชองอยูภายในชิปแลว จึงทําใหการนํา แผงวงจรควบคุมไปใชในการเชื่อมตอกับตัวตรวจจับแบบตางๆ เพื่ออานคาสามารถกระทําไดงายและ สะดวกขึ้น
163
10.2 การแปลงสัญญาณอะนาลอกเปนดิจิตอล (ADC) การแปลงสัญญาณอะนาลอกเปนดิจิตอล สัญญาณจะไดรับการแปลงเปนจํานวนทางดิจิตอล โดยการสุมหรื อแซมปลิง้ (sampling) ดังในรูปที่ 10-3 ถาหากวงจรแปลงสัญญาณอะนาลอกเปนดิจิตอล มีความละเอียด 8 บิต จะมีความแตกตางทางผลลัพธเลขฐานสองทั้งหมด 28 หรือ 256 คา และถาหาก มีความละเอียด 10 บิต ก็จะใหผลลัพธของขอมูลเลขฐานสองสูงถึง 210 หรือ 1,024 คา คาความละเอียดของตัวแปลงสัญญาณอะนาลอกเปนดิจิตอลถูกอธิบายเปนระยะหางที่นอย ที่สุดของคาแรงดันทางอิ นพุตที่เพิ่มขึน้ ซึ่งถูกกําหนดโดยตัวแปลงสัญญาณนัน้ ระยะหางยิ่งนอย เทาไหร คาความละเอียดยิ่งสูงขึ้น โดยคาความละเอียดแปรผันตรงกับจํานวนของบิตเอาตพุต ยกตัว อยางเชน ถาวงจรแปลงสัญญาณมีความละเอียด 10 บิต ทําใหเกิดผลลัพธที่แทนคาสัญญาณมากถึง 1,024 ระดับสัญญาณอินพุตถูกแทนเปนรหัสเลขฐานสองจาก 0000000000 ถึง 1111111111 ถายาน อินพุตเริ่มตนจาก 0 ถึง +5 V ดังนันความละเอี ้ ยดเทากับ (คาโดยประมาณ) 5 0.005 V 1024
ถาเอาตพุตรหัสเลขฐานสองเปน 0000000001 แทนแรงดัน 0.005 V ดังนันข ้ อมูลของแรงดัน 3V จะมีคาเทากับ 3 600 10 0 .005
ทําการแปลงเปนเลขฐานสองจะไดคาเทากับ 10010110002 ขอมูลดิจิตอล 1101100111 0101101111
สัญญาณ อะนาลอกอินพุต
ระยะหางของการสุม
รูปที่ 10-3 การสุมสัญญาณอะนาลอกเพื่อกําหนดขอมูลดิจิตอล
164
10.3 ฟงกชันของโปรแกรมภาษา ่ C/C++ ทีใช ่ อานคาสัญญาณอะนาลอกของ IPST-MicroBOX (SE) เพื่ออํานวยความสะดวกในการเขียนโปรแกรมภาษา C/C++ เพื่อควบคุมกลองสมองกล IPSTMicroBOX (SE) เพื่อใหอานคาสัญญาณอะนาลอกจากตัวตรวจจับตางๆ ในไฟลไลบรารี ipst.h จึงได บรรจุฟงกชั่นสําหรับอานคาสัญญาณอะนาลอกโดยเฉพาะ 2 ฟงกชั่นคือ analog() และ knob(); การอานคาผานฟงกชั่น analog() และ knob() จะไดผลลัพธคืนคากลับมาในชวง 0 ถึง 1,023 ของเลขฐานสิบ หรือ 0x0000 ถึง 0x03FF ของเลขฐานสิบหก เนืองจากความละเอี ่ ยดในการแปลง สัญญาณอะนาลอกเปนดิจิตอลเทากับ 10 บิต (เกิดคาได 1,024 คา)
10.3.1 analog เปนฟงกชั่นอานคาจากการแปลงสัญญาณอะนาลอกของแผงวงจร IPST-SE ที่จุดตอ A0 ถึง A6 รูปแบบ unsigned int analog(unsigned char channel) พารามิเตอร channel - กําหนดชองอินพุตทีต่ องการ มีคา 0 ถึง 6 ซึงตรงกั ่ บขาพอรต A0 ถึง A6 การคืนคา เปนขอมูลทีได ่ จากการแปลงสัญญาณไฟฟา 0 ถึง +5V จากชองอินพุตทีกํ่ าหนด มีคา 0 ถึง 1,023
10.3.2 knob( ) เปนฟงกชันอ ่ านคาขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาทีขาพอร ่ ต A7 ซึงต ่ อกับตัวตานทาน ปรับคาไดที่ตําแหนง KNOB รูปแบบ unsigned int knob() การคืนคา เปนขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาทีมาจากการปรั ่ บคาทีปุ่ ม KNOB บนแผงวงจร IPSTSE มีคา 95 ถึง 1,023
165
ในปฏิบัติการนีเป ้ นการแนะนําการเชื่อมตอชุดกลองสมองกล IPST-MicroBOX (SE) กับอุปกรณทีให ่ ผล การทํางานเปนแรงดันไฟตรง เพือทดสอบการอ ่ านคาสัญญาณอะนาลอกหรือสัญญาณไฟตรงมาแสดงผลเปนตัว เลขทีเข ่ าใจไดงายขึน้ ซึงการทํ ่ างานของอุปกรณแบบนีจะแตกต ้ างกันไปตามลักษณะและจุดประสงค เชน ตัวตรวจ จับอุณหภู มิที่ใหผลการเปลี่ ยนแปลงอุณหภูมิสัมพันธกับแรงดันทางเอาตพุต, ตัวตานทานแปรคาตามแสงที่ สามารถใหแรงดันไฟตรงเอาตพุตเปลี่ยนแปลงตามความเขมของแสงทีมาตกกระทบตั ่ วมัน เปนตน ตัวแทนของ อุปกรณในลักษณะนีในขั ้ นพื ้ นฐานที ้ สุ่ ดคือ ZX-POT แผงวงจรตัวตานทานปรับคาได (Potentiometer) โดยในปฏิบัติ การนีจะแสดงให ้ เห็นถึงการอานคาและนําผลลัพธมาประยุกตใชงานรวมกับแผงวงจรหลัก IPST-SE
ปฏิบัติการที่ 6-1 อานคาตัวตรวจจับมาแสดงผล ในปฏิบัติการนีนํ้ าเสนอการเขียนโปรแกรมภาษา C/C++ เพืออ ่ านคาสัญญาณไฟฟาแบบอะนาลอกจาก แผงวงจรตัวตานทานปรับคาไดทีต่ อกับจุดตอพอรต A1 มาแสดงผลทีจอแสดงผลกราฟ ่ ก LCD สีบนแผงวงจรหลัก IPST-SE
การเชือมต ่ อทางฮารดแวร หรือเอาตพุตปรับแรงดันเพิมเมื ่ อหมุ ่ นตามตามเข็มนาฬิกาของแผงวงจร ZX-POTV หรือ ZX-POTH กับจุดตอ A1 ของแผงวงจรหลัก IPST-SE
A
ZX-POTV
ตอเอาตพุต
30 A6 27 A3
D
29 A5 26 A2
00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
Analog
ON
583
Potentiometer
Volts
KNOB
2.847
OK
UART1
16
18
17
19
+5
20
RESET
รูปที่ L6-1 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 6
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
28 A4 25 A1
ZX-POTH
8 SCL 9 SDA
24 A0
A
USB
166
ขั้นตอนการทดลอง 6.1.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L6-1 บันทึกในชื่อ AnalogTest 6.1.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม void setup() { glcdClear(); setTextSize(2); } void loop() { glcd(0,2,"Analog"); val = analog(1); setTextSize(3); glcd(1,2,"%d ",val); setTextSize(2); glcd(5,3,"Volts"); volts = (float(val)*5)/1024; setTextSize(3); glcd(4,1,"%f",volts); setTextSize(2); } คําอธิบายโปรแกรม
// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ
// แสดงขอความที่จอแสดงผล // อานคาของสัญญาณชอง A1 มาเก็บไวที่ตัวแปร val // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาทีอ่ านไดจากจุดตอ A1 ที่หนาจอแสดงผล // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความ Volts // แปลงขอมูลเปนหนวยแรงดัน // เลือกขนาดตัวอักษรใหญเปน 3 เทาจากขนาดปกติ // แสดงคาแรงดันความละเอียดทศนิยม 3 ตําแหนง // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ
คาของแรงดันไฟตรงทีได ่ จากตัวตรวจจับหรือตัวตานทานปรับคาไดทีจุ่ ดตอ A1 ของแผงวงจร IPST-SE จะถูกแปลงเปนขอมูลดิจิตอลและจัดรูปแบบเปนเลขฐานสิบไดคาในชวง 0 ถึง 1023 จากการทํางานของฟงกชัน่ analog() จากนันข ้ อมูลนันได ้ รับการสงตอไปแสดงทีจอแสดงผลกราฟ ่ ก LCD สีดวยฟงกชัน่ glcd อยางตอเนือง ่ นอกจากนันในโปรแกรมยั ้ งนําขอมูลทีได ่ จากการแปลงสัญญาณมาคํานวณกลับ เพือให ่ ไดเปนคาแรงดัน ไฟตรง โดยใชสมการ volts = (val x 5) / 1024 แลวใชตัวแปร volts ทีเป ่ นตัวแปรแบบทศนิยมมารับคาที่ได จากคํานวณเพื่อนําไปแสดงผลที่จอกราฟก LCD สี โดยแสดงเปนคาแรงดันในหนวยโวลต ดวยความละเอียด ทศนิยม 3 ตําแหนง ในโปรแกรมมีการกําหนดขนาดของตัวอักษรทีใช ่ แสดงผลตางกัน เนืองจากต ่ องการแยกขอความและ ขอมูลออกจากกันใหชัดเจน
โปรแกรมที่ L6-1 : ไฟล AnalogTest.pde โปรแกรมภาษา C/C++ สําหรับอานคาสัญญาณอะนาลอกของ แผงวงจร IPST-SE
167
6.1.3 รันโปรแกรม ทดลองหมุนแกนของตัวตานทานบนแผงวงจรตัวตานทานปรับคาได ZX-POTH หรือ ZX-POTV สังเกตผลการทํางานผานทางจอแสดงผลของแผงวงจร IPST-SE ทีจอแสดงผลกราฟ ่ ก LCD ชวงบนแสดงคาขอมูลทีได ่ จากการแปลงสัญญาณทีจุ่ ดตอ A1 ซึ่งตอกับแผง วงจรตัวตานทานปรับคาได ZX-POT โดยมีคาระหวาง 0 ถึง 1023 (เทียบกับแรงดัน 0 ถึง +5V)
A
ZX-POTV
ทีช่ วงลางของจอแสดงผลกราฟก LCD สีแสดงคาแรงดันไฟตรงในหนวย โวลต (Volts) ทีได ่ จากการปรับ คาของตัวตานทานบนแผงวงจรตัวตานทานปรับคาได ZX-POT โดยมีคาระหวาง 0.000 ถึง 4.995 (เทียบกับขอมูล 0 ถึง 1023)
30 A6 27 A3 29 A5 26 A2
00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
Analog
ON
Volts
KNOB
0.000
OK
UART1
18
17
19
+5
20
RESET
LOW
1
2
SERVO
2 RxD1 3 TxD1
A
ZX-POTV
16
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
28 A4 25 A1
ZX-POTH
D
0
Potentiometer
8 SCL 9 SDA
24 A0
A
USB
29 A5 26 A2
00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
Analog
ON
Volts
KNOB
4.995
OK
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
28 A4 25 A1
ZX-POTH
30 A6 27 A3
D
1023
Potentiometer
8 SCL 9 SDA
24 A0
A
USB
168
ปฏิบัติการที่ 6.2 ควบคุมการเปด/ปด LED ดวยแผงวงจรตัวตานทานปรับคาได ในปฏิบัติการนีเป ้ นการนําขอมูลทีได ่ จากการแปลงสัญญาณไฟฟาซึงมาจากการปรั ่ บคาของ ZX-POTV (ZXPOTH) แผงวงจรตัวตานทานปรับคาไดมากําหนดเงือนไขในการเป ่ ด/ปด LED เพือให ่ เห็นแนวทางในการประยุกต ใชงานเบื้องตน
การเชือมต ่ อทางฮารดแวร เชือมต ่ อแผงวงจร ZX-LED เขากับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE ตอเอาตพุต
หรือเอาตพุตปรับแรงดันเพิมเมื ่ อหมุ ่ นตามตามเข็มนาฬิกาของแผงวงจร ZX-POTV หรือ ZX-POTH กับจุดตอพอรต A1 ของแผงวงจรหลัก IPST-SE
ขั้นตอนการทดลอง 6.2.1 เปดซอฟตแวร Wiring 1.0 สรางไฟลใหม พิมพโปรแกรมที่ L6-1 บันทึกในชื่อ AnalogTest 6.2.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม
A
ZX-POTV
30 A6 27 A3 28 A4 25 A1 ZX-LED
KNOB
Analog control Switch
ON
108
OK SW1
+ S O
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
รูปที่ L6-2 การตอวงจรเพือทํ ่ าการทดลองสําหรับปฏิบัติการที่ 6-2
1
2
DC MOTOR
S
+
00 00000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
G 6V 12 G 6V 13 G 6V 14 G 6V 15 SERVO
15 SV0 14 SV1 13 SV2 12 SV3
ZX-POTH
D
29 A5 26 A2
Potentiometer
8 SCL 9 SDA
24 A0
A
USB
#include <ipst.h> int val=0; void setup() { glcdClear(); setTextSize(2); glcd(1,2,"Analog"); glcd(2,2,"control"); glcd(3,2,"Switch"); } void loop() { val = analog(1); if(val>512) { setTextSize(4); setTextColor(GLCD_RED); glcd(3,1,"%d ",val); out(17,1); } else { setTextSize(4); setTextColor(GLCD_WHITE); glcd(3,1,"%d ",val); out(17,0); } setTextSize(2); } คําอธิบายโปรแกรม
169
// ผนวกไฟลไลบรารีหลัก // กําหนดตัวแปรเก็บคาทีได ่ จากการแปลงสัญญาณแลว
// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความที่จอแสดงผล
// อานคาของสัญญาณชอง A1 มาเก็บไวที่ตัวแปร val // ตรวจสอบวาคาทีอ่ านไดมากกวา 512 หรือไม // เลือกขนาดตัวอักษรใหญเปน 4 เทาจากขนาดปกติ // เปลียนเปนสีแดง // แสดงคาทีอ่ านไดจากจุดตอ A1 ที่หนาจอแสดงผล // ถาคา val มากกวา 512 ทําการขับ LED ที่พอรต 17
// เลือกขนาดตัวอักษรใหญเปน 4 เทาจากขนาดปกติ // แสดงตัวอักษรสีขาว // แสดงคาทีอ่ านไดจากจุดตอ A2 ที่หนาจอแสดงผล // ถาคา val นอยกวา 512 ทําการปด LED ที่พอรต 17 // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ
สัญญาณไฟฟาจากแผงวงจรตัวตานทานปรับคาไดจะถูกอานดวยคําสัง่ analog() เก็บไวทีตั่ วแปร val เพือนํ ่ าไปตรวจสอบและสงไปแสดงผลยังจอแสดงผลกราฟก LCD สี หากคาที่ได นอยกวา 512 ตัวเลขที่แสดง ผลยังเปนสีขาว และสงขอมูล “0” ไปยังพอรต 17 ทําให LED ที่ตออยูไม ทํางาน เมื่อคาของ val มากกวา 512 ตัวเลขแสดงผลจะเปลียนเป ่ นสีแดง และมีการสงขอมูล “1” ไปยังพอรต 17 ทําให LED ที่ตออยูติ ดสวาง
โปรแกรมที่ L6-2 : ไฟล AnalogSwitch.pde โปรแกรมภาษา C/C++ สําหรับอานคาสัญญาณไฟฟาเพื่อ นํามาควบคุมอุปกรณเอาตพุต
170
6.2.3 รันโปรแกรม ทดลองปรับคาที่แกนหมุนของตัวตานทานปรับคาไดบนแผงวงจร ZX-POT สังเกตการทํางาน ของจอแสดงผลบนแผงวงจร IPST-SE และ LED บนแผงวงจร ZX-LED เมือปรั ่ บคาทีแกนของตั ่ วตานทาน สังเกตผลลัพธทีจอแสดงผล ่ มันจะแสดงคา 0 ถึง 1023 เมือปรั ่ บคาที่ แผงวงจร ZX-POT ถามีคานอยกวา 512 ตัวเลขจะเปนสีขาว และ LED ดับ เมื่อใดปรับคาจนไดมากกวา 512 คาตัวเลขทีจอแสดงผลจะเปลี ่ ยนเป ่ นสีแดง และ LED ทีต่ อกับพอรต 17 ติดสวาง
A
ZX-POTV
30 A6 27 A3 KNOB
Analog control Switch
ON
SW1
+ S S
DC MOTOR
O
UART1
16
18
17
19
+5
20
1
LOW
2
SERVO
2 RxD1 3 TxD1
RESET
G 6V 12 G 6V 13 G 6V 14 G 6V 15
420
OK
+
0000 000000 0 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000 000000000000000000000
15 SV0 14 SV1 13 SV2 12 SV3
ZX-POTH
28 A4 25 A1 ZX-LED
D
29 A5 26 A2
Potentiometer
8 SCL 9 SDA
24 A0
A
USB
A
ZX-POTV
30 A6 27 A3 KNOB
Analog control Switch
520
OK
ON
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
S
O
UART1
16
G 6V 12 G 6V 13 G 6V 14 G 6V 15
SW1
+ S +
00 00000 000 0 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000 000000000000000000 000
15 SV0 14 SV1 13 SV2 12 SV3
ZX-POTH
28 A4 25 A1 ZX-LED
D
29 A5 26 A2
Potentiometer
8 SCL 9 SDA
24 A0
A
USB
SERVO
171
ปฏิบัติการที่ 6.3 ควบคุมการเปด/ปด LED ดวยแผงวงจรตรวจจับแสง ในปฏิบัติการนีเป ้ นการตอยอดจากปฏิบัติการที่ 6.2 โดยเปลียนจากการปรั ่ บคาของ ZX-POTV (ZX-POTH) แผงวงจรตัวตานทานปรับคาไดเปนการตรวจจับแสงโดยใชแผงวงจรตัวตานทานแปรคาตามแสดงหรือ ZX-LDR โดยยังคงใชเงือนไขในการเป ่ ด/ปด LED ในแบบเดียวกัน
การเชือมต ่ อทางฮารดแวร เชือมต ่ อแผงวงจร ZX-LED เขากับจุดตอพอรต 17 ของแผงวงจรหลัก IPST-SE
+
ตอเอาตพุต
หรือเอาตพุตแรงดันแปรคาตามแสงของแผงวงจร ZX-LDR กับจุดตอพอรต A1 ของแผง
วงจรหลัก IPST-SE
ขั้นตอนการทดลอง 6.3.1 เขียนโปรแกรมที่ L6-3 บันทึกในชื่อ NightSwitch
ZX-LDR
+
Light sensor
+
30 A6 27 A3
00 00 000000 0 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000 0000000000 00000 000000
Night Switch
ON
98
SW1
+ S S
O
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
28 A4 25 A1 KNOB
OK
+
D
29 A5 26 A2
ZX-LED
24 A0
USB
DC MOTOR
Potentiometer
8 SCL 9 SDA
A
6.3.2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม
SERVO
รูปที่ L6-3 การตอวงจรเพือทดสอบการทํ ่ างานของแผงวงจรตรวจจับแสงเพื่อใชกําหนดเงื่อนไขในการ เปด-ปดอุปกรณเอาตพุต
172
#include <ipst.h> int val=0; void setup() { glcdClear(); setTextSize(2); setTextColor(GLCD_YELLOW); glcd(1,2,"Night"); glcd(2,2,"Switch"); } void loop() { val = analog(1); if(val<100) { setTextSize(4); setTextColor(GLCD_WHITE); glcd(3,1,"%d ",val); out(17,1); } else { setTextSize(4); setTextColor(GLCD_BLUE); glcd(3,1,"%d ",val); out(17,0); } setTextSize(2); } คําอธิบายโปรแกรม
// ผนวกไฟลไลบรารีหลัก // กําหนดตัวแปรสําหรับเก็บคาทีได ่ จากการแปลงสัญญาณ
// เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ // แสดงขอความที่จอแสดงผล
// อานคาของสัญญาณชอง A1 มาเก็บไวที่ตัวแปร val // ตรวจสอบวาคาทีอ่ านไดมากกวา 512 หรือไม // เลือกขนาดตัวอักษรใหญเปน 4 เทาจากขนาดปกติ // เปลียนเปนสีขาว // แสดงคาทีอ่ านไดจากจุดตอ A1 ที่หนาจอแสดงผล // ถาคา val นอยกวา 100 ทําการขับ LED ที่พอรต 17
// เลือกขนาดตัวอักษรใหญเปน 4 เทาจากขนาดปกติ // แสดงตัวอักษรสีนํ้าเงิน // แสดงคาทีอ่ านไดจากจุดตอ A1 ที่หนาจอแสดงผล // ถาคา val มากกวา 100 ทําการปด LED ที่พอรต 17 // เลือกขนาดตัวอักษรใหญเปน 2 เทาจากขนาดปกติ
ในโปรแกรมนีจะตรวจสอบค ้ าจากแผงวงจรตรวจจับแสงทีอ่ านดวยคําสัง่ analog(1); เก็บไวทีตั่ วแปร val หากคาที่ไดมากกวา 100 ตัวเลขที่แสดงผลเปนสีนําเงิ ้ น และสงขอมูล “0” ไปยังพอรต 17 ทําให LED ทีต่ ออยู ไมทํางาน เมื่อคาของ val นอยกวา 100 ตัวเลขแสดงผลจะเปลียนเป ่ นสีขาว และมีการสงขอมูล “1” ไปยังพอรต 17 ทําให LED ที่ตออยูติ ดสวาง
โปรแกรมที่ L6-3 : ไฟล NightSwitch.pde โปรแกรมภาษา C/C++ สําหรับควบคุมการเปดปดอุปกรณ เอาตพุตดวยแสง
173
6.3.3 รันโปรแกรม ทดลองใชมือหรือแปนกระดาษโปรงแสงบังแสงที่สองมายังตัวตานทานแปรคาตามแสงหรือ LDR บนแผงวงจร ZX-LDR สังเกตการทํางานของจอแสดงผลบนแผงวงจร IPST-SE และ LED บนแผงวงจร ZXLED หาก ZX-LDR ไดรับแสงมาก สังเกตไดจากคาที่แสดงบนจอแสดงผล นั่นคือ มีคามากกวา 100 (ตัวเลข เปนสีนําเงิ ้ น) จะสมมติสถานการณวา เปนตอนกลางวัน จึงไมมีเปดไฟสองสวาง ซึ่งในที่นีใช ้ LED บนแผงวงจร ZX-LED ทําหนาทีแทน ่ แตถัาหาก ZX-LDR ไดรับแสงลดลงจนตํ่ากวา 100 จะถือวา เปนตอนกลางคืน ระบบจะทํางานสั่งให LED ทีพอร ่ ต 17 ติดสวาง จนกวา ZX-LDR จะไดรับแสงมากเพียงพอ ซึ่งอาจตีความวา เปนตอนเชาแลว วงจร ขับ LED หยุดทํางาน ทําให LED ทีพอร ่ ต 17 ดับ ดังนั้น จึงอาจเรียกการทํางานของปฏิบัติการนีว้ า สวิตชสนธยา (Twilight Switch) หรือสวิตชกลางคืน (Night Switch) ก็ได
174
ในปฏิบัติ การนี้เปนการนําไอซีวัดอุณหภูมิทีให ่ ผลการทํางานเปนแรงดันไฟฟามาเชื่อมตอกับชุดกลอง สมองกล IPST-MicroBOX (SE) เพือสร ่ างเปนเครื่องวัดอุณหภูมิระบบตัวเลขอยางงาย
รูจั กกับ MCP9701 ไอซีวัดอุณหภูมิ เปนอุปกรณตรวจจับและวัดอุณหภูมิทีให ่ ผลการทํางานเปนแรงดันไฟฟาแบบเชิงเสน รับรูการเปลี ยนแปลง ่ ของอุณหภูมิภายในเวลาไมถึง 2 วินาที เชื่อมตอกับอินพุตอะนาลอก A0 ถึง A6 ของแผงวงจรหลัก IPST-SE ได คุณสมบัติทางเทคนิคของ MCP9701 ทีควรทราบ ่ เปนไอซีวัดอุณหภูมิในกลุมเทอรมิสเตอรแบบแอกตีฟที่ใหผลการทํางานแบบเชิงเสน ยานวัด -40 ถึง +125 องศาเซลเซียส ผลการวัดอางอิงกับหนวยขององศาเซลเซียสโดยตรง ความผิดพลาดเฉลี่ย 2 องศาเซลเซียส ยานไฟเลี้ยง +3.1 ถึง +5.5V กินกระแสไฟฟาเพียง 6uA ใชแบตเตอรี่เปนแหลงจายไฟได คาแรงดันเอาตพุต
500mV (ที่ 0๐C) ถึง 2.9375V (ที่ 125๐)
คาแรงดันเอาตพุตตอการเปลียนแปลงอุ ่ ณหภูมิ 19.5mV/๐C ใชงานกับวงจรแปลงสัญญาณอะนาลอก
เปนดิจิตอลความละเอียดตั้งแต 8 บิตได โดยมีความคลาดเคลื่อนตํ่า
รูปที่ L7-1 การจัดขาของ MCP9701, หนาตาเมื่อตอสายสัญญาณพรอมใชงานและกราฟคุณสมบัติ
175
8 SCL 9 SDA
30 A6 27 A3
USB
24 A0
D
29 A5 26 A2
00 00000 000 0 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000 0000000000000 00000 000
Digital THERMO METER
ON
28 A4 25 A1
26.740
KNOB
Celsius
OK
UART1
16
18
17
19
+5
20
RESET
LOW
2 RxD1 3 TxD1
1
2
DC MOTOR
SW1
G 6V 12 G 6V 13 G 6V 14 G 6V 15
15 SV0 14 SV1 13 SV2 12 SV3
SERVO
รูปที่ L7-2 การตอวงจรเพือใช ่ งานชุดกลองสมองกล IPST-MicroBOX (SE) กับไอซีวัดอุณหภูมิ MCP9701
การเชือมต ่ อทางฮารดแวร ่ ่อมตอกับไอซี MCP9701 เขากับจุดตอ A3 ของแผงวงจรหลัก IPST-SE ตอสายวัดอุณหภูมิทีเชื
ขั้นตอนการทดลอง 7.1 เขียนโปรแกรมที่ L7-1 บันทึกในชื่อ MCP9701_Thermometer.pde 7..2 คอมไพลและอัปโหลดโปรแกรมไปยังแผงวงจร IPST-SE โดยคลิกที่ปุม 7.3 รันโปรแกรม ทดลองใชมือจับที่ตัวไอซีวัดอุณหภูมิ หรือนําหัววัดอุณหภูมิไปแชในนําแข็ ้ ง สังเกตการทํางานที่ จอแสดงผลบนแผงวงจร IPST-SE แผงวงจร IPST-SE แสดงขอความแจงหนาที่การทํางาน และแสดงคาอุณหภูมิในหนวยองศาเซลเซียส (Celsius) ดวยความละเอียดทศนิยม 3 ตําแหนง โดยที่คาของอุณหภูมิจะแสดงดวยตัวเลขสีเหลืองขนาดใหญ (3x)
176
#include <ipst.h> int val,i; float Temp; void setup() { glcdClear(); setTextSize(2); } void loop() { glcd(1,2,"Digital"); glcd(2,2,"THERMO"); glcd(3,3,"METER"); val=0; for (i=0;i<20;i++) { val = val+analog(3); } val = val/20; Temp = (float(val)*0.25) - 20.51 ; setTextSize(3); setTextColor(GLCD_YELLOW); glcd(3,1,"%f",Temp); setTextColor(GLCD_WHITE); setTextSize(2); glcd(6,2,"Celsius"); delay(500);
// ผนวกไฟลไลบรารีหลัก // กําหนดตัวแปรเก็บคาทีอ่ านไดจาก MCP9701 // ประกาศตัวแปรคาอุณหภูมืในแบบทศนิยม // เคลียรจอแสดงผล // เลือกขนาดตัวอักษร 2 เทา
// แสดงขอความเริ่มตน
// กําหนดรอบการอานคาจาก MCP9701 รวม 20 ครั้ง // อานคาจากอินพุต A3 // หาคาเฉลี่ยจากการอานคา 20 ครั้ง // แปลงคาเปนอุณหภูมิในหนวยองศาเซลเซียส // เปลียนขนาดตั ่ วอักษรเปน 3 เทา // เปลียนสีตัวอักษรเปนสีเหลือง // แสดงคาอุณหภูมิดวยความละเอียดทศนิยม 3 ตําแหนง // เปลียนสีตัวอักษรเปนสีขาว // เปลียนขนาดตั ่ วอักษรเปน 2 เทา // แสดงหนวยองศาเซลเซียส // หนวงเวลากอนเริ่มตนการอานคาในรอบใหม
} คําอธิบายโปรแกรม ในโปรแกรมนี้หัวใจสําคัญคือ การคํานวณเพื่อเปลียนข ่ อมูลดิจิตอลทีได ่ จากการแปลงแรงดันเอาตพุต ของไอซี MCP9701 เปนคาอุณหภูมิในหนวยองศาเซลเซียส กระบวนการจะเริ่มจากการอานและแปลงคาของ แรงดันไฟตรงทีจุ่ ดตอ A3 ซึงได ่ มาจากการทํางานของไอซี MCP9701 มาเก็บไวในตัวแปร val จากนันนํ ้ าขอมูล ทีได ่ มาคํานวณดวยสูตร Temp = (val x 0.25) - 20.51 จากนั้นนําคาอุณหภูมิไดมาแสดงผลดวยความละเอียด ทศนิยม 3 ตําแหนง
โปรแกรมที่ L7-1 : ไฟล MCP9701_Thermometer.pde โปรแกรมภาษา C/C++ สําหรับพัฒนากลอง สมองกล IPST-MicroBOX (SE) เปนเครื่องวัดอุณหภูมิระบบตัวเลขอยางงาย