คัมภีร์ การ ใช้ งาน ไมโคร คอนโทรลเลอร์ arduino pdf

คัมภีร์การใช้งาน ไมโครคอนโทรลเลอร์ Arduino โดย ผศ.ดร เดชฤทธ์ิ มณธี รรม สงวนลขิ สทิ ธ์ติ ามกฎหมาย โดย ผศ.ดร. เดชฤทธิ์ มณีธรรม หา้ มคดั ลอก ลอกเลียน ดดั แปลง ท�ำซำ้� จัดพิมพ์ หรือกระท�ำอนื่ ใด โดยวิธกี ารใดๆ ในรปู แบบใดๆ ไมว่ า่ ส่วนหน่งึ ส่วนใดของหนังสือเล่มนี้ เพอ่ื เผยแพรใ่ นสื่อทุกประเภท หรือเพื่อวตั ถปุ ระสงค์ใดๆ นอกจากจะไดร้ ับอนุญาต ขอ้ มลู ทางบรรณานกุ รมของหอสมดุ แหง่ ชาติ​ เดชฤทธ์ิ มณธี รรม, คมั ภรี ก์ ารใชง้ าน ไมโครคอนโทรลเลอร์ Arduino. —กรงุ เทพฯ : ซเี อด็ ยเู คชน่ั , 2560. 1. นวิ แมตกิ ส.์ I. ช่อื เรื่อง. 004.64 ISBN (e-book) : 978-616-08-3066-4 ผลิตและจัดจำ� หนายโดย 1858/87-90 ถนนบางนา-ตราด แขวงบางนา เขตบางนา กรงุ เทพฯ 10260 โทรศพั ท 0-2826-8000 หากมีคำ� แนะน�ำหรือตชิ ม สามารถตดิ ตอ่ ได้ท่ี [email protected]

คํานํา คัมภีรก ารใชง าน ไมโครคอนโทรลเลอร Arduino iii คาํ นาํ ปจจุบันไมโครคอนโทรลเลอร (Microcontroller) ไดถูกนํามาใชอยางกวางขวางในงานอุตสาหกรรม เพ่ือ ควบคุมเครื่องจักรและระบบการผลิตตางๆ เชน ควบคุมระบบในรถยนต (ECU) ควบคุมหุนยนตอุตสาหกรรม หรือ ในงานอุตสาหกรรมตางๆ เชน อุตสาหกรรมอิเล็กทรอนิกส อุตสาหกรรมเกษตร อุตสาหกรรมอาหาร ตลอดจน อุตสาหกรรมทางการแพทย เปนตน โดยทั่วไปวัตถุประสงคของการใชไมโครคอนโทรลเลอรในการควบคุมก็เพื่อ ความรวดเร็ว ถูกตอง และแมนยํา ของระบบการผลิต ตลอดจนทําใหเคร่ืองจักรทํางานไดประสิทธิภาพสูง และ สามารถลดจาํ นวนคนงานไดอีกมากทีเดียว หนังสือ “คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino” เลมนี้ มีจุดมุงหมายที่จะพัฒนาระบบ ควบคุมอัตโนมัติ (Automation Control System) ตลอดจนหุนยนตอุตสาหกรรม (Industrial Robotics) ใหมีการ แขงขันและพัฒนาใหทันกับโลกปจจุบัน ท่ีมีการแขงขันทางดานการตลาด และระบบเศรษฐกิจที่สูง ตลอดจนเพื่อ รองรับอุตสาหกรรม 4.0 (Industrial 4.0) โดยจะเริ่มตนอธิบายเกี่ยวกับไมโครคอนโทรลเลอร Arduino การควบคุม การทํางานของอินพุตและเอาตพุต การควบคุมมอเตอรอุตสาหกรรม เซ็นเซอรและระบบอัจฉริยะ ซอฟตแวร ประยุกตชวยในการทํางาน และจบดวยโครงงาน โดยหนังสือเลมนี้จึงเหมาะสําหรับนักศึกษาไดใชเรียน และ คนควาเพิ่มเติม ท้ังในสาขาวิศวกรรมไฟฟากําลัง วิศวกรรมอิเล็กทรอนิกส วิศวกรรมเมคคาทรอนิกส รวมถึง วศิ วกรโรงงาน ตลอดจนผสู นใจในงานควบคุมดวยไมโครคอนโทรลเลอร คุณงามความดีของหนังสือเลมนี้ ขอมอบใหกับ บิดา-มารดา ครู-อาจารย พี่ๆ นองๆ คนใกลชิด ที่ไดมี สวนรวมในการสนับสนุน และเปนกําลังใจจนหนังสือเลมนี้สําเร็จลุลวงไปดวยดี หากหนังสือเลมนี้มีความผิดพลาด ผูเขียนยินดนี อ มรบั คาํ แนะนํา คําติชม เพือ่ นาํ ไปพฒั นาและปรับปรงุ ใหดียิง่ ข้นึ ตอไป ดวยความเคารพยิง่ ผศ. ดร. เดชฤทธิ์ มณธี รรม e-mail: [email protected] หรือ [email protected]

สารบญั คมั ภรี ก ารใชง าน ไมโครคอนโทรลเลอร Arduino v สารบัญ หนา iii คํานํา ไมโครคอนโทรลเลอร Arduino 1 บทท่ี 1 3 1.1 ไมโครคอนโทรลเลอร Arduino 9 1.2 ไมโครโปรเซสเซอรก บั ไมโครคอนโทรลเลอร 10 10 1.2.1 หนว ยประมวลผลกลาง หรอื ซีพยี ู (Central Processing Unit; CPU) 11 1.2.2 หนวยความจาํ (Memory Unit) 12 1.2.3 ตวั แปรและการประกาศตวั แปร 13 1.3 โครงสรา งของภาษา C 15 1.3.1 ขัน้ ตอนและการทาํ งานของตัวดําเนนิ การในภาษา C 18 1.3.2 โครงสรางของภาษา C 19 1.3.3 คาํ สงั่ if แบบทางเดยี ว 21 1.3.4 คําสั่ง if แบบสองทาง 23 1.3.5 คําสัง่ if แบบหลายทาง 23 1.3.6 คาํ สั่ง for 24 1.3.7 คําสั่ง for แบบลปู ซอนลูป 25 1.3.8 คําสั่ง while 26 1.3.9 คําสง่ั while แบบลูปซอ นลูป 27 1.3.10 คําส่ัง do..while 29 1.3.11 คาํ สัง่ do..while แบบลปู ซอ นลูป 29 1.3.12 คาํ ส่ัง switch 31 1.3.13 อะเรย (Array) 1.4 โปรแกรม Arduino IDE

vi คัมภีรการใชง าน ไมโครคอนโทรลเลอร Arduino สารบญั บทที่ 2 การควบคุมการทาํ งานของอนิ พทุ และเอาตพ ทุ หนา บทท่ี 3 2.1 การเช่อื มตอ ไมโครคอนโทรลเลอร Arduino กบั หลอด LED บทที่ 4 2.2 การเชอ่ื มตอ ไมโครคอนโทรลเลอร Arduino กบั หลอด LED 7-segment 35 2.3 การเชื่อมตอ ไมโครคอนโทรลเลอร Arduino กับคยี สวิตซแบบแมทริกซ (Keypad) 37 2.4 การเชื่อมตอไมโครคอนโทรลเลอร Arduino กับโมดลู LCD 58 91 2.4.1 สว นประกอบของโมดลู LCD 101 2.4.2 การจดั Address ของ DD RAM เพอื่ เขยี นขอ มูลลงโมดูล LCD 101 2.4.3 การเขียนโปรแกรมควบคุมโมดลู LCD ในโหมด 8 บติ 102 2.4.4 การเขยี นโปรแกรมควบคมุ โมดูล LCD ในโหมด 4 บติ 103 สรปุ 105 คาํ ถามทายบท 115 116 การควบคุมมอเตอรอ ุตสาหกรรม 3.1 สเตป็ ปงมอเตอร (Stepping Motor) 117 119 3.1.1 การพันขดลวดของสเต็ปปงมอเตอร 120 3.1.2 การควบคุมการหมุนของสเตป็ ปง มอเตอร 122 3.1.3 การควบคุมการทํางานของสเตป็ ปง มอเตอร 124 3.2 ดีซีมอเตอร หรอื มอเตอรไ ฟฟากระแสตรง (Direct Current Motor; DC) 165 3.2.1 ชนดิ ของดีซีมอเตอร 165 สรปุ 182 คําถามทา ยบท 185 เซ็นเซอรแ ละระบบอัจฉรยิ ะ 187 4.1 อลั ตราโซนกิ เซ็นเซอร (Ultrasonic Sensor) 190 4.2 เซน็ เซอรวัดอุณหภูมิ (Temperature Sensor) 198 198 4.2.1 เทอรโ มคัปเปล (Thermocouple) 199 4.2.2 อารทีดเี ซน็ เซอร (RTD Sensor)

สารบัญ คัมภีรก ารใชงาน ไมโครคอนโทรลเลอร Arduino vii บทท่ี 5 4.3 บลูทธู โมดูลเซน็ เซอร (XBee Module Sensor) หนา 4.4 เซ็นเซอรไรสาย (Wireless Sensor) 204 4.5 เซน็ เซอรวัดมุม (Gyroscope Sensor) 207 4.6 การควบคมุ ดซี ีมอเตอรแ ละเอนโคเดอรดวยระบบ PID 221 228 4.6.1 การควบคมุ แบบอัตราสว น หรอื P-Control (Proportional Control) 229 4.6.2 การควบคุมแบบอนิ ทกิ รัล หรือ I-Control (Integral Control) 231 4.6.3 การควบคมุ แบบอนพุ นั ธ หรอื D-Control (Derivative Control) 234 4.6.4 การควบคมุ แบบ PI 235 4.6.5 การควบคุมแบบ PD 237 4.6.6 การควบคมุ แบบ PID 239 4.7 เพนดลู มั ผกผนั (Inverted Pendulum) 249 สรปุ 258 คําถามทา ยบท 259 ซอฟตแ วรป ระยกุ ตชว ยในการทาํ งาน 261 5.1 ซอฟตแวร LabVIEW กบั Arduino IDE 263 265 5.1.1 การโหลด Firmware จาก LINX Firmware Wizard 270 5.1.2 การโหลด Firmware จาก LIFA Base (Tookit) 271 5.1.3 การเขยี น LabVIEW 276 5.2 ซอฟตแ วรภาษา C# กบั Arduino IDE 277 5.2.1 การควบคมุ หลอดไฟฟา LED ใหติดและดบั (ON/OFF) ดวย C# 283 5.2.2 การควบคุมการหมุนของอารซเี ซอรโ วมอเตอร ดวย C# 290 5.3 ซอฟตแวรวิชวลเบสิก (Visual Basic) กบั Arduino IDE 291 5.3.1 การควบคุมหลอดไฟฟา LED ใหต ิดและดับ (ON/OFF) ดวย VB 297 5.3.2 การควบคมุ การหมนุ ของอารซเี ซอรโ วมอเตอร ดวย VB

viii คัมภรี ก ารใชงาน ไมโครคอนโทรลเลอร Arduino สารบญั สรุป 302 คําถามทายบท 303 305 บทท่ี 6 โครงงาน (Project) 309 6.1 โครงงาน: การสรา งหนุ ยนต SCARA Robot เคลื่อนทีด่ ว ยสเตป็ ปงมอเตอร 328 ควบคุมดวยไมโครคอนโทรลเลอร 6.2 ภาษา C : สาํ หรบั ควบคมุ SCARA Robot เคลอื่ นทด่ี วยสเต็ปปง มอเตอร 357 ควบคมุ ดว ยไมโครคอนโทรลเลอร บรรณานกุ รม 

สารบญั คัมภรี การใชงาน ไมโครคอนโทรลเลอร Arduino ix สารบัญรปู หนา 3 รปู ที่ 1.1 ไมโครคอนโทรลเลอร Arduino UNO 5 1.2 ไมโครคอนโทรลเลอร Arduino UNO 5 1.3 ไมโครคอนโทรลเลอร Arduino UNO SMD 5 1.4 ไมโครคอนโทรลเลอร Arduino Mega 2560 R3 6 1.5 ไมโครคอนโทรลเลอร Arduino Mega 2560 ADK 6 1.6 ไมโครคอนโทรลเลอร Arduino Leonardo 6 1.7 ไมโครคอนโทรลเลอร Arduino Mini 05 7 1.8 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 3.3V 7 1.9 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 5V 7 1.10 ไมโครคอนโทรลเลอร Arduino Ethernet with PoE module 8 1.11 ไมโครคอนโทรลเลอร Arduino Ethernet without PoE module 8 1.12 ไมโครคอนโทรลเลอร Arduino Due Duo 8 1.13 ไมโครคอนโทรลเลอร Arduino Micro 8 1.14 ไมโครคอนโทรลเลอร Arduino Nano 9 1.15 โครงสรางพืน้ ฐานของไมโครโปรเซสเซอร 9 1.16 โครงสรางพนื้ ฐานของไมโครคอนโทรลเลอร 18 1.17 แสดงคําสง่ั if แบบทางเดียว 20 1.18 แสดงคาํ สั่ง if แบบสองทาง 24 1.19 แสดงคําสงั่ while 27 1.20 แสดงคําสง่ั do..while 31 1.21 สัญลักษณโ ปรแกรม Arduino IDE

x คัมภีรการใชง าน ไมโครคอนโทรลเลอร Arduino สารบญั รูปท่ี 2.1 การตอ หลอดวงจรแบบ Active Low และ Active High 37 2.2 การตอหลอดไฟ LED และส่งั ผานปมุ กด (Pushbutton) 38 2.3 การตอ หลอดไฟ LED โดยใชไอซบี ฟั เฟอร (74HC595) เปน ตวั ชวยขบั กระแส 39 2.4 การตอหลอดไฟ LED ใหติดและดับ 42 2.5 การตอ หลอดไฟ LED ใหแ สดง Shift Bit 45 2.6 การควบคุมหลอดไฟ LED ดว ย Pushbutton 49 2.7 การควบคุมหลอดไฟ LED ดวย Pushbutton แบบ Toggle 53 2.8 การควบคุมหลอดไฟ LED ดว ย Pushbutton แบบ Shift Bit 57 2.9 การตอ หลอด LED 7–Segment โดยใชไ อซีบัฟเฟอร (74LS245) 58 2.10 แสดงการตอหลอด LED 7–Segment 59 2.11 แสดงการตอหลอด LED 7-Segment แบบแคโทดรว ม 66 2.12 แสดงการตอหลอด LED 7-Segment แบบแอโนดรวม 70 2.13 แสดงการตอ หลอด LED 7-Segment แบบแคโทดรว ม 74 2.14 แสดงการตอ หลอด LED 7-Segment แบบแอโนดรว ม 78 ใหท ํางาน Count Up & Count Down 2.15 แสดงการตอหลอด LED 7-Segment 2 หลัก แบบแอโนดรวม 83 2.16 แสดงการตอ ปุมกด 2 ปุม เพอื่ ควบคมุ หลอดไฟ LED 7-Segment ใหนับคา เพิ่มขน้ึ และนบั ลง 90 2.17 คยี ส วิตชแบบแมทรกิ ซ 43 91 2.18 แสดงรหัสประจาํ คียของ Keypad 93 2.19 แสดงการตอ LED 7-Segment ควบคุมดวย Keypad 100 2.20 โมดลู LCD ขนาด 161 บรรทดั 101 2.21 แสดงวงจรการตอขาสัญญาณโมดลู LCD ในโหมด 4 บติ (Module 16x2) 105 2.22 แสดงวงจรการตอขาสญั ญาณโมดลู LCD ในโหมด 4 บิต(Module 20x4) 105 2.23 แสดงตวั อกั ษรแบบกะพริบออกทางโมดูล LCD 109 2.24 แสดงตัวอักษรและตัวเลขออกทางโมดลู LCD 111 2.25 แสดงผลออกทางโมดูล LCD ดว ยการกด Keypad 114

สารบญั คัมภรี การใชงาน ไมโครคอนโทรลเลอร Arduino xi รปู ที่ 3.1 แสดงสเต็ปปง มอเตอรและโครงสรา งภายใน 120 3.2 แสดงการพันขดลวดและวงจรสวิตชิ่งแบบไบโพลาร 121 3.3 แสดงการพันขดลวดและการควบคุมวงจรสวิตชิง่ แบบยนู โิ พลาร 121 3.4 แสดงการควบคุมสเต็ปปงมอเตอร แบบฟูล-สเต็ป 1 เฟส 122 3.5 แสดงการควบคมุ สเต็ปปงมอเตอร แบบฟูล-สเตป็ 2 เฟส 123 3.6 แสดงการควบคุมสเต็ปปง มอเตอร แบบฮาลฟสเตป็ 124 3.7 แสดงไดอะแกรมการควบคมุ สเตป็ ปง มอเตอร 124 3.8 แสดงชุดไมโครคอนโทรลเลอรควบคมุ สเตป็ ปงมอเตอร 125 3.9 สเตป็ ปง มอเตอรห มนุ ทศิ ทางเดยี ว 128 3.10 สเต็ปปง มอเตอรห มนุ ดวยการกด Pushbutton 131 3.11 สเตป็ ปงมอเตอรห มนุ ดว ยการกด Pushbutton 2 ปมุ กด 135 3.12 สเต็ปปง มอเตอรห มนุ กลบั ทิศทางดวย Limit Switch 139 3.13 สเตป็ ปงมอเตอรห มนุ กลับทิศทางดวย Keypad (แบบที่ 1) 145 3.14 สเตป็ ปง มอเตอรห มุนกลับทศิ ทางดว ย Keypad (แบบท่ี 2) 154 3.15 สเต็ปปงมอเตอรห มุนกลับทศิ ทางดว ย Keypad และแสดงผลออกทาง LCD 164 3.16 โครงสรา งของดีซมี อเตอร 165 3.17 ดซี มี อเตอรแ บบอนุกรม 166 3.18 ดซี ีมอเตอรแบบขนาน 167 3.19 ดีซีมอเตอรแบบผสม 167 3.20 ดีซีมอเตอรเคลอื่ นท่ขี วา-ซา ย ดว ยการกด Pushbutton (A & B) 170 3.21 ดีซีมอเตอรและสเต็ปปงมอเตอรห มุนและหยดุ ดว ยการกดปุมจาก Keypad และแสดงผล 175 ออกทหี่ นาจอแสดงผล LCD 3.22 เซอรโวมอเตอรหมุนตามองศาทก่ี ําหนด และแสดงผลออกทหี่ นาจอแสดงผลออกทห่ี นา จอ 178 แสดงผล LCD 3.23 เซอรโวมอเตอรหมนุ ตามองศาทีก่ ําหนด ดวยการปรับคาจากโพเทนชโิ อมิเตอร และแสดงผล 181 ออกท่ีหนา จอแสดงผล LCD

xii คมั ภรี ก ารใชงาน ไมโครคอนโทรลเลอร Arduino สารบญั 3.24 สเตป็ ปงมอเตอร 182 3.25 ดีซมี อเตอร 183 3.26 เซอรโวมอเตอร 183 รูปท่ี 4.1 เซ็นเซอรช นิดตางๆ ที่สามารถควบคมุ ดว ย Arduino UNO 189 4.2 อลั ตราโซนกิ เซ็นเซอร 191 4.3 Timing Diagram 191 4.4 การควบคุมอลั ตราโซนิกเซน็ เซอร (แบบท่ี 1) 194 4.5 การควบคุมอัลตราโซนิกเซ็นเซอร (แบบท่ี 2) 197 4.6 เทอรโ มคปั เปล (Thermocouple) 198 4.7 อารท ีดีเซน็ เซอร (RTD Sensor) 199 4.8 การตอ Arduino Uno กบั เซ็นเซอรว ัดอุณหภมู ิ 200 4.9 DHT11 (Temperature Sensor) 200 4.10 การควบคมุ เซ็นเซอรว ดั อุณหภมู ิ 203 4.11 บลทู ธู โมดลู เซ็นเซอร (XBee Module Sensor) 204 4.12 แสดงผลทาง Serial Monitor 206 4.13 เซน็ เซอรไ รส าย (Wireless Sensor) 207 4.14 ไมโครคอนโทรลเลอรตอกบั เซ็นเซอรไ รสาย 207 4.15 ขาโมดลู nRF24L01 208 4.16 เซ็นเซอรวดั มมุ รนุ MPU6050 221 4.17 ไมโครคอนโทรลเลอรต อกบั เซ็นเซอรวัดมุม 221 4.18 แสดงผลการวัดมมุ เอยี งทงั้ 3 แกน ของเซ็นเซอรวดั มมุ 224 4.19 แสดงการทิศทางการหมุนของอารซ ีเซอรโว 227 4.20 แสดงแผนภาพการควบคุมระบบปด แบบ PID 228 4.21 แสดงคาความผดิ พลาด 229 4.22 แสดงการควบคุมความเรว็ ดว ยการควบคมุ แบบอัตราสวน 230

สารบญั คัมภรี การใชง าน ไมโครคอนโทรลเลอร Arduino xiii 4.23 แสดงความสัมพันธร ะหวา งสัญญาณเอาตพ ตุ กบั เกนของตัวควบคมุ แบบอัตราสว น 231 4.24 แสดงการควบคุมความเร็วดว ยการควบคุมแบบอนิ ทกิ รัล 232 4.25 แสดงความสัมพันธร ะหวางสัญญาณเอาตพ ทุ กับเกนของตัวควบคมุ แบบอินทกิ รลั 233 4.26 แสดงความสัมพันธข องสญั ญาณการควบคุมแบบ PI 236 4.27 แสดงความสมั พนั ธข องสัญญาณการควบคมุ แบบ PD 238 4.28 แสดงความสมั พนั ธของสญั ญาณการควบคุมแบบ PID 240 4.29 แสดงการตาํ แหนง ของดีซมี อเตอรแ ละเอนโคดเดอร ดวยการควบคุมแบบ PID 247 4.30 แสดงการตอ อปุ กรณ Arduino, DC Motor, Encoder, R-Variable 247 4.31 การควบคมุ ตําแหนง ของดซี ีมอเตอรแ ละเอนโคด เดอร ดวยการควบคมุ แบบ PID 248 4.32 การประยกุ ตใ ชง านเพนดูลัมผกผัน 249 4.33 เพนดูลัมผกผนั 250 รปู ที่ 5.1 แสดงซอฟตแ วร LabVIEW 2013 264 5.2 การประยกุ ตใชงานอารซ ีเซอรโ วมอเตอร 284 รูปที่ 6.1 โครงงานนกั ศึกษา 308 6.2 ตวั อยา งอุปกรณท ่ีใชใ นระบบ 310 6.3 ขอตอที่ 1 (IAI Linear Actuator) 312 6.4 ขอ ตอที่ 4 (IAI Linear Actuator) 313 6.5 ขอ ตอที่ 2 สเตป็ ปง มอเตอร Nema34 313 6.6 ขอตอท่ี 3 สเต็ปปง มอเตอร Nema23 314 6.7 แกนท1่ี (Link 1) 315 6.8 แกนที่ 2 (Link 2) 315 6.9 แกนท่ี 3 (Link 3) 315 6.10 แกนท่ี 4 (Link 4) 316 6.11 โครงสรางทางกลของหนุ ยนต SCARA (Mechanical Structure of SCARA Robot) 316 6.12 ภาพ 2 มิติของหนุ ยนต SCARA 317

xiv คมั ภีรก ารใชงาน ไมโครคอนโทรลเลอร Arduino สารบัญ 6.13 ภาพรวมของระบบ 318 6.14 วงจรชุดประมวลผลและสัง่ งาน 319 6.15 วงจรชุดบอรด ควบคุมตาํ แหนงแกนหนุ ยนตท่ี 1 319 6.16 วงจรชุดบอรดควบคุมตําแหนงแกนหุนยนตท ี่ 2 320 6.17 วงจรชุดบอรด ควบคมุ ตาํ แหนงแกนหนุ ยนตที่ 3 และ 4 320 6.18 วงจรไดรฟขบั เซอรโ วมอเตอร 321 6.19 วงจรไดรฟขับสเตป็ ปงมอเตอร 1 321 6.20 วงจรไดรฟข ับสเตป็ ปง มอเตอร 2 322 6.21 วงจรไดรฟข บั สเตป็ ปง มอเตอร 3 322 6.22 แสดงวงจรควบคุม SCARA Robot ดว ยไมโครคอนโทรลเลอร Arduino 356 

สารบญั คมั ภีรการใชง าน ไมโครคอนโทรลเลอร Arduino xv สารบญั ตาราง หนา 4 ตารางท่ี 1.1 ไมโครคอนโทรลเลอร Arduino 11 1.2 ประเภทขอ มลู และขนาดตัวแปร 12 1.3 ตัวดําเนินการเลขคณติ ในภาษา C 14 1.4 ตัวดําเนินการในภาษา C 60 ตารางท่ี 2.1 แสดงผลคา ของพอรต แบบแคโทดรว ม 60 2.2 แสดงผลคา ของพอรตแบบแอโนดรวม 92 2.3 แสดงผลการสแกน Column ท่ี 1 92 2.4 แสดงผลการสแกน Column ท่ี 2 92 2.5 แสดงผลการสแกน Column ที่ 3 102 2.6 ขาโมดลู LCD ขนาด 16 ตวั อกั ษร 1 บรรทัด 106 2.7 แสดงชดุ คาํ สั่งควบคุมการทาํ งานของโมดลู LCD 208 ตารางที่ 4.1 ขาโมดลู nRF24L01 ตอ กบั Arduino UNO กบั Arduino Mega 222 4.2 ขาโมดูล MPU6050 ตอ กบั Arduino UNO กบั Arduino Mega 234 4.3 คณุ สมบัติของตวั ควบคุมแบบ PI, PD, PID 234 4.4 การเปรยี บเทยี บขอ ดขี อเสียของตวั ควบคุมแบบ P, I, D 323 ตารางที่ 6.1 พารามเิ ตอรของเดนาวติ -ฮารเทนเบริ ก (D-H Parameters) 

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 1 ไมโครคอนโทรลเลอร์1.1 ไมโครคอนโทรลเลอร์ Arduino 1 Arduino1.2 ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ 1.3 โครงสร้างของภาษา C 1.4 โปรแกรม Ard uiไnมoโคIDรEคอนโทรลเลอร์ Arduino ไมโครโปรเซสเซอรก์ บั ไมโครคอนโทรลเลอร์ โครงสร้างของภาษา C โปรแกรม Arduino IDE

2 คมั ภีรก ารใชง าน ไมโครคอนโทรลเลอร Arduino บทท่ี 1

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 3 ป จ จ ุบ ัน เ ค รื ่อ ง ใ ช ไ ฟ ฟ า อ ุป ก ร ณ อ ิเ ล ็ก ท ร อ น ิก ส ต ล อ ด จ น ร ะ บ บ โ ร ง ง า น อ ุต ส า ห ก ร ร ม จ ะ ใ ช ไมโครคอนโทรลเลอรซึ่งติดตั้งอยูภายในเปนตัวควบคุมเกือบทั้งหมด ทําใหไมโครคอนโทรลเลอรกลายเปนอีก หนึ่งอุปกรณที่ผูผลิตสารกึ่งตัวนําหลายๆ บริษัทใหความสนใจ และมีการแขงขันสูงมาก อุปกรณที่ใช ไมโครคอนโทรลเลอรควบคุมมีมากมายหลายชนิด เชน อุปกรณเครื่องใชภายในบาน สัญญาณไฟจราจร รถยนต ตลอดจนระบบอุตสาหกรรม PLC, CNC, Robot เปนตน 1.1 ไมโครคอนโทรลเลอร์ Arduino บอรดไมโครคอนโทรลเลอร Arduino หรือ อาดูอิโน ถือวาเปนบอรดไมโครคอนโทรลเลอรยอดนิยม และ ใชกันอยางแพรหลาย ทส่ี ามารถนาํ ไปพฒั นาโปรเจก็ ต (Project) ไดหลากหลาย เรียนรูไดงาย และเหมาะสําหรับผู เริ่มตน ไมโครคอนโทรลเลอร Auduino จะใชชิป AVR เปนหลักในไมโครคอนโทรลเลอร Auduino ทุกรุน เนื่องจาก ไมโครคอนโทรเลอรของตระกูล AVR น้ันมีความทันสมัย ในชิปในบางตัวสามารถเชื่อมตอผาน USB ไดโดยตรง สามารถใชกับคอมพิวเตอรไดเปนอยางดี และในไมโครคอนโทรเลอรตระกูล AVR ยังมีสวนของโปรแกรมพิเศษที่ เรียกวา บูตโหลดเดอร (Boot loader) โดยจะเปนสวนโปรแกรมท่ีจะถูกเรียกข้ึนมากอนการเรียกโปรแกรมปกติ ทํา ใหสามารถเขียนสั่งการทํางานไดกอนการเรียกโปรแกรมปกติ ทําใหไมโครคอนโทรลเลอร Arduino นั้นอาศัยสวน โปรแกรมพิเศษนี้ในการทําใหช ปิ สามารถโปรแกรมผานพอรตอนุกรมชนิด UART ได จึงทําใหการเขียนโปรแกรมลง ไปในชปิ ใชเ พียง USB ติดตอ กับ UART ก็สามารถทาํ งานได รูปที่ 1.1 ไมโครคอนโทรลเลอร Arduino UNO

4 คัมภรี การใชง าน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 ไมโครคอนโทรลเลอร Arduino UNO เปนบอรดไมโครคอนโทรเลอรตระกูล AVR โดยมีขาในการ ทํางานทั้งหมด 14 ขา คือ Pin 0 – 13 โดยแตละขามีการทํางานที่แตกตางกันออกไป เชน ขาสัญญาณที่ติดตอ ทางพอรตอนุกรม (Serial Port) คือ Pin 0, 1 เปนขา Rx, Tx สวนขาสัญญาณที่ใชติดตอสัญญาณอินพุตและ เอาตพุต (Input and Output) คือ Pin 2,3,4,5,6,7,8,9,10,11,12,13 และบางขาสัญญาณยังทําหนาท่ี นอกเหนือจากขาสัญญาณอินพุตและเอาตพุต เชน Pin 3,5,6,9,10,11 ซึ่งสามารถทําหนาที่เปนขาสัญญาณ พัลสวิดทมอดูเลชั่น (Pulse Width Modulation) หรือที่เรียกกันทั่วไปคือ PWM และยังมีขาที่รับสัญญาณ แอนะล็อกอีก 6 ขา คือ Pin A0, A1, A2, A3, A4 และ A5 อีกดวย ตารางท่ี 1.1 ไมโครคอนโทรลเลอร Arduino บอร์ด Arduino ตวั ประมวลผล หนว่ ยความจาํ ขอ้ มูล อนิ พุต/เอาต์พุต แอนะลอ็ กอนิ พุต/ (Processor) (Data Memory) (I/O Port) เอาต์พุต (Analog I/O Port) Arduino UNO 16 MHz 2 KB SRAM 14 6 Input, 0 Output ATmaga328 32 KB Flash Arduino DUE 84 MHz 96 KB SRAM 54 12 Input, 2 Output AT91SAM3X8E 512 KB Flash Arduino Maga 16 MHz 8 KB SRAM 54 16 Input, 0 Output Arduino ATmaga2560 256 KB Flash 20 12 Input, 0 Output Leonardo 16 MHz 2.5 KB SRAM ATmaga32u4 32 KB Flash

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 5 รปู ท่ี 1.2 ไมโครคอนโทรลเลอร Arduino UNO R3 รูปท่ี 1.3 ไมโครคอนโทรลเลอร Arduino UNO SMD รูปท่ี 1.4 ไมโครคอนโทรลเลอร Arduino Mega 2560 R3

6 คมั ภรี การใชง าน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 รูปท่ี 1.5 ไมโครคอนโทรลเลอร Arduino Mega ADK รูปท่ี 1.6 ไมโครคอนโทรลเลอร Arduino Leonardo รูปท่ี 1.7 ไมโครคอนโทรลเลอร Arduino Mini 05

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 7 รปู ที่ 1.8 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 3.3V รูปท่ี 1.9 ไมโครคอนโทรลเลอร Arduino Pro Mini 328 5V รูปท่ี 1.10 ไมโครคอนโทรลเลอร Arduino Ethernet with PoE module

8 คมั ภรี การใชงาน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 รูปที่ 1.11 ไมโครคอนโทรลเลอร Arduino Ethernet without PoE module รปู ท่ี 1.12 ไมโครคอนโทรลเลอร Arduino Due Duo รูปที่ 1.13 ไมโครคอนโทรลเลอร Arduino Micro รปู ท่ี 1.14 ไมโครคอนโทรลเลอร Arduino Nano

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 9 1.2 ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ ไมโครโปรเซสเซอรที่ใชอยูในปจจุบัน เชน ซีพียูเบอร Z80 เปนตน จะไมมีหนวยความจํา RAM, ROM และ Port อยูในตัวชิป ทําใหตองตอหนวยความจําโปรแกรมภายนอกเพิ่ม และตองใช ICs ขยายพอรตเพิ่มเติม ขอดีคือ สามารถเพ่ิมหนวยความจําไดตลอด สวนไมโครคอนโทรลเลอรจะมีวงจรพื้นฐานประกอบอยูภายในชิป เชน หนวยความจาํ RAM, ROM และ I/O Port ดังน้ัน ในระบบไมโครคอนโทรลเลอรจึงมีขนาดเล็กกวา และราคาตา่ํ กวา ระบบไมโครโปรเซสเซอร รปู ที่ 1.15 โครงสรางพื้นฐานของไมโครโปรเซสเซอร รปู ท่ี 1.16 โครงสรา งพื้นฐานของไมโครคอนโทรลเลอร

10 คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 1.2.1 หน่วยประมวลผลกลาง หรือซีพยี ู (Central Processing Unit; CPU) ซีพียูเปรียบไดกับสมองของคนเรานั่นเอง เพราะการคํานวณตางๆ เกิดขึ้นที่นี่ ซีพียูประกอบดวยวงจร ตางๆ หลายวงจร เชน วงจรควบคุมเวลาและระบบการทํางาน (Timing and Control Unit) ซึ่งจะทําหนาที่ จัดการทั้งหมดของวงจรทั้งประมวลผลและควบคุมตามคําสั่งที่ไดรับ การคํานวณทางคณิตศาสตรและลอจิก (ALU ; Arithmetic and Logic Unit) โดยจะทําหนาท่ีคาํ นวณและประมวลผลทางคณิตศาสตรและระบบลอจิก วงจรถอดรหัสคําสั่ง (Instruction Decoder) จะทําหนาที่แปลงคําสั่งทั้งหมดใหเปนภาษาเครื่อง (Machine Language) วงจรควบคุมการทํางานของ Counter (Program Counter) วงจรควบคุมสัญญาณนาฬิกา (Oscillator) ตลอดจนหนวยความจําภายใน Register, Adder, Subtraction, Buffer และอื่นๆ ที่ใชในการเก็บ ขอมูลและการประมวลของซีพียู เปนตน 1.2.2 หน่วยความจาํ (Memory Unit) ในการเขียนโปรแกรมดวยภาษา C ใหกับไมโครคอนโทรลเลอรนั้นตองคํานึงถึงชนิดของหนวยความจํา และวิธีการเขาถึงดวย ซึ่งตางจากการเขียนบนเครื่องคอมพิวเตอร (PC ; Personal Computer) ที่สนใจเพียง ชนิดของตัวแปรวาจะใชเก็บขอมูลประเภทใด สําหรับหนวยความจําในระบบไมโครคอนโทรลเลอร PIC นั้น จะมี หนวยความจําในการใชงาน 3 ประเภท ดังน้ี  หน่วยความจาํ โปรแกรมแบบแฟลช (Flash Program Memory) ปจจบุ นั หนวยความจาํ แบบแฟลช (Flash ROM) ไดถกู นํามาใชกับไมโครคอนโทรลเลอรหลายบริษัท หลายรุน โดยมีคุณสมบัติในการเขียนโปรแกรมและลบโปรแกรมไดมากกวา 100,000 คร้ัง ซ่ึงการ ทํางานจะมีความเร็วสงู มาก เหมาะกับการพฒั นางานท่มี ีขนาดใหญ  หน่วยความจาํ โปรแกรม (Data Memory RAM) หนวยความจําสวนนี้มีไวใชเก็บขอมูลขณะประมวลผลโปรแกรม สามารถอานและเขียนขอมูลได ขณะมไี ฟเล้ียง แตเมอ่ื ไมจา ยไฟเลยี้ งขอ มูลตางๆ จะสลายไป หากหนวยความจําสวนนี้ไมพอใชงาน จะตองตอหนวยความจําแรมภายนอกเพ่ิม (External RAM หรือ Data Memory) ปจจุบันเทคโนโลยี กาวหนา ขนึ้ มาก ชิปบางตัวจะมีการบรรจหุ นวยความจาํ ประเภท Data Memory เขา ไปในชปิ เลย

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 11  หน่วยความจาํ แบบอีอีพรอม (EEPROM Data Memory) หนว ยความจําแบบ EEPROM เปน หนวยความจาํ ที่สามารถเขียนและลบโปรแกรมดวยกระแสไฟฟา ในหนวยความจําถาวรของ PROM (Programmable Read Only Memory) โดยภายในมีการ พัฒนาให RAM (Random Access Memory) ท่ีมีหนวยความจําช่ัวคราวใหเก็บขอมูลไดถาวรแบบ หนวยความจํา ROM (Read Only Memory) โดยสามารถเขยี นและลบโปรแกรมจํานวนหลายๆ คร้ัง ได 1.2.3 ตัวแปรและการประกาศตัวแปร หนวยความจําแบบตัวแปร (Variable) คือ การใชแทนตัวเลข ตัวอักษร หรือขอความ เพื่อใชนํามา ประมวลผลตามคําสงั่ ตา งๆ ในโปรแกรม การประกาศตัวแปร (Declaration) คือ การบอกใหคอมไพเลอรรูตัวแปรที่ใชปนชนิดอะไร ชื่ออะไร และเก็บไวท สี่ ว นไหนของหนว ยความจาํ ตารางท่ี 1.2 ประเภทขอมูลและขนาดตวั แปร ประเภทขอ้ มูล ขนาด ค่าทเ่ีกบ็ ได้ char 8 -128 ถงึ +127 signed char 8 -128 ถึง +127 unsigned char 8 0 ถึง 255 int 16 -32768 ถงึ +32767 signed int 16 -32768 ถงึ +32767 unsigned int 16 0 ถงึ 65535 short int 16 -32768 ถึง +32767 signed short int 16 -32768 ถงึ +32767 unsigned short int 16 0 ถงึ 65535 long int 32 -2147483648 ถึง +2147483647 float 32 3.4E-38 ถงึ 3.4E+38 double 64 1.7E-308 ถึง 1.7E+308

12 คัมภรี การใชงาน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 ประเภทของขอ มูลทีใ่ ชในการเก็บคา เลขจํานวนเตม็ มคี วามหมายดังน้ี  Signed หมายถงึ ใชเ กบ็ คา ตวั เลขจํานวนเตม็ ทั้งบวกและลบ เชน - Signed char เก็บคา ขอ มลู 8 บิต คอื -128 ถึง +127 - Signed int เก็บคาขอ มูล 16 บติ คอื -32768 ถึง +32767  Unsigned หมายถงึ ใชเ กบ็ คา ตัวเลขจํานวนเต็มเฉพาะคาบวกเทานั้น  Short หมายถึง ใชเกบ็ คา ตัวเลขจาํ นวนเต็มที่มคี า นอยกวา int  Long หมายถึง ใชเก็บคา ตัวเลขจํานวนเต็มที่มคี ามากกวา int ถงึ 2 เทา  Int หมายถึง ใชเก็บคาตัวเลขจํานวนเต็มท้ังบวกและลบ คือ เก็บคาขอมูล 16 บิต คือ -32768 ถงึ +32767 1.3 โครงสร้างของภาษา C เนื้อหาในสวนน้ีจะเปนการทบทวนภาษา C เฉพาะสวนท่ีจําเปนตองใชเทาน้ัน ไมไดกลาวถึงทุก ความสามารถของภาษา C แตนา จะเพียงพอสาํ หรับการพัฒนางานดานไมโครคอนโทรลเลอร Arduino สําหรับผู ทเ่ี ขยี นภาษา C ไดแ ลว กส็ ามารถขามบทนีไ้ ปไดเ ลย ตารางที่ 1.3 ตัวดาํ เนนิ การเลขคณิตในภาษา C ตัวดาํ เนินการ ความหมาย ตัวอย่าง - การลบ X–Y + การบวก X+Y * การคณู X*Y / การหาร X/Y % การหารจะเอาเฉพาะเศษไว 8 % 5 = เศษ 3 เปน ผลลัพธ -- การลดคา คร้ังละ 1 X -- หรอื -- X เหมอื นกับ X = X - 1 ++ การเพ่มิ คาครง้ั ละ 1 X ++ หรือ ++ Y เหมอื นกบั Y = Y+1

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 13  ตัวอย่างท่ี 1.1 แสดงการใชตัวดาํ เนินการ การประเมนิ ผลตัวดาํ เนินการ y=x+z ตัวอย่าง y=x+z+ 1. y= x + (z++); y=y+z 2. y = x + (++z); y=y+z 3. y+ = z; y = -5 4. y+ = (z++); y=y*5 5. y- = 5; y=y*5*z 6. y* = 5; y=y/z 7. y* = 5 * (z++); y=y%5 8. y/ = z; 9. y% = 5; 1.3.1 ขั้นตอนการทาํ งานของตัวดาํ เนินการในภาษา C ในบางคร้ังนิพจนประกอบดวยตัวดําเนินการมากมาย ทําใหเกิดความยุงยากในการพิจารณาขั้นตอนการ ทํางานของตัวดาํ เนนิ การ ภาษา C จึงไดต้ังกฎเก่ียวกบั ลําดับการทาํ งานกอ นหลงั ของตัวดําเนนิ การ (Operator) ตัวดาํ เนินการ ลาํ ดับที่ () 1 ++, -- 2 */% 3 +- 4 +=, -=, *=, /=, %= 5

14 คมั ภรี การใชง าน ไมโครคอนโทรลเลอร Arduino บทที่ 1  ตัวอย่างท่ี 1.2 แสดงลาํ ดบั การทาํ งานของตวั ดําเนนิ การ ตัวอย่าง ความหมาย ตัวดาํ เนินการ * อยูล ําดบั สูงกวา + จงึ ตอ งคณู ตัวเลขกอ น (2*3) 1+2*3 แลว จึงบวกเลข 1 ตามลาํ ดับ = 1+6 ตวั ดําเนนิ การ / อยลู ําดบั สูงกวา + และ – จึงใหท าํ จากซา ยไปขวา 6/3+2-1 = 2+2+1 ตวั ดําเนินการ / และ * อยลู ําดบั เดียวกัน โดยอยูสูงกวา + และ – =3 จึงใหทาํ จากซายมือกอ นคือ (/, *) และ (+, -) ตามลําดับ 6/3+2*3-4 = 2+6-4 ตารางที่ 1.4 ตัวดําเนินการในภาษา C ตัวดาํ เนินการ (Operator) ความหมาย (Description) () Function call [] array element . structure member -> pointer to a structure member ! Logical ~ one’s complement - Minus ++ Increment -- Decrement & address of = contents of * Multiply / Divide % Modulus + Add

บทท่ี 1 ไมโครคอนโทรลเลอร์ Arduino 15 ตัวดาํ เนินการ (Operator) ความหมาย (Description) << (left shift) >> (right Shift) < less than <= less than or equal to > greater than >= greater than or equal to == (equality) != (not equal) & bit-by-bit AND ^ bit-by-bit XOR ! bit-by-bit-OR && logical AND II logical OR ?: Conditional = Assignment compound assignment * = /= %= += compound assignment -= <<= >>= compound assignment &= ^= != comma operator , 1.3.2 โครงสร้างของภาษา C  คอมไพเลอร์ไดเร็คทีฟ (Compiler Directive) เป็ นส่วนของโปรแกรมท่ีบอกให้คอมไพเลอร์รวมไฟล์ต่างๆ ที่กําหนดไว้ในส่วนนีเ้ ข้ากับโปรแกรมที่ เขียนขนึ ้ โดยมีรูปแบบดงั นี ้

16 คมั ภรี ก ารใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1 #include <ช่อื ไฟล. h> เชน #include <Servo.h> #include<Keypad.h> #include<LiquidCrystal.h>  ตัวโปรแกรม (Body) เปน สว นท่ีผูใชตอ งเขยี นขึ้นเอง ประกอบดวยคําสั่งตางๆ หรอื ฟง กช นั ตา งๆ รวมกันเปนโปรแกรม โดย อยางนอยตอ งมฟี งกชนั void setup() , void loop () ในโปรแกรมการทาํ งาน void setup () { คําสั่งตา งๆ ทําหนาทเ่ี ปน เหมอื น โปรแกรมยอ ย โดยจะถูกเรยี กใช เพียงครั้งเดียวตอนโปรแกรมเริ่มทาํ งาน } void loop () { คําสั่งตางๆ ทาํ หนา ทเี่ ปนเหมอื น โปรแกรมหลกั โดยจะถกู เรียกใช งานซํ้าๆ ตามเงอื่ นไขทเี่ ขียนไวใ นโปรแกรม }  ส่วนคาํ อธิบายโปรแกรม (Comment Line) สวนน้ใี ชอ ธิบายโปรแกรมเพ่อื ใหผ ูท่ีอา นโปรแกรมเขา ใจโปรแกรมไดงายขึ้น ดังตัวอยา งตอ ไปนี้ /* ขอความอธบิ ายโปรแกรม */ เชน digitalWrite (LED1, HIGH) /*กาํ หนดคา LED1 ใหมีสถานะเปน 1 */ หรือ digitalWrite (LED1, LOW) // กาํ หนดคา LED1 ใหม สี ถานะเปน 0

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 17  ตัวอย่างท่ี 1.3 แสดงโปรแกรมภาษา C และคาํ อธบิ ายโปรแกรม 1. //========Program Servo Motor ======== 2. #include <Servo.h> //เรียกไลบรารี servo.h 3. #include <LiquidCrystal.h> //เรียกไลบรารี liquidCrystal.h 4. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 5. Servo setservo; 6. int pin = 5; 7. int val; 8. void setup() 9. { 10. lcd.begin(16, 2); //ใช lcd ขนาด 16 ตัวอักษร 2 แถว 11. lcd.print(\"SERVO MOTOR\"); 12. setservo.attach(9); 13. } 14. void loop() 15. { 16. lcd.display(); //ให lcd แสดงผล 17. lcd.print(\"\"); 18. delay(100); //หนว งเวลา 100 ms 19. val = analogRead(pin); 20. val = map(val, 0, 1023, 0, 179); //สเกลคา 10 บิตใหไ ดคา มุมแลว เก็บคา ไวท่ี val 21. setservo.write(val); 22. delay(100); 23. lcd.noDisplay(); // lcd ไมแ สดงผล 24. delay(100);25. }

18 คัมภรี ก ารใชง าน ไมโครคอนโทรลเลอร Arduino บทที่ 1 1.3.3 คาํ ส่ัง if แบบทางเดียว ใชตรวจสอบนิพจนเงื่อนไข ถาเงื่อนไขเปนจริง หรือกลาวอีกนัยหนึ่งวาเง่ือนไขมีคาเปน 1 คอมพิวเตอรทํา คําส่ังหลงั นิพจนเงอ่ื นไขทันที ตรวจสอบเงื่อนไข เทจ็ จริง คําสงั่ ภายใต IF คําสั่งถัดไป รูปท่ี 1.17 แสดงคําส่ัง if แบบทางเดยี ว รปู แบบ if (นพิ จนเงอื่ นไข) คาํ สัง่ ; เชน if (x < y) printf (“%f < %f \\ n”, x, y); กรณีทีต่ อ งการทาํ งานตามเงอ่ื นไขครั้งละหลายๆ คําสง่ั มีรูปแบบการเขยี นโปรแกรม ดังน้ี รปู แบบ if (นพิ จนเงอื่ นไข) { คําส่งั ท่ี 1 ;

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 19 คาํ สั่งท่ี 2 ; - - คําสง่ั ที่ n ; } เชน if(x<y) { clrscr(); gotoxy(20, 5); printf(“%f<%f\\n”, x, y); } 1.3.4 คาํ สั่ง if แบบสองทาง ใชกําหนดเงื่อนไขดวยตัวดําเนินการเปรียบเทียบ แลวสั่งใหคอมพิวเตอรปฏิบัติตามเง่ือนไขท่ีกําหนดไว เงือ่ นไขใดเงอ่ื นไขหนง่ึ ซ่ึงมีรปู แบบดงั น้ี รปู แบบ if (นพิ จนเงอ่ื นไข) { คอมพิวเตอรจะปฏิบัติตามคําส่ัง คําสงั่ ที่ 1 ; กลมุ นห้ี ากนพิ จนเ ง่ือนไขเปนจริง คําส่ังที่ 2 ; - - คาํ ส่ังท่ี n ; }

20 คัมภรี ก ารใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1 else { คอมพวิ เตอรจะปฏบิ ตั ติ ามคําส่งั คาํ ส่งั ท่ี 1 ; กลุม นหี้ ากนพิ จนเ งอ่ื นไขเปนเท็จ คําสงั่ ท่ี 2 ; - - คําสั่งที่ n ; } เชน if(x<y) { clrscr(); gotoxy(20, 10); printf(“%f<%f\\n”, x, y); } else { clrscr(); gotoxy(20, 10); printf(“%f >= %f\\n”, x, y); } ตรวจสอบเงื่อนไข เท็จ จริง else คําสง่ั ที่ 1 คําสัง่ ท่ี 2 รปู ท่ี 1.18 แสดงคาํ สั่ง if แบบสองทาง

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 21 จากไดอะแกรมในรูปที่ 1.18 หากคอมพิวเตอรพบนิพจนเงื่อนไขท่ีทําใหผลลัพธเปนจริง จะไปปฏิบัติตาม ชุดคําสั่งท่ี 1 หากไดผลลัพธเปนเท็จ จะทํางานตามชุดคําสั่งท่ี 2 โดยคอมพิวเตอรจะตองเลือกปฏิบัติตามเง่ือนไข เพียงคําส่งั เดียวเทา นนั้ 1.3.5 คาํ ส่ัง if แบบหลายทาง คําสั่ง if แบบนี้จะใชในกรณีที่ตองการทําคําสั่งหลายๆ ชุดจากนิพจนเงื่อนไขหลายๆ แบบโดยมีการ ตรวจสอบนิพจนเ ง่อื นไขแตล ะเงอื่ นไขกอน หากเงือ่ นไขใดเปน จรงิ คอมพวิ เตอรจ ะทําตามคําสัง่ ภายใตเงื่อนไขที่เปน จริง แลวจะขามเง่ือนไขอื่นๆ ไปท้ังหมด แตถานิพจนเง่ือนไขแรกๆ เปนเท็จ คอมพิวเตอรจะตรวจสอบเงื่อนไขถัดไป หากทกุ เง่ือนไขเปน เทจ็ หมด เครอ่ื งจะปฏิบัติตามชดุ คาํ สงั่ ทีอ่ ยนู อกเหนือเง่อื นไขท่ีกาํ หนดข้ึน รปู แบบ if (นิพจนเง่ือนไขที่ 1) { คาํ สั่งท่ี 1 ; คําส่งั ที่ 2 ; - คอมพวิ เตอรปฏบิ ตั ิงานตามคําส่ังกลุมนี้ - เมือ่ นิพจนเ งอ่ื นไขที่ 1 เปนจรงิ คําส่ังท่ี n ; } else if (นพิ จนเงือ่ นไขที่ 2) { คําสงั่ ที่ 1 ; คาํ ส่ังที่ 2 ; -- คอมพวิ เตอรปฏบิ ตั ิงานตามคําส่งั กลุมน้ี เมอ่ื นพิ จนเ ง่ือนไขท่ี 2 เปนจรงิ คําสั่งท่ี n ; }

22 คมั ภีรก ารใชง าน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 else if (นพิ จนเ งอื่ นไขท่ี n) { คําสง่ั ท่ี 1 ; คาํ สั่งที่ 2 ; - คอมพิวเตอรป ฏบิ ัตงิ านตามคาํ สงั่ กลุมนี้ - เมื่อนิพจนเ ง่ือนไขที่ n เปนจรงิ คาํ สั่งท่ี n ; } else { คําส่ังที่ 1 ; คาํ สั่งที่ 2 ; -- คอมพิวเตอรปฏบิ ัติงานตามคําสั่งกลุมน้ี เมอ่ื เงือ่ นไขทุกเง่อื นไขทผี่ า นมาเปนเท็จ คาํ สั่งท่ี n ; } เชน if (x < y) { clrscr ( ); gotoxy (20, 10); printf (“%f < %f \\ n”, x, y); } else if ((x > y) && (x > 0)) { clrscr ( ); gotoxy (20, 10); printf (“%f > %f and x > 0 \\ n”, x, y); }

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 23 else { clrscr ( ); gotoxy (20,10); printf (“%f = %f \\ n”, x, y); } 1.3.6 คาํ สั่ง for คําส่ังน้ีจะถูกนํามาใชในกรณีท่ีตองการใหคอมพิวเตอรทํางานซํ้าโดยจะตองทราบคาจํานวนคร้ัง หรือ เงอื่ นไขท่ีแนนอนเพ่ือควบคมุ ใหโ ปรแกรมหยดุ ทํางานซํา้ รปู แบบ for (กาํ หนดคา เรม่ิ ตน ; นพิ จนเ งอื่ นไข ; ปรับคา ตัวนับเพ่มิ หรือลด) { คําส่งั ท่ี 1 ; คาํ สงั่ ท่ี 2 ; -- คาํ ส่ังที่ n ; } เชน for (X = 0 ; X < =10; X++) /*คาเพ่ิมขึ้น*/ for (X = 10 ; X > =0; X--) /*คา ลดลง*/ 1.3.7 คาํ สั่ง for แบบลปู ซ้อนลปู ในกรณีท่ีตองการประมวลผลงานท่ีมีลักษณะเปน 2 มิติ จําเปนที่จะตองใชคําสั่ง for แบบลูปซอนลูป ตวั อยา งเชน หากตองการบวกเมตริก A ขนาด 4 x 4 กบั เมตริก B ขนาด 4 x 4

24 คัมภีรก ารใชงาน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 เชน for (X = 0; X < 10 ; X++) { for (Y = 0; Y < 10 ; Y++) } 1.3.8 คาํ ส่ัง while คําสั่งน้ีเหมาะที่จะนํามาใชเม่ือตองการตรวจสอบเงื่อนไขกอน ถาเงื่อนไขเปนจริง จะเขาไปทํางานตาม คําส่ังในลูป การวนรอบในลูปจะมีจํานวนรอบกี่รอบก็ได การใชคําสั่งนี้ตองไมลืมเขียนคําสั่งสําหรับปรับเงื่อนไขให เปน เท็จเมือ่ ตองการออกจากลปู มฉิ ะนัน้ คอมพวิ เตอรจ ะทาํ งานอยใู นลปู ตลอดไปแบบไมร จู บ ตรวจสอบเงือ่ นไข เท็จ ออกจากลปู จรงิ คําสงั่ ในลูป รปู แบบ รูปท่ี 1.19 แสดงคาํ สง่ั while while (นพิ จนเ งอ่ื นไข) คําส่ังที่ 1 ; { คาํ สั่งที่ 2 ; --

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 25 คําส่งั ท่ี n ; } เชน x=1; while (x< 10) { beep=1; delay (100); beep=0; delay (100); } ในกรณีทมี่ ีคาํ สง่ั เดยี วไมจําเปน ตองมเี คร่ืองหมาย { } 1.3.9 คาํ สั่ง while แบบลปู ซ้อนลปู ในกรณีที่ใช while ลูปซอนกันเพ่ือสรางขอมูลที่มีลักษณะ 2 มิติ เม่ือตองการยกเลิกการทํางานของลูปใน จะตองเปลี่ยนใหเงื่อนไขของลูปในเปนเท็จ หากตองการยกเลิกการทํางานของลูปนอกจะตองเปลี่ยนเงื่อนไขของ ลูปนอกใหเ ปน เท็จเชน กนั แตถ า เงอื่ นไขของลูปนอกเปนเท็จ จะหลดุ ออกจากการทํางานของทง้ั สองลปู ทันที รปู แบบ กาํ หนดใหคาํ สั่ง while แบบลูปซอนลูปมเี ง่อื นไขดงั น้ี รอบท่ี A b c 1110 2122 3134 4246 5346 6446

26 คัมภรี ก ารใชงาน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 เชน a = 1; b = 1; c = 0; while(a < = 3); { while(c < 5) { gotoxy (20, 10); printf ( “%d %d %d \\ n”, a, b, c); c = c + 2; b++; } a++; gotoxy (20, 10); printf (“%d %d %d \\ n”, a, b, c); } 1.3.10 คาํ สั่ง do..while คําส่ังน้ีมีลักษณะคลายกับคําสั่ง while ตางกันตรงที่คอมพิวเตอรจะทําคําส่ังในลูปกอน 1 คร้ัง แลวจึง ตรวจสอบนพิ จนเงอื่ นไข หากนิพจนเ งื่อนไขเปนจริง จะกลับไปทําคําสั่งในลูปอีก แตถาเงื่อนไขเปนเท็จ จะออกจาก ลูปไปทาํ งานท่คี ําสงั่ ถดั ไปทนั ที

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 27 ชุดคําสง่ั ทม่ี กี ารทํางาน กอนตรวจสอบเง่ือนไข จริง ตรวจสอบเงอื่ นไข เทจ็ รปู ที่ 1.20 แสดงคาํ สง่ั do..while รปู แบบ do { คําสงั่ ; } while (ตรวจสอบเงื่อนไข) จากที่กลาวมาแลว การใชลูปซอนลูปอาจใชโครงสรางลูปนอกและลูปในเปนคนละคําสั่งกันก็ได เชน ลูป ในอาจใชคําสั่ง while ลูปนอกใชคาํ สั่ง do..while หรืออาจใชลูปนอกเปนคําสั่ง while ลูปในใชคําส่ัง for เปนตน ข้ึนอยกู บั ความตอ งการของผูเ ขียนโปรแกรม 1.3.11 คาํ สั่ง do..while แบบลปู ซ้อนลปู คําสั่ง do..while แบบลูปซอนลูปจะตางจากคําส่ัง while แบบลูปซอนลูป คือ การทํางานในลูปนอกหรือ ลูปใน จะตองทํางานอยางนอย 1 ครั้งเสมอ ผูเขียนโปรแกรมไมสามารถบังคับหรือควบคุมใหผานลูปไปทําคําส่ัง ถดั ไปไดเ หมือนกรณีของคาํ สง่ั while ถึงแมว าเงือ่ นไขครงั้ แรกจะเปนเทจ็ กต็ าม

28 คัมภีรการใชง าน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 รปู แบบ กาํ หนดใหคําสงั่ do..while แบบลปู ซอนลูป มีเงื่อนไขดังน้ี รอบท่ี A B C 1115 2127 3139 4 2 4 11 5 3 5 13 6 4 6 15 เชน c = 5; a = b = 1; do { do { gotoxy (20, 10); printf (“%d %d %d \\ n”, a, b, c); c = c + 2; b = b++; } while (b < 4); a++ } while (a < 5); จากที่กลาวมาแลว การใชลูปซอนลูปอาจใชโครงสรางลูปนอกและลูปในเปนคนละคําส่ังกันก็ได เชน ลูปใน อาจใชคําสั่ง while ลูปนอกใชคําสั่ง do..while หรืออาจใชลูปนอกเปนคําสั่ง while ลูปในใชคําสั่ง for เหลาน้ี เปน ตน ข้นึ อยกู บั ความตอ งการของผเู ขยี นโปรแกรม

บทที่ 1 ไมโครคอนโทรลเลอร Arduino 29 1.3.12 คาํ สั่ง switch มีลักษณะคลายกับคําสั่ง if แบบหลายทางผิดกันตรงท่ีเม่ือนิพจนเง่ือนไขใดเงื่อนไขหน่ึงเปนจริง แลว คอมพิวเตอรจะปฏิบัติตามคําสั่งชุดนั้น และชุดคําส่ังอื่นๆ ถัดไปไดดวย ถาชุดคําส่ังน้ันไมมีคําสั่ง break ตอทายใน แตละชุด สวนนิพจนเงื่อนไขในการทดสอบ จะตองเปนตัวอักขระ หรือตัวเลขจํานวนเต็มเทานั้น เชน char, int, short long เปนตน รปู แบบ switch (นพิ จนเง่อื นไข) { case นพิ จนเ งอ่ื นไขที่ 1; คําสั่งชุดที่ 1; break; case นพิ จนเงอื่ นไขท่ี 2; คาํ สั่งชุดท่ี 2; break; - - case นพิ จนเงอ่ื นไขท่ี n; คาํ สง่ั ชดุ ที่ n; break; } 1.3.13 อะเรย์ (Array) เมื่อตองการประกาศตัวแปรหลายๆ ตัว เพื่อใชในการเก็บขอมูลหรือแสดงผล สามารถใชตัวแปรอะเรย (Array) เก็บกลุมของตัวแปรดังกลาวได เพราะตัวแปรแบบอะเรยสามารถเก็บตัวแปรไดจํานวนมากและยังเขาถึง กลมุ ขอมูลไดร วดเร็ว โดยมรี ูปแบบดังนี้

30 คมั ภีรก ารใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1 รปู แบบที่ 1 ชนดิ ของตัวแปร ช่อื อะเรย [ขนาดของอะเรย] char number [5]; เปนการประกาศตัวแปรอะเรย number จํานวน 5 ตวั ซ่งึ เปนตัวแปรชนิดจํานวนเต็ม ขนาด 8 บิต โดยแต ละตัวจะเกบ็ ขอ มูลได 1 ไบต ซง่ึ ตวั แปรอะเรยส ามารถเกบ็ คาไดดงั นี้ number[0] number[1] number[2] number[3] number[4] 1 byte 1 byte 1 byte 1 byte 1 byte รปู แบบท่ี 2 int number[5] = {0, 1, 2, 3, 4}; เปนการประกาศตัวแปรอะเรย จํานวน 5 ตัว คือ number[0] ถึง number[4] โดยใหตัวแปรอะเรยมีคา เทา กบั 0, 1, 2, 3 และ 4 ตามลาํ ดบั number[0] number[1] number[2] number[3] number[4] 0 1 2 3 4 รปู แบบท่ี 3 unsigned char number [ ] = {D, E, C, H, R, I, T}; unsigned char number [ ] = “DECHRIT”; เปนการประกาศตัวแปรอะเรย number ที่ไมมีการระบุขนาดของอะเรย ในระบบจะจองหนวยความจํา เทากับคาที่ประกาศไว คือ number [0] จะเก็บคา D, number [1] จะเก็บคา E, จนถึง number [6] จะเก็บคา T โดยมขี นาด 1 ไบต ตามลําดบั number[0] number[1] number[2] number[3] number[4] number[5] number[6] DECHR I T

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 31 1.4 โปรแกรม Arduino IDE โปรแกรมท่ีใชงานกับไมโครคอนโทรเลอร Arduino มีชื่อเปนทางการวา Arduino IDE (IDE ; Integrated Development Environment) ซึ่งสามารถใชงานไดทั้งบนระบบปฏิบัติการ Window (XP Vista 7 8) ทั้ง 32 และ 64 บิต, Mac OS X และ Linux ก็สามารถใชได เรียกไดวาใชงานไดกับทุกระบบปฏิบัติการเลยทีเดียว และยังเปน อิสระจากการทํางานของระบบปฏิบัติการหรือ OS ทุกชนิด ทําใหไมตองมีการ Install โปรแกรม โดยโปรแกรม สามารถดาวนโหลด (Download) หลังจากน้ันทําการ Unzip โปรแกรม ไวใน Directory ที่ตองการ สําหรับการลง โปรแกรมมีข้นั ตอนดงั น้ี รูปท่ี 1.21 สญั ลกั ษณ์โปรแกรม Arduino IDE 1. ตดิ ตั้งโปรแกรมแลว ทําการคลกิ ท่ี I Agree

32 คัมภีรก ารใชง าน ไมโครคอนโทรลเลอร Arduino บทท่ี 1 2. คลิกเลือกการตดิ ตัง้ โปรแกรม แลว ทาํ การคลิกท่ี Next 3. คลกิ Browse เพ่อื เลอื กโฟลเดอรทจี่ ะทาํ การติดตั้งโปรแกรม แลว ทาํ การคลิกที่ Install

บทท่ี 1 ไมโครคอนโทรลเลอร Arduino 33 4. เมื่อโปรแกรม Install อยู จะมีคําถามวาจะติดต้ัง Arduino USB หรือไม โดยใหกดคลิกเลือก Install เพ่ือทํา การตดิ ตั้ง Driver ของ USB 5. โปรแกรม Arduino IDE ติดตั้งเสรจ็ เรยี บรอ ย หลงั จากนั้นคลิก Close

34 คมั ภรี ก ารใชงาน ไมโครคอนโทรลเลอร Arduino บทที่ 1 6. โปรแกรม Arduino IDE พรอ มใชงาน 