ชุดสื่อการเรียนรู Microcontroller การเรียนรู มีไดไมสิ้นสุด!! รชูปุดแกบารบเรียใหนรมู AR BOOK Augmented Reality นื้อหาความรู ใชง าน AR Book ไดผ า นทาง ความหมายของ Microcontroller แอปพลเิ คชนั โครงสรา งของ Microncontroller ประโยชนของ Microncontroller AR B OOK MICROCONTROLLER รองรบั ระบบปฏบิ ตั กิ าร Android version 4.2 ขนึ้ ไป
วิธีใชงาน AR Book ชุดส่ือการเรียนรู Microcontroller 1 ตดิ ตั้งแอปพลิเคชนั AR Book นามสกลุ ไฟล .apk 2 สแกนแอปพลิเคชันลงบน ชุดสื่อการเรยี นรู ที่มีสัญลกั ษณ AR AR 2 จะปรากฏสื่อการเรียนรปู ระเภท AR (Augmented Reality)
ชุดสอ่ื การเรยี นรู Microcontroller AR ไมโครคอนโทรลเลอร (อังกฤษ: Microcontroller) คือ อุปกรณค วบคุมขนาดเลก็ ซง่ึ บรรจุความสามารถทีค่ ลาย- คลึงกับระบบคอมพวิ เตอร โดยในไมโครคอนโทรลเลอรไ ดร วมเอาซพี ียู, หนว ยความจาํ และพอรตซงึ่ เปนสวนประกอบ หลกั สาํ คัญของระบบคอมพวิ เตอรเ ขาไวดว ยกนั โดยทําการบรรจุเขา ไวใ นตัวถงั เดยี วกัน โครงสรางโดยทั่วไป ของไมโครคอนโทรลเลอรนั้น สามารถแบงออกมาไดเปน 5 สวนใหญๆ ดังตอไปนี้ 1. หนวยประมวลผลกลางหรอื ซีพยี ู (CPU : Central Processing Unit) ทําหนาทีเ่ ปน ศนู ยกลางควบคุมการ ทํางานของระบบคอมพิวเตอรทั้งหมด โดยนําขอมูลจากอุปกรณรับขอมูลมาทํางาน ประมวลผลขอมูลตามคําสั่งของ โปรแกรมและสง ผลลัพธอ อกไปหนวยแสดงผล 2. หนวยความจํา (Memory) สามารถแบงออกเปน สวน คือ หนวยความจําที่มีไวสําหรับเก็บโปรแกรมหลัก (Program Memory) เปรยี บเสมอื นฮารด ดสิ กข อง เครอื่ งคอมพวิ เตอรต ง้ั โตะ คอื ขอ มลู ใดๆ ทถี่ กู เกบ็ ไวใ นนจ้ี ะไมส ญู หาย ไปแมไมมีไฟเลี้ยง อีกสวนหน่ึงคือหนวยความจําขอมูล (Data Memory) ใชเปนเหมือนกกระดาษทดในการคํานวณ ของซีพียู และเปนท่ีพักขอมูลชั่วคราวขณะทํางาน แตหากไมมีไฟเลี้ยง ขอมูลก็จะหายไปคลายกับหนวยความแรม (RAM) ในเครื่องคอมพิวเตอรท่ัวๆ ไป แตสําหรับไมโครคอนโทรลเลอรสมัยใหม หนวยความจําขอมูลจะมีทั้งที่เปน หนว ยความจาํ แรม ซงึ่ ขอ มลู จะหายไปเมอ่ื ไมม ไี ฟเลย้ี ง และเปน ออี พี รอม (EEPROM : Erasable Electrically Read- Only Mempry) ซ่ึงสามารถเกบ็ ขอ มลู ไดแมไ มมีไฟเลย้ี ง 3. สว นตดิ ตอ กบั อปุ กรณภ ายนอก หรอื พอรต (Port) มี 2 ลกั ษณะคอื พอรต อนิ พตุ (Input Port) และพอรต สง สญั ญาณหรอื พอรต เอาตพ ตุ (Output Port) สว นนจ้ี ะใชใ นการเชอื่ มตอ กบั อปุ กรณภ ายนอก ถอื วา เปน สว นทส่ี าํ คญั มาก ใชร ว มกนั ระหวา งพอรต อนิ พตุ เพอื่ รบั สญั ญาณ อาจจะดว ยการกดสวติ ช เพอื่ นาํ ไปประมวลผลและสง ไปพอรต เอาตพ ตุ เพอื่ แสดงผลเชน การติดสวางของหลอดไฟ เปน ตน ชดุ ส่อื การเรียนรู Microcontroller หนา 1
4. ชอ งทางเดนิ ของสญั ญาณ หรอื บสั (BUS) คอื เสน ทางการแลกเปลยี่ นสญั ญาณขอ มลู ระหวา ง ซพี ยี หู นว ยความจาํ และพอรต เปน ลกั ษณะของสายสญั ญาณ จาํ นวนมากอยภู ายในตวั ไมโครคอนโทรลเลอร โดยแบง เปน บสั ขอ มลู (Data Bus), บสั แอดเดรส (Address Bus) และบสั ควบคมุ (Control Bus) 5. วงจรกําเนิดสัญญาณนาฬกา นับเปนสวนประกอบที่สําคัญมากอีกสวนหน่ึง เน่ืองจากการทํางานท่ีเกิดขึ้นใน ตวั ไมโครคอนโทรลเลอร จะขนึ้ อยกู บั การกาํ หนดจงั หวะ หากสญั ญาณนาฬก ามคี วามถส่ี งู จงั หวะการทาํ งานกจ็ ะสามารถ ทาํ ไดถ ีข่ น้ึ สงผลใหไ มโครคอนโทรลเลอรจัวนั้น มคี วามเร็วในการประมวลผลสงู ตามไปดว ย ประโยชนของไมโครคอนโทรลเลอร ไมโครคอนโทรลเลอรเ ปน อปุ กรณอ เิ ลก็ ทรอนกิ สท ใี่ ชค วบคมุ อปุ กรณไ ฟฟา หรอื ระบบอเิ ลก็ ทรอนกิ สต า ง ๆ ไมโคร- คอนโทรลเลอรน น้ั เปรยี บเสมอื นคอมพวิ เตอรข นาดเลก็ อยากใหม นั ทาํ อะไรกเ็ ขยี นโปรแกรมทต่ี อ งการยดั ใสล งไป ไมโคร- คอนโทรลเลอรก็เลยเขามาเกี่ยวของเพ่ือรองรับกับความอยากนําไปควบคุมระบบที่ความรูความเขาใจที่อยากไดโดย ใหม ขี นาดเลก็ ทส่ี ดุ แตว า ไมใ ชเ พยี งขนาดเลก็ แคน นั้ มนั ยงั สามารถปอ นชดุ คาํ สง่ั ใหส ามารถปฏบิ ตั งิ านไดอ ยา งอตั โนมตั ิ ดวยแบบการเขียนโปรแกรมภาษาตาง ๆ ตามความชํานาญ นัก ออกแบบ พัฒนาผลิตภัณฑ ตลอดจนนักประดิษฐท้ัง หลาย ตา งหลกี เลยี่ งไมไ ดเ ลยทจ่ี ะตอ งอาศยั วงจรอเิ ลก็ ทรอนกิ ส เขา ไปมสี ว นเกย่ี วขอ งในการควบคมุ แตค รน้ั วงจรอเิ ลก็ - ทรอนกิ สท นี่ าํ มาตอ อนกุ รมเพอ่ื ความสามารถทเ่ี ราตอ งการ นน้ั กใ็ หญโ ตเสยี เหลอื เกนิ ดเู หมอื นจะขดั แยง กบั ความตอ ง- การของผูบรโิ ภค และหลักการออกแบบผลิตภัณฑ ชดุ สอ่ื การเรียนรู Microcontroller หนา 2
ในกรณที ่ีตองการซือ้ เปน จํานวนมาก เพ่ือใชในการสอน การฝก อบรม การสงเสริมการขาย หรือเปนของขวัญพิเศษ เปน ตน กรณุ าตดิ ตอสอบถามราคาพิเศษไดที่ ฝา่ ยขาย บริษทั ซีเอด็ ยูเคชั่น จาํ กัด (มหาชน) เลขท่ี 1858/87-90 ถนนบางนา-ตราด แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศพั ท 0-2826-8222 โทรสาร 0-2826-8359 หากมีคาํ แนะนําหรอื ติชม สามารถติดต่อได้ที่ [email protected] คมั ภีรก์ ารใช้งาน ไมโครคอนโทรลเลอร์ Arduino โดย ผศ.ดร. เดชฤทธิ์ มณีธรรม ราคา 280 บาท สงวนลขิ สทิ ธต์ิ ามกฎหมาย โดย ผศ.ดร. เดชฤทธ์ิ มณธี รรม หา มคดั ลอก ลอกเลยี น ดัดแปลง ทาํ ซาํ้ จัดพิมพ หรือกระทาํ อน่ื ใด โดยวิธีการใดๆ ในรูปแบบใดๆ ไมว าสวนหนึง่ สว นใดของหนงั สือเลมน้ี เพอื่ เผยแพรใ นส่อื ทุกประเภท หรอื เพือ่ วตั ถุประสงคใดๆ นอกจากจะไดรบั อนุญาต 046- 792- 3 0066789054321 ข้อมูลทางบรรณานุกรมของสํานักหอสมุดแห่งชาติ เดชฤทธ์ิ มณธี รรม. คัมภีรการใชง าน ไมโครคอนโทรลเลอร Arduino. —กรุงเทพฯ : ซเี อด็ ยเู คช่นั , 2560. 3I1.7.ช6นื่อหิวเแรนมื่อา ตง.ิกส. 004.64 ISBN 978-616-08-3031-2 จดั พมิ พแ์ ละจดั จาํ หน่ายโดย เลขท่ี 1858/87-90 ถนนบางนา-ตราด แขวงบางนา เขตบางนา กรงุ เทพฯ 10260 โทรศพั ท 0-2826-8000 พมิ พที่ บริษัท ว.ี พรน้ิ ท (1991) จาํ กัด เลขท่ี 23/71-72 หมู 1 ซอยเทยี นทะเล 10 ถนนบางขนุ เทียน-ชายทะเล แขวงแสมดํา เขตบางขุนเทียน กรงุ เทพฯ 10150 โทรศพั ท 0-2451-3010 นายวิชัย กาญจนพฒั นา ผพู มิ พผ ูโ ฆษณา พ.ศ. 2561
คํานํา คัมภีรก ารใชง าน ไมโครคอนโทรลเลอร 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 คยี ส วิตชแบบแมทรกิ ซ 43 91 2.18 แสดงรหัสประจาํ คียของ Keypad 93 2.19 แสดงการตอ LED 7-Segment ควบคุมดวย Keypad 100 2.20 โมดลู LCD ขนาด 161 บรรทดั 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
Search