Top Banner
171

การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

Apr 22, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk
Page 2: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

การใชงานไมโครคอนโทรลเลอร

และเซนเซอรในการสรางนวตกรรม

Microcontroller and Sensors for Innovative Applications

Page 3: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

ชอหนงสอ

การใชงานไมโครคอนโทรลเลอรและเซนเซอรในการสรางนวตกรรม ผแตง/ผจดท ำ สวทย กระวทยา และคณะ พมพครงท 1 พ.ศ. 2562 จ ำนวน 169 หนา ISBN 978-616-485-757-5 พมพโดย บรษท ไทยบรดจสโตน จ ากด เลขท 990 อาคารอบดลราฮม ชน 16 ถ.พระราม 4 แขวงสลม เขตบางรก กรงเทพฯ 10500 ลขสทธของผแตง/ผจดท ำ

Page 4: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk
Page 5: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

ค ำน ำ

หนงสอฉบบนจดท าขนเพอใชประกอบการอบรมในโครงการสะพานสานฝนเยาวชนนกประดษฐปท 12 หรอ ทรจกกนในชอวา Bridge 2 Inventor หรอ B2i โดยในการจดอบรมซงเปนสวนหนงของโครงการน ถกเรยกวา Bridge 2 Inventor Camp หรอคายสะพานสานฝนเยาวชนนกประดษฐ ทปกตจะจดในชวงเดอนสงหาคม ซงในปพ.ศ. 2562 นมการจดอบรมโดย 2 ศนยอบรมท 1 คอ ศนยมหาวทยาลยอบลราชธาน ซงจดอบรมทบานวทยาศาสตร สรนธร ส านกงานพฒนาวทยาศาสตรและเทคโนโลยแหงชาต (สวทช.) จ. ปทมธาน และ ศนยอบรมท 2 ศนยมหาวทยาลยนเรศวร ซงจดอบรมท มหาวทยาลยนเรศวร จ.พษณโลก และมหวขอการอบรมและการประกวดแขงขน คอ นวตกรรมเพอความปลอดภยในการเดนทาง (Innovation for Smart Mobility)

โครงการนเปนความรวมมออนยาวนานระหวางบรษท ไทยบรดจสโตน จ ากด และ มหาวทยาลยอบลราชธาน โดยมมหาวทยาลยนเรศวร มารวมด าเนนการดวยตงแตปพ.ศ. 2561 เปนตนมา การแขงขน B2i Challenge ซงจดขนในชวงเดอนพฤศจกายน เปนการประกวดนวตกรรมจากฐานความรทไดรบในระหวางการอบรมและความคดสรางสรรคของผเขาอบรม โครงการนไดจดตอเนองมาเปนปท 12 แลว โดยในปนเปนครงแรกททางคณะผด าเนนงานไดจดท าหนงสอฉบบนขนมา โดยทมงานผจดท าหนงสอ ไดก าหนดใหหนงสอมเนอหาทครอบคลมเนอหาทใชอบรมในโครงการน และพยายามท าใหหนงสอมเนอหาทเหมาะสมส าหรบการศกษาดวยตนเองของผทสนใจ โดยคณะผจดท ามวตถประสงคการจดท าหนงสอน เพอเผยแพรความรดานเทคโนโลยดานระบบสมองกลฝงตว (Embedded System) ซงเปนพนฐานในโครงสรางเทคโนโลยอนเทอรเนตของสรรพสง ( Internet of Things, IoT) ผเขารวมการอบรมในปนไดแก คร นกเรยน นสต และนกศกษาทมความสนใจในเทคโนโลยดงกลาว โดยเมอผทศกษาไดท าการศกษา ทดลองและท าความเขาใจการท างานของอปกรณตาง ๆ ดแลว กจะสามารถน าความรทไดรบไปประยกตใชงานตาง ๆ ไดอยางหลากหลาย โดยเฉพาะอยางยง ทางดานการสรางนวตกรรมทใชระบบอเลกทรอนกสสมองกลฝงตวเปนฐาน

Page 6: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

หนงสอเลมนแบงออกเปน 4 สวนหลก ๆ โดยมล าดบตามเนอหาทอบรมในโครงการ ไดแก บทท 1 ซงเปนการบรรยายพนฐานเกยวกบแนวคดการสรางนวตกรรมดวยระบบอเลกทรอนกสสมองกลฝงตว บทท 2 กลาวถงพนฐานภาษา C/C++ ส าหรบงานดานระบบสมองกลฝงตว บทท 3-11 (9 บท) เปนการแสดงการใชงานบอรดไมโครคอนโทรลเลอรหลก คอ NodeMCU v.3 รวมกบบอรดตาง ๆ ทน ามาประกอบกนพรอมดวยตวอยางโคดส าหรบการทดลอง และบทท 12-13 เปนการใชโทรศพทมอถอในการเชอมตอและควบคมการท างานของระบบผาน Blynk App

คณะผจดงานขอขอบคณผทใหการอนเคราะหและสนบสนนในดานตาง ๆ ในการจดท าหนงสอเลมนและการด าเนนการอบรมในปน โดยคณะผจดงานหวงวาเอกสารฉบบนจะเปนประโยชนตอผเขารวมอบรมในโครงการน รวมถงผทสนใจ ซงหากมขอผดพลาดประการใดตองขออภยมา ณ ทนดวย

คณะผจดท ำ

บรษท ไทยบรดจสโตน จ ากด มหาวทยาลยอบลราชธาน มหาวทยาลยนเรศวร

Page 7: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

สำรบำญ หนา

ค าน า 1 บทท 1 ภาพรวมของการสรางนวตกรรมดวยระบบอเลกทรอนกสสมองกลฝงตว 7 1.1 นวตกรรมคออะไร 7 1.2 ระบบสมองกลฝงตว 8 1.3 เทคโนโลยอนเทอรเนตของสรรพสง 10

บทท 2 พนฐานภาษา C/C++ 13 2.1 ตวแปรในภาษา C/C++ และค าสงพนฐาน 13 2.2 ชดค าสงควบคม 17 2.3 อาเรยและฟงกชน 20 2.4 รปแบบการเขยนโปรแกรมเชงวตถเบองตน 24

บทท 3 แนะน าสถาปตยกรรมของ NodeMCU v.3 27 3.1 คณสมบตของ NodeMCU v.3 27 3.2 NodeMCU Base v.1 30 3.3 การตดตงโปรแกรม Arduino IDE ส าหรบ NodeMCU 31 3.4 การเรมตนทดสอบโปรแกรม Arduino IDE 36

บทท 4 การใชงานรเลย 41 4.1 รเลย 41 4.2 การเขยนโปรแกรมสงออกคาดจทล 43 4.3 การทดลองควบคมรเลย 45

บทท 5 การสอสารผานพอรตอนกรม 49 5.1 มาตรฐานการสอสาร 49

Page 8: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

5.2 การเขยนโปรแกรมตดตอสอสาร 54 5.3 การทดลองสอสารผานพอรตอนกรม 55

บทท 6 การแสดงผลดวยจอแอลอดขนาด 128×64 พกเซล 59 6.1 จอแอลอดและการตดตงไลบราร 59 6.2 ค าสงพนฐานควบคมการแสดงผลของจอ OLED 62 6.3 การทดลองแสดงผลบนจอ OLED 64

บทท 7 การวดระยะทางดวยโมดลอลตราโซนกส 71 7.1 หลกการวดระยะทางดวยคลนอลตราโซนกส 71 7.2 ค าสงทเกยวของและไลบราร Ultrasonic.h 72 7.3 การทดลองวดระยะทาง 75

บทท 8 การควบคมเซอรโวมอเตอร 81 8.1 หลกการท างานของเซอรโวมอเตอร 81 8.2 ไลบราร Servo.h 84 8.3 การทดลองควบคมเซอรโวมอเตอร 86

บทท 9 การวดความสวางดวยเซนเซอร LDR 91 9.1 เซนเซอรและโมดลวดความสวาง 91 9.2 การเทยบวดคาความสวาง 93 9.3 การแปลงสญญาณแอนะลอกเปนดจทล 96 9.4 การทดลองวดคาความสวาง 99

บทท 10 การใชงานเซนเซอรวดความเรงแบบสามแกน 107 10.1 โมดลวดความเรงแบบสามแกน ADXL345 107 10.2 ไลบรารและค าสงทเกยวของ 110 10.3 การทดลองวดคาความเรง 111

Page 9: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 11 การใชงานโมดลสอสารไรสายดวยเทคโนโลยบลทธ 115 11.1 การสอสารไรสายดวยเทคโนโลยบลทธ 115 11.2 โมดลสอสารไรสายและโปรแกรมเชอมตอ 116 11.3 การทดลองรบสงขอมล 119

บทท 12 การสรางแอปพลเคชนเพอควบคมสงประดษฐดวย Blynk App 125 12.1 แนะน า Blynk App 125 12.2 การเรมตนใชงาน Blynk App 127 12.3 การตดตงไลบรารเพอเชอมตอกบ NodeMCU 129 12.4 การทดลองควบคมสงประดษฐผาน Blynk App 131

บทท 13 การสรางแอปพลเคชนเพอรบคาและแสดงผลดวย Blynk App 139 13.1 การรบคาจากเซนเซอร 140 13.2 การรบคาจาก Blynk App และประมวลผล 142 13.3 การสรางแอปพลเคชนเพอควบคมรเลยจากคาความสวาง 144 ภาคผนวก ก การเพมบอรดและไลบรารในโปรแกรม Arduino IDE 149

ภาคผนวก ข การใชงานระบบเกบขอมลออนไลนดวย ThingSpeak® 155

บรรณานกรม 163

รายชอคณะท างาน 165

Page 10: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk
Page 11: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 1

ภำพรวมของกำรสรำงนวตกรรม ดวยระบบสมองกลฝงตว

1.1 นวตกรรมคออะไร

นวตกรรม (Innovation) มความหมายในท านองวา ความคดใหม ๆ การคดสรางสรรค การจนตนาการถงสงใหม ๆ ในรปแบบของอปกรณหรอวธการ นวตกรรมนถกมองเสมอนกบการประยกตใชของบางสงบางอยาง ทเปนค าตอบของความตองการใหม ๆ หรอความตองการทไมชดเจน การสรางนวตกรรมเรมจากการเลงเหนถงการไดประโยชนจากการสรรสรางสงใหม ๆ ทท าใหระบบเดมมประสทธภาพดยงขนจากเทคโนโลยทมในปจจบน นวตกรรมหนง ๆ ตองมความแปลกใหม (Originality) และมประสทธภาพ ท าใหสงคมหรอตลาดยอมรบและน าไปใชตอ โดยค าวา นวตกรรม มกถกน าไปเชอมโยงกบค าวา การประดษฐ (Invention) โดยทงสองค านมความหมายทสมพนธกน แตค าวานวตกรรมนนมกจะหมายถงสงทน าไปใชไดจรง มผลกระทบตอเศรษฐกจและสงคม มากกวาการประดษฐสงประดษฐเทานน โดยนวตกรรมนมกจะสรรสรางจากกระบวนการทางวศวกรรมซงเปนกระบวนการทใชแกปญหาทางเทคนคโดยอาศยความรทางวทยาศาสตรเปนส าคญ

นวตกรรมหนง ๆ อาจถกมองไดสองดาน คอ (1) ระดบความแปลกใหม (Novelty) คอแปลกใหมในระดบทองถน แปลกใหมในระดบตลาด แปลกใหมในระดบอตสาหกรรม หรอ แปลกใหมในโลก และ (2) ประเภทของความแปลกใหม คอในดานส งของหรอดานกระบวนการ โดยปจจบนเราสามารถมองแบงแยกไดอยางชดเจนระหวางสงทเปนนวตกรรมและความคดสรางสรรค ในหนงสอเลมน จะกลาวถงความรพนฐานทสามารถน าไปใชตอยอดในการสรางนวตกรรมได

Page 12: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

8

1.2 ระบบสมองกลฝงตว

เทคโนโลยอเลกทรอนกสถอเปนเทคโนโลยทมการพฒนาอยางมากในชวงหลายทศวรรษทผานมา โดยระบบสมองกลฝงตว (Embedded System) คอระบบประมวลผลทใชไมโครโพรเซสเซอร (Microprocessor) หรอไมโครคอนโทรลเลอร (Microcontroller) ทออกแบบมาเฉพาะส าหรบอปกรณทผประดษฐสรรสรางขน โดยการใชระบบสมองกลฝงตวน จะท าใหอปกรณทสรางขนมความฉลาดหรอ สมารท (smart) ขนเมอเทยบกบอปกรณทไมมระบบน ปจจบนระบบสมองกลฝงตวถกน ามาใชกนอยางแพรหลาย ทงในยานพาหนะ เครองใชไฟฟาในบานและส านกงาน อปกรณอเลกทรอนกสตาง ๆ ทงนเนองจากทรพยากร (ความเรวและหนวยความจ า) ของชปประมวลผลมประสทธภาพเพยงพอส าหรบการใชงานประเภทน

ปจจบนการสรางนวตกรรมจากสงประดษฐอเลกทรอนกสจงเปนสงทเกดขนและพบเหนไดบอย ๆ ตวอยางเชนเทคโนโลยหนยนต (รปท 1.1 (ก)) และเทคโนโลยอากาศยานไรคนขบหรอโดรน (รปท 1.1(ข)) ทมใหเหนกนอยางแพรหลาย และเรมเขามาในชวตประจ าวน

รปท 1.1 ตวอยางนวตกรรมในเทคโนโลยดาน (ก) หนยนต และ (ข) อากาศยานไรคนขบ (ภาพ (ก) และ (ข) จาก https://www.ecnmag.com/news/2019/01/top-10-robotic-

innovations-2018 และ https://airdronecraze.com/drone-trends/ ตามล าดบ)

Page 13: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

9

มากขน โดยเบองหลงของการสรางนวตกรรมดวยเทคโนโลยเหลานนสวนมากจะมการน าระบบสมองกลฝงตวไปใช เพอท าใหระบบมความแปลกใหม สามารถท าในสงทอาจไมเคยท าไดมากอน

การศกษาในทางวศวกรรมเพอใหมความร ความสามารถ ในการน าไปพฒนาระบบสมองกลฝงตวขนมาไดนน จะตองอาศยความรในหลายสาขาวชา โดยอาจแบงเนอหาวชาทจ า เป นต อ งใช เป น 3 ส วน ค อ วช าการเขยน โปรแกรมคอมพว เตอร (Computer Programming) วชาด าน อปกรณ และวงจรอ เลกทรอนกส (Electronic Devices and Circuits) และ วชาดานไมโครโพรเซสเซอรหรอไมโครคอนโทรลเลอร (Microprocessor/ Microcontroller) โดยนอกจากความรในวชาเหลานแลว ผทตองการพฒนาระบบสมองกลฝงตวขนมาเปนนวตกรรมนนจะตองมทงความคดสรางสรรคและการตดตามเทคโนโลยทสนใจอยางสม าเสมอดวย

รปท 1.2 องคประกอบของการสรางสรรคนวตกรรมดวยระบบสมองกลฝงตว ทประกอบดวยความรจากวชาตาง ๆ ความคดสรางสรรคและการตดตามเทคโนโลย

Page 14: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

10

1.3 เทคโนโลยอนเทอรเนตของสรรพสง

เทคโนโลยอนเทอรเนตของสรรพสง (Internet of Things, IoT) เปนเทคโนโลยทอาศยฐานความรเกยวกบระบบสมองกลฝงตว และเปนเทคโนโลยทก าลงไดรบความสนใจอยางมากในปจจบน โดยแนวคดเรองการเชอมตอสงตาง ๆ นจะมมาตงแตยคตนป 1980 แตยงไมมการใชงานอยางแพรหลาย เนองจากความสามารถในการเชอมตอเปนเครอขายของอปกรณอเลกทรอนกสในขณะนนยงไมเพยงพอ ตางกบในปจจบน โดยปจจบน เราสามารถท าใหอปกรณอเลกทรอนกสตาง ๆ ปฏสมพนธและ/หรอแลกเปลยนขอมลระหวางกนไดโดยงาย และเรยกวาอปกรณเหลานวา อปกรณ IoT

องคประกอบพนฐานของสงทเรยกวาอปกรณ IoT อาจแบงเปน 2 สวน คอ ฮารดแวร (hardware) และ ซอฟตแวร (software) โดยนวตกรรมทวไปนนอาจจะมเพยงสวนเดยวคอฮารดแวรหรอซอฟตแวรเทานนกได แตส าหรบนวตกรรมทสรางดวยระบบสมองกลฝงตว กคงจะขาดสวนใดสวนหนงไมได โดยส าหรบอปกรณ IoT ทงฮารดแวรและซอฟตแวรจะตองมสวนทเกยวของกบระบบเครอขายทใชเชอมตอขอมลตาง ๆ อกดวย

ปจจบนอปกรณ IoT แบงไดเปนหลายประเภท โดยมประเภททไดรบความสนใจมาก (เรยงตามล าดบ โดยอางองจาก iot-analytics.com) คอ

บำนอจฉรยะ (Smart Home) หรอบานอตโนมต (Home Automation) ซ งเปนกลมอปกรณทเชอมตอของใชในบาน เชน เครองวดอณหภม เครองตรวจสอบควน ไฟสองสวาง เครองใชไฟฟา เครองเลนเกมส เครองเสยง กลอนประต/หนาตาง

อปกรณสวมใส (Wearables) โดยอปกรณจ าพวกนาฬกาอจฉรยะ (Smart Watch) ถอเปนกลมอปกรณทก าลงไดรบความนยมอยางมากในปจจบน

เมองอจฉรยะ (Smart City) ถอเปนกลมทมการใชอปกรณ IoT เปนวงกวาง มทง ระบบไฟจราจรอจฉรยะ ระบบบรหารการแจกจายน า ระบบความปลอดภย ระบบสงเกตการณสงแวดลอมตาง ๆ โดยการใชเทคโนโลย IoT ในกลมน มจดประสงคหลกเพอพฒนาการใชชวต

Page 15: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

11

ในเมองใหสะดวกมากยงขน และ/หรอ แกปญหาตาง ๆ ทพบเหนไดทวไปในเมอง (เชนปญหาจราจร อาชญากรรมและมลพษ)

สมำรทกรด (Smart Grid) เปนการน าเทคโนโลย IoT มาใชสงขอมลตาง ๆ เพอทจะใหระบบการจายไฟฟามประสทธภาพ มเสถยรภาพ และประหยดมากยงขน

อนเทอรเนตอตสำหกรรม (Industrial Internet) คอระบบการผลตอจฉรยะหรอโรงงานอนฉรยะ ทมการน าเอาอปกรณ IoT มาตดตง เพอทจะท าใหระบบการผลตมประสทธภาพมากยงขน

ยำนยนตทเชอมตอ (Connected Car) ส าหรบยานยนตแหงอนาคต คงยงไมมใครตอบไดชดเจนวาจะออกมาในทศทางใด แตไมวาจะเปนยานยนตไรคนขบ , ยานยนตไฟฟา หรอยานยนตกงอตโนมต แนวคดการเชอมตอยานยนตตาง ๆ การใชระบบแผนทน าทางและระบบไฟจราจร นาจะเปนแนวคดหนงทจะถกน ามาใชกบยานยนตทกประเภท ซงอปกรณเหลานนลวนตองอาศยเทคโนโลย IoT

ระบบสขภำพทเชอมตอ (Connected Health) หรอในชอระบบสขภาพดจทล (Digital Health) ระบบสขภาพทางไกล (Telehealth/Telemedicine) เปนแนวคดทจะน าระบบการดแลสขภาพมาเชอมตอกนและน าอปกรณอจฉรยะทางดานการแพทยมาใช ดวยเทคโนโลยทมในปจจบน การตรวจสขภาพทางไกลแบบเวลาจรงสามารถท าไดจรงและระบบชวยการตดสนใจในการวนจฉยโรคไดพฒนาขนไปมาก

นอกจากเทคโนโลยทกลาวมาขางตน แลวยงมเทคโนโลย การคาปลกอจฉรยะ (Smart Retail) โซอปทานอจฉรยะ (Smart Supply Chain) และ ฟารมอจฉรยะ (Smart Farming) ซงก าลงไดรบความนยมสนใจเพมขนในปจจบน

Page 16: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

12

Page 17: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 2

พนฐำนภำษำ C/C++

ในบทน เราจะขอกลาวถงความรพนฐานเกยวกบภาษา C/C++ ทจ าเปนในการเขยน

โปรแกรมเพอใหสามารถใชงานอปกรณ อเลกทรอนกสและเซนเซอรตาง ๆ ผานระบบไมโครคอนโทรลเลอร

2.1 ตวแปรในภำษำ C/C++ และค ำสงพนฐำน

ในภาษา C/C++ เราจะตองประกาศชอและชนดตวแปรกอนจะน าไปใชเกบขอมลหรอประมวลผล โดยตวแปรในภาษา C/C++ สามารถแบงไดเปน 4 ชนดหลก ๆ ไดแก ต ว อกษร (character) ต ว เลขจ านวน เตม ( integer) ต วเลขทศน ยม (floating point number) และคาความจรง (true/false) โดยอาจแบงยอยลงไปอก ขนกบการก าหนดในแตละระบบปฏบตการ (16 , 32 หรอ 64 บต) ตารางท 2.1 แสดงชนดของตวแปรในภาษา C/C++ โดยตวแปรพนฐานทใชงานไดแก ตวอกษร, ตวเลขจ านวนเตมและตวเลขทศนยม โดยค าส าคญทใชประกาศตวแปรทง 3 คอ char, int และ float ตามล าดบ ผศกษาควรจ าค าเหลานเพอใชในการเขยนโปรแกรม

ตวอยางการตงชอตวแปร int Relay1; char buff; float volt_LDR; long distance;

ตวอยางการตงชอตวแปรทผด int 1relay; ผด ชอตวแปรขนตนดวยตวเลขไมได char bool; ผดเพราะวา bool เปนค าสงวน float volt LDR; ผดเพราะชอตวแปรมเวนวรรคไมได

Page 18: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

14

ตำรำงท 2.1 ชนดตวแปรในภาษา C/C++

ชนดตวแปร ค ำสงส ำหรบกำรประกำศ ขนำด (บต) ชวงของขอมล

ตวอกษร* char 8 -128 ถง 127 ตวอกษร unsigned char 8 0 ถง 255

จ านวนเตม int 16 -32768 ถง 32767 จ านวนเตม unsigned int 16 0 ถง 65535 จ านวนเตม long 32 -231 ถง 231-1 เลขทศนยม float 32 -3.4E+38 ถง 3.4E+38** เลขทศนยม double 64 -1.8E+308 ถง 1.8E+308 คาความจรง bool 8 True (= 1) หรอ False (= 0)

* เกบดวยรหสแอสก (ASCII Code) **เราใช E แทนการเขยนดวยสบยกก าลง (เชน 3E+2 = 3×102)

ส าหรบในภาษา C/C++ นนชอตวแปรทมตวพมพเลก-ใหญตางกน ถอเปนตวแปรคนละตว (case sensitive) เชนตวแปรชอ relay เปนคนละตวแปรกบ Relay หรอ ReLay หรอ RELAY

โดยทกค าสงในในภาษา C/C++ จะตองลงทายดวยเครองหมายเซมโคลอน ; (หรอเครองหมายอฒภาค) เพอบอกใหภาษา C/C++ ทราบวาเปนการสนสดค าสงนน

เราสามารถใส ค าหรอขอความทเราไมตองการใหโปรแกรมประมวล แตเขยนเพอบนทกชวยในการอานโคดนนได โดยท าได 2 วธ คอ

1. ใสเครองหมาย /* */ ครอบขอความทเราเขยน เชน /* ขอความนไมถกประมวลผลดวยโปรแกรม */ 2. ใสเครองหมาย // ไวดานหนาของขอความ ท าใหโปรแกรมไมประมวลขอความท

ตามมาทงบรรทด เชน int x = 2; // ประกาศตวแปร x ใหมคาเทากบ 2

Page 19: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

15

ส าหรบสตรง (String) ซงเปนขอมลทสรางไดจากอาเรยของตวอกษร จะสามารถสรางไดจากการประกาศอาเรยของตวอกษร โดยในการใชงานเบองตนนน เราจะก าหนด ตวอกษรทอยใน เครองหมายอญประกาศเดยว ‘ ’ เปนชนดตวอกษรตวเดยว (character) และตวอกษรในเครองหมายอญประกาศ “” เปนขอมลชนดสตรง เชน “ABC”, “Hello”

ส าหรบตวอกษรพเศษตาง ๆ เชน การกนหนา (tab, \t) ทมการก าหนดในรหสแอสกมาตรฐานและไมสามารถเขยนแทนดวยตวอกษรภาษาองกฤษได เรากจะใช เครองหมาย \ น าหนา เพอใชแจงใหโปรแกรมภาษา C/C++ ทราบ ‘\n’ คอ ตวอกษรขนบรรทดใหม (newline character) และเมอโปรแกรมตองแสดงผลตวอกษรน กจะแสดงโดยการเลอนเคอ-เซอรไปขนบรรทดใหม

ในการเขยนภาษา C/C++ ค าสงพนฐานจะมลกษณะเปนฟงกชน โดยฟงกชนทถกเรยกใชบอย ๆ คอฟงกชนหรอค าสง printf() ซงฟงกชนนจะใชเพอใหโปรแกรมพมพแสดงขอความออกมาทางจอภาพ (ฟงกชนนถกก าหนดไวในไลบรารมาตรฐานของภาษา C คอใน stdio.h) รปแบบการใชงานคอ

printf(สตรง);

เชนค าสง printf(“Hello World.”); จะแสดงขอความ Hello World. บนจอ โดยไมแสดงเครองหมายค าพดทเปนตวก าหนดชนดขอมล ซงสตรงนอาจก าหนดใหมขอมลทเปนตวแปรและแทนทดวยคาตวแปรในขณะแสดงผลได เชนค าสง printf(“value of x = %d”, x); จะแสดงขอความ value x = คาตวเลขจ านวนเตมทเกบอยในตวแปรชอ x โดย %d หมายถงการแสดงคาตวแปรทตามมานนเปนคาในเลขฐานสบ (decimal value)

การด าเนนการในการเขยนโปรแกรมพนฐานคอการก าหนดคา (assignment operator) โดยใชเครองหมายเทากบ (=) นนคอ

ตวแปร = ผลของกำรด ำเนนกำร

Page 20: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

16

โดยเครองหมายเทากบนจะตางกบเครองหมายเทากบในทางคณตศาสตร เพราะ ในการเขยนโปรแกรม เครองหมายนจะหมายถงการน าคาทไดจากผลการด าเนน (หรอผลลพธจากการเรยกฟงกชน) การลงไปเกบในตวแปรทอยดานซานมอเทานน

ส าหรบการด าเนนการพนฐาน แบงไดเปน 4 กลม ซงสรปไวในตารางท 2.2 ส าหรบตวด าเนนการทมใชตวด าเนนการพนฐาน เชน การหาคารากทสอง การหาคาจากการค านวณเลขยกก าลง xy ภาษา C/C++ กสามารถด าเนนการไดโดยเรยกใชค าสงหรอฟงกชนเฉพาะ เชน sqrt(), pow() โดยอาจจะตองเรยกใชไลบรารเพมเตมในตอนตนของโปรแกรม โดยใชค าสง #include เชน #include <math.h> เปนการเพมไลบรารทมชดค าสงในการค านวณทางคณตศาสตรเพมเตมเขาไปในโปรแกรม โดยค าสงทเพม จะมแสดงอยในไฟล math.h

ตำรำงท 2.2 ตวด าเนนการในภาษา C/C++

กลมตวด ำเนนกำร ตวด ำเนนกำร ค ำอธบำย ตวด าเนนการค านวณ

+ (บวก), – (ลบ) * (คณ), และ / (หาร)

เครองหมาย * และ / จะถกกระท ากอนเครองหมาย + และ -

ตวด าเนนการเชงความสมพนธ (relational operator)

> (มากกวา), < (นอยกวา) >= (มากกวาหรอเทากบ), <= (นอยกวาหรอเทากบ), == (เทากบ) และ != (ไมเทากบ)

ผลลพธจากตวด าเนนการนจะเปนคาความจรง (จรงหรอเทจ) เทานน เชน 2 => 1 ใหคาความจรงเปนจรง และ 1 != 7/7 ใหคาความจรงเปนเทจ

ตวด าเนนการทางตรรก (logical operator)

&& (และ) || (หรอ) และ ! (นเสธ)

ใชในการก าหนดเงอนไขการท างานของโปรแกรมโดยด าเนนการกบผลลพธทไดจากตวด าเนนการความสมพนธ

ตวด าเนนการประกอบ (compound operator)

++ (เพมคาอกหนงแลวแทนท) -- (ลดคาลงหนงแลวแทนท) += (เพมคาแลวแทนท) -= (ลดคาแลวแทนท)

เชน i++ หมายถง i = i +1; j += 2 หมายถง j = j + 2; โดยตวด าเนนการนท าใหสามารถเขยนโปรแกรมไดกระชบขน

Page 21: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

17

2.2 ค ำสงควบคม

ในการเขยนโปรแกรมภาษา C/C++ เพอควบคมการท างานของคอมพวเตอรนน เราจะตองก าหนดการด าเนนการคอการเขยนชดค าสงใหโปรแกรมท างานเปนล าดบ ในกรณอยางงายทสดคอการท างานตามล าดบดงแสดงเปนแผนผงการท างานไดดงรปท 2.1

รปท 2.1 แผนผงการท างานตามล าดบและ ตวอยางค าสงประกาศตวแปร x และก าหนดคา x = 2

ชดค าสงควบคมทจะเปนตวก าหนดล าดบการท างานแบงไดเปน 2 ประเภท คอ แบบ

เลอกทางใดทางหนงโดยใชค าสง if-else และ แบบวนลปโดยการตรวจสอบเงอนไข คอค าสง for โดยค าสงควบคมทงสองประเภทจะใชผลลพธจากการด าเนนการเชงความสมพนธ เปนตวตดสนใจ - ชดค ำสง if-else มรปแบบคอ

if (เงอนไข) { ชดค ำสง1

} else { ชดค ำสง2

}

Page 22: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

18

ซงเงอนไขจะใหผลลพธออกมาเปนจรง (True) หรอเทจ (False) ไดเทานน โดยเมอเงอนไขเปนจรง โปรแกรมกจะท าชดค าสง1 และหากเปนเทจโปรแกรมกจะท าชดค าสง2 โดยชดค าสง if-else น สามารถเขยนแสดงไดในรปแผนผงการท างาน ดงรปท 2.2

รปท 2.2 แผนผงการท างานของชดค าสง if-else - ชดค ำสง for เปนชดค าสงทใชในการวนลป มรปแบบคอ

for (ค ำสง1; เงอนไข; ค ำสง2) { ชดค ำสง

}

ในการท างานของค าสง for น กจะเรมจากการท าค าสง1 แลวตรวจสอบเงอนไข จากนนจงท าชดค าสงภายในลป 1 ครง จงท าค าสง2 กอนตรวจสอบเงอนไข เพอด าเนนการในรอบถดไป โดยหากเงอนไขทตรวจสอบใหผลลพธเปนเทจ โปรแกรมกจะออกจากค าสง for น แลวด าเนนการในล าดบถดไป ชดค าสง for น สามารถเขยนแสดงไดในรปแผนผงการท างาน ดงรปท 2.3

Page 23: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

19

รปท 2.3 แผนผงการท างานของชดค าสง for

ตวอยางการใชงานชดค าสง for ทพบเหนไดบอยคอ for (int i=0; i < 10; i++) { ชดค าสง } ซงเปนการ ก าหนดตวแปรชอ i เปนตวแปรทใชในการวนลป โดยเรมตนท i = 0 แลวจากนนใหตรวจสอบวา i มคานอยกวา 10 หรอไม หากใช กจะท างานในชดค าสงในลป for น โดยเมอท างานเสรจ โปรแกรมกจะเพมคา i อก 1 ดวยค าสง i++ ซงหมายความวาให i+1 กลายเปน i ( i = i + 1 ) ดงนน ชดค าสงในลปนกจะถกน ามาประมวล 10 ครง - ชดค ำสง while เปนชดค าสงทใชในการวนลปโดยตรวจสอบเงอนไขกอน (คลาย for) มรปแบบคอ

while (เงอนไข) { ชดค ำสง

}

Page 24: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

20

ในการท างานของค าสง while น กจะตรวจสอบเงอนไข โดยหากผลการตรวจสอบเปนจรงโปรแกรมกจะท าชดค าสงภายในลป 1 ครง แลวจงกลบมาตรวจสอบเงอนไขอกท แผนผงการท างานของชดค าสง while จะคลายกบของชดค าสง for แตจะไมมค าสง1 และค าสง2 ในรปแผนผง (รปท 2.3)

นอกจากค าส งควบคม พนฐาน if-else, for และ while ท กลาวถงในหวขอน โปรแกรมภาษา C/C++ ยงมค าสงควบคมอกหลายตว ไดแก ชดค าสง switch-case และชดค าส ง do-while นอกจากนยงมค าส งท ใช เปลยนเสนทางการด าเนนการคอค าส ง continue, break, goto และ return ทมไดกลาวถงในรายละเอยดในทน

2.3 อำเรยและฟงกชน

อำเรย (array) เปนตวแปรชดหรอตวแปรล าดบ ทเปนขอมลชนดเดยวกน รปแบบอาเรยทมใชงานกนมากคออาเรยของขอมล 1 มต (โดยในทางคณตศาสตรจะเรยกวาเวกเตอร) และอาเรยของขอมล 2 มต (ทเรยกวาเมทรกซ) ในภาษา C/C++ เราสามารถประกาศตวแปรอาเรยไดโดยใชเครองหมายวงเลบ [N] ตามหลงชอของอาเรยโดย N คอขนาดของอาเรย ตวอยางเชน ตวแปรสตรงซงเปนอาเรย 1 มตของตวอกษร สามารถประกาศและก าหนดคาไดดวยค าสง

char greeting[6] = “Hello”; ตวอกษร 6 ตวในขอความขางตน จะถกก าหนดลงในอาเรยของตวแปรตวอกษรทชอวา greeting โดยมล าดบการเกบขอมลภายในหนวยความจ าแสดงไดดงรปท 2.4 โดยสญลกษณ \0 ซงเปนตวอกษรสดทายทซอนอย เปนตวอกษณะพเศษท ใชในการบอกจดสนสดของอาเรยขอความ โดยอาเรยในภาษา C/C++ จะมเลขดชน (index) เปนจ านวนเตมบวกทเรมจาก 0 เสมอ และเราอาจไมใสขนาดของอาเรยกไดหากเราก าหนดขอมลทเกบในอาเรยทนท นนคอ ค าสง char greeting[] = “Hello”; จะใหผลเหมอนกบผลของตวอยางขางตน

Page 25: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

21

รปท 2.4 ลกษณะการเกบขอมลแบบอาเรย 1 มต

บอยครงในโปรแกรมภาษา C/C++ ทเราเขยนขนทเรามไดประกาศตวแปรสตรง แต

น ามาใช เชนการแสดงขอความผานฟงกชน printf ทงนเพราะวาเรามไดตองการเปลยนแกไข หรอประมวลขอความเหลานน โดยส าหรบการด าเนนการเกยวกบอาเรยสตรงนน กสามารถท าได โดยภาษา C/C++ มไลบราร string.h ทรวบรวมค าสงมากมายส าหรบการจดการสตรง เชน การคดลอก (strcpy) การรวมสตรง (strcat) การหาความยาวสตรง (strlen) เปนตน

อาเรยของขอมลประเภทตาง ๆ สามารถประกาศไดในลกษณะเดยวกนกบอาเรยของตวอกษร ตวอยางเชน

int a[3]; เปนการประกาศตวแปรอาเรย 1 มต คอ a[0], a[1], และ a[2] โดยการเขาถงคาของสมาชกแตละตวอาจท าโดยการใชชดค าสง for เชน int a[3]; for (int i = 0; i < 3; i++) { a[i] = 5*i; } โดยชดค าสงขางตนน จะก าหนดคาใหกบตวแปร a[0], a[1], และ a[2] ตามล าดบ

ส าหรบอาเรยสองมต กสามารถก าหนดไดโดยใชวงเลบ 2 ชด ตวอยางเชน float M[3][2];

Page 26: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

22

เปนการประกาศตวแปรอาเรย 2 มต ชอ M โดยมสมาชก 6 ตว คอ M[0][0], M[0][1], M[1][0], M[1][1], M[2][0], และ M[2][1] ซ งการเขาถงหรอการเรยกใชคาในอาเรยน กสามารถท าไดโดยใชชดค าสง for ซอนกน เชน float M[3][2]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { M[i][j] = 3.0*i + j; printf(“i = %d, j = %d, M[%d][%d] = %f”, i, j, i, j, M[i][j]); } }

ส าหรบการเขาถงอาเรยอกวธหนง คอการใชพอยเตอร (pointer) ทเปนเสมอนตวแปรทเกบขอมลของทอยของขอมลอกทหนง การใชงานตวแปรพอยเตอรจะมประโยชนมากในการสรางโครงสรางขอมล (data structure) บางประเภท เชน ลงคสสต (linked list) และ การจดการกบขอมล เชน การเรยงล าดบ (sorting) ผสนใจในสวนน สามารถศกษาเพมเตมไดจากหนงสอเกยวกบการเขยนโปรแกรมภาษา C/C++ โดยตรง

ฟงกชน (function) หรอค าสงในภาษา C/C++ เปนสงทผเขยนโปรแกรมน ามาใช โดยฟงกชนอาจแบงเปนสองประเภท คอฟงกชนภายในตวภาษา (built-in function) และฟงกชนทผใชสรางขนเอง (external function) ในหวขอนเราจะกลาวถงการสรางฟงกชนขนเอง ส าหรบฟงกชนพนฐานภายในภาษา C/C+ และฟงกชนจากไลบรารมาตรฐาน จะมจ านวนมาก และผใชสามารถศกษาไดจากเอกสารออนไลนไดโดยงาย โดยการคนหาค าทเกยวของ

รปแบบของการประกาศฟงกชนในภาษา C/C++ คอ

Page 27: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

23

ชนดขอมลทสงคน ชอฟงกชน (ชนดและชอขอมลทรบเขำ) {

ชดค ำสง return( ชอตวแปรทสงคำคน );

}

โดยค าสง return อาจใชหรอไมใชกได ขนกบวา ฟงกชนทเรยกมการคนคาหรอไม หากไมมการคนคา จะใช ค าวา void บงบอกชนดขอมลทสงคนวา ไมมการสงคน (void แปลวา วางเปลา) ตวอยางเชน

ตวอยางท 1 void setup() { } คอฟงกชนชอ setup ทไมมการรบคาใด ๆ เขาและไมมการคนคากลบออกไป

ตวอยางท 2 float cal_area(float x, float y) { float area; area = x * y; return(area); } คอฟงกชนชอ cal_area ทมการรบคาตวแปร x และ y เขาและมการคนคาของตวแปรชอ area กลบออกไป โดยตวแปรทประกาศในฟงกชนนจะมคาเฉพาะภายในฟงกชนนเทานน (เรยกวา local variable) เมอโปรแกรมท าการค านวณเสรจ กจะลางหนวยความจ าของตวแปรภายในออกไป โดยหากเราตองการใหตวแปรนนมลกษณะทใชไดทวไปตลอดทงโปรแกรม (เรยกวา global variable) เราจะตองท าการประกาศตวแปรไวภายนอกฟงกชน ซงภาษา C/C++ จะทราบวาตวแปรทประกาศไวภายนอก จะเปนตวแปรทสามารถใชไดในทกฟงกชนทอยภายในโปรแกรม

Page 28: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

24

2.4 รปแบบกำรเขยนโปรแกรมเชงวตถเบองตน

ในเชงประวตศาสตร ภาษา C++ เปนภาษาทพฒนามาจากภาษา C โดยมการเพมความสามารถในการเขยนโปรแกรมเชงวตถ (Object-Oriented Programming, OOP) เขาไปดวย ซงท าใหภาษา C++ เปนภาษาทมประสทธภาพสง ผใชสามารถเขยนโปรแกรมไดหลากหลายรปแบบ

การเขยนโปรแกรมเชงวตถเปนแนวคดในการเขยนโปรแกรมทก าหนดให “วตถ” (instance) มทงขอมลและกระบวนการอยภายใน โดยขอมลนนจะอยในฟลด (field) ทประกาศไวในตอนทสรางตววตถ และ กระบวนการทอยภายในวตถจะถกเรยกวา เมธอด (method) ซงเมธอดนคอฟงกชนประเภทหนงทก าหนดภายในโครงสรางของ “วตถ” และใชขอมลทเกบในตววตถนในการประมวลผลดวย โดยในการเขยนโปรแกรมขนตน เราไมจ าเปนตองสรางวตถขนเอง แตเราจะตองเขาใจรปแบบของการเขยนโปรแกรมเชงวตถน เพอใหสามารถน า “วตถ” ทผอนก าหนดมาใชไดอยางถกตอง

การใชงานไลบรารทเขยนโปรแกรมเชงวตถน เรมตนจากการประกาศชอตวแปร “วตถ” ตามตนแบบทก าหนดอยภายในไลบรารทเรยกใช ตวอยาง (น ามาจากบทท 6) เชน ชดค าสง

#include <SH1106.h> SH1106 display(0x3c, D1, D2);

เปนการเพมไลบราร SH1106.h เขามาในโปรแกรม จากนนจงประกาศตวแปรวตถหรอ instance ทใหชอวา display ซงจะน าโครงสรางของวตถนมาจากคลาส (class) ชอ SH1106 มาใช โดยการสรางวตถทชอวา display นถกก าหนดใหเชอมตอกบหนวยความจ าต าแหนง 0x3c และตอกบขา D1 และ D2 โดย D1 และ D2 เปนชอขาของไมโครคอนโทรลเลอร ทมการก าหนดต าแหนงและวธการเขาถงในหนวยความจ าของเครองอยกอนแลว

ผใชสามารถเขาถงเมธอดหรอฟงกชนทก าหนดในไลบรารไดโดยการเปดไฟลไลบรารดไดโดยตรง และการเรยกใชงานเมธอดเหลานนกสามารถท าไดโดยการใชจด . ซงค าสงจะมรปแบบคอ

Page 29: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

25

วตถ.เมธอด(พารามเตอรรบเขา) หรอ instance.method(parameters); ตวอยางเชน

display.setFont(ArialMT_Plain_16); เปนการเรยกใชเมธอดชอ setFont ซงประกาศในวตถน โดยมพารามเตอร คอ ArialMT_ Plain_16 ซงเปนก าหนดชนดของตวอกษรหรอฟอนตทแสดงดวยวตถชอ display โดยหากวาเรามวตถหลาย ๆ ตว การก าหนดนกจะไมสงผลใด ๆ ตอวตถอน เพราะวา ตวแปรทถกเปลยนแปลงคา ซอนอยภายในวตถชอ display อกทหนง

แนวคดการเขยนโปรแกรมเชงวตถนอาจจะดซบซอนส าหรบผฝกหดเขยนโปรแกรม แตหากศกษาให ล กลงไปจะพบวา การเขยน โปรแกรมขนาดใหญ เชน โปรแกรมระบบปฏบตการ จะมความซบซอนมากหากใชวธการเขยนโปรแกรมแบบดงเดม เนองจากจะพบความยงยากในการจ ากดเขตของการก าหนดคาของตวแปรตาง ๆ และการสงคาของขอมลระหวางฟงกชนจะมความซบซอนมาก การเขยนโปรแกรมเชงวตถน เปนแนวคดทท าใหการพฒนาโปรแกรมท างานไดงายขน โดยผทน าไลบรารทมการเขยนโปรแกรมลกษณะนมาใช จ าเปนจะตองศกษาเพยงฟงกชน (หรอเมธอด) ทอยภายในเพอใหสามารถใชงานไดตามตองการ ส าหรบการน าแนวคดของการเขยนโปรแกรมเชงวตถมาใชกบการพฒนาฮารดแวรดานไมโครคอนโทรลเลอรจะท าใหเราสามารถมองเสมอนวา ฮารดแวรตาง ๆ ทน ามาตอ เปนเสมอนกบวตถหนง ๆ ทเราสามารถเขยนโปรแกรมสงการไดตามความตองการโดยตรง โดยการเรยกเมธอดทมอยมาใชงาน

Page 30: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

26

Page 31: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 3

แนะน ำสถำปตยกรรมของ NodeMCU v.3

ในบทนจะเปนการแนะน าบอรด NodeMCU v.3 ซงเปนไมโครคอนโทรลเลอรหลกท

เลอกมาน าเสนอในหนงสอเลมน โดยการประยกตใชอปกรณตาง ๆ ทน าเสนอในบทตอ ๆ ไป กจะใชบอรดนเปนฐานในการเชอมตอ

3.1 คณสมบตของ NodeMCU v.3

NodeMCU คอ แพลตฟอรมหนงทใชชวยในการสรางโปรเจคอนเทอรเนตของสรรพสง (Internet of Things, IoT) ทประกอบไปดวยตวบอรด และ ซอฟตแวรในตว (Firmware) ทเปนลกษณะโอเพนซอรส (open-source) ในตอนแรก ผใชจะตองเขยนโปรแกรมดวยภาษา Lua เพอใหใชงาน NodeMCU ได แตตอมาไดพฒนาใหสามารถใชภาษา C ใน Arduino IDE เพอควบคมได ท าใหใชงานไดงายขน โดยบอรดนมาพรอมกบโมดล WiFi (ESP8266) ซงเปน หวใจส าคญในการใชเชอมตอกบอนเทอรเนต ตวโมดล WiFi (ESP8266) นนมอยดวยกนหลายรน ตงแตเวอรชนแรกคอ ESP-01 จนในมถงเวอรชน ESP-12 โดยโมดลนทเปนองคประกอบใน NodeMCU รนแรกนนคอ ESP-12 และในเวอรชนตอมา (NodeMCU v.2) นนจะใชโมดล ESP-12E แทน ซงในการใชงานโดยรวมนนจะไมแตกตางกนมากนก แตบอรดเวอรชน 3 จะมขนาดใหญขน NodeMCU นนมลกษณะคลายกบ Arduino ตรงท มพอรตขาเขาหรออนพตพอรต (input port) และ พอรตขาออกหรอเอาตพตพอรต (output port) อยในตวเอง ท าใหเราสามารถเขยนโปรแกรมควบคมอปกรณตาง ๆ ไดโดยตรง ไมตองท าผานชปอน ๆ NodeMCU v.3 นสามารถท าอะไรไดหลายอยางมาก โดยเฉพาะงานท เกยวของกบ IoT

Page 32: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

28

ไมวาจะเปน การท าเวบเซรฟเวอรขนาดเลก การควบคมการเปดปดไฟผานเครอขาย และอน ๆ อกมากมาย ตวบอรด NodeMCU v.3 แสดงดงรปท 3.1

รปท 3.2 แสดงต าแหนงพนและขาของ NodeMCU v.3 โดยมขาทใชงานบอย ๆ คอขา GPIO (General Purpose Input/Output) หรอขา D0 – D12 ขา ADC (Analog to Digital) หรอขา A0 และ ขาไฟเลยง (VUSB และ 3.3 V) และกราวด (Ground, GND)

รปท 3.1 ภาพบอรด NodeMCU v.3

รปท 3.2 ต าแหนงพนและขาของ NodeMCU v.3

Page 33: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

รปท 3.3 วงจรของบอรด NodeMCU v.3 (ภาพจาก https://github.com/nodemcu/nodemcu-devkit)

Page 34: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

3.2 NodeMCU Base v.1

เพอความสะดวกในการใชงาน NodeMCU ซงเปนบอรดขนาดเลก ผพฒนาไดสราง NodeMCU Base ขนเพอเปนฐานส าหรบการเชอมตอตาง ๆ ดงแสดงในรปท 3.4(ก) และมลกษณะการใชงาน ดงแสดงในรปท 3.4(ข)

รปท 3.4 (ก) บอรด NodeMCU Base Version 1.0 และ (ข) บอรด NodeMCU และ NodeMCU Base

Page 35: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

31

3.3 กำรตดตงโปรแกรม Arduino IDE ส ำหรบ NodeMCU

การตดต งโปรแกรม Arduino IDE เปนการตดต งโปรแกรมเพอใชในการเขยนโปรแกรมใหกบบอรด ESP8266 หรอบอรดอน ๆ ผานทาง Arduino IDE ซงจะใชหลกการของภาษา C/C++ ทกลาวถงโดยยอในบทท 2 การเชอมตอกบบอรดนท าไดดวยวธการเดยวกบการเชอมตอบอรด Arduino อน ๆ เพอใหการเขยนโปรแกรมมความงายมากยงขน ส าหรบผทคนเคยกบบอรด Arduino อยกอนแลว ขนตอนการตดตงมรายละเอยดดงตอไปน ดำวนโหลดโปรแกรม

โปรแกรมทเราใชในการทดสอบคอ Arduino IDE 1.8.8 IoT โดยโปรแกรมจะรองรบระบบปฏบตการ Windows, Mac OS X, Linux ทงแบบ 32 บต และ 64 บต ซงเราสามารถดาวนโหลดตวตดตงไดจาก https://www.arduino.cc/en/main/software หรอ https:// inex.co.th/shop/software-download รปท 3.5 แสดงหนาตางดาวนโหลด Arduino IDE ของเวบบรษท Inex ส าหรบไดตดตง Arduino IDE (จาก arduino.cc) จะตองท าการตดตง Board Manager URL เพ ม เต ม และดาวน โหลดส วนขยายส าหรบ ESP8266 โดยมรายละเอยดแสดงในภาคผนวก ก

รปท 3.5 หนาตางดาวนโหลด Arduino IDE ทมสวนขยาย IoT จาก https://inex.co.th/shop/software-download

Page 36: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

32

ส าหรบการตดตง Arduino IDE บน Windows จะมแบบใหเลอกทง แตกไฟลใชไดเลย (ZIP file for non admin install) หรอ ตดตงเหมอนโปรแกรมอนทว ๆ ไป คอ รนโปรแกรมตดตง (Installer) หากดาวนโหลดเรยบรอยแลวใหเปด Arduino 1.8.8_IoT_Setup ขนมาดงรปท 3.6 โดยเลอกตดตงโปรแกรมลงท C:\Arduino18 ดงรปท 3.7

รปท 3.6 หนาตางเรมตนการตดตงโปรแกรม Arduino IDE

รปท 3.7 หนาตางเลอกโฟลเดอรทตดตงโปรแกรม Arduino IDE

Page 37: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

33

เลอกตดตงบอรด ESP8266 ลงใน Arduino IDE หลงจากเลอกตดตง Arduino IDE แลวกใหกดเลอกตดตงแบบ Full Installation

with IoT ESP2866 ดงรปท 3.8 จากนนกเลอกตดตงไอคอนลงบน Start Menu และ เลอกตดตงโปรแกรม จากนนโปรแกรมจะถกตดตงดงรปท 3.9

รปท 3.8 หนาตางแสดงการเลอกการตดตง ESP2866 add-on

รปท 3.9 หนาตางแสดงการตดตงโปรแกรม Arduino IDE

Page 38: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

34

รอจนกวาจะตดตงโปรแกรม Arduino IDE เสรจสน จากนน จะมหนาตางปรากฎขน ใหผตดตงท าการตดตงไดรเวอร CP210x USB to UART โดยกดปม Next ดงรปท 3.10 และ อานและกดเลอกยอมรบ (accept) ขอตกลงเรองไลเซนต จากนนไดรเวอรจะตดตงลงในคอมพวเตอร และแสดงผลลพธดงแสดงในรปท 3.11 จากนนเปนการสนสดการตดตง

ส าหรบหนาตางเลอกตดตงไดรเวอรอน ๆ ทอาจปรากฎขนหลงตดตงโปรแกรม Arduino IDE นน ขอใหผตดตงเลอกตดตงไดรเวอรเหลานนดวย

หลงจากตดตงเสรจ โปรแกรมจะใหเลอกลกษณะตงตนของหนาตาโปรแกรม ขอใหเลอก Arduino ดงรปท 3.12

รปท 3.10 หนาตางแสดงการตดตงไดรเวอร CP210x USB to UART

Page 39: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

35

รปท 3.11 หนาตางแสดงการผลการตดตงไดรเวอร CP210x USB to UART

รปท 3.12 หนาตางแสดงตวเลอกลกษณะตงตนของบอรดส าหรบโปรแกรม Arduino IDE

Page 40: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

36

3.4 กำรเรมตนทดสอบโปรแกรม Arduino IDE

เลอกบอรดในโปรแกรม Arduino IDE เมอตดตงโปรแกรม Arduino IDE ตามขนตอนในหวขอทแลวเสรจสมบรณแลว ขอให

เปดโปรแกรม Arduino 1.8.8 และท าการเลอกบอรด โดยทเลอกทเมน Tools แลวเลอก Board: NodeMCU 1.0 (ESP-12E Module) ดงรปท 3.13 เพอใชเขยนโปรแกรมควบคม

รปท 3.13 การเลอก Board: NodeMCU 1.0 (ESP-12E Module) ในโปรแกรม Arduino IDE

Page 41: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

37

กำรเชอมตอ NodeMCU v.3 กบคอมพวเตอร ขอใหตอสาย USB เขากบ NodeMCU แลวตอสาย USB อกดานเขาท เครอง

คอมพวเตอร หลงจากนนใหก าหนดชองทางเชอมตอโปรแกรม Arduino IDE กบ NodeMCU โดยเลอกทดทเมน Tool >> Ports: ส าหรบตวอยางน NodeMCU ทเชอมตอ จะตออยท COM3 ดงนนจงเลอก Port เปน COM3 ดงรปท 3.14

รปท 3.14 การเลอก Port ทตดตอกนระหวาง NodeMCU และโปรแกรม Arduino IDE

ขอใหท าการทดลองอปโหลดโปรแกรม โดยคลกทปม (Upload) หรอไปทเมน Sketch >> Upload โดยขอใหสงเกตในขณะทอปโหลด LED ทมมขาง ๆ ชป ESP8266 (D4) จะกระพรบ และหนาตางขอความดานลางของโปรแกรมจะแสดงเปอรเซนตการอปโหลด รอจนการอปโหลดจะเสรจสน หากไมพบขอความบอกความผดพลาด (error message) ใด ๆ กแสดงวาบอรด NodeMCU v.3 ตดตอกบโปรแกรม Arduino IDE ไดส าเรจดงรปท 3.15

Page 42: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

38

รปท 3.15 รปแสดงการอปโหลดโปรแกรมลงสบอรด NodeMCU v.3 โครงสรำงโปรแกรม Arduino

ในการเขยนโปรแกรมส าหรบควบคมบอรด NodeMCU v.3 ในการอบรมนเราจะตองเขยนโปรแกรมโดยใชภาษาของ Arduino (Arduino programming language) ซงตวภาษาของ Arduino เองกน าเอาโอเพนซอรสโปรเจกตท ชอ wiring มาพฒนาตอ ภาษาของ Arduino แบงไดเปน 2 สวนหลกคอ

1. โครงสรางภาษา (structure) ตวแปรและคาคงท 2. ฟงกชน (function) ภาษา Arduino จะอางองวธการเขยนโปรแกรมตามภาษา C/C++ จงอาจกลาวไดวา

การเขยนโปรแกรมส าหรบบอรด Arduino (ซงกรวมถงบอรด NodeMCU ดวย) กคอการเขยนโปรแกรมภาษา C/C++ โดยเรยกใชฟงกชนและไลบรารตาง ๆ ททางผพฒนา ไดเตรยมไวใหแลวซงสะดวกและ ท าใหผทไมมความรดานไมโครคอนโทรลเลอรอยางลกซงสามารถเขยน

Page 43: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

39

โปรแกรมสงงานได โดยโปรแกรมภาษา Arduino มสองสวนหลก ๆ คอ ฟงกชน setup() และ ฟงกชน loop() ดงรปท 3.16

เมอโปรแกรมทเขยนถกคอมไพล กจะมการก าหนดตวแปรตาง ๆ ทอยดานบนของโคดกอนจะเขาสฟงกชน setup() โดยการท างานของโปรแกรมนนจะเรมทฟงกชน setup() ซงจะมการรนค าสงในฟงกชนนเพยงครงเดยว ฟงกชนนอาจใชในการก าหนดคาเรมตนตาง ๆ ของการท างาน สวนฟงกชน loop() เปนสวนท างานโปรแกรมจะท าค าสงในฟงกชนนอยาง ตอเนองกนตลอดเวลา โดยปกตค าสงในฟงกชน setup() จะใชก าหนดการตงคาการท างานของขาตาง ๆ ของบอรด รวมถงก าหนดการสอสารแบบอนกรมกบคอมพวเตอร

ฟงกชน loop() เปนโคดหลกของโปรแกรมทท างานซ า ๆ เชน อานคาอนพต ประมวลผล ก าหนดคาเอาตพต ฯลฯ โดยสวนก าหนดคาเรมตนเชนตวแปรจะตองเขยนทสวนหวของโปรแกรมกอนถงตวค าสง เชนเดยวกบการเขยนโปรแกรมในภาษา C/C++ โดยเราจะ ตองค านงถงตวพมพเลก-ใหญของชอตวแปรและชอของฟงกชนดวย คอจะตองเขยนชอตวแปรเหลานใหถกตองตรงกนเสมอ ส าหรบการอบรมน เราจะเรยนรวธการและเทคนคการเขยนโปรแกรม ภาษา C/C++ ใน Arduino IDE ผานการทดลองในแตละการทดลอง

รปท 3.16 (ก) ลกษณะโคดเรมตนและ (ข) แผนผงการท างานพนฐานของ Arduino

Page 44: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

40

Page 45: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 4

กำรใชงำนรเลย

4.1 รเลย

รเลยเปนอปกรณอเลกทรอนกสทใชในการตดตอวงจรคลายกบสวตช รเลยทวไปจะใชปรากฎการณทางไฟฟาแมเหลกในการท างาน และเรยกวาเปนแบบมหนาสมผส รเลยหนง ๆ จะประกอบดวยชดหนาสมผส (Contact) ทตอกบ แทงอารเมเจอร (Armature) และคอยล (Coil) ทถกพนดวยขดลวด เมอมการจายแรงดนไฟฟาใหกบคอยลจะท าใหเกดสนามแมเหลก แทงอารเมเจอรทตอกบหนาสมผสจะถกดดดวยแรงแมเหลก ท าใหหนาสมผสเปลยนสถานะการเชอมตอเปนสถานะตรงกนขาม กลาวคอ ปกตเปด (NO, Normally Open) จะกลายเปนปด และปกตปด (NC, Normally Closed) จะกลายเปนเปด และเมอตดไฟเลยงท จายใหคอยล จะท าใหรเลยกลบสสถานะเดม คอหนาสมผสตางๆ จะกลบสสภาวะแรกกอนการจายไฟดวยแรงจากสปรงทตดตงอยภายใน รปรางทวไปของรเลยขวเดยวสองทาง (Single Pole Double Throw, SPDT) และลกษณะภายในของรเลยแสดงดงรปท 4.1 (ก) และ (ข) และ บอรดรเลยทใชในการทดลองแสดงดงรปท 4.2 โดยบอรดทเลอกใชนมวงจรควบคมรเลยอย 4 ชด

รปท 4.1 (ก) รปรางและ (ข) ลกษณะภายในของรเลย

Page 46: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

42

รปท 4.2 บอรดรเลยชนด 4 ชอง แบบ isolation control, 250V/10A และ Active Low

การท างานของวงจรควบคมรเลยขนอยกบลกษณะการตอวงจร โดยส าหรบบอรดทแสดงในรปท 4.2 น รเลยจะท างานเมอไดรบสญญาณลอจกต า (Active Low) ทขา IN แตละขา ซงเราจะท าการเชอมตออยกบขาของ NodeMCU v.3 โดยเมอปอนสญญาณระดบต า (LOW) ทขา IN1 (ดรปท 4.3) แลว กระแสไฟฟาจะไหลผาน LED ท าให LED สวาง สวนภายในชฟ U1 นน เมอมกระแสไหลผานกจะมการสงสญญาณแสงท าใหทรานซสเตอรใน U1 น ากระแสและท าใหทรานซสเตอร Q1 มสถานะน ากระแสดวย ซงกจะท าใหรเลยท างาน (คอมการเปลยนสถานะ) ส าหรบไดโอด D1 ทตอขนานกบคอยลของรเลยนน เพอท าใหกระแสไฟฟาสามารถไหลยอนกลบทางไดในชวงเวลาสน ๆ ขณะทรเลยเปลยนสถานะ

รปท 4.3 วงจรบอรดรเลย (เฉพาะสวนของรเลยตวท 1)

Page 47: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

43

รปท 4.4 แสดงตวอยางการน ารเลยไปใชควบคมอปกรณไฟฟาทวไป เชน หลอดไฟ โดยเราสามารถตออปกรณแรงดน 220 V กระแสสงสด 10 แอมแปรกบบอรดรเลยนได โดยในการทดลองเบองตน เราจะไมมการตอไฟฟาแรงดน 220 V จรง ดงนนเราอาจจะเอาจมเปอร JD บนบอรดรเลยนออก (ดรปท 4.2 และ รปท 4.3) เพอมใหรเลยท างานจรงแตจะสงเกตการท างานผานหลอด LED ทแสดงสถานะของรเลยบนบอรดรเลยแทน

รปท 4.4 ตวอยางการน ารเลยไปควบคมกบอปกรณไฟฟาทวไป

4.2 กำรเขยนโปรแกรมสงออกคำดจทล

ค าสงเบองตนในการใชงานรเลย ในภาษา Arduino แสดงแยกเปนหวขอยอย ดงน 1. ฟงกชนเอำตพตแบบดจทล (Digital Output)

1) pinMode(pin, mode) เปนค าสงใชก าหนดขา (หรอพอรต) ใด ๆ ทท าหนาท เปนพอรตดจทล ปกตจะใชในฟงกชน setup() เพอก าหนดการท างานเรมตนของขาตาง ๆ ทเกยวของ

- pin หมายถงชอหรอเลขขาของบอรด NodeMCU เปน D0, D1, … หรอเปนเลขจ านวนเตม โดยชอขาเหลาน ถกก าหนดใหสอดคลองกบพน GPIO อยกอนแลว (ดรปท 3.2) - mode หมายถงโหมดการท างาน ก าหนดใหมคาเปน INPUT หรอ OUTPUT เทานน

Page 48: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

44

ต วอย างเชน ค าส ง pinMode(D1, OUTPUT) คอการก าหนดให ขา D1 ของ NodeMCU ท างานโดยสงสญญาณออกไปเทานน

2) digitalWrite(pin, value) เปนค าสงใหขาทก าหนดมสถานะเปนลอจกสง (HIGH หรอ “1”) หรอเปนลอจกต า (LOW หรอ “0”)

- pin หมายถงชอหรอเลขขาของบอรด NodeMCU - value หมายถงคา ก าหนดใหมคาเปน HIGH หรอ LOW เทานน

ต วอย า ง เช น ค าส ง digitalWrite(D0, HIGH) ค อการก าหน ด ให ขา D0 ขอ ง NodeMCU มคาเปนลอจกสง (HIGH) ซงจะมระดบแรงดน 3.3 V

2. ฟงกชนหนวงเวลำ (Time Delay) 1.) delay(value) เปนค าสงใหหนวงเวลา

- value หมายถงคาการหนวงเวลามหนวย 1/1000 วนาท หรอมลลวนาท (ms) โดยจะรบคาทมชนดเปนเลขจ านวนเตม (integer, int) เทานน

ตวอย างเชน delay(1000); คอการก าหนดใหโปรแกรมหนวงเวลา 1 วนาท (1 s = 1000 ms = 1000000 µs)

2.) delayMicroseconds(time) เปนค าสงใหหนวงเวลา - time หมายถงคาการหนวงเวลามหนวย 1/1000000 วนาท (µs หรอ us โดยเรามกใช ‘u’ แทน สญลกษณไมโคร ‘µ’) ฟงกชนนจะรบคาเปนเลขจ านวนเตม

ตวอยางเชน delayMicroseconds(1000); ก าหนดใหการหนวงเวลามคาเทากบ 1 มลลวนาท

ขอมลเพมเตม: ส าหรบตวแปร int (คอจ านวนเตมหรอ integer) ในภาษา C จะมคาระหวาง -32768 ถง 32767 (-215 ถง 215-1) ในขณะท ตวแปร unsigned int (คอจ านวนเตมแบบไมคดเครองหมาย) จะมคาระหวาง 0 ถง 65535 (0 ถง 216-1)

Page 49: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

45

4.3 กำรทดลองควบคมรเลย

วตถประสงค 1. สามารถตอบอรด NodeMCU v.3 กบบอรดรเลยได 2. สามารถเขยนโปรแกรมให NodeMCU ควบคมการท างานของรเลยได 3. เขยนโปรแกรมควบคมรเลยโดยมการหนวงเวลาประกอบดวยได อปกรณทใชในกำรทดลอง 1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป)

พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง 2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. บอรดรเลยชนด 4 ชอง 1 บอรด 5. สาย USB 1 เสน 6. สายตอวงจร (สายจมพ เมย-เมย) 6 เสน วธกำรทดลอง

1. ตอวงจรตามรปท 4.5 โดยตอทางดานอนพท (input) ของรเลยหมายเลข 1 (IN1) ทขา D1, รเลยหมายเลข 2, 3, และ 4 (IN2, IN3, และ IN4) ทขา D2, D3 และ D4 สวนขา GND (ขากราวด) ใหตอรวมกนและ ตอขา VCC กบ VUSB ซงคอไฟบวก +5 V ทบอรด NodeMCU Base Ver 1.0 ทไดรบมาจากคอมพวเตอร จากนนดงจมเปอร JD บนบอรดรเลยออกกอนเพอมใหไฟเขาไปเลยงคอยลและสงเกตการท างานของรเลยผาน LED บนบอรดกอน

ในการเขยนโปรแกรมควบคมใหรเลยทท างานแบบ Active Low เราตองปอนสญญาณลอจกต า (LOW) ทต าแหนงขา ของ NodeMCU ทตอเพอควบคมรเลย ดงนน เราจงใชค าสง #define ในการก าหนดชอ ให LOW คอ ON และ HIGH คอ OFF เพอใหค าสงทเขยนสอดคลองกบการท างานของรเลย

Page 50: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

46

รปท 4.5 การตอ NodeMCU v.3 เพอควบคมการเปด-ปดรเลย

2. เขยนโคดควบคมรเลยในโปรแกรม Arduino IDE เพอควบคมการเปด-ปดการท างานของรเลย 4 ตวพรอม ๆ กน โดยใหเปด-ปดเปนเวลา 1 วนาทสลบกนไปเรอย ๆ ตลอดเวลา แผนผงการท างานของโปรแกรมในการทดลองนแสดงไดดงรปท 4.6

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

// Control 4-channel Relay by NodeMCU ESP8266

#define ON LOW #define OFF HIGH

int Relay1 = D1;

int Relay2 = D2;

int Relay3 = D3;

int Relay4 = D4;

void setup() {

pinMode(Relay1, OUTPUT);

pinMode(Relay2, OUTPUT);

pinMode(Relay3, OUTPUT);

pinMode(Relay4, OUTPUT);

}

Page 51: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

47

17

18

19

20

21

22

23

24

25

26

27

28

29

void loop() {

digitalWrite(Relay1, ON);

digitalWrite(Relay2, ON);

digitalWrite(Relay3, ON);

digitalWrite(Relay4, ON);

delay(1000);

digitalWrite(Relay1, OFF);

digitalWrite(Relay2, OFF);

digitalWrite(Relay3, OFF);

digitalWrite(Relay4, OFF);

delay(1000);

}

รปท 4.6 แผนผงการท างานของโปรแกรมทแสดงในการทดลองน

Page 52: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

48

แบบฝกหดทำยกำรทดลอง หากเราตองการสรางสญญาณไฟจราจร (ไฟเขยว-เหลอง-แดง) โดยใช NodeMCU

และบอรดรเลยควบคมการท างานของไฟสญญาณ (ไฟสญญาณแดง-เหลอง-เขยว) (ดรปท 4.7) โดยก าหนดใหระบบควบคมรเลยท างานดงแสดงในตารางท 4.1 จงเขยนโคดโปรแกรมส าหรบการสรางสญญาณไฟจราจรน

รปท 4.7 รปประกอบแบบฝกหดทายการทดลอง

ตำรำงท 4.1 สถานะของรเลยทชวงเวลาตาง ๆ เพอใชควบคมไฟสญญาณจราจร

เวลา (วนาท) รเลย 1 สเขยว

รเลย 2 สเหลอง

รเลย 3 สแดง

10 ON OFF OFF

3 OFF ON OFF

8 OFF OFF ON

Page 53: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 5

กำรสอสำรผำนพอรตอนกรม

5.1 มำตรฐำนกำรสอสำร

ในปจจบนมการน าไมโครคอนโทรลเลอรไปเชอมตอกบอปกรณตาง ๆ มากมาย (ดรปท 5.1) โดยการเชอมตอนนกมอยดวยกนหลายรปแบบ โดยการเชอมตอแบบหนงทไดรบความนยมกคอการเชอมตอแบบอนกรม (Serial Communication) การท าความเขาใจเกยวกบการสอสารขอมลแบบอนกรม เราจ าเปนตองทราบศพททเกยวของดงน

TTL (Transistor-Transistor Logic)

UART (Universal Asynchronous Receiver Transmitter)

USB (Universal Serial Bus)

รปท 5.1 ตวอยางการสอสารแบบอนกรมระหวางไมโครคอนโทรลเลอรกบอปกรณอน ๆ

Page 54: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

50

ระดบสญญำณ TTL (Transistor-Transistor Logic) TTL เปนระดบแรงดนทถกก าหนดขนในยคแรก ๆ ของการเชอมตอสอสารเพอใชใน

การก าหนดการเชอมตอระหวางขาของทรานซสเตอรทอยภายในไอซ (วงจรรวม , Integrated Circuit, IC) ระดบสญญาณ TTL จะใชระดบแรงดน อยท 0 ถง +5 V (รปท 5.2) แตในปจจบนมอปกรณหลายอยางและไอซจ านวนมากทท างานในชวงระดบแรงดน 0 ถง 3.3 V ซงเรยกแรงดนระดบนวาระดบแรงดนต า (Low Voltage TTL, LVTTL) ซงผใชควรตรวจสอบจากแผนขอมล (Datasheet) ของอปกรณทจะน ามาใชเสยกอนวาใชกบระดบแรงดนใด เพราะหากใชผดประเภทจะท าใหอปกรณเสยหาย ดงนนส าหรบ NodeMCU ทใชระดบแรงดน 3.3 V ในการสงขอมล เราจะตองตรวจสอบอปกรณทน ามาตอพวงวาใชกบระดบแรงดน 3.3 V ไดหรอไม

รปท 5.2 ระดบแรงดน TTL (ก) แบบดงเดม และ (ข) แบบแรงดนต า

UART (Universal Asynchronous Receiver-Transmitter)

UART หมายถงอปกรณทท าหนาท รบและสงขอมลแบบอะซงโครนส (asyn-chronous) ซงมกใชกบการสอสารแบบอนกรม โดยการสอสารแบบอนกรมอาจจะแบงไดเปน 2 แบบ คอ 1) ซงโครนส (Synchronous)

เปนการสงขอมลเปนบลอก ครงละหลายไบต โดยจะมสญญาณนาฬกา (CLK, CLocK) ทชวยในการท างานของตวสงและตวรบสอดคลองกน โดยสญญาณทสงอาจจะถก

Page 55: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

51

เขารหสรวมกนอยในชดขอมลนนหรอแยกอสระออกเปนสายตางหากกได รปท 5.3 แสดงลกษณะแนวคดพนฐานในการสงขอมลแบบซงโครนส

รปท 5.3 การสอสารแบบซงโครนส 2) อะซงโครนส (Asynchronous)

การสงขอมลแบบอะซงโครนสเปนการสอสารแบบท ใชมากในการสอสารในไมโครคอนโทรลเลอร รปแบบการสอสารจะเปนการรบสงขอมลครงละ 1 ไบต ดงรปท 5.4 โดยมรปแบบของขอมลดงแสดงในรปท 5.5

รปท 5.4 การสอสารแบบอะซงโครนส

รปท 5.5 รปแบบขอมลทใชในการสอสารอนกรมแบบอะซงโครนส

Page 56: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

52

ในรปท 5.5 ขอมลจะประกอบดวย - บตเรมตน (Start Bit) บอกจดเรมตนขอมล มขนาด 1 บต - บตขอมล (Data Bit) คอคาขอมลมไดระหวาง 5 ถง 8 บต - พารตบต (Parity Bit) คอบตทใชส าหรบตรวจสอบความผดพลาดของขอมล อาจไม

มหรอม 1 บต - บตหยด (Stop Bit) บตทบอกจดสนสดขอมล มได 1, 1.5 หรอ 2 บต

USB (Universal Serial Bus)

USB เปนมาตรฐานการเชอมตอส าหรบการรบ -สงขอมลแบบอนกรมส าหรบคอมพวเตอรและอปกรณตอพวงตาง ๆ ในระยะสน ๆ ไมเกน 2-5 เมตร โดย USB ไดถกเรมน ามาใชครงแรกในป ค.ศ. 1996 (เรยก USB 1.0) และไดมการพฒนาตอเนองมา โดยเนนการพฒนาดานความเรวในการสงขอมล ปจจบน มาตรฐาน USB ทใชอยางแพรหลาย จะเปน USB 2.0 และ USB 3.x (x = 0, 1 หรอ 2) โดย USB 2 จะมความเรวสงสดในการสงขอมลอยท 480 Mbit/s และพอรต USB 3 ถกออกแบบมาใหมลกษณะหนาตาคลายกบ USB 2 เพอใหเราสามารถใชงานอปกรณทใช USB 2 รวมกบพอรต USB 3 ได โดย USB 3 มความเรวสงสดสงถง 10 Gbit/s (USB 3.2) และเราสามารถสงเกตพอรต USB 3 ไดงาย จากสของแกนพลาสตกภายในคอ USB 3.0 จะใชแกนดานในสฟา รปท 5.6 แสดงภาพหวตอ USB 2 แบบมาตรฐาน Type A และแบบไมโคร B ซ งพอรตแบบไมโคร B น ถกน ามาใชในบอรด NodeMCU

สาย USB ทวไป จะประกอบดวยสาย 4 เสน คอ แรงดนไฟตรง +5 V, Data–, Data+ และ กราวด โดยขอมลจะสงแบบอนกรมผานสาย Data– และ Data+ เทานน ส าหรบแรงดนไฟตรง +5 V จะสามารถน ามาใชสงพลงงานไฟฟาไดดวย โดยสงกระแสไดสงสด 0.5 A ส าหรบ USB 2 และ 0.9 A ส าหรบ USB 3 ดงนนในการใชงานพอรต USB เปนแหลงพลงงานใหกบไมโครคอนโทรลเลอร ผใชจะตองค านงถงขอจ ากดดานการจายกระแสนดวย

Page 57: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

53

รปท 5.6 ลกษณะของพอรต USB แบบ (ก) มาตรฐาน Type A และ (ข) ตวรบแบบไมโคร B อตรำกำรสงขอมล

อตราการสงขอมลหรอ บอดเรท (Baud Rate) คอความเรวของการรบ-สงขอมล เปนจ านวนบตตอวนาท (bit per second, bps) เชน 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200 bps เปนตน การเลอกอตราการสงขอมลขนอยกบ ชนดของสายสญญาณ , ระยะทาง และปรมาณสญญาณรบกวน โดยการสงขอมลระหวางไมโครคอนโทรลเลอรและอปกรณอน ๆ นน จะท าไดกตอเมอเราก าหนดใหอตราการสงขอมลมคาตรงกนเทานน ไอซเบอร CH340

ในการแปลงขอมลทรบ-สงผานพอรต USB นน NodeMCU (ESP8266) จะใชไอซเบอร CH340 ในการแปลงระดบสญญาณแรงดน ซ งบางคร งจะเรยกวา USB-UART Interface IC โดยในการใชงานชปน เราอาจตองลงไดรเวอรใหกบระบบปฏบตการวนโดวกอน

รปท 5.7 การเชอมตอระหวางคอมพวเตอร (ระดบสญญาณ USB)

และ NodeMCU (ระดบสญญาณ LVTTL) ผาน CH340

Page 58: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

54

5.2 กำรเขยนโปรแกรมตดตอสอสำร

ในการสอสารแบบอนกรม ระหวาง NodeMCU และคอมพวเตอร เราสามารถท าไดโดยการเชอมตอผานพอรต USB ดงทเราไดทดลองกนไปแลวในบทท 3 และ 4 ส าหรบฟงกชนในภาษา Arduino ทใชในการสอสารแบบอนกรมน จะอยภายในวตถชอ Serial และมดงน

ฟงกชนก าหนด Buad rate - Serial.begin(int baud)

โดย baud คอ อตราเรวทใชในการสอสาร มคาทใชบอยคอ 9600 และ 115200

ฟงกชนตรวจสอบขอมลทสงมายงพอรตอนกรม - Serial.available()

ฟงกชนนจะสงคาคนเปนจ านวนไบตของขอมล (เปนคาจ านวนเตม) ทสงผานพอรตอนกรมมายงดานรบ

ฟงกชนอานคาจากพอรตอนกรม - Serial.read()

ฟงกชนนจะสงคาคนเปนขอมลทสงมายงดานรบ

ฟงกชนสงขอมลออกไปยงพอรตอนกรม - Serial.print(data), Serial.write(data) และ Serial.println(data)

ฟงกชนนจะสงคาใหแกพอรตอนกรมโดย Serial.print จะสงรหสตวอกษรแบบแอสก (ASCII) ซ งสามารถอานท าความเขาใจไดงาย Serial.write มกจะใชสงคาไบนาร และ Serial.println จะเหมอนกนกบ Serial.print แตจะมการเพมตวอกขระขนบรรทดใหม (newline character, ‘\n’) หลงสงคาตวอกษรตามค าสงนเสรจ

Page 59: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

55

5.3 กำรทดลองสอสำรผำนพอรตอนกรม

วตถประสงค 1. สามารถเขยนโปรแกรมให NodeMCU สงคาไปแสดงผลบนคอมพวเตอรได 2. สามารถเขยนโปรแกรมให NodeMCU รบคาจากคอมพวเตอรมาควบคมรเลยได อปกรณทใชในกำรทดลอง 1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป)

พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง 2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. บอรดรเลยชนด 4 ชอง 1 บอรด 5. สาย USB 1 เสน 6. สายตอวงจร (สายจมพ เมย-เมย) 6 เสน วธกำรทดลอง ตอนท 1 กำรเขยนโปรแกรมเพอแสดงผลผำนพอรตอนกรม 1. เขยนโคดโปรแกรมแสดงขอความผานพอรตอนกรมดงแสดงดานลางน จากนนจง อปโหลดลงสบอรด NodeMCU โดยเมอรนโคดโปรแกรมน NodeMCU จะสงคาทค านวณได ไปแสดงผลยงพอรตอนกรมของคอมพวเตอรทก ๆ 2 วนาท

1

2

3

4

5

6

7

8

9

// Basic Serial Communication with NodeMCU ESP8266

// Temperature Conversion

float Celsius = 23.32;

float Fahrenheit = 0;

void setup() {

Serial.begin(9600);

}

Page 60: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

56

10

11

12

13

14

15

16

17

18

19

20

void loop() {

Serial.print("Temperature");

Serial.print("\t");

Serial.print(Celsius);

Serial.print(" C -> \t");

Serial.print((9/5)*Celsius+32);

Serial.println(" F");

delay(2000);

}

2. เปด Serial Monitor (ในเมน Tools) เพอสงเกตผลลพธทได 3. หากลองค านวณคาอณหภมทแสดงดวยสมการในบรรทดท 16 ดวยเครองคดเลข จะพบวา คาทไดไมตรงกบคาทแสดงดวยคอมพวเตอร นนคอ การค านวณดวยโปรแกรมมขอผดพลาดหรอบค (bug) อย ขอใหแกไขโดยการเปลยนชนดตวเลขทใชค านวณเปนเลขทศนยมโดยการเพมจดทศนยมและศนยลงในโคดทค านวณ คอ แกไขโคดบรรทดท 16 เปน 16

Serial.print((9.0/5.0)*Celsius+32);

จากนนจงอปโหลดใหมแลวสงเกตผลลพธทได ตอนท 2 กำรเขยนโปรแกรมเพอควบคมรเลยผำนพอรตอนกรม

ในการทดลองตอนน เปนการใชคยบอรดควบคมการท างานของรเลยผานการสงขอมลผานพอรตอนกรม โดยการก าหนดใหกดปมบนคยบอรด เพอใหรเลยเปดหรอปดวงจร 1. ตอวงจรดงรปท 5.9

Page 61: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

57

รปท 5.9 วงจรควบคมการท างานอปกรณไฟฟาผานการสอสารแบบอนกรม

2. เขยนโคดโปรแกรมควบคมการท างานของรเลยทง 4 ตว

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

// Control Relays via Serial with NodeMCU ESP8266

#define ON LOW

#define OFF HIGH

char buff;

int Relay1 = D3;

int Relay2 = D4;

int Relay3 = D5;

int Relay4 = D6;

void setup() {

Serial.begin(9600);

pinMode(Relay1, OUTPUT);

pinMode(Relay2, OUTPUT);

pinMode(Relay3, OUTPUT);

pinMode(Relay4, OUTPUT);

}

void loop() {

buff = Serial.read();

if(buff == '1') {

digitalWrite(Relay1, ON);

}

Page 62: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

58

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

if(buff == '5') {

digitalWrite(Relay1, OFF);

}

if(buff == '2') {

digitalWrite(Relay2, ON);

}

if(buff == '6') {

digitalWrite(Relay2, OFF);

}

if(buff == '3') {

digitalWrite(Relay3, ON);

}

if(buff == '7') {

digitalWrite(Relay3, OFF);

}

if(buff == '4') {

digitalWrite(Relay4, ON);

}

if(buff == '8') {

digitalWrite(Relay4, OFF);

}

}

3. ทดสอบการควบคม โดยการปอนขอมลจากคยบอรดเขาทางพอรตอนกรม แบบฝกหดทำยกำรทดลอง

จงเขยนโปรแกรมเพมเตมจากโปรแกรมในการทดลองตอนท 2 โดยก าหนดเงอนไขวา หากเรากดปม ‘0’ บนคยบอรดแลวรเลยทกตวจะ OFF และหากเรากดปม ‘9’ แลวรเลยทกตวจะ ON

Page 63: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 6

กำรแสดงผลดวยจอแอลอดขนำด 128×64 พกเซล

6.1 จอแอลอดและกำรตดตงไลบรำร

จอแสดงผล OLED (Organic Light-Emitting Diode) display เปนจอแสดงผลทสรางจากวสดสารกงตวน าอนทรย (Organic Semiconductor) ทมลกษณะเปนชนสารกง-ตวน าบาง ๆ อยระหวางขวบวก (Anode) และขวลบ (Cathode) และสามารถเปลงแสงไดเมอมกระแสไฟฟาไหลผาน การเปลงแสงน เรยกวากระบวนการ อเลคโทรลม เนสเซนส (Electroluminescence) จอแสดงผล OLED มขอดซงแตกตางจากจอแสดงผล LCD (Liquid Crystal Display) ทวไปคอ จอ OLED ไมมวงจรทสรางแสง Backlight จงท าใหจอมความหนานอยกวาและเบากวา ใชก าลงไฟฟาต า นอกจากนนจะไมมการเปลงแสงในบรเวณทตองการใหเปนสด า ในปจจบนอปกรณหลายอยางเชน โทรทศน, สมารทโฟน (Smartphones) และ แทบเลต (Tablets) ไดเรมเปลยนไปใชจอแสดงผล OLED กนมากขน ในการทดลองนจะกลาวถง การทดลองใชงานโมดลจอแสดงผลกราฟกแบบ OLED ขนาดเลก ซงมขนาด 128x64 พกเซล ใหแสงเพยงสเดยว (Monochrome) โดยทดลองเขยนโคดและใชงานรวมกบบอรด NodeMCU v.3 และใชวธเชอมตอแบบบส I2C (หรอ I2C, Inter-Integrated Circuit, อานวาไอสแควรซ) ลกษณะโครงสรำงโมดล OLED 128x64 พกเซล

โมดล OLED ทไดเลอกมาทดลองใชงานน มขนาด 1.3" (วดตามเสนทแยงมม) มความละเอยด 128x64 พกเซล สามารถแสดงผลไดแบบสเดยว ซงถอวาเปนจอขนาดเลก และใชแรงดนไฟเลยง +3.3 V ได จอขนาดเลกนเหมาะส าหรบน าไปใชกบระบบสมองกลฝงตว ท

Page 64: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

60

ตองการสวนแสดงผลกราฟกบนพนทจ ากด ภายในโมดลจะมชป SH1106 เปนตวควบคมการท างาน สามารถเชอมตอแบบอนกรมโดยใชบส SPI (Serial Peripheral Interface) หรอ I2C ถาตองการแสดงขอความจะตองมขอมลของฟอนตตวอกษร แตละตว ซงจะมลกษณะเปนขอมลภาพแบบบตแมปเกบไวในหนวยความจ า

การจดการหนวยความจ าภายในของ SH1106 ทเรยกวา Graphic Display Data RAM (GDDRAM) ส าหรบขนาด 128x64 พกเซล แบงเปนคอลมน (Column) และ เพจ (Page) ซงมทงหมด 128 คอลมน (หมายเลข 0..127) และมทงหมด 8 เพจ (หมายเลข 0,1 , 2...7) แตละเพจ จะประกอบดวย 8 บรรทด ดงนนจงม 8x8 = 64 บรรทดหรอแถว (rows) การแสดงผลของจอภาพขนอยกบคาบต (0 หรอ 1) ส าหรบแตละพกเซลทไดเขยนขอมลลงในหนวยความจ า GDDRAM

การสอสารขอมลกบชป SH1106 ท าไดโดยผานบส SPI หรอ I2C โดยตองสงค าสงเพอก าหนดคาตาง ๆ ในการท างาน เชน ค าสงเปด/ปดการแสดงผล (turn on/off display) ค าสงเลอกโหมดการเขาถงหนวยความจ า (memory addressing mode) ค าสงก าหนดคาต าแหนงเรมตน (Start Address) และต าแหนงสดทาย (End Address) ส าหรบคอลมนและเพจ และการเขยนขอมล (Data) เปนการเขยนขอมลลงใน GDDRAM กำรเชอมตอขำของโมดล OLED แบบ I2C

รปท 6.1 แสดงรปรางของโมดล OLED ทใชการเชอมตอแบบ I2C โดยมขาทตองเชอมตอดงน

- VDD (หรอ VCC) เปนขาส าหรบรบแรงดนไฟเลยง +3.3 V - GND เปนขากราวด (Ground) - SCK เปนขา I/O ส าหรบสญญาณ Serial ClocK (หรอ SCL (Serial CLock) - SDA เปนขา I/O ส าหรบสญญาณ SDA (Serial DAta) ส าหรบการสงขอมล

หมำยเหต OLED บางรน อาจมการเรยงต าแหนงขา สลบกนระหวาง SCK และ SDA ดงนนขอใหผใชศกษาแผนขอมลของอปกรณกอนท าการทดลอง

Page 65: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

61

รปท 6.1 รปรางของโมดล OLED (ก) ดานหนา และ (ข) ดานหลง

กำรตดตงไลบรำร OLED I2C

เนองจากโปรแกรม Arduino IDE ทตดตงมาในตอนเรมตนไมมไลบรารของ OLED น เราจงจ าเปนตองมการตดตงเพมเตมเขาไปในโปรแกรม ซงจะตองใชไลบราร สามารถดาวนโหลดจากลงค https://github.com/ThingPulse/esp8266-oled-ssd1306 ดงรปท 6.2 โดยใหท าการคดลอกโฟลเดอรทโหลดมาไปเกบไวท C:\Arduino18\libraries ดงรปท 6.3 เมอคดลอกลงมาแลว Arduino IDE จะสามารถเรยกใชฟงกชนส าหรบสงงาน OLED นได โดยเราจะตองเพมค าสงเรยกไลบราร คอ #include <Wire.h> และ #include <SH1106.h> เขาไปทดานบนของโคด (โดยฟงกชนใน Wire.h จะถกเรยกใชโดยฟงกชนใน SH1106.h อกทหนง)

รปท 6.2 การดาวนโหลดไลบรารของ OLED จาก github

Page 66: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

62

รปท 6.3 การตดตงไลบรารของ OLED ลงใน Arduino IDE

6.2 ค ำสงพนฐำนควบคมกำรแสดงผลของจอ OLED

1. ค าสงก าหนดต าแหนงขาทตอใชงานกบจอ OLED แบบ I2C SH1106 display(0x3c, D1, D2); เปนการก าหนด Instance ของวตถชอ display และการก าหนดหนวยความจ า

ต าแหนง 0x3c ใหกบอปกรณแสดงผลน โดยตอขา D1 กบ SDA และขา D2 ตอกบ SCK

2. ค าสงตรวจสอบการเชอมตอกบจอและจดการหนวยความจ า display.init(); เปนค าสงทใชกอนการเรมตนใหจอแสดงผล (เรยกใชในฟงกชน setup()) โดยวตถชอ

display จะตองถกสรางไวกอนดวยค าสงในขอ 1 และอาจใชชออนกได

3. การสงใหแสดงผลบนหนาจอ OLED display.display(); เปนฟงกชนทใชสงใหจอแสดงขอมลทอยในหนวยความจ า โดย display ตวแรกคอชอ

วตถทตงในขอ 1 (อาจตงเปนชออนกได) และตวทสองคอชอฟงกชน/เมธอด

4. การลบการแสดงผลบนหนาจอ display.clear();

ส าหรบขอ 5-7 จะขอละค าวา display ไว

Page 67: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

63

5. การแสดงตวอกษร เราจะเรมจากการก าหนดฟอนตดวยค าสง setFont(fontData);

โดย fontData ทรองรบคอ “ArialMT_Plain_10”, “ArialMT_Plain_16” และ ArialMT_ Plain_24 แลวจากนนจงก าหนดต าแหนง (x,y) ของขอความและขอความ (String) ดวยค าสง

drawString(int x, int y, String);

6. การแสดงรปเราขาคณตพนฐานตาง ๆ จะมค าสงทสามารถเลอกใชได ไดแก 6.1 ค าสงวาดเสนตรง 6.1.1 เสนตรง drawLine(x1, y1, x2, y2) 6.1.2 เสนตามนอน drawHorizontalLine(x, y, length) 6.1.3 เสนตามตง drawVerticalLine(x, y, length) 6.2 ค าสงวาดรปสเหลยม 6.2.1 สเหลยมเปด drawRect(x, y, width, height) 6.2.2 สเหลยมทบ fillRect(x, y, width, height) 6.3 ค าสงวาดรปวงกลม 6.3.1 วงกลมเปด drawCircle(x, y, radius) 6.3.2 วงกลมทบ fillCircle(x, y, radius) โดยตวแปรทกตวทสงคาไปจะตองเปนจ านวนเตมคาบวก (unsigned integer, uint) เทานน 7. การวาดภาพแบบพกเซล 7.1 ค าสงวาดแถบ Progress Bar drawProgressBar(x, y, width, height, progress)

โดยตวแปร progress จะมคาไดระหวาง 0 ถง 100 7.2 ค าสงวาดภาพบตแมป drawXbm(x, y, width, height, picture);

โดยตวแปร picture คอภาพทเกบเปนอาเรยของรหสแอสก (ชนด char)

Page 68: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

64

6.3 กำรทดลองแสดงผลบนจอ OLED

วตถประสงค 1. สามารถตอวงจรไมโครคอนโทรลเลอร NodeMCU v.3 กบจอ OLED เพอแสดงผลได 2. สามารถเขยนโปรแกรมแสดงขอความและขอมลชนดตาง ๆ บนจอ OLED ไดอยางถกตอง อปกรณทใชในกำรทดลอง 1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป)

พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง 2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. บอรดโมดล OLED Display ขนาด 128×64 พกเซล 1 บอรด 5. สาย USB 1 เสน 6. สายตอวงจร (สายจมพ เมย-เมย) 4 เสน วธกำรทดลอง ตอนท 1 1. ตอวงจรตามรปท 6.4 โดยใหตอขา D1 เขากบขา SDA ของโมดล OLED, ขา D2 เขากบขา SCK (หรอ SCL), ตอขาไฟเลยง +3.3 V (3V3) ใหแกโมดล OLED ทขา VDD (หรอ VCC) และตอขากราวด (GND) รวมกน 2. เขยนโปรแกรมตามโคดทแสดงในหนาถดไป

Page 69: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

65

รปท 6.4 การเชอมตอ NodeMCU v.3 กบจอแสดงผล OLED แบบ I2C

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

// Control OLED by NodeMCU ESP8266

#include <Wire.h>

#include <SH1106.h>

//SSD1306 display(Addr,SDA,SCL);

SH1106 display(0x3c, D1, D2);

void setup() {

display.init();

}

void loop() {

display.setFont(ArialMT_Plain_10);

display.drawString(25, 0, "Current = ");

display.drawString(75, 0, String(75.35)+" A");

display.display();

delay(200);

}

3. เมอเขยนโปรแกรมตามโคดแลว ใหท าการอปโหลด จอจะแสดงผล “Current = 75.35 A” ดงรปท 6.4

Page 70: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

66

ตอนท 2 เขยนโปรแกรมดงแสดงในโคดดานลางแลวสงเกตผลลพธทแสดงบนจอ

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

// Control OLED by NodeMCU ESP8266

#include <Wire.h>

#include <SH1106.h>

// SSD1306 display(Addr,SDA,SCL);

SH1106 display(0x3c, D1, D2);

void setup() {

display.init();

}

void loop() {

// Display a line

display.drawVerticalLine(120, 5, 30);

// Display a circle

display.drawCircle(64, 32, 18);

// Display a rectangle

display.drawRect(0, 0, 128, 64);

display.drawRect(0, 33, 100, 10);

display.fillRect(0, 35, 45, 6);

// Display a progress bar

display.drawProgressBar(0, 48, 100, 10, 50);

display.display();

delay(200);

}

ผลลพธของโคดในตอนท นแสดงในรปท 6.5(ก)

Page 71: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

67

ตอนท 3 เขยนโปรแกรมดงแสดงในโคดดานลางแลวสงเกตผลลพธทแสดงบนจอ โดยมขอสงเกตคอ การเตม 0x หนาตวเลขเปนการบงชในภาษา C วาขอมลทตามมานนแสดงอยในรปเลขฐานสบหก

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

// Control OLED by NodeMCU ESP8266

#include <Wire.h>

#include <SH1106.h>

// SSD1306 display(Addr, SDA, SCL);

SH1106 display(0x3c, D1, D2);

#define width 64

#define height 64

static unsigned char b2i[] = {

0xFF, 0xFF, 0xFF, 0x3F, 0xFE, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0x0, 0x0, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0x1F, 0x0, 0x0, 0xF8, 0xFF, 0xFF,

0xFF, 0xFF, 0x3, 0x0, 0x0, 0xE0, 0xFF, 0xFF,

0xFF, 0xFF, 0x0, 0x0, 0x0, 0x80, 0xFF, 0xFF,

0xFF, 0x7F, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF,

0xFF, 0x1F, 0x0, 0x0, 0x0, 0x0, 0xFC, 0xFF,

0xFF, 0xF, 0x0, 0x0, 0x0, 0x0, 0xF8, 0xFF,

0xFF, 0x7, 0x0, 0x0, 0x0, 0x0, 0xF0, 0xFF,

0xFF, 0x3, 0x0, 0x0, 0x0, 0x0, 0xE0, 0xFF,

0xFF, 0x1, 0x0, 0x0, 0x0, 0x0, 0xC0, 0xFF,

0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0xFF,

0x7F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF,

0x3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE,

0x3F, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0xFE,

0x1F, 0x0, 0x0, 0x0, 0x0, 0xE0, 0x7, 0xFC,

0xF, 0x0, 0x0, 0x0, 0x0, 0x20, 0x2, 0xF8,

0xFF, 0x7, 0xFC, 0x83, 0xF, 0x30, 0xE6, 0xF8,

0xFF, 0x1F, 0xFE, 0x87, 0xF, 0x20, 0x22, 0xFF,

0xFF, 0x3F, 0xFF, 0x8F, 0xF, 0xF0, 0xE7, 0xF0,

0xFF, 0x7F, 0xFF, 0x9F, 0xF, 0xA0, 0x7, 0xE0,

0xFF, 0x7F, 0x9E, 0xBF, 0xF, 0x0, 0xC, 0xE0,

0x1F, 0xFC, 0xE, 0x3E, 0x0, 0x3, 0xF8, 0xFF,

0x1F, 0xFC, 0x6, 0xBE, 0x8F, 0x7, 0xF0, 0xFF,

0x1F, 0xF8, 0x6, 0xBE, 0x8F, 0xFC, 0x7, 0xC0,

Page 72: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

68

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

0x1F, 0xF8, 0x6, 0xBE, 0x8F, 0xFC, 0xF, 0xC0,

0x1F, 0xF8, 0x6, 0xBE, 0xF, 0x7, 0x18, 0xC0,

0x1F, 0xF8, 0x0, 0xBE, 0xF, 0x0, 0xF0, 0xFF,

0x1F, 0xFC, 0x0, 0xBE, 0xF, 0x0, 0xE0, 0xFF,

0x1F, 0x7E, 0x0, 0x9F, 0xF, 0xC0, 0x0, 0x80,

0xFF, 0x7F, 0x0, 0x9F, 0xF, 0x20, 0x1, 0x80,

0xFF, 0x3F, 0x80, 0x9F, 0xF, 0x20, 0xFF, 0xFF,

0xFF, 0x1F, 0xC0, 0x8F, 0xF, 0x20, 0x1, 0x80,

0xFF, 0x3F, 0xC0, 0x87, 0xF, 0xC0, 0x0, 0x80,

0xFF, 0x7F, 0xE0, 0x87, 0xF, 0x2, 0xC0, 0xFF,

0x1F, 0xFE, 0xF0, 0x83, 0xF, 0x7, 0xE0, 0xFF,

0x1F, 0xFC, 0xF0, 0x81, 0xCF, 0x18, 0x30, 0xC0,

0x1F, 0xF8, 0xF8, 0x81, 0xCF, 0xF8, 0x1F, 0xC0,

0x1F, 0xF8, 0xFC, 0x80, 0xCF, 0xF8, 0xF, 0xC0,

0x1F, 0xF8, 0x7D, 0x80, 0xCF, 0x18, 0xF8, 0xFF,

0x1F, 0xF8, 0x7D, 0x80, 0xF, 0x7, 0xFC, 0xFF,

0x1F, 0xF8, 0x3D, 0x80, 0xF, 0x2, 0x6, 0xE0,

0x1F, 0xF8, 0x1C, 0x80, 0xF, 0x0, 0x3, 0xE0,

0x1F, 0xFC, 0x1C, 0x80, 0xF, 0xE0, 0xE1, 0xF0,

0x1F, 0xFE, 0xC, 0x80, 0xF, 0x20, 0x21, 0xFF,

0xFF, 0xFF, 0xFE, 0xBF, 0xF, 0x20, 0xA1, 0xF8,

0xFF, 0x7F, 0xFE, 0xBF, 0xF, 0xE0, 0x1, 0xF8,

0xFF, 0x3F, 0xFF, 0xBF, 0xF, 0x0, 0x0, 0xFC,

0xFF, 0x9F, 0xFF, 0xBF, 0xF, 0x0, 0x0, 0xFC,

0xFF, 0xC7, 0xFF, 0xBF, 0xF, 0x0, 0x0, 0xFE,

0x7F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF,

0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0xFF,

0xFF, 0x1, 0x0, 0x0, 0x0, 0x0, 0xC0, 0xFF,

0xFF, 0x1, 0x0, 0x0, 0x0, 0x0, 0xC0, 0xFF,

0xFF, 0x7, 0x0, 0x0, 0x0, 0x0, 0xF0, 0xFF,

0xFF, 0xF, 0x0, 0x0, 0x0, 0x0, 0xF8, 0xFF,

0xFF, 0x1F, 0x0, 0x0, 0x0, 0x0, 0xFC, 0xFF,

0xFF, 0x3F, 0x0, 0x0, 0x0, 0x0, 0xFE, 0xFF,

0xFF, 0xFF, 0x0, 0x0, 0x0, 0x80, 0xFF, 0xFF,

0xFF, 0xFF, 0x3, 0x0, 0x0, 0xE0, 0xFF, 0xFF,

0xFF, 0xFF, 0xF, 0x0, 0x0, 0xF8, 0xFF, 0xFF,

0xFF, 0xFF, 0x7F, 0x0, 0x0, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };

void setup() {

display.init();

}

Page 73: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

69

82

83

84

85

86

87

88

void loop() {

display.clear();

display.drawXbm(32, 0, width, height, b2i);

display.display();

delay(1000);

}

ผลลพธของโคดในตอนท นแสดงในรปท 6.5(ข) ดวยวธการแสดงผลแบบกราฟฟกท า

ใหผใชสามารถน าขอมลภาพใด ๆ มาแสดงกได ดงตวอยางในรปท 6.6

รปท 6.5 ผลลพธทไดจากการรนโคดการทดลอง (ก) ตอนท 2 และ (ข) ตอนท 3

รปท 6.6 ตวอยางภาพโลโกทแสดงดวยจอ OLED

Page 74: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

70

Page 75: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 7

กำรวดระยะทำงดวยโมดลอลตรำโซนกส

7.1 หลกกำรวดระยะทำงดวยคลนอลตรำโซนกส

การวดระยะทางดวยคลนเหนอเสยงหรอคลนอลตราโซนกส ใชหลกการของการสะทอนคลน โดยโมดลสงและรบคลนอลตราโซนกส HC-SR04 (รปท 7.1) เปนโมดลทใชในการวดระยะทางโดยอาศยหลกการสะทอนของคลนอลตราโซนกส ทความถประมาณ 40 kHz ในโมดลนมแหลงก าเนดคลนอลตราโซนกสสงไปสะทอนวตถแลวสะทอนกลบยงตวรบสญญาณ โดยระยะทางจะสมพนธกบระยะเวลาทคลนเดนทางตวสงไปสะทอนวตถแลวกลบมายงตวรบ เมอไดเวลาในการเดนทางของคลนแลวจงน ามาค านวณหาระยะทางระหวางโมดลกบวตถ ทสะทอนคลน

รปท 5.1 โมดลวดระยะทางดวยคลนอลตราโซนกส HC-SR04 หลกกำรท ำงำนของโมดล HC-SR04

โมดล HC-SR04 ท างานทแรงดนประมาณ 5 V โดยปอนแรงดนแหลงจายใหขา VCC และ GND โมดลนมขาสญญาณดจทล TRIG (อนพต) และ ECHO (เอาตพต) ทน าไปเชอมตอ

Page 76: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

72

กบไมโครคอนโทรลเลอรตาง ๆ ในการวดระยะหางแตละครงโมดลจะรบค าสงใหสรางสญญาณแบบพลสทมความกวาง (Pulse Width) อยางนอย 10 µsec ปอนใหขา TRIG และหลงจากนนใหวดความกวางของสญญาณชวง HIGH จากขา ECHO ถาวตถอยใกลระยะเวลาทจะไดรบสญญาณพลสกลบมาจะมคานอย แตถาวตถอยไกลออกไป กจะไดคาระยะเวลาทสญญาณพลสใชเดนทางมคามากขน การเลอกใชงานโมดลประเภทน มประเดนทส าคญ เชน ชวงระยะหางของวตถทจะวด ความกวางของมมเมอคลนความถเหนอเสยงเดนทางออกไปจากตวสง (เรยกวามมของล าคลนหรอ Beam Angle) นอกจากนน การสะทอนกลบของคลนเสยงทวตถกดขวาง ขนาดและรปทรงของวตถ และการสะทอนกลบของเสยงจากหลายทศทาง หรอตางระยะกน กมผลตอความถกตองในการวดคาระยะหางไดเชนกน ขอมลเชงเทคนคของโมดล HC-SR04

• ใชแรงดนประมาณ +5 V • กนกระแสประมาณ 15 mA • ชวงการวดระยะทาง (measurement range): ประมาณ 4 cm ถง 4 m • ความกวางเชงมมในการวด (measuring angle): 15 องศา • ความกวางของสญญาณ Pulse ส าหรบ Trigger: 10 µsec • ระดบแรงดนลอจกส าหรบขา TRIG และ ECHO คอ 5 V (TTL)

7.2 ค ำสงทเกยวของและไลบรำร Ultrasonic.h

ในการอานคาระยะทางจากโมดล HC-SR04 จะสามารถท าไดสองวธหลก ๆ คอ การเขยนโคดควบคมและค านวณระยะทางดวยตนเอง และการใชไลบราร Ultrasonic.h ซงในหวขอน จะกลาวถงทงสองวธ

กำรเขยนโคดควบคมและค ำนวณระยะทำง 1. ใหไมโครคอนโทรลเลอรสงสญญาณพลสความกวางอยางนอย 10 µsec ออกไปท

ขาเอาตพตทตอกบขา TRIG ของโมดล

Page 77: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

73

2. วดระยะเวลาทคลนเดนทางโดยอานคาจากสญญาณพลสทเปนอนพตจากขา ECHO ของโมดลโดยใชค าสง/ฟงกชน pulseIn() ซงเปนฟงกชนภายในภาษา Arduino และจะไดคาเปนจ านวนเตม (หนวยเปนไมโครวนาท)

3. น าคาทไดมาค านวณเปนระยะทาง (โดยใชความเรวคลนเสยง 340 m/s ประกอบ) 4. แสดงคาของระยะทางทค านวณได แลวเวนระยะเวลาประมาณ 300 msec (0.3

วนาท) แลวท าขนตอนซ า การค านวณระยะทางสามารถท าไดตามสตรทแสดงในรปท 7.2

รปท 7.2 การค านวณคาระยะทางจากคาทอานไดจากโมดล HC-SR04

ฟงกชนหลกทใชในการค านวณคอฟงกชน pulseIn(pin, value) เปนฟงกชนทใชแสดงคาความกวางของพลสสญญาณทเขามาทขา pin โดยจะก าหนดพลสสญญาณทคา value (HIGH หรอ LOW)

pulseIn(pin, value, timeout) จะท างานเหมอนฟงกชน pulseIn ภายในชวงเวลา timeout ทก าหนด (ในหนวยไมโครวนาท)

Page 78: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

74

ตวอยำงกำรใชฟงกชน pulseIn

int pin = D0; // ก าหนด pin ทตองการอานคาความกวาง

unsigned long duration; // ก าหนดตวแปรทเกบคาความกวาง

void setup() {

pinMode(pin, INPUT); // ก าหนด pin ทใชอานคา เปนอนพต

}

void loop() {

duration = pulseIn(pin, HIGH); //อานคาความกวางพลส }

ฟงกชน digitalWrite(pin, value) เปนฟงกชนทเขยนคา HIGH หรอ LOW ไปท pin

ตวอยำง การสรางสญญาณ pulse ความกวาง 12 µsec ไปทขาเอาตพต TRIG ของโมดล HC-SR04

int TRIG = D1; // ก าหนด pin TRIG // อาจเขยนเปน #define TRIG D1 กไดเชนกน void setup() {

pinMode(TRIG, OUTPUT); // ก าหนด pin TRIG นเปนเอาตพต }

void loop() {

digitalWrite(TRIG, HIGH); // เขยนคา HIGH ไปท pin TRIG

delayMicroseconds(12); // หนวงเวลา 12 ไมโครวนาท

digitalWrite(TRIG, LOW); // เขยนคา LOW ไปท pin TRIG

}

Page 79: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

75

กำรใชไลบรำร Ultrasonic.h นอกจากการเขยนโปรแกรมเพอสงพลส อานคาพลส และ ค านวณระยะทางดวย

ตนเองแลว เรายงสามารถใชไลบรารส าเรจรปทชอ Ultrasonic.h มาอานคาระยะทางได ไลบรารนสามารถหาดาวนโหลดไดทวไป เชน จาก https://github.com/hemalchevli/ ultrasonic-library หลงจากโหลดแลวกคดลอกลงในโฟลเดอร C:\Arduino18\libraries โดยคาทไดจะมหนวยเปนเซนตเมตรหรอนวกได และมรปแบบการใชคอ #include <Ultrasonic.h>

// ก าหนด instance ของวตถชอ ultrasonic // ก าหนดขา TRIG ตอกบขา D6 และ ECHO ตอกบขา D7

Ultrasonic ultrasonic(D6, D7);

// อานคาระยะทางในหนวย cm และเกบไวในตวแปรจ านวนเตมชอ dist int dist = ultrasonic.Ranging(CM);

7.3 กำรทดลองวดระยะทำง

วตถประสงค 1. สามารถอธบายหลกการวดระยะทางดวยคลนอลตราโซนกสได 2. สามารถเขยนโปรแกรมให NodeMCU v.3 ค านวณคาระยะทางไดอยางถกตอง 3. สามารถเขยนโปรแกรมให NodeMCU v.3 แสดงคาระยะทางบนจอ OLED และพอรตอนกรมได

Page 80: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

76

อปกรณทใชในกำรทดลอง 1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป)

พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง 2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. บอรดโมดลอลตราโซนกส HC-SR04 1 บอรด 5. บอรดโมดล OLED Display ขนาด 128×64 พกเซล 1 บอรด 6. สาย USB 1 เสน 7. สายตอวงจร (สายจมพ เมย-เมย) 8 เสน วธกำรทดลอง 1. ตอวงจรดงรปท 7.3

รปท 7.3 การเชอมตอ NodeMCU v.3 กบจอแสดงผล OLED และ โมดล HC-SR04

Page 81: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

77

2. เขยนโคดขางลางนแลวอปโหลดลง NodeMCU v.3 แลวสงเกตสงทแสดงบนจอ OLED

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

// Read Distance by HC-SR04 with NodeMCU ESP8266

// Display on OLED

#include <Wire.h>

#include <SH1106.h>

int TRIG_PIN = D6;

int ECHO_PIN = D7;

SH1106 display(0x3c, D1, D2);

void setup() {

display.init();

pinMode(TRIG_PIN, OUTPUT);

pinMode(ECHO_PIN, INPUT);

}

unsigned long read_dist() {

digitalWrite(TRIG_PIN, HIGH);

delayMicroseconds(12);

digitalWrite(TRIG_PIN, LOW);

unsigned long duration = pulseIn(ECHO_PIN,HIGH);

unsigned long dist = (17.0*duration)/1000.;

return(dist);

}

void loop() {

unsigned long distance = read_dist();

display.clear();

display.setFont(ArialMT_Plain_16);

display.drawString(25, 0, "Distance");

display.drawString(54, 15, String(distance) +

" cm.");

display.display();

delay(200);

}

Page 82: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

78

3. ท าการตดตงไลบราร Ultrasonic.h แลวเขยนโคดขางลางนแลวอปโหลดลง NodeMCU v.3 แลวสงเกตสงทแสดงบนจอ OLED

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

// Read Distance by HC-SR04 with NodeMCU ESP8266

// Use Ultrasonic.h library and Display on OLED

#include <Ultrasonic.h>

#include <Wire.h>

#include <SH1106.h>

// SH1106(Addr, SDA, SCL)

SH1106 display(0x3c, D1, D2);

// Ultrasonic(Trigger PIN, Echo PIN)

Ultrasonic ultrasonic(D6, D7);

void setup() {

display.init();

}

void loop() {

unsigned long distance = ultrasonic.Ranging(CM);

display.clear();

display.setFont(ArialMT_Plain_16);

display.drawString(25, 0, "Distance");

display.drawString(54, 15, String(distance) +

" cm.");

display.display();

delay(200);

}

รปท 7.4 แสดงภาพผลลพธทไดจากโคดในการทดลองขอท 2 และ 3 โดยเมอเราท า

การวางวตถไวทหนาโมดลอลตราโซนกสทระยะหางตาง ๆ จะพบวา คาตวเลข Distance เปลยนแปลงไป

แผนผงการท างาน (flowchart) ของโปรแกรมในการทดลองน แสดงไดดงรปท 7.5

Page 83: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

79

รปท 7.4 ผลลพธจากการทดสอบโปรแกรมตามการทดลองขอท 2 และ 3

รปท 7.5 แผนผงการท างานของโปรแกรม

Page 84: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

80

4. เขยนโคดขางลางนแลวอปโหลดลง NodeMCU v.3 แลวสงเกตสงทแสดงผานพอรตอนกรม โดยดผาน Serial Monitor ใน Arduino IDE / Tools จะไดผลดงแสดงตวอยางในรปท 7.6

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

// Read Distance by HC-SR04 with NodeMCU ESP8266

// Display on Serial Monitor

#include <Ultrasonic.h>

// ultrasonic(Trigger PIN, Echo PIN)

Ultrasonic ultrasonic(D6, D7);

void setup() {

Serial.begin(9600);

}

void loop() {

unsigned long distance = ultrasonic.Ranging(CM);

Serial.println(distance);

delay(200);

}

รปท 7.6 ผลลพธจากการทดสอบโปรแกรมตามการทดลองขอท 4

Page 85: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 8

กำรควบคมเซอรโวมอเตอร

8.1 หลกกำรท ำงำนของเซอรโวมอเตอร

เซอรโวมอเตอร (Servo Motor) คอ มอเตอรไฟฟากระแสตรงทมกถกน ามาใชในการควบคมมมหรอต าแหนงเชงเสนทมความละเอยดสง โดยเซอรโวมอเตอรจะประกอบดวยมอเตอร ชดเกยร และบอรดควบคม รวมไวเปนโมดลเดยวกน และจะรบสญญาณควบคม (signal, S) เพยง 1 เสน ไฟเลยง VCC และกราวด GND อกอยางละ 1 เสน รวมเปน 3 เสน โดยทวไปเราสามารถควบคมใหเซอรโวมอเตอรหมนในทศตามเขมนาฬกา (หมนขวา) หรอ ทวนเขมนาฬกา (หมนซาย) ได โดยมมมในการหมนตงแต 0 องศา ถง 180 องศา นนคอ เซอรโวจะหมนไดเพยง 180 องศาหรอครงรอบเทานน โดยมต าแหนงกงกลางอยท 90 องศา สญญาณ S ทใชควบคมมอเตอรชนดนจะเปนสญญาณทมการมอดเลตความกวางพลส (Pulse Width Modulation, PWM) และมระดบแรงดนแบบ TTL ระดบแรงดน VCC ทจายใหมอเตอรนจะอยในชวงประมาณ 4 ถง 6 โวลต รปท 8.1(ก) แสดงภาพถายของเซอรโวมอเตอรขนาดเลกทวไปและ รปท 8.1(ข) แสดงลกษณะภายในของเซอรโวมอเตอรน

รปท 8.1 ลกษณะทวไปและโครงสรางภายในของเซอรโวมอเตอร

Page 86: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

82

กำรท ำงำนของเซอรโวมอเตอร เมอจายสญญาณพลสเขามายงเซอรโวมอเตอรในสวนวงจรควบคมภายในจะท าการ

อานและประมวลผลคาความกวางของสญญาณพลสทสงเขามาเพอแปลคาเปนต าแหนงองศาทตองการใหมอเตอร หมนเคลอนทไปยงต าแหนงนน แลวสงค าสงไปท าการควบคมใหมอเตอร หมนไปยงต าแหนงทตองการ โดยมเซนเซอรบอกต าแหนงเปนตวปอนกลบคามมทแกนหมน ๆ ไป มาใหวงจรควบคมเปรยบเทยบกบคาอนพตเพอควบคมใหไดต าแหนงทตองการอยางถกตองแมนย า สญญำณพลสส ำหรบควบคมเซอรโวมอเตอร

การควบคมเซอรโวมอเตอรท าไดโดยการสรางสญญาณพลสปอนใหกบวงจรควบคมภายในเซอรโวมอเตอรดงในรปท 8.2 เรมตนใหสรางพลสคาบเวลา 20 มลลวนาท (ms) แลวปรบความกวางของพลสใหเทากบ 1.5 ms จะไดวาแกนเซอรโวจะอยทต าแหนงกงกลาง (90 องศา) ดงรปท 8.2(ก) การหมนในชวงมม 0-90 องศา จะใชพลสกวางในชวงประมาณ 0.5-1.5 ms มอเตอรจะหมนไปต าแหนงขวามอ (ตามเขมนาฬกา, 0 ถง 90 องศา) ดงรปท 8.2(ข) และถาสงพลสกวางประมาณ 1.5-2.5 ms แกนหมนของมอเตอรจะหมนไปดานซายมอ (ทวนเขมนาฬกา, 90 ถง 180 องศา) ดงรปท 8.2(ค)

การปอนสญญาณพลสทมความกวางตงแต ~0.5 ms ไปจนถง 1.5 ms ท าใหเซอรโวมอเตอรหมนทวนเขมนาฬกา ซงถาคาความกวางพลสยงตางจากคา 1.5 ms มากเทาใดมมทเซอรโวมอเตอรหมนไปกจะมากขนเทานน

การปอนสญญาณพลสทมคาบเวลาชวงบวกมากกวา 1.5 ms ถงประมาณ 2.5 ms จะท าใหเซอรโวมอเตอรหมนทวนเขมนาฬกา โดยถาคาความกวางพลสยงหางจาก 1.5 ms มากเทาใดมมทเซอรโวมอเตอรหมนไปกจะมากขนเทานน

ส าหรบการควบคมความเรวรอบในการหมนเซอรโวมอเตอรนนเรากสามารถท าไดโดยก าหนดขนาดของพลสและใชการหนวงเวลาประกอบ โดยการทดลองในตอนสดทาย (ตอนท 3) จะแสดงใหเหนถงวธการทางโปรแกรมในการปรบความเรวของเซอรโวมอเตอรใหหมนชาลง

Page 87: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

83

รปท 8.2 ลกษณะพลสของสญญาณทใชควบคมและทศทางการหมนของเซอรโวมอเตอร โดยพลสทแสดงจะควบคมใหเซอรโวมอเตอรอยในต าแหนงท มม (ก) 90 องศา (ข) 90-0 องศา

และ (ค) 90 – 180 องศา

Page 88: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

84

8.2 ไลบรำร Servo.h

ฟงกชนในไลบราร Servo.h เปนฟงกชนทมาพรอมกบ Arduino IDE โดยมฟงกชนทเกยวของกบการควบคมเซอรโวมอเตอร คอ

ฟงกชน attach() คอฟงกชนทใชในการก าหนดขาสญญาณทเซอรโวมอเตอรนนตอกบบอรดไมโครคอนโทรลเลอรและใชก าหนดความกวางของพลสท 0 องศาและ 180 องศา การเรยกใชท าโดยใชค าสง

servo.attach(pin) หรอ servo.attach(pin, min, max) โดย servo คอวตถท เราก าหนดขนกอน และพาราม เตอรของค าส งน ไดแก pin คอ ขาสญญาณของบอรดไมโครคอนโทรลเลอรทใชเชอมตอกบเซอรโวมอเตอร min คอ ความกวางของพลสท 0 องศาของเซอรโวมอเตอรตวทใช โดยก าหนดในหนวยไมโครวนาท (µs) โดยปกตแลวหากไมมการตงคา โปรแกรมจะก าหนดคาไวท 544, max คอ ความกวางของพลสท 180 องศาของ Servo ตวทใชในหนวยไมโครวนาท โดยปกตแลวหากไมมการตงคาโปรแกรมจะก าหนดคาไวท 2400

ฟงกชน write() คอฟงกชนทใชควบคมต าแหนงทตองการใหเซอรโวมอเตอรหมนไปยงองศาทก าหนด สามารถก าหนดเปนคาองศาไดเลย คอ 0-180 องศา แตในเซอรโวมอเตอรชนดทเปน Full Rotation ค าสง write จะเปนการก าหนดความเรวในการหมนโดยคาเทากบ 90 คอค าสงใหมอเตอรหยดหมน คาเทากบ 0 คอการหมนดวยความเรวสงสดในทศทางหนง และคาเทากบ 180 คอการหมนดวยความเรวสงสดในทศทางตรงกนขาม การเรยกใชท าโดยใชค าสง

servo.write(angle) พารามเตอร angle คอมมทตองการใหเซอรโวมอเตอรหมนไป

ฟงกชน writeMicroseconds() คอฟงกชนทใชควบคมต าแหนงทใหมอเตอรหมนไปยงต าแหนงองศาทก าหนดโดยก าหนดเปนคาความกวางของพลสในหนวย µs ซงปกตแลว

Page 89: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

85

เซอรโวมอเตอรทวไปจะใชความกวางของพลสอยท 1000-2000 µs ตามทไดกลาวไปขางตนแลว มอเตอรบางรนหรอบางยหอไมไดใชชวงความกวางของพลสตามทไดกลาวเอาไวน อาจจะใชชวง 700-2300 แทนกสามารถใชฟงกชน writeMicroseconds นเพอก าหนดความกวางพลสไดเอง การใชฟงกชน writeMicroseconds สามารถก าหนดคาไดอสระ เราตองระวงในการใชงาน หากสงงานใหเซอรโวมอเตอรแบบ 0 - 180 องศา หมนไปเกนจดสนสดคอเกนทงฝง 0 หรอ 180 องศา จะท าใหเกดเสยงครางดงจากการหมนไปตอไมไดและมอเตอรจะกนกระแสสงขนดวยในเวลาเดยวกนนน ซงอาจท าใหมอเตอรเสยหายได การเรยกใชท าโดยใชค าสง

servo.writeMicroseconds(µs) พารามเตอร µs คอคาความกวางของพลสทตองการก าหนดในหนวยไมโครวนาท (โดยตวแปรจ านวนเตม)

ฟงกชน read() คอฟงกชนอานคาองศาทสงเขาไปดวยฟงกชน write() เพอใหทราบวาต าแหนงองศาสดทายทเราสงเขาไปนนมคาเทาไหรซงคาทอานออกมานนจะมคาอยในชวง 0 – 180 ฟงกชนนเรยกใชโดยไมมพารามเตอรคอ

servo.read()

ฟงกชน attached() คอฟงกชนทใชตรวจสอบวาเซอรโวมอเตอรทเราตองการใชก าลงตออยกบขาสญญาณของบอรดไมโครคอนโทรลเลอรหรอไม การเรยกใชท าโดยใชค าสง servo.attached() โดยฟงกชนนจะสงคา True ออกมา หากเซอรโวมอเตอรเชอมตออยกบบอรด

ฟงกชน detach() คอฟงกชนคนสถานะของขาทเราก าหนดใหเปนขาควบคมเซอรโวมอเตอรดวยค าส ง attach() ใหกลบคอสการใช งานปกต การเรยกใชท าโดยใชค าส ง servo.detach()

Page 90: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

86

8.3 กำรทดลองควบคมเซอรโวมอเตอร

วตถประสงค 1. เขาใจการท างานของเซอรโวมอเตอร 2. สามารถเขยนโปรแกรมใหไมโครคอนโทรลเลอรควบคมเซอรโวมอเตอรได อปกรณทใชในกำรทดลอง

1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป) พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง

2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. เซอรโวมอเตอร 1 ตว 5. อะแดปเตอร 9 V 1 ตว 6. สาย USB 1 เสน 7. สายตอวงจร (สายจมพ ผ-เมย) 3 เสน วธกำรทดลอง ตอนท 1 กำรควบคมทศทำงกำรหมนของเซอรโวมอเตอร 1. เชอมตอเซอรโวมอเตอรเขากบบอรด NodeMCU v.3 ดงรปท 8.3 โดยในการทดลองน เราอาจจะตองใชอะแดปเตอร 9 V จายไฟใหแกบอรด NodeMCU Base เพอปอนไฟใหแกเซอรโวมอเตอร 2. เขยนโคดโปรแกรมดงทแสดงในหนาถดไป จากนนจงอปโหลดแลวสงเกตทศทางการหมนของเซอรโวมอเตอร 3. ทดลองเปลยนคาเวลาในบรรทดท 17 จาก 1000 เปน 600 แลวสงเกตมมสดทายทเซอรโวมอเตอรหมนไปในทศทางตามเขมนาฬกามากทสด

Page 91: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

87

รปท 8.3 การตอวงจรในการทดลองควบคมเซอรโวมอเตอร

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

// Control Servo Motor by NodeMCU ESP8266

#include <Servo.h>

Servo myservo;

void setup() {

// Servo at PIN D0

myservo.attach(D0);

pinMode(D4, OUTPUT); // On Board LED

}

void loop() {

digitalWrite(D4,LOW); // LED ON (active Low)

myservo.writeMicroseconds(1500); // Center

delay(5000);

myservo.writeMicroseconds(1000); // Rotate CW

delay(2000);

myservo.writeMicroseconds(2000); // Rotate CCW

digitalWrite(D4,HIGH); // LED OFF (active high)

delay(2000);

}

Page 92: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

88

แผนผงการท างานของโปรแกรมในตอนท 1 นแสดงดงรปท 8.4

รปท 8.4 แผนผงการท างานของโปรแกรมทแสดงในการทดลองตอนท 1

Page 93: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

89

ตอนท 2 กำรควบคมมมของเซอรโวมอเตอร 1. เชอมตอเซอรโวมอเตอรเขากบบอรด NodeMCU v.3 ดงรปท 8.3 2. เขยนโคดโปรแกรมดงทแสดงขางลางน จากนนจงอปโหลดแลวสงเกตต าแหนงของเซอรโวมอเตอร 3. ทดลองเปลยนคามมในบรรทดท 19 จาก 180 เปน 135 แลวสงเกตมมสดทายทเซอรโวมอเตอรหมนไปในทศทางทวนเขมนาฬกามากทสด

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

// Control Servo Motor by NodeMCU ESP8266

#include <Servo.h>

Servo myservo;

void setup() {

// Servo at PIN D0

myservo.attach(D0);

pinMode(D4, OUTPUT); // On Board LED

}

void loop() {

digitalWrite(D4,LOW); // LED ON (active Low)

myservo.write(90); // Center

delay(5000);

myservo.write(0); // Rotate CW

delay(2000);

myservo.write(180); // Rotate CCW

digitalWrite(D4,HIGH); // LED OFF (active high)

delay(2000);

}

Page 94: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

90

ตอนท 3 กำรควบคมกำรเคลอนทของเซอรโวมอเตอร 1. เชอมตอเซอรโวมอเตอรเขากบบอรด NodeMCU v.3 ดงรปท 8.3 2. เขยนโคดโปรแกรมดงทแสดงขางลางน จากนนจงอปโหลดแลวสงเกตการเคลอนทของเซอรโวมอเตอร 3. ทดลองเปลยนคาเวลาทหนวงในบรรทดท 16 และ 21 จาก 15 เปน 50 แลวสงเกตความเรวในการหมนของเซอรโวมอเตอรหมนไปในทศทางทวนเขมนาฬกามากทสด

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

// Control Servo Motor by NodeMCU ESP8266

#include <Servo.h>

Servo myservo;

void setup() {

// Servo at PIN D0

myservo.attach(D0);

}

void loop() {

int pos;

for (pos = 0; pos < 180; pos += 1) {

myservo.write(pos);

delay(15);

}

for (pos = 180; pos >= 1; pos -= 1) {

myservo.write(pos);

delay(15);

}

}

Page 95: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 9

กำรวดควำมสวำงดวยเซนเซอร LDR

9.1 เซนเซอรและโมดลวดควำมสวำง

เราสามารถมองความเขมแสงหรอความสวางเปนสญญาณประเภทหนงทมนษยสามารถสมผสไดดวยดวงตา ความสวางมหนวยเปนลกซ (lux) เปนหนวยทใชวดคาความสวาง (Illuminance) ตอพนท หรอคดเปนลเมนตอตารางเมตร โดยในปกตความสวางตามสถานทตาง ๆ นนไดมาจากแหลงก าเนดทแตกตางกน เชน จากหลอดไฟ ดวงอาทตยหรอแสงจากไฟบรเวณขางเคยง เปนตน ในทางปฏบตจะมการก าหนดคาความสวางทเหมาะสม กบการใชงานในสถานทนน ๆ ซงโดยทวไปจะมคาไมนอยกวา 50-500 ลกซ ตวตำนทำนทแปรคำตำมแสง (Light Dependent Resistor, LDR)

แอลดอาร (LDR) หรอชอเตม ๆ คอ Light Dependent Resistor หรอตวตานทานทแปรคาตามแสง คอ ตวตานทานชนดทเปลยนสภาพความน าไฟฟา (Conductance) ไดเมอมแสงมาตกกระทบ ท าจากวสดสารกงตวน าทไวตอแสง บางครงเราเรยก LDR เซนเซอรชนดนวาโฟโตรซสเตอร (Photoresistor) หรอ โฟโตคอนดคเตอร (Photoconductor) รปท 9.1(ก) แสดงตว LDR และ รปท 9.1(ข) แสดงโมดลวดความสวางทใช LDR เปนเซนเซอร โมดลนใหสญญาณเอาตพตได ทงแบบแอนะลอกทชอง (A0) ซงมคาระหวาง 0 - 1023 และแบบดจทลทชอง (D0) คา 0 กบ 1 โดยสามารถปรบระดบแรงดนทน าเปรยบเทยบไดโดยการหมนตวตานทานปรบคาได (VR) บนบอรด และจะตองปอนใชไฟเลยง 3.3-5V ใหกบวงจร ซงบนบอรดจะมแอลอดแสดงสญญาณไฟเลยง (PWR LED) และระดบสญญาณทเปรยบเทยบ (D0 LED) ดวย

Page 96: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

92

รปท 9.1 (ก) LDR และ (ข) โมดลวดความสวางดวยเซนเซอร LDR

โดยลกษณะวงจรภายในโมดล LDR น แสดงดงรปท 9.2 โดยเมอมการปอนไฟเลยง VCC และกราวด GND ใหกบบอรด ความตานทานของ LDR จะถกแปลงเปนสญญาณแรงดนผานวงจรแบงแรงดนเปนสญญาณแอนะลอก A0 แลวสญญาณนจงน ามาเปรยบเทยบกบสญญาณอางองทไดจากวงจรแบงแรงดนอกวงจรทสรางดวยตวตานทานปรบคาได VR โดยออปแอมป (LM393) จะเปนไอซทใชเปรยบเทยบสญญาณ จากนนจงสงสญญาณดจทลออกไปเปนสญญาณ D0 โดยเราสามารถสงเกตระดบสญญาณ D0 ผาน D0 LED ทตออยกบดานขาออกของออปแอมปไดดวย

รปท 9.2 ลกษณะวงจรภายในโมดลวดความสวางดวย LDR

Page 97: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

93

9.2 กำรเทยบวดคำควำมสวำง

ในการใชโมดลวดความสวางดวยเซนเซอร LDR น เพอใหการอานคาความสวาง (มหนวยเปนลกซ) ไดอยางถกตอง เราควรจะท าการเทยบวดคา (calibration) เสยกอน โดยหลกการเทยบวดนน จะเรมจากการใชเซนเซอรอานคาแสงททราบคาความสวาง ซงอาจวดโดยใชลกซมเตอรวดเปรยบเทยบ ตวอยางผลการทดลองกบ LDR ตวหนงแสดงในตารางท 9.1 และพลอตเปนกราฟไดดงแสดงในรปท 9.3

ตำรำงท 9.1 ความสมพนธระหวางคาความสวางและความตานทานของ LDR

คำควำมสวำง (lux)

คำควำมตำนทำน (Ohm)

1 11600 60 2840

310 1374 590 1060

1300 664 1770 546

รปท 9.3 ความสมพนธระหวางคาความสวางและความตานทานของ LDR

Page 98: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

94

จากคาความตานทานทเปลยนแปลงตามความสวาง เราสามารถแปลงขอมลสญญาณเปนแรงดนไดโดยใชกฎการแบงแรงดน ดงแสดงรปวงจรในรปท 9.4

รปท 9.4 วงจรแบงแรงดน

จากรปวงจรท 9.4 เราสามารถค านวณหาคากระแสไฟฟาทไหลในวงจรไดดงสมการท (9.1) และแรงดนทตกครอม LDR หรอแรงดนทดานออก (Vout) ดงสมการท (9.2)

5

10k+LDR LDR

VI

R R R

(9.1)

5 V10k+

LDRout

LDR

RV

R (9.2)

ตวอยำง ทแสงความสวาง 60 lux จงหาคาแรงดน Vout โดยแทนคาความตานทาน LDR ดวยคา 2.84 k

2.84 k5 V = 5 V = 1.106 V

10 k+ 10k+2.84 k

LDRout

LDR

RV

R

ตวอยำง ทแสงความสวาง 590 lux จงหาคาแรงดน Vout โดยแทนคาความตานทาน LDR ดวยคา 1.06 k

1.06 k5 V = 5 V = 0.479 V

10 k+ 10 k+1.06 k

LDRout

LDR

RV

R

จากตารางท 9.1 และสมการท (9.2) เราสามารถสรางตารางคาแรงดนไฟฟาไดดงตารางท 9.2

Page 99: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

95

ตำรำงท 9.2 ความสมพนธระหวางคาความสวางและแรงดนไฟฟาทตกครอมของ LDR

คำควำมสวำง (lux) คำควำมตำนทำน (Ohm) แรงดนไฟฟำ (Volt)

1 11600 2.69 60 2840 1.11

310 1374 0.60 590 1060 0.479 1300 664 0.311 1770 546 0.259

ในการหาคาความสวางจากขอมลทแสดงในรปท 9.3 เราจะฟตขอมลและหาสมการ

ความสมพนธของแสงและแรงดนไฟฟา ดงแสดงในรปท 9.5

รปท 9.5 การฟตหาความสมพนธระหวางคาความสวางและแรงดนไฟฟาทวดได

จากสมการทไดจากการฟตกราฟในรปท 9.5 ความสมพนธระหวางแรงดนไฟฟามหนวยเปนโวลต (volt) ในแนวแกน x กบคาความสวางทมหนวยเปนลกซ (lux) ในแนวแกน y สมการทไดเปนสมการสวนกลบ ดงสมการท (9.3) และมคา R2 เทากบ 0.963 ซงเปนคาความเชอมนในระดบสง

-3.15

outIlluminance 42.0 V (9.3)

Page 100: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

96

9.3 กำรแปลงสญญำณแอนะลอกเปนดจทล

กระบวนการตรวจจบและแปลงสญญาณหรอปรมาณทางกายภาพใด ๆ มาเปนสญญาณไฟฟาเปนกระบวนการแรกในการประมวลสญญาณ อปกรณทส าคญคอ ตวตรวจจบหรอเซนเซอร หนาทส าคญคอ การเปลยนหรอแปลงปรมาณทางกายภาพมาเปนสญญาณทางไฟฟาเชน จอยสตก (joystick) โพรบวดความชน โพรบวดความสนสะเทอนทท าจากวสดเพยโซอเลกทรก (piezoelectric material) ตวตานทานแปรคาตามแสง (LDR) ใชในการตรวจจบความสวาง เพอเปลยนเปนคาความตานทานทางไฟฟาแลวจงแปลงเปนแรงดนไฟฟา ตามล าดบ (ดรปท 9.6)

การปรบแตงสญญาณแรงดน ซงเปนสญญาณแอนะลอกเปนกระบวนการถดมา โดยในสวนนจะเปนเรองของวงจรอเลกทรอนกสทจะท าใหสญญาณไฟฟาทไดจากกระบวนการแรกเหมาะสมกบการเชอมตอเขากบไมโครคอนโทรลเลอรหรออปกรณแปลงสญญาณแอนะลอกเป นด จท ล (Analog-to-Digital Conversion: ADC) โดยกระบวนการแปลงสญ ญ าณ แอนะลอกเปนดจทลเปนขบวนการแปลงสญญาณแอนะลอกใหเปนขอมลทางดจทลเพอสงไปประมวลผลยงไมโครคอนโทรลเลอรตอไป

รปท 9.6 ขบวนการแปลงสญญาณแอนะลอกเปนดจทล

Page 101: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

97

ควำมละเอยดในกำรแปลงสญญำณแอนะลอก สวนทตองใหความสนใจในสวนนคอ ความละเอยดในการแปลงสญญาณ วงจรแปลง

สญญาณแอนะลอกเปนสญญาณดจทลท เหมาะสมในการน ามาใชในการทดลองทางวทยาศาสตรควรมความละเอยดไมนอยกวา 8 บต ซงใหความแตกตางของขอมลไมนอยกวา 256 คา (= 28) โดยเราสามารถหาจ านวนระดบความแตกตางของขอมลไดโดยใชสมการท (9.4) สวนคาของขอมลดจทล คอ 1024 ส าหรบ NodeMCU หาไดจากสมการท (9.5) โดยก าหนดใหความละเอยด n เทากบ 10 บต ถาการแปลงสญญาณนมความละเอยดสง (n มาก ๆ) เทาใดกจะยงด เพราะจะใหผลการแปลงทแมนย าขน ส าหรบบอรด ADC ทมขายทวไปในทองตลาดจะมความละเอยด 8 – 24 บต และส าหรบ NodeMCU วงจรแปลงสญญาณภายในบอรดนมความละเอยด 10 บต

N = 2n เมอ n = 8 ได N = 2n = 256 (9.4)

N = 2n เมอ n = 10 ได N = 2n = 1024 (9.5)

รปท 9.7 แสดงตวอยางการแปลงสญญาณแอนะลอกเปนดจทลและการแปลงกลบ ความแยกชด (Resolution) ของการแปลงสญ ญ าณ ก าหนดด วย 1 LSB คอ Least Significant Bit หมายถง คาแรงดนอนพตในแตขนการเปลยนขอมลการแปลง ชวงหางระหวางขนของการเปลยนแปลงแรงดนแอนะลอกเอาตพตหาไดจากสมการท (9.6)

Voltage Resolution Full Scale Voltage

2n (9.6)

โดยเมอแรงดนอนพทของการแปลงแอนะลอกเปนดจทลเทากบ 3.3 V ทความละเอยด 10 บต จะได Voltage resolution หรอ 1 LSB คอ 3.223 mV ดงแสดงในสมการท (9.7)

Voltage Resolution = 1 LSB 3.3 V

0.003223 V1024

(9.7)

Page 102: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

98

รปท 9.7 ตวอยางการแปลงสญญาณแอนะลอกเปนดจทลและการแปลงกลบ

ตำรำงท 9.3 ตวอยางการแปลงแรงดนเปนตวเลขฐานสองขนาด 10 บต

คำแรงดน ขอมลเลขฐำนสบ ขอมลเลขฐำนสอง 0.0 V 0 00 0000 0000

0.003223 V 1 00 0000 0001

0.3223 V 100 00 0110 0100 1.00 V 310 01 0011 0110

1.65 V 512 10 0000 0000 3.30 V 1023 11 1111 1111

ค ำสงในกำรอำนคำสญญำณแอนะลอกจำก NodeMCU

ค าสง analogRead(pin) โดย pin คอ ชอขา ส าหรบ NodeMCU จะมเพยงขาเดยวคอ ขา A0 (ดรปท 9.6 คอลมนขวามอสด) โคดตวอยางการรบคาสญญาณแอนะลอกแลวค านวณคาแรงดนและคาความสวาง คอ

data_LDR = analogRead(A0);

volt_LDR = (3.3/1024) * data_LDR;

illu_LDR = 42.0 * pow(volt_LDR, -3.15);

Page 103: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

99

9.4 กำรทดลองวดคำควำมสวำง

วตถประสงค 1. สามารถเขาใจการแปลงขอมลจากสญญาณแอนะลอกเปนดจทลได 2. สามารถตอวงจรไมโครคอนโทรลเลอร NodeMCU v.3 กบโมดลวดแสงแบบแอนะลอกได 3. สามารถเขยนโปรแกรมแสดงการค านวณคาความสวางและแสดงผลบน OLED Display ได อปกรณทใชในกำรทดลอง 1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป)

พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง 2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. โมดลวดความสวางดวย LDR 1 โมดล 5. โมดล OLED Display ขนาด 128×64 พกเซล 1 โมดล 6. สาย USB 1 เสน 7. สายตอวงจร (สายจมพ เมย-เมย) 7 เสน วธกำรทดลอง ตอนท 1 กำรอำนคำแอนะลอกและแสดงผลบนคอมพวเตอร 1. ตอวงจรโดยปอนแรงดน 5 V และ กราวดใหแกโมดลวดแสงแบบแอนะลอกดวย LDR และปอนสญญาณ A0 เขาสขา A0 ดงรปท 9.8

Page 104: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

100

รปท 9.8 การเชอมตอ NodeMCU v.3 กบ โมดลวดแสงแบบแอนะลอก 2. เขยนโคดโปรแกรมดงแสดงขางลางน แลวอปโหลดและสงเกตผลทแสดงบนคอมพวเตอร ผานพอรตอนกรม ทงทาง Serial Monitor และ Serial Plotter ในเมน Tools

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// Read LDR by NodeMCU ESP8266

// Result is sent to serial port.

// Pin A0 = analog input

int LDR_Sensor = A0;

int data_LDR;

void setup() {

// Set serial speed to 9600 bps

Serial.begin(9600);

}

void loop() {

// Read Analog Data

data_LDR = analogRead(LDR_Sensor);

Serial.println(data_LDR);

delay(500);

}

Page 105: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

101

แผนผงการท างานของโปรแกรมทเขยนในตอนท 1 แสดงดงรปท 9.9 และผลลพธอาจแสดงเปนตวเลข (ผาน Serial Monitor) และเปนกราฟ (ผาน Serial Plotter) ไดดงรปท 9.10 (ก) และ 9.10 (ข) ตามล าดบ

รปท 9.9 แผนผงการท างานของโปรแกรมในการทดลองตอนท 1

Page 106: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

102

รปท 9.10 ผลลพธของโปรแกรมในการทดลองตอนท 1 ทเปดดผาน (ก) Serial Monitor และ (ข) Serial Plotter

ตอนท 2 กำรอำนคำแอนะลอกและแสดงผลบนจอ OLED 1. ตอวงจรดงรปท 9.11 2. เขยนโคดโปรแกรมดงทแสดงขางลางน แลวอปโหลดและสงเกตผลทแสดงบนหนาจอ OLED Display และผลบนคอมพวเตอร (ผาน Serial Monitor)

Page 107: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

103

รปท 9.11 การเชอมตอ NodeMCU v.3 กบ โมดลวดแสงแบบแอนะลอก และจอแสดงผล OLED Display

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// Read LDR by NodeMCU ESP8266

// result is sent to OLED & Serial

#include <Wire.h>

#include <SH1106.h>

// SH1106(Addr, SDA, SCL)

SH1106 display(0x3c, D1, D2); // OLED

// Pin A0 = analog input

int LDR_Sensor = A0;

int data_LDR;

float volt_LDR;

float illu_LDR;

void setup() {

display.init();

// Set serial speed to 9600 bps

Serial.begin(9600);

}

Page 108: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

104

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

void Calculate() {

data_LDR = analogRead(LDR_Sensor);

volt_LDR = (3.3/1024)*data_LDR;

illu_LDR = 42.0 * pow(volt_LDR, -3.15);

}

void show_OLED() {

display.clear();

display.drawRect(0, 0, 128, 64);

display.setFont(ArialMT_Plain_10);

display.drawString(15,0, "LDR Sensor

Monitor");

display.drawString(5, 15, "data_LDR = ");

display.drawString(65, 15, String(data_LDR));

display.drawString(5, 30, "volt_LDR = ");

display.drawString(65, 30, String(volt_LDR) +

" V");

display.drawString(5, 45, "illu_LDR = ");

display.drawString(65, 45, String(illu_LDR) +

" lux");

display.display();

}

void show_Serial() {

Serial.print("\t data_LDR = ");

Serial.print(data_LDR);

Serial.print("\t volt_LDR = ");

Serial.print(volt_LDR);

Serial.print("\t illu_LDR = ");

Serial.println(illu_LDR);

}

void loop() {

Calculate();

show_OLED();

show_Serial();

delay(500);

}

Page 109: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

105

รปท 9.12 แสดงภาพถายระบบททดสอบและผลลพธทได บนหนาจอ OLED และบนจอคอมพวเตอร ผาน Serial Monitor

รปท 9.12 การเชอมตอ NodeMCU v.3 กบ โมดลวดแสงแบบแอนะลอก และ OLED ทแสดงพรอมผลลพธจากการทดลองตอนท 2

แบบฝกหดทำยกำรทดลอง

จงเขยนโปรแกรมควบคมการท างานของรเลย 1 – รเลย 4 โดยมการรบคาจากเซนเซอรวดความสวาง และมเงอนไขการท างานดงแสดงในตารางท 9.4 ขอแนะน ำ ควรตอวงจรตามรปท 9.13

Page 110: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

106

ตำรำงท 9.4 เงอนไขของโปรแกรมควบคมรเลย

เงอนไข รเลย 1 รเลย 2 รเลย 3 รเลย 4

ความสวาง 20 lux ON ON ON ON

20 < ความสวาง 50 ON ON ON OFF

50 < ความสวาง 100 ON ON OFF OFF

100 < ความสวาง 200 ON OFF OFF OFF

ความสวาง > 200 lux OFF OFF OFF OFF

รปท 9.13 การเชอมตอ NodeMCU v.3 กบ โมดลวดแสงแบบแอนะลอก และโมดลรเลย

Page 111: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 10

กำรใชงำนเซนเซอรวดควำมเรงแบบสำมแกน

10.1 โมดลวดควำมเรงแบบสำมแกน ADXL345

บอรดโมดลทกลาวถงในบทนคอ โมดลวดความเรงแบบสามแกนแบบดจทลทใชชปเบอร ADXL345 เปนเซนเซอรวดสญญาณความเรงในสามแกน ทมนยามทศทางแสดงอยบนบอรดอยางชดแจง (รปท 10.1) โดยโมดลนใหใหสญญาณขาออกเปนขอมลดจทลและตดตอใชงานผาน I2C ไดและสามารถก าหนดคาความโนมถวงสงสดทอาน ไดสงสดถง ±16g (±2g, ±4g, ±8g, และ ±16g) โดย g คอคาความเรงจากแรงดงดดของโลก (ประมาณ 10 m/s2)

ชป ADXL345 เปนระบบวดการเรงความเรว แบบ 3 แกนทท างานไดในระดบการใชพลงงานทต ามาก วดไดทงความเรง/ความเรวแบบไดนามกอนเปนผลมาจากการเคลอนไหวหรอแรงกระแทกและการเรงความเรวแบบคงท เชนการเอยง งายตอการสอสารกบไมโครคอนโทรลเลอรรนใหม ๆ ผานการสอสารแบบ I2C ทใชเพยงขา SCL และ SDA

รปท 10.1 โมดลวดความเรงแบบ 3 แกน ADXL345

Page 112: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

108

คณสมบตของชปวดคำควำมเรง ADXL345 - ใชไฟเลยงในชวงกวาง 2.0 - 3.6 V - กนพลงงานต ามาก (23 µA ทไฟเลยง 2.5 V) - สามารถเลอกความละเอยดในการวดผานค าสงทรบผานการสอสารแบบอนกรมได - ขอมลทอานไดมความละเอยดสงถง 0.004 g/LSB (13 บต) - สามารถน ามาเชอมตอไดทงแบบแบบ SPI และ I2C

กำรวดควำมเรงแบบ 3 แกน

การวดมมเอยงของเซนเซอรสามารถท าไดโดยการวดความเรงในแตละแกน โดยทวไปเราจะนยามการเอยงเมอเทยบกบแกนหรอระบบพกดอางอง โดยบอกความเอยงเปนมมทหมนเอยงไปในแกนหนง ๆ ซงการเอยงในแตละทศจะมลกษณะการก าหนดทศทางดงรปท 10.2

รปท 10.2 ทศทางการเอยงในมมตาง ๆ เสมอนการหมนรอบแกน X, Y และ Z

โมดลวดความเรงนจะวดความเรงในแตละแกน กคอ ขณะทโมดลอยนง ๆ คาความเรงในแตละแกนนาจะมคาเปนศนย แตในความเปนจรงอยาลมวายงมแรงโนมถวงของโลกอยดวย ดงนนคาทอานไดจงไมไดเปนศนยทงหมด คอ ถาเราตงเครองใหแกน Z ตงฉากกบพนโลก แกน X และ Y จะเปน 0 แตวาแกน Z จะไมเปน 0 เพราะมแรงโนมถวงของโลกกระท าอย ดงนนคาทไดจากแกน Z จงมคา 9.81 m/s2 หรอประมาณ 10 m/s2 รปท 10.3 แสดงลกษณะการวางโมดลทท าใหอานคาไดคาตาง ๆ

Page 113: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

109

รปท 10.3 ลกษณะการวางโมดลใหแกน (ก) Z (ข) Y และ (ค) X ตงฉากกบผวโลก ตามล าดบ

ในกรณทอยนง ๆ และแกน X, Y และ Z ไมมแกนใดตงฉากกบพนโลก แรงโนมถวงของโลกทกระท ากบแตละแกนของโมดลวดความเรงกจะกระจายออกไปในแตละแกน ขนอยกบการเอยงของเซนเซอร แตเมอคดเวกเตอรลพธทตงฉากกบพนโลกกมคาประมาณ 10 m/s2 ดงแสดงในรปท 10.4

รปท 10.4 ตวอยางคาทอานไดเมอวางโมดลในลกษณะไมตงฉากกบพนโลก

Page 114: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

110

10.2 ไลบรำรและค ำสงทเกยวของ

ในขนแรกของการใชงานโมดล ADXL345 เราจะตองดาวนโหลดไลบรารมาลงในโป รแกรม Arduino IDE เส ยก อน โดยผ ใช จะต อ งดาวน โห ลด ไลบราร ส องต วค อ Adafruit_Sensor จาก https://github.com/adafruit/Adafruit_Sensor และ Adafruit_ ADXL345 จาก https://github.com/adafruit/Adafruit_ADXL345

โดยหลงจากตดตงไลบรารลงใน Arduino IDE แลว ผใชสามารถเรยกใชงานโมดล ADXL345 ไดโดยเรมจากการเพมไลบราร 3 ตวไดแก Wire.h, Adafruit_Sensor.h และ Adafruit_ADXL345_U.h แลวจงก าหนดวตถคอ โมดล ADXL345 ทเชอมตอ โดยใชค าสง

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);

โดย accel คอชอวตถทสรางจากคลาส Adafruit_ADXL345_Unified ซงคลาสนเปนคลาสทใชงานไดอยางหลากหลาย มฟงกชนทเปนเมธอดทอานคาความเรงอยภายใน พรอมใหเรยกใชงาน โดยการเชอมตอโมดลน ชป ADXL345 ก าหนดใหมการเชอมตอแบบ I2C โดยม address คอ 0x53 และเชอมตอผานขา D1 และ D2 ของ NodeMCU

ฟงกชน begin() เปนฟงกชนทเรยกเพอใชตรวจสอบการเชอมตอของโมดลและไมโครคอนโทรลเลอร โดยหลงจากทเชอมตอไดแลว เราจะสามารถก าหนดขอบเขตของการอานคาไดโดยใชค าสง accel.setRange(ADXL345_RANGE_xx_G) โดย xx = 2, 4, 8, 16 และก าหนดอตราเรวในการสงขอมล ดวยค าสง setDataRate(dataRate) โดยฟงกชนทกลาวถงน จะอยในสวนของ setup() ของโปรแกรม

การเรยกใชงาน (อานคา) ความเรงจากโมดลท าไดโดยก าหนดตวแปร เหตการณ คอ sensors_event_t event; จากนนจงใชฟงกชน (เมธอด) getEvent เพออานคาความเรงแลวเราสามารถเรยกดคาความเรงในแตละแกนไดจาก event.acceleration.x (.y และ .z)

ในการใชงานโมดลน หากเราตองการคาทถกตองแมนย า เราอาจจะท าการเทยบวด (calibration) กอน ดวยวธการทางซอฟตแวร โดยผทสนใจวธการน กสามารถศกษาเพมเตม

Page 115: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

111

ไดจากแหลงความร ในอนเทอรเนตเชน https://learn.adafruit.com/adxl345-digital-accelerometer/programming

ส าหรบขาทใชในการเชอมตอเพอใชงานโมดล ADXL345 มดวยกน 4 ขา คอ VCC, GND, SDA และ SCL โดยในการทดลองน เราจะเชอมตอขา D1 และ D2 ของ NodeMCU เขากบขา SCL และ SDA ตามล าดบ 10.3 กำรทดลองวดคำควำมเรง

วตถประสงค 1. สามารถตอวงจร NodeMCU v.3 กบโมดลวดความเรง 3 แกน ได 2. สามารถเขยนโปรแกรมแสดงผลการวดความเรงได 3. สามารถเขยนโปรแกรมเพอน าคาความเรงทวดไดไปใชงานตอไปได อปกรณทใชในกำรทดลอง 1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป)

พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง 2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. บอรดโมดลวดความเรง 3 แกน ดวยไอซเบอร ADXL345 1 บอรด 5. สาย USB 1 เสน 6. สายตอวงจร (สายจมพ เมย-เมย) 4 เสน วธกำรทดลอง ตอนท 1 1. ตอวงจรตามรปท 10.5 2. เขยนโคดโปรแกรมเพออานคาความเรงทงสามแกนและแสดงผลผานพอรตอนกรม

Page 116: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

112

รปท 10.5 การเชอมตอแบบ I2C ระหวาง NodeMCU กบโมดลวดความเรง

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

// Read 3-axis accelerometer by NodeMCU ESP8266

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_ADXL345_U.h>

Adafruit_ADXL345_Unified accel =

Adafruit_ADXL345_Unified(12345);

void setup() {

Serial.begin(9600);

Serial.println("Accelerometer Test");

Serial.println("");

if(!accel.begin()) {

Serial.println("Oops, no ADXL345 detected.");

while(1);

}

accel.setRange(ADXL345_RANGE_16_G);

}

void loop() {

sensors_event_t event;

accel.getEvent(&event);

Page 117: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

113

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Serial.print("X: ");

Serial.print(event.acceleration.x);

Serial.print(" ");

Serial.print("Y: ");

Serial.print(event.acceleration.y);

Serial.print(" ");

Serial.print("Z: ");

Serial.print(event.acceleration.z);

Serial.print(" ");

Serial.println("m/s^2");

delay(500);

}

3. ทดสอบผลการวดความเรงในแนวแกน X, Y, และ Z โดยการหมนเซนเซอรในทศตาง ๆ แลวอานคาทแสดง ตอนท 2 1. ตอวงจรตามรปท 10.5 2. เขยนโคดโปรแกรมเพอตรวจสอบเหตการณการเคลอนทอยางรวดเรว ซงเปนเหตการณทท าใหมขนาดความเรงรวมเกน 20 m/s2 และแสดงผลเปนขอความผานพอรตอนกรม

1

2

3

4

5

6

7

8

9

//Detect event by accelerometer + NodeMCU ESP8266

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_ADXL345_U.h>

Adafruit_ADXL345_Unified accel =

Adafruit_ADXL345_Unified(12345);

// Threshold value for detecting accident event

float acth = 20.0;

Page 118: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

114

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

float acx,acy,acz,ac;

void setup() {

Serial.begin(9600);

Serial.println("Accelerometer Test");

Serial.println("");

if(!accel.begin()) {

Serial.println("Oops, no ADXL345 detected.");

while(1);

}

accel.setRange(ADXL345_RANGE_16_G);

}

void loop() {

sensors_event_t event;

accel.getEvent(&event);

acx = event.acceleration.x;

acy = event.acceleration.y;

acz = event.acceleration.z;

ac = sqrt(pow(acx,2)+pow(acy,2)+pow(acz,2));

if(ac > acth) {

Serial.println("accident detected!");

}

delay(100);

}

3. ทดสอบผลโดยการขยบเซนเซอรเรว ๆ แลวสงเกตท Serial Monitor

Page 119: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 11

กำรใชงำนโมดลสอสำรไรสำยดวยเทคโนโลยบลทธ

11.1 กำรสอสำรไรสำยดวยเทคโนโลยบลทธ

บลทธ (Bluetooth) คอ มาตรฐานของเทคโนโลยการสอสารไรสายทใชในการแลกเปลยนขอมลในระยะทางสน ๆ ทพฒนาโดยกลม Bluetooth special Interest Group (BIG) โดยการสอสารนจะใชคลนวทยในชวง UHF (2.4-2.485 GHz) โดยทวไปบลทธจะถกน าไปใชกบ อปกรณ เคลอนท โดยอปกรณ จะสรางเครอขายสวนตว (personal area networks, PANs) ทมกจะมระยะทางในการสงขอมลไมเกน 10 เมตร และจ านวนอปกรณไมเกน 7 ชน จดประสงคของการพฒนาบลทธ เพอน ามาใชแทนทการสงขอมลแบบ RS-232 ทใชสาย โดยปจจบนเทคโนโลยนถกพฒนาไปถง Bluetooth 5 ทมความสามารถในการสงสญญาณไดในชวงกวาง (สงสด 40 – 400 เมตร) โลโกสญลกษณของบลทธแสดงดงรปท 11.1 โดยเรามกจะพบโลโกนในอปกรณอเลกทรอนกสทสามารถสอสารดวยเทคโนโลยนได

ปจจบนเทคโนโลยบลทธถกน ามาประยกตใชงานอยางแพรหลาย เชน การสอสารและควบคมไรสายระหวางโทรศพทมอถอและหฟง/เครองเสยง การสอสารไรสายในเมาส การสงขอมลระหวางโทรศพทและคอมพวเตอร โดยเทคโนโลยนเปนเสมอนเทคโนโลยทางเลอกในการสอสารผานเครอขายไรสาย ซงเหมาะกบการสรางเครอขายขนาดเลกทมการเชอมตออปกรณเพยง 1-2 ชน ในระยะเวลาสน ๆ โดยความเสถยรของการสงขอมลขนกบทงตวอปกรณและสภาพแวดลอม

รปท 11.1 โลโกของบลทธ

Page 120: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

116

11.2 โมดลสอสำรไรสำยและโปรแกรมเชอมตอ

บอรดโมดลทใชในการทดลองนคอ บลทธโมดล HC-06 เปนบอรดส าหรบใชรบ-สงสญญาณกบอปกรณทเชอมตอผานบลทธได เชน โทรศพทมอถอ โดยบอรดนจะส อสารกบไม โค รคอน โท รล เลอรด วยการส อ ส ารแบ บ อน ก รมท เร ยก ว า USART (Universal Synchronous/Asynchronous Receiver/Transmitter) รปท 11 .2 แสดงบอรด โมด ลสอสารไรสาย HC-06 ทใชเทคโนโลยบลทธในการเชอมตอ

รปท 11.2 บอรดโมดลสอสารไรสาย HC-06 (ก) ดานหนาและ (ข) ดานหลง

การเชอมตอเพอใชงานโมดลน ในเบองตน ท าไดโดยงาย คอใชเพยงขา RXD

(Receive) และ TXD (Transmit) ในการรบสงสญญาณแบบอนกรมในระดบ LVTTL (3.3 V) โดยเราจะตองปอนไฟเลยง (รองรบไฟเลยงระดบแรงดน 3.6 – 6 V) ใหแกบอรดดวย

NodeMCU ทภายในมชป ESP8266 จะมการสอสารแบบ UART อยภายในบอรดอยแลว โดยเราสามารถสงสญญาณจาก NodeMCU ไปยงโมดลบลทธ HC-06 ไดดวยการเชอมตอขา RX บนบอรด NodeMCU ไปทขา TXD บนโมดลบลทธ และขา TX บนบอรดไปทขา RXD บนโมดล

ส าหรบการรบขอมลจาก NodeMCU นน ผใชจะตองมโปรแกรมทใชในการเชอมตอ โดยทงนเราอาจใชคอมพวเตอรทสามารถเชอมตอผานบลทธได (คอโนตบคหรอคอมพวเตอรตงโตะทมโมดลบลทธอยภายในหรอใชโทรศพทมอถอกไดเชนกน) โดยโปรแกรมพนฐานทขอ

Page 121: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

117

กลาวถงและแสดงการทดลองใชในทน คอ โปรแกรม Bluetooth Terminal HC-05 ซงสามารถดาวนโหลดและตดตงไดฟร ออกแบบมาส าหรบโมดลบลทธนโดยเฉพาะ รปท 11.3 แสดงหนาตางทแสดงการดาวนโหลดและตดตงผาน Google Play

รปท 11.3 หนาตางแสดงการดาวนโหลดและตดตงโปรแกรม Bluetooth Terminal HC-05 ผาน Google Play บนโทรศพทมอถอตระกลแอนดรอยด

เมอตดตงโปรแกรมเสรจสมบรณแลว บนโทรศพทจะแสดงไอคอนของโปรแกรม ดง

รปท 11.4 โดยเมอเขาโปรแกรมแลวเราจะตองอนญาตใหโปรแกรมเขาถงการเชอมตอแบบบลทธในโทรศพท และการก าหนด (Setting) บนโทรศพทจะตอง Enable การสอสารชนดนอยดวย จากนนจงสแกนคนหาอปกรณบลทธ แลวจะพบอปกรณเมอโมดลบลทธท างานอยบรเวณใกลเคยง โดยหากมอปกรณทมชอเดยวกนอยในยานนนมากกวา 1 ตว (เชน มอปกรณชอ HC-06 หลายตว) เรากจะตองสงเกตเบอร MAC Address ของอปกรณทเราตองการเชอมตอ โดย MAC Address นคอ เบอรของฮารดแวร ซงเปนเลขฐานสบหก 6 ชด

เมอเลอกอปกรณทเชอมตอแบบบลทธแลวเราจะตองท าการกรอกรหสผานซงโดยปกตจะตงคาไวเปน “1234” แลวจงสามารถเชอมตอได ดงแสดงในรปท 11.5 (ส าหรบการเปลยนชอและพาสเวรดของอปกรณบลทธน จะตองใชค าสง AT (AT Command) ซงมกลาวถงในการใชงานเบองตนน

Page 122: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

118

รปท 11.4 หนาตางการเขาใชงานโปรแกรม Bluetooth Terminal HC-05

รปท 11.5 หนาตางการเขาใชงานโปรแกรม Bluetooth Terminal HC-05

Page 123: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

119

11.3 กำรทดลองรบสงขอมล

วตถประสงค 1. สามารถอธบายวธการและท าการเชอมตอโมดลเพอสอสารไรสายได 2. สามารถเขยนโปรแกรมให NodeMCU v.3 สงขอมลแบบไรสายไดอยางถกตอง 3. สามารถเขยนโปรแกรมให NodeMCU v.3 สามารถรบขอมลจากการสอสารไรสายและประมวลผลไดอยางถกตอง อปกรณทใชในกำรทดลอง 1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป)

พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง 2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. บอรดโมดลสอสารไรสาย HC-06 1 บอรด 5. โมดลวดความสวางดวย LDR 1 บอรด 6. อะแดปเตอร 9 V 1 ตว 7. สาย USB 1 เสน 8. สายตอวงจร (สายจมพ เมย-เมย) 10 เสน วธกำรทดลอง ตอนท 1 1. ตอวงจรดงรปท 11.6 โดยขอใหสงเกตวา ขา TX ของ NodeMCU ตอกบขา RXD ของโมดล HC-06 และ ขา RX ของ NodeMCU ตอกบขา RXD ของโมดล HC-06 และนอกจากน เรายงตอใหไฟเลยง (5 V) มาจากอะแดปเตอร 9 V แทนทจะใชไฟจาก VUSB 2. เขยนโคดทแสดงในหนาถดไปแลวอปโหลดลงบอรด NodeMCU v.3 (ขอสงเกตโคดนคอโคดเดยวกนกบโคดทแสดงในบทท 9)

Page 124: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

120

รปท 11.6 การเชอมตอ NodeMCU v.3 กบโมดล HC-06 และโมดลวดความสวางดวย LDR

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

// Wireless Communication of NodeMCU ESP8266

// by using Bluetooth Module HC-06

//

// Read LDR by NodeMCU ESP8266

// Result is sent to Bluetooth Module.

// Pin A0 = analog input

int LDR_Sensor = A0;

int data_LDR;

void setup() {

// Set serial speed to 9600 bps

Serial.begin(9600);

}

void loop() {

// Read Analog Data

data_LDR = analogRead(LDR_Sensor);

Serial.println(data_LDR);

delay(500);

}

Page 125: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

121

3. ท าการถอดสาย USB แลวเชอมตอบอรด NodeMCU กบโปรแกรม Bluetooth Terminal HC-05 แลวทดลองปรบคาความสวางทเซนเซอรไดรบ

รปท 11.7 แสดงตวอยางผลการทดลองทสงเกตเหนผาน Bluetooth Terminal ซงคานคอคาทอานไดจากขา A0 ทตอกบเซนเซอร LDR นนเอง

รปท 11.7 ตวอยางหนาจอผลการทดลองทแสดงผาน Bluetooth Terminal

Page 126: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

122

ตอนท 2 ในการทดลองน เราจะทดสอบการสงคาจากโทรศพทมอถอผานบลทธ ไปควบคมไฟแอลอดทอยบนบอรด NodeMCU (ตออยกบขา D4) โดยมขนตอนดงน 1. ตอวงจรดงรปท 11.6 โดยอาจน าโมดลวดความสวางแสงออก และเชอมตอ NodeMCU กบคอมพวเตอรเพอลงโปรแกรมตอไป 2. เขยนโคดทแสดงดานลางนแลวอปโหลดลง NodeMCU v.3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

// Wireless Communication of NodeMCU ESP8266

// by using Bluetooth Module HC-05

#define ON LOW

#define OFF HIGH

int LED = D4; // On board LED

void setup() {

pinMode(LED, OUTPUT);

Serial.begin(9600);

Serial.println("\n\nConnection OK.");

Serial.println("Select either 1 (ON) or 0

(OFF)");

}

void loop() {

// If data is available on serial port

if (Serial.available())

{

// Data received from bluetooth

char data_received = Serial.read();

if (data_received == '0')

{

digitalWrite(LED, OFF);

Serial.println("LED turned OFF");

Serial.println("Select either 1 (ON) or 0

(OFF)");

}

else if (data_received == '1')

Page 127: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

123

31

32

33

34

35

36

37

38

{

digitalWrite(LED, ON);

Serial.println("LED turned ON");

Serial.println("Select either 1 (ON) or 0

(OFF)");

}

}

}

3. ท าการถอดสาย USB แลวเชอมตอบอรด NodeMCU กบโปรแกรม Bluetooth Terminal HC-05 แลว กดปมรเซตบนบอรด NodeMCU จากนนจงทดลองเปลยนสถานะของไฟแอลอด โดยสง ‘0’ หรอ ‘1’ ไปยงบอรด

รปท 11.8 แสดงลกษณะการเชอมตอและหนาตางโปรแกรม Bluetooth Terminal HC-05 ในขณะใชงาน

รปท 11.8 ลกษณะการเชอมตอและหนาตางโปรแกรม Bluetooth Terminal HC-05 ในขณะใชงานตามการทดลองตอนท 2

Page 128: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

124

Page 129: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 12

กำรสรำงแอปพลเคชนเพอ ควบคมสงประดษฐดวย Blynk

12.1 แนะน ำ Blynk App

Blynk เปนชอโดยรวมของการบรการใหผใชงานไดใชงานเครองแมขาย คอ Blynk Server ทเปน IoT Cloud ซง ถกพฒนามาจากภาษา Java ท าใหสามารถท างานภายใตระบบปฏบตการทหลากหลาย เชน Windows, Mac หรอ Linux โดยเครองแมขาย (Blynk Server) พฒนาเปนแบบเปด (open-source) ภายใตลขสทธแบบ GNU ท าใหเราสามารถน า Blynk ไปใชงานประกอบการสรางนวตกรรมเพอการคา แกไข ดดแปลง เผยแพร หรอแจกจายได ซงสามารถดภาพรวมของระบบไดตามรปท 12.1

รปท 12.1 ภาพรวมของการเชอมตอผาน Blynk Server

Page 130: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

126

Blynk App คอ แอปพลเคชนส าเรจรปทใชส าหรบงานทเกยวกบอนเทอรเนตของสรรพสง (Internet of Things, IoT) ทท าใหเราสามารถเชอมตออปกรณตาง ๆ เขากบอนเทอรเนตในลกษณะการเชอมตอเครองแมขาย (Server) ไปยงอปกรณลกขาย (Client) เชน Arduino, ESP-8266 , ESP-32 , NodeMCU และ Raspberry Pi ซ งแอปพล เคชน Blynk สามารถใชงานไดฟรและใชงานไดทงบนระบบปฏบตการ IOS และ Android รปท 12.2 แสดงภาพรายการอปกรณตาง ๆ ทสามารถเชอมตอ แสดงผล และ/หรอ ควบคมดวย Blynk App ได โดยเรมตนหลงจากสมครเขาใชงาน เราจะไดรบ “Energy” ซงเปรยบเสมอนเงนในโปรแกรมน ในการเรยกใชงานอปกรณแตละตว เราจะตองแลกดวย “Energy” และหาก “Energy” นไมเพยงพอ เรากสามารถซอเพมเตมไดภายหลง

รปท 12.2 รายการอปกรณตาง ๆ ทเชอมตอ แสดงผล และ/หรอ ควบคมดวย Blynk App ได

Page 131: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

127

12.2 กำรเรมตนใชงำน Blynk App

ขนตอนการสมครและเปดใชงานแอปพลเคชน Blynk App มดงน 1. คนหาและตดตงแอปพลเคชน Blynk – IoT for Arduino ESP8266/32, Raspberry Pi (เรยกยอ ๆ วา Blynk App) บนโทรศพทมอถอทจะใชทดสอบ (ใชไดทงระบบ Android และ IOS แตในการทดลองนเราจะแสดงเฉพาะหนาจอบนระบบ Android เทานน) ดงรปท 12.3

รปท 12.3 หนาตางแสดงการดาวนโหลดและตดตง Blynk App บนโทรศพทมอถอระบบปฏบตการแอนดรอยด

2. เปดโปรแกรม Blynk App แลวท าการสรางบญชผใช (account) แลวเขาใช (sign up) ดงรปท 12.4

3. เมอเชอมตอ Blynk Server ไดแลว โปรแกรมจะพรอมใหเราสรางโปรเจคใหม โดยการเลอก ‘+ New Project’ แลวตงชอโปรเจค เปน Blynk Test จากนนจงเลอกอปกรณเปน NodeMCU และเลอกการเชอมตอเปนแบบ Wi-Fi (ดงแสดงในรปท 12.5) จากนนจงกดปม

Page 132: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

128

Create กจะมการสงอเมลรหส Token มาใหในอเมลทลงทะเบยนไว เพอใหผใชน าไปเปนรหสทใชในการเชอมตอระหวาง NodeMCU และ Blynk ตอไป

4. ภายใน Blynk จะมปมตาง ๆ ใหเลอกสราง App ไดตามทผใชตองการ

รปท 12.4 ขนตอนการสรางบญชและเขาใช Blynk App

Page 133: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

129

รปท 12.5 ขนตอนการโปรเจคใหมและเลอกฮารดแวรทเชอมตอ Blynk App

12.3 กำรตดตงไลบรำรเพอเชอมตอกบ NodeMCU

การใชงานแอปปลเคชน Blynk กบ NodeMCU เราจ าเปนตองตดตงไลบรารบนโปรแกรมทใชในการเขยนโปรแกรมของไมโครคอนโทรลเลอร (ในทนคอ Arduino IDE 1.8.8 IoT) เพอใหสามารถเรยกใชงานค าสงเชอมตอได ซงสามารถดาวนโหลดไลบราร Blynk ไดจาก https://github.com/blynkkk/blynk-library ดงแสดงในรปท 12.6

เมอดาวน โหลดแลวกน ามาคดลอก (ตดต ง) ลงในโปรแกรม Arduino IDE ท C:\Arduino18\libraries ดงรปท 12.7

Page 134: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

130

รปท 12.6 หนาตางแสดงการดาวนโหลดไลบราร Blynk

รปท 12.7 หนาตางแสดงโฟลเดอรทตดตงไลบราร Blynk

Page 135: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

131

12.4 กำรทดลองควบคมสงประดษฐผำน Blynk App

วตถประสงค 1. สามารถเชอมตอ NodeMCU กบ Blynk App ได 2. สามารถเขยนโปรแกรมประยกตใชงานควบคมดวย Blynk App ได อปกรณทใชในกำรทดลอง

1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป) พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง

2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. บอรดรเลยชนด 4 ชอง 1 บอรด 5. เซอรโวมอเตอร 1 ตว 6. อะแดปเตอร 9 V 1 ตว 7. สาย USB 1 เสน 8. สายตอวงจร (สายจมพ เมย-เมย) 6 เสน 9. สายตอวงจร (สายจมพ ผ-เมย) 3 เสน วธกำรทดลอง ตอนท 1 กำรสรำงแอปพลเคชนบน Blynk App เพอควบคมรเลย 1. ตอวงจรตามรปท 12.8 โดยใหตอขา D1, D2, D3, D4 ของ NodeMCU เขากบขา IN1, IN2, IN3, IN4 ของโมดลรเลย ตามล าดบ

Page 136: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

132

รปท 12.8 การตอวงจรเพอควบคมรเลย 2. เขยนโคดโปรแกรมดงแสดงขางลาง โดยในโคดมตวแปรขอความ (สตรง, String) ทผเขยนตองเปลยนแปลงแกไข คอ - auth คอรหส Auth Token ท Blynk App สงใหทางอเมล ส าหรบโปรเจคทสราง (เปนรหสเลขฐาน 16) ตวอยางเชน “960110e6cf014314bcb5fbdf05448a1e” - ssid คอชอ WiFi ทใชเชอมตอ เชน “WiFi NU” - pass คอรหส WiFi ทตงไว หากไมม กใสเปนสตรงวาง “”

1

2

3

4

5

6

7

8

9

10

11

12

// Control NodeMCU ESP8266 by Blynk

// Switch Relays

// Comment this out to disable prints

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

char auth[] = "9c687abf4897467992e46e7249af7209";

char ssid[] = "XXXXXXX";

char pass[] = "XXXXXXX";

Page 137: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

133

13

14

15

16

17

18

19

20

21

22

23

void setup() {

Serial.begin(9600);

Blynk.begin(auth, ssid, pass);

}

void loop() {

Blynk.run();

delay(100);

}

3. อปโหลดโปรแกรมลงใน NodeMCU เพอใหฮารดแวรรอรบค าสงเชอมตอ โดยหากการเชอมตอส าเรจด Blynk กจะสงขอมลผาน Serial Monitor ดงแสดงในรปท 12.9 4. เปด Blynk App สรางปม (Button) 4 ปม (ดงรปท 12.10) โดยก าหนด OUTPUT PIN เปน D1, D2, D3 และ D4 ตามล าดบ และ เลอกโหมดของปมเปนแบบ SWITCH (ดงรปท 12.11) โดยท าเหมอนกนทง 4 ตว

รปท 12.9 หนาตางแสดงขอความการเชอมตอระหวาง NodeMCU และ Blynk Server

ทแสดงผาน Serial Monitor

Page 138: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

134

รปท 12.10 ขนตอนการสรางปม 4 ตวส าหรบการควบคมรเลย

รปท 12.11 ขนตอนการก าหนดการเชอมตอของปม 4 ตวส าหรบการควบคมรเลย

Page 139: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

135

5. รนโปรแกรม ดงรปท 12.12 แลวทดสอบการควบคมรเลย โดยสงเกตไฟแอลอดทบอรดรเลย โดยบอรดรเลยท างานแบบ Active low ดงนน สถานะ ‘ON’ ใน Blynk หมายถงไฟแอลอดไมตด

รปท 12.12 การรนโปรแกรมควบคมรเลยผาน Blynk App ตอนท 2 กำรสรำงแอปพลเคชนบน Blynk App เพอควบคมเซอรโวมอเตอร 1. ตอวงจรดงรปท 12.13

รปท 12.13 การเชอมตอ NodeMCU กบเซอรโวมอเตอร เพอควบคมผาน Blynk App

Page 140: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

136

2. เขยนโคดโปรแกรมดงทแสดงขางลางน โดยอาจจะตองแกไขคาในสตรง auth ซงกคอรหส Auth Token ท Blynk App สงใหทางอเมล หลงจากกดปมสรางโปรเจคใหม

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

// Control NodeMCU ESP8266 by Blynk

// Control Servo motor

// Comment this out to disable prints

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

#include <Servo.h>

Servo myservo;

char auth[] = "9c687abf4897467992e46e7249af7209";

char ssid[] = "XXXXXXX";

char pass[] = "XXXXXXX";

void setup() {

Serial.begin(9600);

Blynk.begin(auth, ssid, pass);

myservo.attach(D0);

}

// This function gets called every time the

Virtual Button on V3 changes state

BLYNK_WRITE(V3) {

myservo.write(param.asInt());

}

void loop() {

Blynk.run();

delay(100);

}

ในโคดนจะมการรบคาจากปม V3 ใน Blynk App มา แลวสงไปยงเซอรโวมอเตอรชอ

myservo ผานฟงกชน BLYNK_WRITE ซงจะถกเรยกทกครงทมการเปลยนแปลงคา V3

Page 141: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

137

3. อปโหลดโปรแกรมลงใน NodeMCU เพอใหฮารดแวรรอรบค าสงเชอมตอ 4. เปด Blynk App โดยอาจสรางโปรเจคใหม (ขอ Token ใหม) หรอลบอปกรณในโปรเจคเดมกได จากนนจงสรางแถบเลอน (Slider) 1 แถบ แลวขยายขนาด (ดงรปท 12.14) โดยก าหนดชอเปน myservo, OUTPUT PIN เปนปมเสมอน (Virtual pin) V3 และเปลยนคาสงสดจาก 1023 เปน 180 (ซงคอมมการหมนสงสดของเซอรโวมอเตอร) ดงรปท 12.14 จากนนจงรนโปรแกรมเพอทดสอบการควบคมเซอรโวมอเตอร

รปท 12.14 ขนตอนการสรางและก าหนดคณสมบตของแถบเลอน เพอควบคมเซอรโวมอเตอรผาน Blynk App

Page 142: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

138

แบบฝกหดทำยกำรทดลอง กำรสรำงแอปพลเคชนบน Blynk App เพอควบคมเซอรโวมอเตอรผำนจอยสตก

หากเราจะใชวงจรควบคมเซอรโวมอเตอรเดม (รปท 12.13) โดยเปลยนวธการควบคม จากแถบเลอนเปนจอยสตก (Joystick) เราสามารถท าไดโดยตงคาการเชอมตอ ปมเสมอน V3 กบจอยสตกทเรยกขนมาใชแทนแถบเลอน ดงรปท 12.15 ซงเราสามารถเลอกวาจะควบคมแบบแยกแกน (SPLIT คอ แยกแกนตงและแกนนอน) หรอ รวมแกน (MERGE) กได ส าหรบคาสงสดของปม เราจะก าหนดใหเปน 180 เนองจากเซอรโวทใช รบคาเปนมมองศา และมคาสงสดประมาณ 180º เทานน

รปท 12.15 การตงคาจอยสตกใน Blynk App เพอควบคมเซอรโวมอเตอร

Page 143: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บทท 13

กำรสรำงแอปพลเคชนเพอ รบคำและแสดงผลดวย Blynk

ในบทน จะเปนการประยกตใชงาน NodeMCU รวมกบ Blynk App เพมเตมจากบท

ทแลว โดยจะแบงเปน 3 ตอน คอ การสรางแอปพลเคชนบน Blynk App เพอแสดงคาระยะทาง การสรางแอปพลเคชนบน Blynk App เพอแสดงคาความสวาง และ การสรางแอปพลเคชนบน Blynk App เพอควบคมรเลยจากความสวาง โดยการทดลองทแสดงในบทน มวตถประสงคเพอใหผเรยนสามารถเชอมตอ NodeMCU กบแอพพลเคชน Blynk และรบคาตาง ๆ จากเซนเซอรได และผเรยนสามารถเขยนโปรแกรมประยกตใชงานควบคมรวมกนระหวาง NodeMCU และแอปพลเคชน Blynk App ได

อปกรณทใชในกำรทดลอง 1. เครองคอมพวเตอรทมระบบปฏบตการ Windows (ตงแต Windows 7 ขนไป)

พรอมตดตงโปรแกรม Arduino IDE 1.8.8 IoT 1 เครอง 2. NodeMCU v.3 1 บอรด 3. NodeMCU Base Ver 1.0 1 บอรด 4. บอรดโมดลอลตราโซนกส HC-SR04 1 บอรด 5. บอรดโมดลโมดลวดแสงแบบแอนะลอกดวย LDR 1 บอรด 6. บอรดรเลยชนด 4 ชอง 1 บอรด 7. อะแดปเตอร 9 V 1 ตว 8. สาย USB 1 เสน 9. สายตอวงจร (สายจมพ เมย-เมย) 6 เสน

Page 144: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

140

13.1 กำรสรำงแอปพลเคชนบน Blynk App เพอแสดงคำระยะทำง

1. ตอวงจรตามรปท 13.1 โดยใหตอขา D0 และ D1 ของ NodeMCU เขากบขา TRIG และ ECHO ของบอรดโมดลอลตราโซนกส HC-SR04 ตามล าดบ

รปท 13.1 การเชอมตอเพอใชงานโมดลอลตราโซนกส 2. เขยนโคดโปรแกรมดงแสดงขางลาง (โดยอาจจะตองแกไข auth, ssid และ pass)

1

2

3

4

5

6

7

8

9

10

11

12

// Control NodeMCU ESP8266 by Blynk

// Read and display value from ultrasonic sensor

// Comment this out to disable prints

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

#include <Ultrasonic.h>

// ultrasonic(Trigger PIN, Echo PIN)

Ultrasonic ultrasonic(D0,D1);

Page 145: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

141

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

char auth[] = "9c687abf4897467992e46e7249af7209";

char ssid[] = "XXXXXXX";

char pass[] = "XXXXXXX";

void setup() {

Serial.begin(9600);

Blynk.begin(auth, ssid, pass);

}

void sendUltra() {

unsigned long ultra_value =

ultrasonic.Ranging(CM);

Blynk.virtualWrite(V0, ultra_value);

}

void loop() {

Blynk.run();

delay(100);

sendUltra();

}

3. อปโหลดโปรแกรมลงใน NodeMCU เพอใหฮารดแวรรอรบค าสงเชอมตอ 4. เปด Blynk App โดยอาจสรางโปรเจคใหม (ขอ Token ใหม) หรอลบอปกรณในโปรเจคเดมกได จากนนจงสรางตวแสดงคา (Value Display) 1 ตว แลวขยายขนาด (ดงรปท 13.2) โดยก าหนด INPUT PIN เปนปมเสมอน V0 ดงรปท 13.2 5. รนโปรแกรมเพอทดสอบการรบคาเขาจากโมดลอลตราโซนกส และทดลองเปลยนระยะหางเพอตรวจสอบความถกตองของการอานคาและการสงขอมล

Page 146: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

142

รปท 13.2 ขนตอนการสรางและก าหนดคณสมบตของ Value Display เพอแสดงคาจากโมดลอลตราโซนกส

13.2 กำรสรำงแอปพลเคชนบน Blynk App เพอแสดงคำควำมสวำง

1. ตอวงจรตามรปท 13.3 โดยใหตอขา A0 ของ NodeMCU ตอเขากบขา A0 ของบอรดโมดลวดคาความสวางแสงแบบแอนะลอก

รปท 13.3 การเชอมตอเพอใชงานโมดลวดแสงแบบแอนะลอก

Page 147: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

143

2. เขยนโคดโปรแกรมดงแสดงขางลาง (โดยอาจจะตองแกไข auth, ssid และ pass)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

// Control NodeMCU ESP8266 by Blynk

// Read value from LDR

// Comment this out to disable prints

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

char auth[] = "9c687abf4897467992e46e7249af7209";

char ssid[] = "XXXXXXX";

char pass[] = "XXXXXXX";

int LDR_Sensor = A0;

float Cal_illuminance() {

float illu_LDR;

float volt_LDR;

int data_LDR;

data_LDR = analogRead(LDR_Sensor);

volt_LDR = (3.3/1024)*data_LDR;

illu_LDR = (42.0 * pow(volt_LDR, -3.15));

return illu_LDR;

}

void setup() {

Serial.begin(9600);

Blynk.begin(auth, ssid, pass);

}

void loop() {

float illu_LDR;

illu_LDR = Cal_illuminance();

Blynk.virtualWrite(V0, String(illu_LDR));

Blynk.run();

delay(100);

}

Page 148: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

144

3. อปโหลดโปรแกรมลงใน NodeMCU เพอใหฮารดแวรรอรบค าสงเชอมตอ

4. เปด Blynk App โดยอาจสรางโปรเจคใหม (ขอ Token ใหม) หรอลบอปกรณในโปรเจคเดมกได จากนนจงสรางตวแสดงคา (Value Display) 1 ตว โดยก าหนด INPUT PIN เปนปมเสมอน V0 ดงรปท 13.2 (เหมอนกบกบการทดลองตอนท 1)

5. รนโปรแกรมเพอทดสอบการรบคาเขาจากโมดลวดความสวางแสง โดยสงเกตวา คาทแสดงเปนคาทศนยมในหนวยลกซทค านวณจากโคดทเขยนในฟงกชน Cal_illuminance (ดบทท 9 ส าหรบการเทยบวดคาความสวางแสง)

13.3 กำรสรำงแอปพลเคชนบน Blynk App เพอควบคมรเลยจำกควำมสวำง

ในการทดลองตอนน เราจะสมมตวา เราตองการสราง Blynk App ทท าหนาทเปด-ปดไฟอตโนมตเมอมความสวางนอยเกนไป โดยก าหนดใหคาความสวางตองมากกวา 100 ลกซ นนคอ หากแสงทตรวจวดไดมคาความสวางนอยกวา 100 ลกซแลว รเลยจะควบคมใหเปดโคมไฟ (ดรปท 13.4) ขนตอนการทดลองสราง เรมจากการก าหนดแผนผงการท างานของโปรแกรมเสยกอน แผนผงอาจเขยนไดดงแสดงในรปท 13.5

รปท 13.4 แนวคดการออกแบบระบบควบคมอตโนมตในการทดลองตอนท 3

Page 149: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

145

รปท 13.5 แผนผงการท างานของโปรแกรมทแสดงในตอนท 3

Page 150: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

146

ขนตอนการสราง/การทดลองตามแผนผงทออกแบบไว มดงน 1. ตอวงจรดงรปท 13.6 โดยตอรเลยเขากบขา D1 ของ NodeMCU เพยงขาเดยว และจายไฟเลยงใหกบทงบอรดโมดลวดความสวางและบอรดรเลย

รปท 13.6 การเชอมตอเพอใชสรางระบบควบคมการท างานโคมไฟดวยแสง 2. เขยนโคดโปรแกรมดงแสดงขางลาง (อยาลมแกไข auth, ssid และ pass)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

// Control NodeMCU ESP8266 by Blynk

// Read value from LDR and control a relay

// Comment this out to disable prints

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

char auth[] = "9c687abf4897467992e46e7249af7209";

char ssid[] = "XXXXXXX";

char pass[] = "XXXXXXX";

#define OFF HIGH

#define ON LOW

Page 151: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

147

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

int Relay1 = D1;

int LDR_Sensor = A0;

float Cal_illuminance() {

float illu_LDR;

float volt_LDR;

int data_LDR;

data_LDR = analogRead(LDR_Sensor);

volt_LDR = (3.3/1024)*data_LDR;

illu_LDR = (42.0 * pow(volt_LDR, -3.15));

return illu_LDR;

}

void setup() {

Serial.begin(9600); // for debugging

Blynk.begin(auth, ssid, pass);

pinMode(Relay1, OUTPUT); digitalWrite(Relay1, OFF);

}

void loop() {

int state1; // State of virtual button V1

float illu_LDR;

illu_LDR = Cal_illuminance();

// Serial.println(String(illu_LDR));

Blynk.virtualWrite(V0, String(illu_LDR));

if (illu_LDR < 100.0) {

digitalWrite(Relay1, ON);

delay(1000);

} else {

digitalWrite(Relay1, OFF);

delay(1000);

}

Blynk.run();

delay(100);

}

3. อปโหลดโปรแกรมลงใน NodeMCU เพอใหฮารดแวรรอรบค าสงเชอมตอ

Page 152: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

148

4. เปด Blynk App โดยอาจสรางโปรเจคใหม (ขอ Token ใหม) หรอลบอปกรณในโปรเจคเดมกได จากนนจงสรางตวแสดงคา (Value Display) 1 ตว โดยก าหนด INPUT PIN เปนปมเสมอน V0 ดงรปท 13.2 (เหมอนกบการทดลองตอนท 1) 5. รนโปรแกรมเพอทดสอบการรบคาเขาจากโมดลวดความสวางแสง โดยสงเกตวา เมอคาความสวางมคานอยกวา 100 ลกซแลว รเลย 1 จะท างาน (น ากระแส)

Page 153: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

ภำคผนวก ก กำรเพมบอรดและไลบรำร

ในโปรแกรม Arduino IDE

ก.1 กำรเพมบอรด NodeMCU (ชป ESP8266)

ในบทท 3 เราไดกลาวถง การตดตงโปรแกรม Arduino IDE ส าหรบบอรด Node-MCU v.3 ทใชในการทดลองทแสดงในหนงสอเลมน แตส าหรบผทมโปรแกรม Arduino IDE อยกอนแลว อาจไมจ าเปนตองตดตงโปรแกรมใหม แตจะสามารถเพมบอรด NodeMCU ใหโปรแกรม Arduino IDE ได โดยเชอมตอคอมพวเตอรกบอนเทอรเนตแลวท าตามขนตอนตอไปน

เพม Board Manager URL ในโปรแกรม Arduino IDE ไปทเมน File แลวเลอก Preferences ดงรปท ก.1 แลว

ท าการพมพ URL ของแพกเกตส าหรบ ชป ESP8266 คอ http://arduino.esp8266.com/ stable/package_esp8266com_index.json ลงในชอง Additional Boards Manager URLs ดงรปท ก.2

รปท ก.1 เมนส าหรบเลอก เพม Board Manager URL ใน Arduino IDE

Page 154: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

150

รปท ก.2 บลอกก าหนด Preference ส าหรบเพม Board Manager URL

ไปท เมน Tools แลวเลอก Board ดงรปท ก.3 แลวเลอก Boards Manager … บลอกขอความเลอกบอรดจะปรากฎขน ดงแสดงในรปท ก.4 จากนนจงเลอนลงมาลางสด จะพบ แพกเกต esp8266 by ESP8266 Community ขอใหเลอกตดตง (Install) ดงรปท ก.4

รปท ก.3 เมน Boards manager

Page 155: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

151

รปท ก.4 บลอกก าหนด Preference ส าหรบเพม Board Manager URL

โปรแกรม Arduino IDE จะท าการดาวนโหลดและตดตงแพกเกตเสรมส าหรบบอรด NodeMCU v.3 ทใชชป ESP8266 โดยมระยะเวลาทใชขนกบความเรวอนเทอรเนตและความเรวของคอมพวเตอร เมอตดตงเสรจแลว จะมตวเลอกเลอกบอรด NodeMCU 1.0 (ESP-12E) ปรากฎขน ดงแสดงในรปท ก.5

รปท ก.5 การเลอก Board: NodeMCU 1.0 (ESP-12E Module) ในโปรแกรม Arduino IDE

Page 156: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

152

ก.2 กำรเพมไลบรำรในโปรแกรม Arduino IDE

ในบทท 6 เราไดกลาวถง การเพมไลบรารลงในโปรแกรม Arduino IDE โดยไลบรารเหลานจ าเปนส าหรบการเรยกใชงานฮารดแวรเฉพาะททางผผลต /ผพฒนาไดเตรยมไว ตวอยางเชน OLED ทใชในบทท 6 อลตราโซนกสโมดลในบทท 7 เซอรโวมอเตอรในบทท 8 โมดลเซนเซอรวดความเรงแบบสามแกน ADXL345 ในบทท 10 และ Blynk ในบทท 12 ส าหรบการตดตงไลบรารน ผใชสามารถท าไดหลายวธซงในภาคผนวกน จะกลาวถงอก 2 วธ ทมไดน ามาใชในหนงสอเลมน

กำรเพมโดยตวจดกำรไลบรำร (library manager) ในโปรแกรม Arduino IDE ไปท เมน Tools แลวเลอก Manager Libraries (หรอ

เลอกในเมน Sketch\Include Libraries\Manage Libraries) ดงรปท ก.6 แลวท าการคนหาและเลอกตดตงไลบรารทตองการ ดงรปท ก.7

รปท ก.6 การเลอก Manage Libraries ในเมน Arduino IDE

Page 157: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

153

รปท ก.7 หนาตาง Library Manager กำรเพมจำกไฟล ZIP

ในบางครง ไลบรารจากผพฒนาทสามารถดาวนโหลดได อยในรปไฟล ZIP ซงรวบรวมขอมลทงหมดไวในไฟลเดยว โดยเราสามารถน าไลบรารเขามาใน Arduino IDE ไดโดยการเลอกเมน Sketch และ Include Library แลวเลอก Add ZIP library ... จากนนจงเลอกไฟลไลบราร ดงแสดงในรปท ก.8

รปท ก.8 แสดงเมน Add ZIP Library ...

หากการน าไลบรารเขามาเปนทเรยบรอยด จะปรากฎตวอยางเพมเตมจากไลบรารทน าเขามา โดยเราสามารถเปดดเพอศกษาการใชงานไดจากเมน File ใน Examples

Page 158: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

154

Page 159: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

ภำคผนวก ข กำรใชงำนระบบเกบขอมล

ออนไลนดวย ThingSpeak®

ข.1 ThingSpeak®

ThingSpeak® เปนเวบแอปพลเคชนทใหบรการเกบขอมลแบบตอเนองตามเวลา หนาเวบ thingspeak.com แสดงดงรปท ข.1 โดยการใชเวบแอปพลเคชนนท าใหเราสามารถเกบขอมลทอานไดจากเซนเซอรผานไมโครคอนโทรลเลอรไดอยางตอเนอง ซงเหมาะส าหรบการจดเกบขอมลบางประเภท โดยเราจะตองอาศยการสอสารขอมลผานระบบอนเตอรเนต ซงเราหรอบคคลอนทเราอนญาตสามารถเรยกดและน าขอมลทจดเกบออกมาไดผานเวบแอป -พลเคชนน โดย ThingSpeak มใหบรการทงในรปแบบมคาใชจาย และไมมคาใชจาย ซงส าหรบการบรการแบบไมมคาใชจายนน ผใหบรการไดจ ากดการบนทกขอมลไวดวยอตราสงสด 1 ครง ในชวงเวลา 15 วนาท

รปท ข.1 แสดงหนาเวบ ThingSpeak.com

Page 160: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

156

กำรใชงำน ThingSpeak เบองตน กอนเรมใชงาน ThingSpeak เราจะตองสมคร (Sign Up) เสยกอน โดยการเขาทเวบ

https://thingspeak.com เพอท าการสมครสมาชก กรอกขอมลเพอลงทะเบยนเปดใชงาน เมอท าการสมครสมาชกเสรจสน ท าการ Sign In เพอท าการสราง Channel โดยใหเรากดไปท My Channel แลวเลอก New Channel จะปรากฎหนาตาง ดงแสดงในรปท ข.2

รปท ข.2 หนาตางแสดงการก าหนด Channel ในการบนทกขอมล

จากนนจงท าการการก าหนดชอของ Channel กรอกค าอธบาย กรอกชอชนดของขอมลทตองการบนทก ตวอยางในรปท ข.2 แสดงการบนทกชอทก าหนดในการอานคาจากเซนเซอร LDR โดยก าหนดชอ “LDR” ในฟลดของขอมล “Field 1” หลงจากนนจงเลอนลงมาเพอบนทก (Save Channel)

Page 161: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

157

รปท ข.3 หนาตางแสดงปมบนทก Channel ทสราง

จากนนเราจะตรวจพบ Channel ทเราสรางขนภายใตเมน My Channel โดยเมอเลอกเมน จะพบปม API Key (รปท ข.4) ซงเราจะตองท าการจดบนทกคา ID และ API Key เพอน าไปใสในโปรแกรมทเขยนลงในไมโครคอนโทรลเลอร เพอระบเสนทางการสงขอมล เมน ตวอยางคา ID และ API Key แสดงดงรปท ข.5

Page 162: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

158

รปท ข.4 หนาตางแสดง Channel ทสรางขน

รปท ข.5 หนาตางแสดง ID และ API Key

Page 163: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

159

ข.2 กำรเชอมตอกบ ThingSpeak®

ThingSpeak® ไดจดเตรยมไลบรารและตวอยางไฟลส าหรบการเชอมตอไว โดยผใชสามารถดาวนโหลดไดจาก https://github.com/mathworks/thingspeak-arduino และ https://github.com/nothans/thingspeak-esp-examples เม อ ผ ใช ได ท า ก า รต ด ต งไลบรารแลวกจะสามารถเรยกใชไลบรารใน ThingSpeak ไดโดยใชค าสง #include “Thing Speak.h” ส าหรบแนวการเขยนโคดเบองตนในการสงขอมลจากสญญาณ A0 ไปเกบยง ThingSpeak ผใชสามารถศกษาไดจากโคดตวอยาง (จากไฟล A0_to_ThingSpeak.ino ทอยใน thingspeak-esp-examples-master) โดยในตวอยางทแสดงนจะมค าอธบายจากผพฒนาอยดวย ดงแสดงขางลางน

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

/*

ESP8266 --> ThingSpeak Channel

This sketch sends the value of Analog Input (A0)

to a ThingSpeak channel using the ThingSpeak API

*/

#include "ThingSpeak.h"

#include "secrets.h"

unsigned long myChannelNumber = SECRET_CH_ID;

const char * myWriteAPIKey = SECRET_WRITE_APIKEY;

#include <ESP8266WiFi.h>

char ssid[] = SECRET_SSID;

char pass[] = SECRET_PASS;

WiFiClient client;

void setup() {

Serial.begin(115200);

delay(100);

WiFi.mode(WIFI_STA);

ThingSpeak.begin(client);

}

Page 164: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

160

27

28

29

30

31

32

33

34

353

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

void loop() {

// Connect or reconnect to WiFi

if (WiFi.status() != WL_CONNECTED) {

Serial.print("Attempting to connect to SSID:");

Serial.println(SECRET_SSID);

while (WiFi.status() != WL_CONNECTED) {

WiFi.begin(ssid, pass);

Serial.print(".");

delay(5000);

}

Serial.println("\nConnected.");

}

// Measure Analog Input (A0)

int valueA0 = analogRead(A0);

// Write value to Field 1 of a ThingSpeak Channel

int httpCode =

ThingSpeak.writeField(myChannelNumber, 1, valueA0,

myWriteAPIKey);

if (httpCode == 200) {

Serial.println("Channel write successful.");

}

else {

Serial.println("Problem writing to channel.

HTTP error code " + String(httpCode));

}

// Wait 20 seconds to update the channel again

delay(20000);

}

โดยไฟล Secrets.h ทเรยกในตอนแรก จะใชเกบ SSID และรหสผานของระบบ

เครอขายท NodeMCU เชอมตออย และเกบ ID และ API Key ของผใช ThingSpeak (ดรปท ข.5)

Page 165: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

161

เมอท าการอปโหลดโปรแกรมแลวปลอยให NodeMCU ท างานไปสกพกหน ง (เนองจากขอมลจะเกบทก ๆ 20 วนาท ตามโคดทแสดงขางบน) เรากจะสามารถเรยกดขอมลทเกบในเวป ThingSpeak ได ตวอยางขอมลแสดงดงรปท ข.6 โดยผใชสามารถน าขอมลทบนทกไวออกมาหรอน าขอมลไปวเคราะหรวมกบขอมลอน ๆ ไดในล าดบตอไป

รปท ข.6 หนาตางแสดงขอมลทบนทกไว

Page 166: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

162

Page 167: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

บรรณำนกรม ประเภทหนงสอ - ผชวยศาสตราจารยดอนสน ปงผาบ, ภาษาซและ Arduino, พมพครงท 1 ส านกพมพสมาคมสงเสรมเทคโนโลย (ไทย-ญปน), 2560

- ประภาส พมพวง, การเขยนและการประยกตใชงานโปรแกรม Arduino, ซเอดยเคชน, 2561

- ผศ. ดร. เดชฤทธ มณธรรม , คมภรและการใชงานไมโครคอนโทรลเลอร Arduino, ซเอดยเคชน, 2560

- ดร. กอบเกยรต สระอบล , พฒนา IoT บนแพลตฟอรม Arduino และ Raspberry Pi, ส านกพมพ อนเตอรมเดย, 2561

- สนธยา นงนช, การใชงาน ESP32 เบองตน, รานไอโอเอกซฮอบ, 2560

- ผศ. สรพนธ ตมนาค, เรยนรและพฒนาอปกรณ Internet of Things (IOT) อยางงายกบ Blynk, อนโนเวตฟ เอกเพอรเมนต (www.inex.co.th)

ประเภทแหลงขอมลออนไลน (เรยงตำมล ำดบทปรำกฎในเลม) https://www.ecnmag.com/news/2019/01/top-10-robotic-innovations-2018 https://airdronecraze.com/drone-trends https://iot-analytics.com https://github.com/nodemcu/nodemcu-devkit https://www.arduino.cc/en/main/software https://inex.co.th/shop/software-download https://github.com/ThingPulse/esp8266-oled-ssd1306 https://github.com/hemalchevli/ultrasonic-library https://github.com/adafruit/Adafruit_Sensor

Page 168: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

164

https://github.com/adafruit/Adafruit_ADXL345 https://learn.adafruit.com/adxl345-digital-accelerometer/programming https://github.com/blynkkk/blynk-library https://randomnerdtutorials.com/how-to-install-esp8266-board-arduino-ide/ https://www.arduino.cc/en/guide/libraries https://thingspeak.com https://github.com/mathworks/thingspeak-arduino https://github.com/nothans/thingspeak-esp-examples

Page 169: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

รำยชอคณะท ำงำน 1. ฝำยวชำกำรและกำรฝกอบรม ประกอบดวย

1. รศ.ดร. สวทย กระวทยา คณะวศวกรรมศาสตร ม.นเรศวร

2. รศ.ดร. พนส นถฤทธ คณะวศวกรรมศาสตร ม.นเรศวร

3. อ. ธาน โกสม คณะวศวกรรมศาสตร ม.นเรศวร

4. ผศ.ดร. เกรยงศกด เตมย คณะวทยาศาสตร ม.นเรศวร

5. ดร. ประชา ค าภกด คณะวศวกรรมศาสตร ม.อบลราชธาน

6. ดร. เกรยงศกด ตรประพณ คณะวทยาศาสตร ม.อบลราชธาน

7. ผศ.ดร. อธพงศ สรยา คณะวศวกรรมศาสตร ม.อบลราชธาน

8. ดร. ธรวฒ ไชยธรรม คณะวศวกรรมศาสตร ม.อบลราชธาน

9. ดร. ธรรมรส รกธรรม คณะวศวกรรมศาสตร ม.อบลราชธาน

10. อ. ผดง กจแสวง คณะวศวกรรมศาสตร ม.อบลราชธาน

11. อ. สมนก เวยนวฒนชย คณะวศวกรรมศาสตร ม.อบลราชธาน

12. นายวฒไกร สรอยสงห คณะวศวกรรมศาสตร ม.อบลราชธาน

13. นายปวรตม กองสมบตสข คณะวศวกรรมศาสตร ม.อบลราชธาน

2. ฝำยประกวดแขงขนและด ำเนนงำนโครงกำร ประกอบดวย

1. ผศ.ดร. วรการ วงศสายเชอ คณะวศวกรรมศาสตร ม.อบลราชธาน

2. ผศ.ดร. ประสทธ นครราช คณะวศวกรรมศาสตร ม.อบลราชธาน

3. ผศ.ดร. ถนดกจ ชารรตน คณะวศวกรรมศาสตร ม.อบลราชธาน

4. ผศ.ดร. นนทวฒน วระยทธ คณะวศวกรรมศาสตร ม.อบลราชธาน

5. อ. บงกช จนทมาส คณะวศวกรรมศาสตร ม.อบลราชธาน

Page 170: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk

166

5. นส. นชนารถ แกวแดง ผประสานงานศนยอบรมท 2 ม.นเรศวร

6. นายเฉลมชย ไชยกาล ผประสานงานศนยอบรมท 1 ม.อบลราชธาน

7. นางคอยจตร ศาลางาม ผชวยประสานงานศนยอบรมท 1 ม.อบลราชธาน

3. ฝำยสนบสนนงบประมำณและสถำนท ประกอบดวย

1. มร. ฮเดยก ทาเคดะ กรรมการผจดการ บรษท ไทยบรดจสโตน จ ากด

2. มร. ฮโรยก ไซโตะ ผอ านวยการสายงานการตลาดและกลยทธ

3. น.ส. ภทรวลล ขนทอง ผจดการแผนกสอสารองคกรและกจกรรมเพอ

สงคม บรษท ไทยบรดจสโตน จ ากด

4. น.ส. สกลยา ปนจาด ผชวยผจดการแผนกสอสารองคกรและกจกรรม

เพอสงคม บรษท ไทยบรดจสโตน จ ากด

Page 171: การใช้งานไมโครคอนโทรลเลอร์ · 12.1 แนะน า Blynk App 125 12.2 การเริ่มต้นใช้งาน Blynk