Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore ณัฐวุฒิ มณีวรรณ์ 615

ณัฐวุฒิ มณีวรรณ์ 615

Published by Nattawut Maneewan, 2021-03-11 02:02:08

Description: ณัฐวุฒิ มณีวรรณ์ 615

Search

Read the Text Version

บทท่ี 3 เครื่องมือช่วยงานไมโครคอนโทรลเลอร์ Arduino  45 บทท่ี 3 เครื่องมือช่วยงานไมโครคอนโทรลเลอร์ Arduino หวั ขอ้ เรื่อง 3.1 เคร่ืองมือแปลงภาษาซีเป็ นภาษาเครื่องและอพั โหลดไฟลล์ งชิพ 3.2 ไดร์ฟเวอร์ USB 3.3 เครื่องมือจาลองการทางาน สาระสาคญั เครื่องมือช่วยพฒั นางานไมโครคอนโทรลเลอร์ เป็ นเคร่ืองมืออานวยความสะดวกทาให้สามารถ พฒั นางานได้ง่ายและเร็ว เครื่องมือท่ีนามาใช้งานมี 3 อย่างด้วยกนั คือ เครื่องมือแปลงภาษาซีเป็ น ภาษาเครื่องพร้อมอพั โหลดลงชิพ เครื่องมือจาลองการทางาน และไดร์ฟเวอร์ USB สมรรถนะประจาหน่วยการเรียนรู้ รู้และเขา้ ใจการใชง้ านและสามารถใชเ้ คร่ืองมือช่วยพฒั นางานไมโครคอนโทรลเลอร์ จุดประสงคก์ ารเรียนรู้ จุดประสงค์ทว่ั ไป 1. เพ่ือใหม้ ีความรู้เกี่ยวกบั เคร่ืองมือแปลงภาษาซีเป็นภาษาเครื่องและอพั โหลดไฟลล์ งชิพ 2. เพื่อใหม้ ีความรู้เก่ียวกบั เคร่ืองมือจาลองการทางาน 3. เพื่อใหม้ ีความรู้เก่ียวกบั การติดต้งั ไดร์ฟเวอร์ USB จุดประสงค์เชิงพฤตกิ รรม 1. บอกเก่ียวกบั เคร่ืองมือแปลงภาษาซีเป็นภาษาเคร่ืองและอพั โหลดไฟลล์ งชิพได้ 2. บอกเก่ียวกบั เครื่องมือจาลองการทางานได้ 3. บอกข้นั ตอนการติดต้งั ไดร์ฟเวอร์ USBได้ 4. ทาแบบฝึกหดั เสร็จทนั เวลาและทาแบบทดสอบผา่ นเกณฑท์ ี่กาหนด

46  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] เครื่องมือช่วยงานไมโครคอนโทรลเลอร์ Arduino การพฒั นาไม่วา่ จะเป็ นการพฒั นาในเรื่องใดก็ตามหากมีเคร่ืองมือช่วยพฒั นางานที่มีคุณภาพจะ ทาให้งานน้นั ๆ สามารถพฒั นาไปไดเ้ ร็วและจะส่งผลให้ผพู้ ฒั นางานสามารถใชค้ วามสามารถไดเ้ ต็มท่ี สาหรับไมโครคอนโทรลเลอร์ในแพลทฟอร์ม Arduino มีเคร่ืองมือช่วยพฒั นางาน 3 ชนิด คือ 1. ไดร์ฟเวอร์ USB 2. เคร่ืองมือแปลงภาษาซีเป็นภาษาเคร่ืองและอพั โหลดไฟลล์ งชิพ (Arduino IDE) 3. เคร่ืองมือจาลองการทางาน 3.1 ไดร์ฟเวอร์ USB ซีพียูของ Arduino โดยส่วนใหญ่จะไม่มีโมดูลท่ีใชส้ าหรับการติดต่อสื่อสารผา่ นทางพอร์ต USB ดงั น้นั ในบอร์ด Arduino จึงจาเป็ นจะตอ้ งมีส่วนท่ีใชใ้ นการติดต่อส่ือสาร USB น้ีซ่ึงในบอร์ดแต่ละรุ่นจะ ใชช้ ิพแตกต่างกนั โดยชิพแตล่ ะรุ่นก็ตอ้ งใชไ้ ดร์ฟเวอร์แตกต่างกนั เช่นกนั บางรุ่นมีไดร์ฟเวอร์มาใหพ้ ร้อม ในตัวโปรแกรม Arduino IDE แล้วเช่นบอร์ดที่ใช้ชิพ Atmega16u2 (สาหรับ บอร์ด Arduino UNO), CP210x, FTDI ดงั น้นั การติดต้งั ผูใ้ ชง้ านสามารถเรียกใชไ้ ดเ้ ลยโดยไม่ตอ้ งไปหาดาวน์โหลดไดร์ฟเวอร์ อีก โดยไดร์ฟเวอร์จะอยใู่ นโฟลเดอร์ C:\\arduino-1.8.5\\drivers ดงั รูป รูปท่ี 3-1 โฟลเดอร์ที่เกบ็ ไดร์เวอร์สาหรับชิพ USB บางรุ่น ข้นั ตอนการติดต้งั ไดร์ฟเวอร์ USB 1. ทาการเปิ ด Device Manager โดยกดคียว์ นิ โดว์ และ R ป้อนคาสงั่ devmgmt.msc ดงั รูป รูปที่ 3-2 การเปิ ดใชง้ าน Device Manager

บทท่ี 3 เคร่ืองมือช่วยงานไมโครคอนโทรลเลอร์ Arduino  47 2. เช่ือมต่อบอร์ด Arduino เขา้ กบั คอมพิวเตอร์ สังเกตรายการพอร์ต USB ท่ีปรากฏข้ึน หากมี เคร่ืองหมายพเิ ศษข้ึนที่ไอคอนแสดงวา่ ยงั ไม่พร้อมทางานใหด้ าเนินการติดต้งั ไดร์ฟเวอร์ รูปท่ี 3-3 หนา้ ตา่ ง Device Manager 3. คลิกขวาที่ไอคอนเลือก Update driver รูปท่ี 3-4 ข้นั ตอนติดต้งั ไดร์ฟเวอร์ 4. คลิก Browse my com… เพอ่ื หาไดร์ฟเวอร์ดงั รูป รูปท่ี 3-5 หนา้ ต่างเลือกที่เกบ็ ไดร์เวอร์ 5. คลิกเลือกโฟลเดอร์ drivers ที่อยภู่ ายในโฟลเดอร์ Arduino ดงั รุป รูปท่ี 3-6 เลือกโฟลเดอร์ที่เกบ็ ไดร์เวอร์

48  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 6. ผลการติดต้งั ไดร์ฟเวอร์ USB จากรูปเป็นบอร์ด Arduino UNO รูปที่ 3-7 ผลการติดต้งั ไดร์ฟเวอร์ พิเศษสาหรับบอร์ดที่ใชช้ ิพ CH340,CH341 (บอร์ด Arduino Nano 3.0 เลือกใชช้ ิพเบอร์น้ีในบาง ผูผ้ ลิต) ซ่ึงผูใ้ ชง้ านจะตอ้ งไปหาดาวน์โหลดไดร์ฟเวอร์เพ่ือมาติดต้งั เอง การดาวน์โหลดสามารถดาวน์ โหลดไดร์ฟเวอร์ไดท้ ่ี http://www.winchiphead.com/download/CH341/CH341SER.ZIP การติดต้งั มีข้นั ตอนดงั น้ี 1. แตกไฟล์ zip ไดร์ฟเวอร์ท่ีดาวน์โหลดจากลิงคท์ ่ีกล่าวมาแลว้ ขา้ งตน้ 2. เขา้ ไปในโฟลเดอร์ CH341SER แลว้ ดบั เบิลคลิกท่ีไฟล์ setup.exe ดงั รูป รูปที่ 3-8 โฟลเดอร์ที่เกบ็ ไดร์เวอร์สาหรับชิพ CH341หลงั จากการแตกไฟล์ 3. คลิกที่ป่ ุม install เพือ่ ติดต้งั ไดร์ฟเวอร์ USB ท่ีใชช้ ิพ CH340, CH341 ดงั รูป รูปที่ 3-9 หนา้ ตาของโปรแกรมสาหรับติดต้งั ไดร์ฟเวอร์ USB ท่ีใชช้ ิพ CH340, CH341

บทท่ี 3 เคร่ืองมือช่วยงานไมโครคอนโทรลเลอร์ Arduino  49 4. ตรวจสอบการทางานของไดร์ฟเวอร์ดว้ ยการเช่ือมตอ่ บอร์ด Arduino เขา้ กบั คอมพิวเตอร์ดว้ ย สาย USB ทาการเปิ ด Device Manager ข้นั ตอนการเขา้ ดงั ท่ีกล่าวมาแลว้ ขา้ งตน้ สังเกตพอร์ต ส่ือสารท่ีปรากฏข้ึนดงั รูป รูปท่ี 3-10 ผลการติดต้งั ไดร์ฟเวอร์หลงั การเชื่อมตอ่ บอร์ด Arduino Nano 3.0 3.2 เคร่ืองมือแปลงภาษาซีเป็ นภาษาเครื่องและอพั โหลดไฟล์ลงชิพ เคร่ืองมือที่ใช้แปลงภาษาซีเป็ นภาษาเครื่องหรือท่ีเรียกกนั วา่ ซีคอมไพเลอร์ (C Compiler) เป็ น โปรแกรมคอมพิวเตอร์ชนิดหน่ึงที่ถูกสร้างข้ึนเพ่ือใชส้ าหรับแปลงภาษาซีเป็นภาษาเคร่ือง โปรแกรมท่ีถูก ออกแบบมาใหใ้ ชง้ านกบั Arduino คือโปรแกรม Arduino IDE การติดต้งั และการใชง้ านมีดงั น้ี การตดิ ต้งั โปรแกรม Arduino IDE Arduino IDE เป็นโปรแกรมสาหรับเขียนโคด้ เพื่อควบคุมการทางานของไมโครคอนโทรลเลอร์ Arduino ซ่ึงตัวโปรแกรมมีให้ดาวน์โหลดให้ใช้งานได้โดยไม่มีค่าใช้จ่ายและมีเวอร์ชั่นท่ีรองรับ ระบบปฏิบตั ิการหลายแบบ เอกสารเล่มน้ีขอแนะนาเฉพาะโปรแกรมท่ีรองรับระบบปฏิบตั ิการวินโดวส์ เทา่ น้นั ข้นั ตอนมีดงั น้ี 1. ดาเนินการดาวน์โหลดโปรแกรมโดยเขา้ ไปที่เวปไซต์ https://www.arduino.cc คลิกที่คาวา่ SOFTWARE ดงั รูป รูปท่ี 3-11 หนา้ ตา่ งเวปไซตส์ าหรับดาวนโ์ หลดโปรแกรม Arduino IDE

50  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] หรือเขา้ หนา้ เพจโดยตรงที่ https://www.arduino.cc/en/Main/Software รูปที่ 3-12 เขา้ หนา้ เพจดาวน์โหลดโดยตรง 2. เลือกดาวน์โหลดไฟล์ที่เป็ นไฟล์ zip (เพื่อให้ง่ายต่อการอพั เดจหรือถอนโปรแกรมออกใน อนาคต) โดยคลิกตรงคาวา่ Windows ZIP file for non admin install ดงั รูป รูปท่ี 3-13 บริเวณท่ีสาหรับคลิกเพ่อื ดาวน์โหลดไฟล์ zip 3. คลิกตรงคาวา่ JUST DOWNLOAD เพือ่ ดาวน์โหลดไฟล์ รูปที่ 3-14 หนา้ ตา่ งเวปไซตส์ าหรับคลิกเพือ่ ดาวน์โหลด 4. แตกไฟลแ์ ลว้ คดั ลอกท้งั โฟลเดอร์มาไวท้ ่ีไดร์ฟ C ดงั รูป รูปท่ี 3-15 คดั ลอกท้งั โฟลเดอร์มาไวท้ ่ีไดร์ฟ C

บทท่ี 3 เครื่องมือช่วยงานไมโครคอนโทรลเลอร์ Arduino  51 การใช้งานโปรแกรม Arduino IDE การใช้งานโปรแกรม Arduino IDE เพื่อเขียนโคด้ โปรแกรมควบคุมการทางานของ Arduino สามารถใชป้ ระโยชนไ์ ด้ 2 แนวทางคือ 1. เพือ่ นาไฟลภ์ าษาเคร่ืองท่ีไดจ้ ากการแปลงไปจาลองการทางานดว้ ยโปรแกรม Proteus 2. เพือ่ ทดลองวงจรจริง (ซ่ึงตอ้ งติดต้งั ไดร์ฟเวอร์ USB ก่อน) การใชง้ านโปรแกรม Arduino IDE มีข้นั ตอนดาเนินการดงั น้ี 1. เรียกใช้โปรแกรมดว้ ยการดบั เบิลคลิกไฟล์ Arduino.exe ในโฟลเดอร์โปรแกรมท่ีได้แตก ไฟลไ์ ว้ 2. ต้งั คา่ บอร์ดใหต้ รงกบั ที่ใชง้ านซ่ึงมีการต้งั คา่ อยูด่ ว้ ยกนั 4 รายการดงั น้ี - ชนิดของบอร์ด Arduino ท่ีใชง้ าน (กาลงั เช่ือมต่ออย)ู่ - ชนิดของโพรเซสเซอร์ เลือกใหต้ รงกบั โพรเซสเซอร์ของบอร์ด (บอร์ดบางชนิดไมต่ อ้ ง เลือกเน่ืองจากมีใชง้ านเพยี งเบอร์เดียว) - คอมพอร์ตท่ีกาลงั เชื่อมต่อ เลือกใหต้ รงกบั ที่บอร์ด Arduino กาลงั เชื่อมต่อ (ดูจาก Device manager) - ชนิดของเคร่ืองโปรแกรม เลือก AVRISP mkII รูปที่ 3.16 การต้งั คา่ บอร์ดที่ใชง้ าน 3. ต้งั ค่าในโปรแกรม Arduino IDE ใหแ้ สดงตาแหน่งของไฟลภ์ าษาเครื่อง (HEX file) หลงั จาก การคอมไพลผ์ า่ น การต้งั คา่ ดงั รูป รูปท่ี 3-17 คลิก Preferences

52  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 4. คลิกเลือกแสดงผลท้งั 3 รายการดงั รูป รูปท่ี 3-18 คลิกเลือกท้งั 3 รายการ 5. เขียนโคด้ โปรแกรมท่ีตอ้ งการในหนา้ ต่างโปรแกรม 6. ในกรณีท่ีตอ้ งการคอมไพล์เพื่อดูผลของการเขียนโปรแกรมว่าถูกไวยกรณ์หรือไม่ หรือ ตอ้ งการไฟลภ์ าษาเครื่อง (HEX file) ไปจาลองการทางานในโปรแกรมจาลองการทางาน เม่ือ เขียนโคด้ โปรแกรมเสร็จสิ้นแลว้ ใหค้ ลิกที่ป่ ุมคอมไพล์ รูปที่ 3-19 คลิกป่ ุมคอมไพลห์ ลงั เขียนโคด้ โปรแกรมเสร็จสิ้น 7. ในกรณีท่ีตอ้ งการไฟลภ์ าษาเครื่องไปจาลองการทางาน ใหค้ ดั ลอกตาแหน่งไฟลภ์ าษาเคร่ือง ในบริเวณหนา้ ต่างผลการคอมไพล์ (พ้ืนสีดา) โดยใชเ้ มาส์คลุมดาบริเวณท่ีอยไู่ ฟล์ (สามารถ ใช้วิธีคลิกที่หัวตาแหน่งแลว้ กดป่ ุม Shift คา้ งไวแ้ ล้วคลิกที่ทา้ ยตาแหน่งอีกคร้ัง) ทาการ คดั ลอกตาแหน่งโดยใช้ Ctrl+C เม่ือตอ้ งการใชต้ าแหน่งท่ีคดั ลอกมาใหใ้ ช้ Ctrl+V รูปที่ 3-20 คดั ลอกตาแหน่งไฟลภ์ าษาเครื่อง (HEX file) 8. ในกรณีที่ตอ้ งการอพั โหลดโคด้ ลงชิพของวงจรจริงที่เช่ือมต่อไวใ้ หค้ ลิกที่ป่ ุม Upload ดงั รูป รูปที่ 3-21 ป่ ุมอพั โหลดโคด้ ลงชิพไมโครคอนโทรลเลอร์

บทท่ี 3 เคร่ืองมือช่วยงานไมโครคอนโทรลเลอร์ Arduino  53 3.3 เคร่ืองมือจาลองการทางาน สาหรับผูท้ ่ีตอ้ งการทดลองวงจรโดยท่ียงั ไม่มีวงจรจริง การจาลองดว้ ยโปรแกรมจาลองการ ทางานของวงจรเป็ นทางเลือกที่เหมาะสม โปรแกรมท่ีสามารถทดลองวงจรไมโครคอนโทรลเลอร์ไดด้ ี โปรแกรมหน่ึงที่ได้รับความนิยมคือ Proteus (แนะนาเวอร์ชัน่ 8.6) และเนื่องจากโปรแกรมจาลองการ ทางานดงั กล่าวจาเป็ นตอ้ งติดต้งั ให้เป็ นโปรแกรมตวั เต็มจึงไม่สามารถเสนอข้นั ตอนการติดต้งั น้ีได้ ซ่ึง ผูใ้ ช้งานสามารถหาวิธีการติดต้งั ไดจ้ ากอินเตอร์เน็ต สาหรับข้นั ตอนน้ีเป็ นข้นั ตอนเตรียมโปรแกรมให้ สามารถจาลอง Arduino ไดเ้ น่ืองจากโปรแกรม Proteus หลงั ติดต้งั เรียบร้อยแล้วจะยงั ไม่มีโมเดลของ บอร์ด Arduino ใหใ้ ชง้ านจึงจาเป็นตอ้ งดาเนินการใหม้ ีก่อน ซ่ึงโมเดลจาลอง Arduino ผเู้ ขียน (ครูประภาส สุวรรณเพชร) ได้จัดสร้างโมเดลจาลองไวใ้ ห้ผูใ้ ช้งานทั่วไปสามารถนาไปใช้งานได้ ข้นั ตอนการ ดาเนินการมีดงั น้ี 1. ดาวน์โหลดโมเดลจาลอง Arduino ท่ี http://www.praphas.com/download/arduino/ArduinoONO-RX[Lib].rar 2. ทาการแตกไฟล์ แลว้ คดั ลอกไฟลโ์ มเดลจาลองท้งั สองไฟลด์ งั รูป รูปท่ี 3-22 คดั ลอกไฟลโ์ มเดลจาลองท้งั สองไฟล์ 3. โดยนาไปวางไวใ้ นโฟลเดอร์ library ของโปรแกรม Proteus รูปท่ี 3-23 วางไฟลโ์ มเดลจาลองท้งั สองไฟลท์ ่ีคดั ลองมาในโฟลเดอร์ LIBRARY หมายเหตุ *windows 32bit C:\\Program Files\\Labcenter Electronics\\Proteus 8 Professional\\LIBRARY *windows 64bit C:\\Program Files (x86)\\Labcenter Electronics\\Proteus 8 Professional\\LIBRARY

54  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การจาลองการทางานด้วยโปรแกรม Proteus การจาลองการทางานของวงจรอิเล็กทรอนิกส์ดว้ ยโปรแกรม Proteus เร่ิมตน้ จากการเรียกใช้ โปรแกรมซ่ึงจะเป็ นไอคอนอยู่หน้าเดสทอป เรียกใช้งานในส่วน Schematic Capture โดยการคลิกท่ี ไอคอนดงั รูป รูปที่ 3-24 หนา้ ตา่ งโปรแกรม Proteus เม่ือเริ่มใชง้ าน ส่วนประกอบต่าง ๆ ท่ีใชง้ านใน Schematic Cation ที่ใชง้ านหลกั มีดงั น้ี 1. แถบเลือกโหมด 2. เครื่องมือหมุนหรือพลิกอุปกรณ์ท่ีเลือก 3. รายการอุปกรณ์ท่ีถูกเลือกมาพร้อมนาไปใชง้ าน 4. พ้นื ท่ีวาดวงจรท่ีใชจ้ าลองการทางาน 5. เคร่ืองมือควบคุมการจาลองการทางานของวงจร รูปท่ี 3-25 หนา้ ตา่ งโปรแกรม Proteus ในส่วน Schematic Capture

บทที่ 3 เครื่องมือช่วยงานไมโครคอนโทรลเลอร์ Arduino  55 การทดลองการทางานของวงจรไมโครคอนโทรลเลอร์ Arduino แบบจาลองการทางานด้วย โปรแกรม Proteus มีข้นั ตอนท้งั หมด 5 ข้นั ตอนดงั น้ี 1. ข้นั ตอนการเลือกอุปกรณ์ที่ตอ้ งการใชง้ านนามาไวใ้ นช่องรายการอุปกรณ์มีข้นั ตอนดงั น้ี A. คลิกท่ี Component Mode B. คลิกที่ P C. คลิกเลือก Category ท่ีอุปกรณ์ที่ตอ้ งการบรรจุอยู่ D. ดบั เบิลคลิกตวั อุปกรณ์ท่ีตอ้ งการใชง้ าน รูปที่ 3-26 การเลือกอุปกรณ์ ทาการเลือกอุปกรณ์ที่ตอ้ งการใชง้ านท้งั หมดไวใ้ นช่องรายการอุปกรณ์ รูปที่ 3-27 เลือกอุปกรณ์ที่ตอ้ งการใชง้ านไวใ้ นช่องรายการอุปกรณ์ 2. จดั วางอุปกรณ์ลงบนพ้ืนที่ใชง้ านโดยเร่ิมจาก A. คลิกท่ี Component Mode B. คลิกท่ีตวั อุปกรณ์ที่ตอ้ งการวาง (Ground อยใู่ น Terminals Mode ) C. คลิกวางในตาแหน่งที่ตอ้ งการบนพ้ืนที่ใชง้ าน รูปที่ 3-28 การวางอุปกรณ์ลงบนพ้ืนที่ใชง้ าน

56  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 3. เช่ือมต่อสายระหวา่ งอุปกรณ์ทาไดโ้ ดยการเล่ือนเมาส์ให้ลอยบริเวณขาที่ตอ้ งการเช่ือมต่อ หากรูปร่างเมาส์เปลี่ยนไปจากเดิมแสดงวา่ พร้อมท่ีจะเช่ือมต่อที่ขาน้นั ๆ ให้คลิก 1 คร้ังแลว้ ลากไปยงั ขาท่ีตอ้ งการเช่ือมตอ่ แลว้ คลิกอีก 1 คร้ังเพ่ือเช่ือมตอ่ รูปที่ 3-29 เช่ือมต่ออุปกรณ์ในวงจรเพอื่ ทดลอง 4. คดั ลอกตาแหน่งไฟลภ์ าษาเครื่องจากโปรแกรม Arduino IDE แลว้ คลิกวางตาแหน่งไฟล์ ภาษาเคร่ือง ( Ctrl+V ) ลงในช่อง Program File: โดยการดบั เบิลคลิกที่ตวั Arduino รูปท่ี 3-30 วางตาแหน่งไฟลภ์ าษาเครื่อง (HEX file) ลงในช่อง 5. คลิกป่ ุม Run เพอ่ื เร่ิมจาลองการทางาน รูปท่ี 3-31 เร่ิมจาลองการทางาน

ใบงานที่ 4.1 การทดสอบบอร์ดเบ้ืองตน้  59 ใบงานท่ี 4.1 การทดสอบบอร์ดเบื้องต้น 1. จุดประสงค์ทวั่ ไป เพ่อื ใหส้ ามารถทดสอบบอร์ดเบ้ืองตน้ ได้ 2. จุดประสงค์เชิงพฤติกรรม 1. บอกวธิ ีการทดสอบบอร์ดเบ้ืองตน้ ได้ 2. บอกข้นั ตอนการต่อวงจรเพ่อื ทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาที่กาหนด 3. เครื่องมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 ตวั 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 1 ตวั 1 ตวั 2.1 ตวั ตา้ นทาน 220 ohm 1 เส้น 2.2 LED 3mm 1 เคร่ือง 3. บอร์ด Arduino Nano 3.0 4. สายเชื่อมตอ่ USB (Mini USB) 5. คอมพวิ เตอร์ 4. ลาดบั ข้นั การปฏบิ ตั งิ าน 1. ศึกษาจุดประสงคท์ ว่ั ไปจุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เก่ียวขอ้ ง 2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน

60  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน ใบงานน้ีเป็ นใบงานสาหรับเตรียมเคร่ืองมือและทดสอบการทางานเบ้ืองตน้ ของบอร์ด Arduino วา่ ใชง้ านไดป้ กติหรือไม่ โดยการเขียนโคด้ โปรแกรมให้ LED ที่อยบู่ นบอร์ด Arduino ซ่ึงต่ออยทู่ ่ีขา D13 ติดและดบั สลบั กนั ในกรณีที่ตอ้ งการต่อวงจร LED เพ่ิมภายนอกจะตอ้ งต่อวงจร LED ให้สามารถติดได้ เม่ือรับลอจิก 1 ดงั น้นั จะตอ้ งต่อ LED อนุกรมกบั ตวั ตา้ นทานลงกราวดด์ งั รูป ARDUINO R1 LED1 220 D13 GND รูปท่ี 4.1-1 วงจร Arduino ท่ีเชื่อมต่อกบั LED จานวน 1 ตวั ตวั ตา้ นทานท่ีใชต้ ่ออนุกรมกบั LED เพ่ือจากดั ปริมาณกระแสไฟฟ้าสามารถคานวณหาไดด้ ว้ ยกฎ ของโอห์ม โดยมีขอ้ กาหนดท่ีค่าแรงดนั ตกคร่อมและกระแสของ LED เป็ น 2V และ 15mA ตามลาดบั ดงั น้นั คา่ ความตา้ นทานจึงมีค่าเทา่ กบั R= VR  VCC VLED = II 52 = 200 15 103 6. ฟังก์ชั่นทใ่ี ช้งานในใบงาน รูปแบบของฟังกช์ น่ั ท่ีใชง้ านในใบงานน้ีมีดงั น้ี 1. ฟังก์ชั่นกาหนดโหมดการทางานให้กบั ขาพอร์ต สามารถกาหนดไดท้ ้งั ขาดิจิตอลโดยใส่เพียง ตวั เลขของขา (0, 1, 2,…13) และขาแอนาลอกท่ีตอ้ งการใหท้ างานในโหมดดิจิตอลไดจ้ ะตอ้ ง ใส่ A นาหนา้ ซ่ึงใชไ้ ดเ้ ฉพาะ A0, A1,…A5 ส่วนขา A6 และ A7 (ที่มีในบอร์ด Arduino รุ่น Mini และ Nano) ไมส่ ามารถใชง้ านในโหมดดิจิตอลได้ รูปแบบของฟังกช์ น่ั เป็นดงั น้ี pinMode(pin, mode); pin: หมายเลขขาที่ตอ้ งการเซตโหมด mode: INPUT, OUTPUT, INPUT_PULLUP

ใบงานท่ี 4.1 การทดสอบบอร์ดเบ้ืองตน้  61 ตัวอย่างเช่น pinMode(13,OUTPUT); หมายถงึ กาหนดใหข้ า D13 ทางานเป็นเอาตพ์ ุตพอร์ต pinMode(12, INPUT_PULLUP); หมายถึง กาหนดใหข้ า D12 ทางานเป็ นอินพุตพอร์ต ท่ีใชต้ วั ตา้ นทานพูลอพั ภายในชิพ 2. ฟังก์ช่ันส่งค่าลอจิกดิจิตอลไปยังขาพอร์ต โดยค่า HIGH เป็ นการส่งลอจิก 1 และค่า LOW เป็ นการส่งลอจิก 0 ออกไปยงั ขาพอร์ต ฟังกช์ น่ั น้ีจะทางานไดต้ อ้ งมีการใชฟ้ ังกช์ น่ั pinMode ก่อน digitalWrite(pin, value); pin: หมายเลข ขาที่ตอ้ งการเขียนลอจิกออกพอร์ต value: HIGH or LOW ตัวอย่างเช่น digitalWrite(13,HIGH); หมายถึง กาหนดใหส้ ่งลอจิก 1 ไปที่ขา D13 digitalWrite(13,LOW); หมายถึง กาหนดใหส้ ่งลอจิก 0 ไปท่ีขา D13 3. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาท่ี ตอ้ งการหยุดคา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) ตัวอย่างเช่น delay(1000); หมายถงึ หยดุ คา้ ง (หน่วงเวลา) ไวเ้ ป็นเวลา 1000 มิลลิวนิ าที (1 วนิ าที) 7. วงจรทใี่ ช้ทดลอง วงจรเพ่อื ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีสร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูป 3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus กรณีที่ใชว้ งจรท่ีสร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ท่ีลงบูตโหลดเดอร์เป็น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป

62  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] D1 VCC Peripheral circuit 1N5819 CPU circuit R1 10k 7,20 ATMEGA328 VCC SW1 1 RST AVCC C1 0.1uF USB to UART (TTL Level) R2,R3 3 D13 19 R4 1k 2 220 DTR RXD D1(TXD) LED1 TXD D0(RXD) +5V GND 3V3 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปท่ี 4.1-2 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป ARDUINO R1 LED1 220 D13 GND รูปที่ 4.1-3 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE ABCDE 1 D13 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN รูปท่ี 4.1-4 การต่อลงบอร์ดทดลอง

ใบงานที่ 4.1 การทดสอบบอร์ดเบ้ืองตน้  63 การต่อวงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปท่ี 4.1-5 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน 8. การเขยี นโค้ดโปรแกรมควบคุม ใบงานน้ีเป็ นใบงานทดสอบการทางานของบอร์ด Arduino วา่ ทางานไดส้ มบูรณ์หรือไม่สามารถ รับการอพั โหลดจากโปรแกรม Arduino IDE ไดห้ รือไม่ การทดสอบเป็นการเขียนโคด้ โปรแกรมให้ LED ท่ีอยู่บนบอร์ดติดดบั สลบั กนั ในเวลาที่กาหนดซ่ึง LED ดงั กล่าวต่ออยู่กบั ขาดิจิตอลขา D13 การเขียน โปรแกรมมีข้นั ตอนดงั น้ี ลาดบั งาน การเขียนโปรแกรมจากโจทยท์ ี่กาหนดขา้ งตน้ เขียนลาดบั งานไดด้ งั น้ี 1. กาหนดช่ือตวั LED กบั ขาพอร์ตท่ีตอ้ งใชง้ าน 5. ส่งค่า LOW ไปยงั ขาพอร์ตเพ่ือให้ LED ดบั 2. กาหนดโหมดขาที่เช่ือมต่อ LED 6. หน่วงเวลา 3. ส่งคา่ HIGH ไปยงั ขาพอร์ตเพื่อให้ LED ติด 7. วนกลบั ไปทาลาดบั ที่ 3 ซ้า 4. หน่วงเวลา แปลงลาดับงานเป็ นผงั งาน จากลาดบั งานสามารถเขียนเป็ นผงั งานไดด้ งั น้ี START Set pin mode Out to pin delay Out to pin delay

64  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #define LED 13 2 void setup() 3{ 4 pinMode(LED, OUTPUT); 5} 6 void loop() 7{ 8 digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) 9 delay(1000); // wait for a second 10 digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW 11 delay(1000); // wait for a second 12 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1 ประกาศชื่อ LED แทนตวั เลข 13 - บรรทดั ท่ี 4 กาหนดโหมดของขาพอร์ตที่เชื่อมต่อ LED ใหท้ างานเป็นเอาทพ์ ทุ พอร์ต - บรรทดั ที่ 8 ส่งคา่ ลอจิก 1 ออกทางขาพอร์ตที่ตอ่ LED - บรรทดั ท่ี 9 หน่วงเวลา 1 วนิ าที (1000 mS) - บรรทดั ที่ 10 ส่งคา่ ลอจิก 0 ออกทางขาพอร์ตท่ีต่อ LED - บรรทดั ท่ี 11 หน่วงเวลา 1 วนิ าที (1000 mS) ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองแกโ้ ปรแกรมจาก delay(1000); เป็นตวั เลขอื่น แลว้ สงั เกตผล 9. สรุปผลการปฏบิ ัตงิ าน

ใบงานท่ี 4.2 การเขียนโปรแกรมส่ือสารทางพอร์ตอนุกรม  65 ใบงานท่ี 4.2 การเขยี นโปรแกรมสื่อสารทางพอร์ตอนุกรม 1. จุดประสงค์ทว่ั ไป เพื่อใหส้ ามารถเขียนโปรแกรมส่ือสารทางพอร์ตอนุกรมได้ 2. จุดประสงค์เชิงพฤตกิ รรม 1. บอกวธิ ีเขียนโปรแกรมส่ือสารทางพอร์ตอนุกรมได้ 2. ทดสอบการทางานของบอร์ด Arduino ได้ 3. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 ตวั 1 แผน่ 2. อุปกรณ์อิเล็กทรอนิกส์ประกอบดว้ ย 1 ตวั 1 ตวั 2.1 ตวั ตา้ นทาน 220 ohm 1 เส้น 2.2 LED 3mm 1 เคร่ือง 3. บอร์ด Arduino Nano 3.0 4. สายเช่ือมต่อ USB (Mini USB) 5. คอมพิวเตอร์ 4. ลาดับข้นั การปฏบิ ัติงาน 1. ศึกษาจุดประสงคท์ ว่ั ไปจุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้ืนฐานที่เกี่ยวขอ้ ง 2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน

66  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน การสื่อสารแบบอนุกรมเป็ นการส่งข้อมูลไปทีล่ะบิตโดยใช้เทคนิคการเลื่อนข้อมูลบน สายสัญญาณเส้นเดียว การส่งขอ้ มูลแบบอนุกรมน้ีจะไม่มีการส่งสัญญาณนาฬิกาจากตวั ส่งไปยงั ตวั รับ แต่ จะอาศยั วิธีต้งั ค่าความเร็วในการรับส่งสัญญาณให้เท่ากนั ซ่ึงเรียกว่า “อตั ราบอด” โดยเรียกทบั ศพั ทว์ า่ “บอดเรต” (baud rate) ค่าความเร็วมาตรฐานท่ีพอร์ตอนุกรมส่วนใหญ่สามารถใช้งานไดค้ ือ 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200 ค่าความเร็วน้ีมีหน่วยเป็ นบิตต่อ วนิ าที (bit per second: bps) การส่งขอ้ มูลจะส่งบิตเร่ิมตน้ (Start bit) เพอ่ื ส่งสญั ญาณบอกใหภ้ าครับรับรู้วา่ จะมีการส่งขอ้ มูลไปแลว้ ในเวลาอนั ใกลน้ ้ีและเมื่อส่งขอ้ มูลเสร็จจะส่งบิตหยุด (Stop bit) เป็ นบิตปิ ดทา้ ย ขบวนขอ้ มูลในไบตน์ ้นั ๆ ดงั รูป รูปท่ี 4.2-1 รูปแบบของขอ้ มูลท่ีสื่อสารแบบอนุกรม รูปแบบของ ขอ้ มูลจากท่ีส่งผา่ น Serial จะมีการเพม่ิ Start bit และ Stop bit เขา้ ไปเพม่ิ จากขอ้ มูลเดิม 1. บิตเริ่มตน้ (Start bit) จะมีขนาด 1 บิต จะเป็ นลอจิก LOW 2. บิตขอ้ มูล (Data bit) 8 บิต ขอ้ มูลท่ีจะส่ง 3. บิตภาวะคูห่ รือค่ี (Parity bit) มีขนาด 1 บิต ใชต้ รวจสอบขอ้ มูลความถูกตอ้ งของขอ้ มูล 4. บิตหยดุ (Stop bit) เป็นการระบุถึงขอบเขตของการสิ้นสุดขอ้ มูล จะเป็นลอจิก HIGH 6. ฟังก์ช่ัน Arduino ทใ่ี ช้ในใบงาน 1. ฟังก์ช่ันกาหนดโหมดการทางานให้กับขาพอร์ต สามารถกาหนดไดท้ ้งั ขาดิจิทลั โดยใส่เพียง ตวั เลขของขา (0, 1, 2,…13) และขาแอนาลอกท่ีตอ้ งการใหท้ างานในโหมดดิจิทลั แต่การใส่ ขาตอ้ งใส่ A นาหนา้ ซ่ึงใชไ้ ดเ้ ฉพาะ A0, A1,…A5 ส่วนขา A6 และ A7 ไม่สามารถใชง้ านใน โหมดดิจิทลั ได้ รูปแบบของฟังกช์ นั่ เป็นดงั น้ี pinMode(pin, mode); pin: หมายเลขขาท่ีตอ้ งการเซตโหมด mode: INPUT, OUTPUT, INPUT_PULLUP

ใบงานที่ 4.2 การเขียนโปรแกรมส่ือสารทางพอร์ตอนุกรม  67 2. ฟังก์ช่ันส่งค่าลอจิกดิจิทลั ไปยงั ขาพอร์ต คา่ HIGH เป็นการส่งลอจิก 1 และค่า LOW เป็นการ ส่งลอจิก 0 ออกไปยงั ขาพอร์ต ซ่ึงฟังกช์ น่ั น้ีจะทางานไดต้ อ้ งมีการใชฟ้ ังกช์ น่ั pinMode ก่อน digitalWrite(pin, value); pin: หมายเลขขาท่ีตอ้ งการเขียนลอจิกออกพอร์ต value: HIGH or LOW 3. ฟังก์ช่ันหน่วงเวลาหรือฟังก์ชั่นหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาท่ี ตอ้ งการหยุดคา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวินาที ตวั เลขของเวลาท่ี ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) 4. ฟังก์ชั่นกาหนดความเร็วในการส่ือสารทางพอร์ตอนุกรม เพื่อให้สามารถส่ือสารระหวา่ ง อุปกรณ์ท้งั สองฝ่ังไดจ้ ะตอ้ งกาหนดอตั ราเร็วในการส่ือสารหรือเรียกว่าอตั ราบอด (Baud rate) ซ่ึงค่าความเร็วน้ีมีหน่วยเป็ นบิตต่อวินาที (bps: bit per second) ค่าความเร็วน้ีได้แก่ 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, หรือ 115200 Serial.begin(speed); speed: ตวั เลขของอตั ราเร็วในการสื่อสารผา่ นพอร์ตอนุกรม ตัวอย่าง Serial.begin(9600); หมายถึง กาหนดอตั ราเร็วของการส่ือสารทางพอร์ตอนุกรม เป็น 9600 บิตตอ่ 1 วนิ าที 5. ฟังก์ช่ันตรวจสอบว่ามีข้อมูลเข้ามายังพอร์ตอนุกรมหรือไม่ โดยค่าท่ีไดจ้ ากฟังก์ชัน่ เป็ น จานวนของขอ้ มูลท่ีเขา้ มา แต่ถา้ หากไม่มีขอ้ มูลเขา้ ค่าที่ไดจ้ ากฟังกช์ นั่ จะมีคา่ เป็นศูนย์ Serial.available(); ตัวอย่าง if (Serial. available()>0) หมายถึง ตรวจสอบวา่ มีขอ้ มูลเขา้ มายงั พอร์ตอนุกรมหรือไม่ หากมี (ค่าจะมากกวา่ 0) ให้ทางานในกรอบงานของ if แต่ถา้ ไม่มีขอ้ มูลเขา้ มาให้ขา้ ม เง่ือนไข if น้ีไป

68  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 6. ฟังก์ชั่นอ่านข้อมูลทเี่ ข้ามายงั พอร์ตอนุกรม Serial. read(); ตวั อย่าง x = Serial.read(); หมายถงึ อ่านค่าจากพอร์ตอนุกรมมาเก็บลงในตวั แปร x 7. ฟังก์ช่ันล้างข้อมูลในบฟั เฟอร์ของพอร์ตอนุกรมฝั่งดา้ นรับใหว้ า่ ง Serial.flush() ตวั อย่าง หมายถึง ลา้ งขอ้ มูลบฟั เฟอร์ของพอร์ตอนุกรมฝั่งดา้ นรับ Serial.flush(); 8. ฟังก์ชั่นส่งข้อมูลออกพอร์ต เป็นฟังกช์ นั่ ท่ีใชใ้ นการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรืออาจ เรียกวา่ ฟังก์ชน่ั พิมพข์ อ้ มูลออกทางพอร์ตเพ่ือแสดงผลท่ีจอคอมพิวเตอร์ท่ีเช่ือมต่อกบั วงจร Arduino ฟังกช์ น่ั น้ีเม่ือพมิ พเ์ สร็จตวั เคอร์เซอร์จะรออยทู่ ่ีทา้ ยส่ิงท่ีพมิ พน์ ้นั ๆ Serial.print(val) Serial.print(val, format) ตัวอย่าง ผลท่ีไดค้ ือ \"78\" Serial.print(78, OCT) ผลที่ไดค้ ือ \"116\" Serial.print(78) ผลที่ไดค้ ือ \"1.23\" Serial.print(78, DEC) ผลท่ีไดค้ ือ \"78\" Serial.print(1.23456) ผลที่ไดค้ ือ \"N\" Serial.print(78, HEX) ผลท่ีไดค้ ือ \"4E\" Serial.print('N') ผลท่ีไดค้ ือ \"Hello\" Serial.print(1.23456, 0) ผลที่ไดค้ ือ \"1\" Serial.print(\"Hello\") ผลที่ไดค้ ือ \"1001110\" Serial.print(1.23456, 2) ผลที่ไดค้ ือ \"1.23\" Serial.print(78, BIN) Serial.print(1.23456, 4) ผลที่ไดค้ ือ \"1.2346\" 9. ฟังก์ชั่นส่งข้อมูลออกพอร์ต คลา้ ยกบั ฟังก์ชั่น Serial.print ต่างกนั ตรงที่เมื่อพิมพ์เสร็จตวั เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้นั เมื่อส่ังพิมพค์ ร้ังถดั ไปขอ้ มูลท่ีปรากฏจะอยู่ที่ บรรทดั ใหม่ แทนท่ีจะต่อทา้ ยเหมือนกบั ฟังกช์ น่ั Serial.print Serial.println(val) Serial.println(val, format)

ใบงานท่ี 4.2 การเขียนโปรแกรมส่ือสารทางพอร์ตอนุกรม  69 7. วงจรทใ่ี ช้ทดลอง วงจรเพือ่ ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีสร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูป 3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus กรณีท่ีใชว้ งจรที่สร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป 1DN15819 VCC Peripheral circuit R1 CPU circuit 10k 7,20 ATMEGA328 SW1 VCC 1 RST AVCC C1 0.1uF USB to UART (TTL Level) R2,R3 3 D13 19 R4 1k 2 220 DTR RXD D1(TXD) LED1 TXD D0(RXD) +5V GND 3V3 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.2-2 วงจรท่ีใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป ARDUINO R1 LED1 220 D13 GND รูปท่ี 4.2-3 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

70  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]F GH I J20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลองD11 D10 รูปที่ 4.2-4 การต่อลงบอร์ดทดลองD9 การตอ่ วงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus อุปกรณ์เชื่อมต่อเพ่ือส่ือสารทางD8 5 พอร์ตอนุกรมใช้ VIRTUAL TERMINAL ซ่ึงอยใู่ นกลุ่ม INSTRUMENTSD7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE ABCDE D13 3V3 REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปที่ 4.2-5 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน 8. การเขยี นโค้ดโปรแกรมควบคุม การทดลองที่ 1 รับขอ้ มูลจากพอร์ตอนุกรมซ่ึงส่งจากคอมพิวเตอร์มายงั บอร์ด Arduino แล้วส่งค่าน้ัน กลบั ไปยงั คอมพิวเตอร์อีกคร้ังเพอื่ แสดงผลส่ิงท่ีส่งมา ผงั งาน โค้ดโปรแกรม START 1 int incomingByte = 0; 2 void setup() กาหนดค่าเริม่ ต้นต่าง 3{ 4 Serial.begin(9600); มขี ้อมลู เข้า ? ไมใ่ ช่ 5} 6 void loop() ใช่ 7{ เกบ็ ค่าเข้าตัวแปร 8 if (Serial.available() > 0) 9{ 10 incomingByte = Serial.read(); 11 Serial.print(\"I received: \"); 12 Serial.println(incomingByte, DEC); 13 } 14 } ส่งค่าตวั แปรไปแสดงผล

ใบงานท่ี 4.2 การเขียนโปรแกรมส่ือสารทางพอร์ตอนุกรม  71 รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1 ประกาศตวั แปรสาหรับเกบ็ ค่าขอ้ มูลที่รับเขา้ มาทางพอร์ตอนุกรม - บรรทดั ท่ี 4 กาหนดอตั ราเร็วของการสื่อสารของพอร์ตอนุกรม (กาหนด Baud rate) - บรรทดั ที่ 8 ตรวจสอบวา่ มีขอ้ มูลเขา้ มาหรือไม่ หากมีขอ้ มูลเขา้ มาทางพอร์ตอนุกรมค่าท่ีส่งออก มาจากฟังกช์ น่ั Serial.available จะมากกวา่ ศูนย์ - บรรทดั ที่ 10 อ่านคา่ จากพอร์ตอนุกรมนาเขา้ มาเกบ็ ลงในตวั แปรที่เตรียมไว้ - บรรทดั ท่ี 11 แสดงขอ้ ความ “I received:” ท่ีจอคอมพิวเตอร์ผา่ นทางพอร์ตอนุกรม - บรรทดั ที่ 12 แสดงคา่ ในตวั แปร incomingByte ท่ีจอคอมพิวเตอร์ผา่ นทางพอร์ตอนุกรม ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองแกโ้ ปรแกรมใหแ้ สดงผลตวั แปรรูปแบบอื่น ๆ แลว้ สังเกตผล การทดลองที่ 2 รับขอ้ มูลจากพอร์ตอนุกรมซ่ึงส่งมาจากคอมพิวเตอร์มายงั บอร์ด Arduino แล้วทาการ ตรวจสอบวา่ ขอ้ มูลดงั กล่าวใช่ตวั อกั ษร a หรือไม่ หากขอ้ มูลเป็ นตวั อกั ษร a ให้ LED ท่ีต่ออยูท่ ่ีขา D13 สวา่ งแตถ่ า้ ขอ้ มูลท่ีเขา้ มาไม่ใช่ตวั อกั ษร a ให้ LED น้นั ดบั ผงั งาน โค้ดโปรแกรม START 1 #define LED 13 2 int incomingByte = 0; กาหนดคา่ เริม่ ต้นต่าง 3 void setup() 4{ มขี ้อมลู เขา้ ? ไม่ใช่ 5 Serial.begin(9600); ใช่ 6 pinMode(LED,OUTPUT); 7} ใช่ ใช่ a ? ไม่ใช่ 8 void loop(){ 9 if (Serial.available() > 0) { LED ตดิ LED ดับ 10 incomingByte = Serial.read(); 11 if(incomingByte =='a') 12 { 13 digitalWrite(LED,HIGH); 14 } 15 else 16 { 17 digitalWrite(LED,LOW); 18 } 19 } 20 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1 กาหนดช่ือ LED ใหแ้ ทน 13 (ในวงจรจริง LED ต่ออยกู่ บั ขา D13) - บรรทดั ที่ 2 ประกาศตวั แปรสาหรับเก็บค่าขอ้ มูลท่ีรับเขา้ มาทางพอร์ตอนุกรม - บรรทดั ที่ 5 กาหนดอตั ราเร็วของการสื่อสารของพอร์ตอนุกรม (กาหนด Baud rate) - บรรทดั ท่ี 6 กาหนดโหมดใหก้ บั ขาพอร์ตทางานเป็นเอาตพ์ ทุ พอร์ต

72  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] - บรรทัดที่ 9 ตรวจสอบวา่ มีขอ้ มูลเขา้ มาหรือไม่ หากมีขอ้ มูลเขา้ มาทางพอร์ตอนุกรมค่าท่ีส่งออก จากฟังกช์ นั่ Serial.available จะมากกวา่ ศูนย์ - บรรทดั ท่ี 10 อ่านค่าจากพอร์ตอนุกรมนาเขา้ มาเกบ็ ลงในตวั แปรที่เตรียมไว้ - บรรทดั ที่ 11 ตรวจสอบคา่ ในตวั แปร (ขอ้ มูลท่ีรับเขา้ มา) มีคา่ เทา่ กบั ตวั อกั ษร a หรือไม่ - บรรทดั ท่ี 13 ถา้ คา่ ในตวั แปรมีคา่ เทา่ กบั ตวั อกั ษร a ใหส้ ่งลอจิก 1 ออกพอร์ต - บรรทดั ท่ี 17 ถา้ ค่าในตวั แปรมีคา่ ไมเ่ ทา่ กบั ตวั อกั ษร a ใหส้ ่งลอจิก 0 ออกพอร์ต ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองแกไ้ ขโปรแกรมใหส้ ามารถรับคา่ จากตวั อกั ษรอื่น ๆ ได้ 9. สรุปผลการปฏบิ ัติงาน 10. งานทม่ี อบหมาย เขียนโปรแกรมรับขอ้ มูลจากคอมพิวเตอร์โดยให้ขอ้ มูลท่ีรับเขา้ มาน้นั สามารถควบคุมการติดดบั ของ LED ที่ตอ่ อยกู่ บั Arduino ท้งั หมดซ่ึงวงจรเชื่อมต่อเป็นดงั รูป ARDUINO LED1-LED4 R1-R2420 D2 D3 D4 D5 GND รูปท่ี 4.2-6 วงจรทดลองสาหรับงานท่ีมอบหมาย

ใบงานที่ 4.3 การเขียนโปรแกรมใชง้ านพอร์ตทาหนา้ ท่ีเอาตพ์ ตุ พอร์ตเบ้ืองตน้  73 ใบงานที่ 4.3 การเขยี นโปรแกรมใช้งานพอร์ตทาหน้าทเี่ อาต์พตุ พอร์ตเบื้องต้น 1. จุดประสงค์ทว่ั ไป เพ่อื ใหส้ ามารถเขียนโปรแกรมใชง้ านพอร์ตทาหนา้ ที่เอาตพ์ ุตพอร์ตเบ้ืองตน้ ได้ 2. จุดประสงค์เชิงพฤตกิ รรม 1. บอกวธิ ีเขียนโปรแกรมใชง้ านพอร์ตทาหนา้ ที่เอาตพ์ ตุ พอร์ตเบ้ืองตน้ ได้ 2. บอกข้นั ตอนการตอ่ วงจรเพือ่ ทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาที่กาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 4 ตวั 2.1 ตวั ตา้ นทาน 220 ohm 4 ตวั 2.2 LED 3mm 3. บอร์ด Arduino Nano 3.0 1 ตวั 4. สายเช่ือมต่อ USB (Mini USB) 1 เส้น 5. สายเชื่อมต่อวงจร 1 ชุด 6. คอมพวิ เตอร์ 1 เคร่ือง 4. ลาดบั ข้นั การปฏบิ ัตงิ าน 1. ศึกษาจุดประสงคท์ ว่ั ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้ืนฐานท่ีเก่ียวขอ้ ง 2. ดาเนินการตอ่ วงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน

74  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน บอร์ด Arduino รุ่นที่ใช้ไอซีไมโครคอนโทรลเลอร์ ATMEGA328, ATMEGA168, ATMEGA8 จะมีพอร์ตท่ีออกแบบมาให้เป็ นพอร์ตดิจิทลั โดยตรงจานวน 14 ขาได้แก่ D0, D1,…D13 ซ่ึงขาพอร์ต ดิจิทลั 14 ขาน้ีมี 2 ขาที่ทาหนา้ ที่อ่ืนคือ D0 กบั D1 ทาหนา้ ท่ีเป็ นขา Rx และ Tx ใชส้ าหรับติดต่อสื่อสาร กบั คอมพิวเตอร์แบบอนุกรม ดงั น้นั หากกาลงั เสียบสาย USB กบั คอมพิวเตอร์ ขา D0 และ D1 จะถูกใช้ งานรับส่งขอ้ มูลอยจู่ ึงไม่สามารถใชง้ านเป็นพอร์ตปกติได้ พอร์ตของ Arduino ท่ีเป็ นพอร์ตแอนะลอก (ใชร้ ับสัญญาณแอนะลอก) สามารถใชง้ านในโหมด ดิจิทลั ได้ วิธีการใช้งานในโหมดดิจิทลั ทาได้โดยใช้ฟังก์ช่ันท่ีใช้งานพอร์ตดิจิทลั ปกติเพียงแค่ระบุขา พอร์ตใชง้ านโดยใส่ A นาหนา้ พอร์ตแอนะลอกท่ีสามารถทางานในโหมดดิจิทลั ไดม้ ีท้งั หมด 6 ขาไดแ้ ก่ A0, A1,…A5 ส่วนขา A6 และ A7 (มีในบอร์ด Arduino Nano) ใช้งานได้เฉพาะรับสัญญาณที่เป็ น แอนะลอกเทา่ น้นั ไมส่ ามารถใชง้ านในโหมดดิจิทลั ได้ รูปที่ 4.3-1 ขาพอร์ตใชง้ านของไอซี Arduino เบอร์ ATMEGA328 การใชง้ านพอร์ตด้วยบอร์ด Arduino รุ่นที่ใชซ้ ีพียูตระกูล AVR ตวั ซีพียูจะมีความสามารถจ่าย กระแสออกทางขาพอร์ตไดส้ ูงมากพอท่ีจะขบั ให้ LED โดยตรงให้สว่างได้โดยไม่ตอ้ งสร้างวงจรขบั เพมิ่ ข้ึน คุณสมบตั ิทางไฟฟ้าของซีพียเู ป็นดงั รูป รูปที่ 4.3-2 คุณสมบตั ิทางไฟฟ้าของซีพียตู ระกลู AVR

ใบงานที่ 4.3 การเขียนโปรแกรมใชง้ านพอร์ตทาหนา้ ที่เอาตพ์ ตุ พอร์ตเบ้ืองตน้  75 การใช้งานเอาต์พุตพอร์ตด้วยการขบั แอลอดี ี (LED) แอลอีดี (LED) เป็นอุปกรณ์อิเล็กทรอนิกส์ชนิดหน่ึงท่ีสร้างมาจากสารก่ึงตวั นา ซ่ึงแสงสีท่ีไดจ้ าก LED เป็ นแสงสีท่ีมีคล่ืนความถ่ีเดียว โดยเกิดจากการใชช้ นิดของสารก่ึงตวั นา LED สีแดง เขียว เหลือง เทคโนโลยีการผลิต LED มีมาต้งั แต่ประมาณปี ค.ศ. 1960 LED ทาจากสารก่ึงตวั นาท่ีหลากหลายวสั ดุ และมีการเจือสารท่ีแตกต่างกนั จาพวก แกลเลียม อินเดียม สารหนู ไนโตรเจน และสารเรืองแสง1 เมื่อ นามาทาเป็ นสารก่ึงตวั นาชนิด N และ P แลว้ นามาต่อกนั เหมือนไดโอดจะมีคุณสมบตั ิคลา้ ยกบั ไดโอด กล่าวคือ เม่ือจดั วงจรให้ LED รับไบอสั ตรงจะมีกระแสไหลผา่ นได้ แต่เมื่อจดั วงจรให้รับไบอสั กลบั จะ ไม่มีกระไหลผา่ น เพียงแต่คุณสมบตั ิท่ีต่างกนั คือเม่ือจ่ายกระแสให้ไหลผา่ น LED ในขณะไบอสั ตรง จะ ทาใหเ้ กิดพลงั งานข้ึนในรูปพลงั งานโปรตอนผลคือเกิดแสงสวา่ งข้ึน ส่วนไดโอดทวั่ ไปพลงั งานจะอยใู่ น รูปของพลงั งานความร้อน คุณสมบตั ิของ LED ขณะไบอสั ตรงคือ 1. แรงดนั ตกคร่อมประมาณ 2 โวลต์ (สีแดง เขียว เหลือง หากใชส้ ีอ่ืนใหด้ ูคา่ ในดาตา้ ชีต) 2. กระแสประมาณ 10-25 มิลลิแอมป์ กระแสท่ีไหลผ่าน LED จะเป็ นปฏิภาคโดยตรงกบั แรงดนั ตกคร่อมและความสวา่ ง กล่าวคือถา้ จ่ายกระแสต่าแรงดนั ตกคร่อมจะต่าและความสว่างจะน้อยลงอายุการใช้งานนาน แต่ถา้ จ่ายกระแสสูง แรงดนั ตกคร่อมจะสูงข้ึนความสวา่ งก็มากข้ึน อายกุ ารใชง้ านส้ัน ( LED สีขาวและสีน้าเงินจะใชก้ ระแส สูงกวา่ ในการไบอสั และแรงดนั ตกคร่อมจะสูงกวา่ ท้งั น้ีก่อนใช้งานใหเ้ ปิ ดดูรายละเอียดในดาตา้ ชีตของ LED ท่ีนามาใชง้ าน) สาหรับวงจรไบอสั LED เป็นดงั รูป Vcc R LED รูปท่ี 4.3-3 แสดงวงจรไบอสั LED เบ้ืองตน้ จากรูป การคานวณหาคา่ ความตา้ นทานเพ่ือจากดั กระแสใหผ้ า่ น LED 15 มิลลิแอมป์ มีค่าเทา่ กบั R= VR = = I = VCC VLED I 52 15 103 200 โอห์ม หมายเหตุ แรงดนั ลอจิก 1 ท่ีส่งมาจากขาพอร์ตดิจิตอลของ Arduino จะมีคา่ ประมาณ VCC 1U.S. DOE ENERGY STAR, 2008

76  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การใช้งานเอาต์พุตพอร์ตด้วยการขับรีเลย์ รีเลยเ์ ป็นอุปกรณ์ที่ทาหนา้ ที่เป็นสวิตช์เชิงกล การทางานอาศยั หลกั การเปล่ียนพลงั งานไฟฟ้าจาก การป้อนกระแสไฟฟ้าใหก้ บั ขดลวดใหเ้ ป็นพลงั งานแม่เหล็ก เพ่อื ใชใ้ นการดึงหนา้ สัมผสั ของคอนแทคให้ เปลี่ยนสภาวะ เพื่อทาการปิ ดหรือเปิ ดหนา้ สัมผสั การทางานเช่นน้ีมีลกั ษณะคลา้ ยกบั สวติ ช์อิเล็กทรอนิกส์ ขดลวดรีเลยโ์ ดยทว่ั ไปจะมีขนาดความตอ้ งการของแรงดนั และกระแสไฟที่สูงกวา่ ความสามารถ ของไมโครคอรโทรลเลอร์ท่ีจะขบั โดยตรงได้ ดงั น้นั จึงตอ้ งใชว้ งจรช่วยขบั เพ่ิมเขา้ มาซ่ึงโดยทว่ั ไปจะใช้ ทรานซิสเตอร์เป็ นตวั ช่วยขบั มีท้งั ขบั ตรงโดยรับกระแสเบสจากขาพอร์ตโดยตรงและแบบท่ีใชอ้ ุปกรณ์ เช่ือมตอ่ ทางแสงหรือท่ีเรียกวา่ “ออปโตไ้ อโซเลเตอร์” เพอ่ื ใชแ้ ยกวงจรออกจากกนั ดงั รูป VS VCC VS รูปที่ 4.3-4 แสดงวงจรขบั รีเลยแ์ บบขบั ตรงและแบบใชอ้ ุปกรณ์เช่ือมต่อทางแสง ปัจจุบนั มีโมดูลรีเลยส์ าเร็จรูปจาหน่าย ท้งั น้ีในการใช้งานให้ตรวจสอบค่าแรงดนั ขดลวดของ รีเลยท์ ี่ตอ้ งการโดยเลือกให้สอดคลอ้ งกบั วงจรที่ใช้งานตวั อย่างเช่นในวงจรที่ใช้งานมีเพียงแรงดนั 5 โวลตค์ วรเลือกโมดูลรีเลยที่ใชแ้ รงดนั 5 โวลต์ หรือวงจรที่ใชง้ านมีแรงดนั 12 โวลตก์ ารเลือกโมดูลรีเลยก์ ็ สามารถใชโ้ มดูล 12 โวลตไ์ ด้ สาหรับพิกดั กระแสท่ีใชง้ านโดยปกติโมดูลรีเลยจ์ ะใชร้ ีเลยข์ นาด 10 แอมป์ หากวงจรท่ีใชง้ านมีพกิ ดั กระแสท่ีสูงกวา่ จะตอ้ งออกแบบวงจรรีเลยใ์ หต้ รงตามความตอ้ งการ โมดูลรีเลยม์ ี จาหน่ายหลายขนาด เช่น 1 ช่อง 2 ช่อง 4 ช่อง 8 ช่อง เป็นตน้ รูปท่ี 4.3-5 โมดูลรีเลยข์ นาดตา่ ง ๆ ท่ีมีจาหน่าย

ใบงานที่ 4.3 การเขียนโปรแกรมใชง้ านพอร์ตทาหนา้ ท่ีเอาตพ์ ตุ พอร์ตเบ้ืองตน้  77 6. ฟังก์ชั่น Arduino ทใ่ี ช้งานในใบงาน 1. ฟังก์ช่ันกาหนดโหมดการทางานให้กับขาพอร์ต สามารถกาหนดไดท้ ้งั ขาดิจิทลั โดยใส่เพียง ตวั เลขของขา (0, 1, 2,…13) และขาแอนาลอกท่ีตอ้ งการใหท้ างานในโหมดดิจิทลั แต่การใส่ ขาตอ้ งใส่ A นาหนา้ ซ่ึงใชไ้ ดเ้ ฉพาะ A0, A1,…A5 ส่วนขา A6 และ A7 ไม่สามารถใชง้ านใน โหมดดิจิทลั ได้ รูปแบบของฟังกช์ นั่ เป็นดงั น้ี pinMode(pin, mode) pin: หมายเลขขาที่ตอ้ งการเซตโหมด mode: INPUT, OUTPUT, INPUT_PULLUP 2. ฟังก์ชั่นส่งค่าลอจิกดจิ ิทลั ไปยงั ขาพอร์ต คา่ HIGH เป็นการส่งลอจิก 1 และคา่ LOW เป็นการ ส่งลอจิก 0 ออกไปยงั ขาพอร์ต ซ่ึงฟังก์ชนั่ น้ีจะทางานไดจ้ ะตอ้ งมีการใช้ฟังก์ชนั่ pinMode ก่อน digitalWrite(pin, value) pin: หมายเลขขาท่ีตอ้ งการเขียนลอจิกออกพอร์ต value: HIGH or LOW 3. ฟังก์ช่ันหน่วงเวลาหรือฟังก์ชั่นหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาที่ ตอ้ งการหยุดคา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวินาที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms) ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) 7. วงจรทใ่ี ช้ทดลอง วงจรเพื่อใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ที่สร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูป 3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus กรณีที่ใชว้ งจรที่สร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ท่ีลงบูตโหลดเดอร์เป็น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป

78  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] D1 VCC Peripheral circuit 1N5819 CPU circuit R1 10k 7,20 ATMEGA328 VCC SW1 1 RST AVCC C1 R4-R7 0.1uF 220 LED1-LED4 USB to UART (TTL Level) R2,R3 3 D2 4 1k 2 D3 5 DTR D4 6 RXD D1(TXD) D5 11 TXD D0(RXD) +5V GND 3V3 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.3-6 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป ARDUINO LED1-LED4 R1-R4 220 D2 D3 D4 D5 GND รูปท่ี 4.3-7 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE ABCDE D13 3V3 REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปที่ 4.3-8 การต่อลงบอร์ดทดลอง การตอ่ วงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปท่ี 4.3-9 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน

ใบงานที่ 4.3 การเขียนโปรแกรมใชง้ านพอร์ตทาหนา้ ท่ีเอาตพ์ ตุ พอร์ตเบ้ืองตน้  79 8. การเขยี นโค้ดโปรแกรมควบคุม การทดลองที่ 1 เขียนโปรแกรมไฟวงิ่ LED 4 ตวั ติดดบั เรียงกนั ไปโดยใหต้ ิดคร้ังละ 1 ตวั และที่เหลือดบั ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START A B LED 3 กาหนดคา่ เริม่ ต้นต่าง LED 1 LED 4 LED 2 B A แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #define LED1 2 2 #define LED2 3 3 #define LED3 4 4 #define LED4 5 5 void setup() 6{ 7 Serial.begin(9600); 8 pinMode(LED1,OUTPUT); 9 pinMode(LED2,OUTPUT); 10 pinMode(LED3,OUTPUT); 11 pinMode(LED4,OUTPUT); 12 } 13 void loop() 14 { 15 digitalWrite(LED1,HIGH); 16 digitalWrite(LED2,LOW); 17 digitalWrite(LED3,LOW); 18 digitalWrite(LED4,LOW); 19 delay(200); 20 digitalWrite(LED1,LOW); 21 digitalWrite(LED2,HIGH); 22 digitalWrite(LED3,LOW); 23 digitalWrite(LED4,LOW); 24 delay(200); 25 digitalWrite(LED1,LOW); 26 digitalWrite(LED2,LOW); 27 digitalWrite(LED3,HIGH); 28 digitalWrite(LED4,LOW); 29 delay(200); 30 digitalWrite(LED1,LOW); 31 digitalWrite(LED2,LOW); 32 digitalWrite(LED3,LOW); 33 digitalWrite(LED4,HIGH); 34 delay(200); 35 }

80  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] รายละเอยี ดโค้ดโปรแกรม - บรรทดั ท่ี 1-4 กาหนดชื่อ LED1, 2, 3, 4 ใหแ้ ทน 2, 3, 4, 5 (เป็นขาท่ี LED ตอ่ อยกู่ บั Arduino) - บรรทดั ท่ี 7 กาหนดอตั ราเร็วของการสื่อสารของพอร์ตอนุกรม (กาหนด Baud rate) - บรรทดั ที่ 8-11 กาหนดโหมดใหก้ บั ขาพอร์ตทางานเป็นเอาตพ์ ทุ พอร์ต - บรรทดั ท่ี 15 ส่งลอจิก 1 ออกพอร์ตท่ีใชช้ ่ือวา่ LED1 - บรรทดั ท่ี 16 ส่งลอจิก 0 ออกพอร์ตท่ีใชช้ ื่อวา่ LED2 - บรรทดั ท่ี 17 ส่งลอจิก 0 ออกพอร์ตที่ใชช้ ่ือวา่ LED3 - บรรทดั ท่ี 18 ส่งลอจิก 0 ออกพอร์ตท่ีใชช้ ื่อวา่ LED4 - บรรทดั ท่ี 19 หน่วงเวลา 200 mS (1/5 วนิ าที) ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองแกโ้ ปรแกรมให้ LED ติดในรูปแบบอื่น ๆ แลว้ สังเกตผล การทดลองท่ี 2 เขียนโปรแกรมไฟว่ิง LED 4 ตวั ติดดบั เรียงกนั ไปโดยให้ติดคร้ังละ 1 ตวั และที่เหลือดบั เช่นเดียวกบั การทดลองที่หน่ึง แตใ่ ชว้ ธิ ีการเขียนฟังกช์ น่ั รองชนิดรับค่าแตไ่ มส่ ่งคืนคา่ ข้ึนใชง้ านเอง ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START A B LED 3 กาหนดค่าเริม่ ต้นต่าง LED 1 LED 4 LED 2 B A แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 char LED_pin[] = {2,3,4,5}; 2 void send2port(byte data); 3 void setup() 4{ 5 Serial.begin(9600); 6 for(char i=0;i<4;i++) 7{ 8 pinMode(LED_pin[i],OUTPUT); 9} 10 }

ใบงานท่ี 4.3 การเขียนโปรแกรมใชง้ านพอร์ตทาหนา้ ที่เอาตพ์ ตุ พอร์ตเบ้ืองตน้  81 11 void loop() 12 { 13 send2port(0B1000); 14 delay(200); 15 send2port(0B0100); 16 delay(200); 17 send2port(0B0010); 18 delay(200); 19 send2port(0B0001); 20 delay(200); 21 } 22 void send2port(byte data) 23 { 24 digitalWrite(LED_pin[0],(data & 1 )? HIGH:LOW); 25 digitalWrite(LED_pin[1],(data & 2 )? HIGH:LOW); 26 digitalWrite(LED_pin[2],(data & 4 )? HIGH:LOW); 27 digitalWrite(LED_pin[3],(data & 8 )? HIGH:LOW); 28 } รายละเอยี ดโค้ดโปรแกรม - บรรทัดท่ี 1 ประกาศตวั แปรแบบอาร์เรยช์ ่ือ LED_pin และกาหนดค่าเป็ น 2, 3, 4, 5 (เป็ นขาท่ี LED ตอ่ อยกู่ บั Arduino) - บรรทดั ท่ี 2 ประกาศรูปแบบ (Prototype) ของฟังก์ชน่ั รอง ซ่ึงเป็ นฟังกช์ น่ั ใหท้ าหนา้ ท่ีรับค่าท่ีส่ง มาจากฟังกช์ น่ั หลกั แลว้ คานวณเพื่อส่งลอจิกออกพอร์ต - บรรทดั ท่ี 5 กาหนดอตั ราเร็วของการสื่อสารของพอร์ตอนุกรม (กาหนด Baud rate) - บรรทดั ที่ 6-9 กาหนดโหมดใหก้ บั ขาพอร์ตทางานเป็ นเอาตพ์ ทุ พอร์ต โดยใชค้ าสงั่ for ในการวน ทาซ้า - บรรทดั ที่ 14 หน่วงเวลา 200 mS (1/5 วนิ าที) - บรรทัดที่ 22-28 ฟังก์ช่ันรองท่ีรับค่าเขา้ มาจากฟังก์ช่ันหลกั ผ่านตวั แปร data แลว้ นาค่าเขา้ มา ตรวจสอบว่าควรจะตอ้ งส่งลอจิก 1 หรือลอจิก 0 ออกทางพอร์ตใด (ใช้ฟังชั่น if-else แบบย่อ รายละเอียดการใชง้ านหนา้ ที่ 30) ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองแกโ้ ปรแกรมให้ LED ติดในรูปแบบอื่น ๆ แลว้ สังเกตผล 9. สรุปผลการปฏบิ ตั งิ าน

82  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 10. งานทม่ี อบหมาย 1. เขียนโปรแกรมไฟวงิ่ โดยให้มีรูปแบบของไฟวง่ิ ไม่นอ้ ยกวา่ 4 รูปแบบแสดงผลเรียงกนั ไป โดยใชว้ งจรดงั รูป ARDUINO LED1-LED4 R1-R2420 D2 D3 D4 D5 GND รูปท่ี 4.3-10 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง 2. เขียนโปรแกรมไฟวง่ิ ใชว้ งจร Arduino ที่ตอ่ LED ท้งั หมดจานวน 8 ตวั โดยใหม้ ีรูปแบบของ ไฟวงิ่ ไม่นอ้ ยกวา่ 4 รูปแบบแสดงผลเรียงกนั ไปในแต่ละรูปแบบโดยใชว้ งจรดงั รูป ARDUINO LED1-LED8 R1-R2820 D2 D3 D4 D5 D6 D7 D8 D9 GND รูปที่ 4.3-11 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

ใบงานท่ี 4.4 การเขียนโปรแกรมรับคา่ จากพอร์ตดิจิทลั  83 ใบงานท่ี 4.4 การเขยี นโปรแกรมรับค่าจากพอร์ตแบบดจิ ิทลั 1. จุดประสงค์ทวั่ ไป เพอื่ ใหส้ ามารถเขียนโปรแกรมรับคา่ จากพอร์ตแบบดิจิทลั ได้ 2. จุดประสงค์เชิงพฤติกรรม 1. บอกวธิ ีเขียนโปรแกรมรับค่าจากพอร์ตแบบดิจิทลั ได้ 2. บอกข้นั ตอนการตอ่ วงจรเพ่ือทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาที่กาหนด 3. เครื่องมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 8 ตวั 2.1 ตวั ตา้ นทาน 220 ohm 4 ตวั 2.2 LED 3mm 4 ตวั 2.3 Tack Switch 3. บอร์ด Arduino Nano 3.0 1 ตวั 4. สายเช่ือมตอ่ USB (mini USB) 1 เส้น 5. สายเชื่อมตอ่ วงจร 1 ชุด 6. คอมพวิ เตอร์ 1 เครื่อง 4. ลาดับข้นั การปฏบิ ตั งิ าน 1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้ืนฐานท่ีเกี่ยวขอ้ ง 2. ดาเนินการตอ่ วงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน

84  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน บอร์ด Arduino รุ่นท่ีใชไ้ อซีไมโครคอนโทรลเลอร์ ATMEGA328, ATMEGA168, ATMEGA8 มีพอร์ตดิจิทลั ให้สามารถเช่ือมต่อใช้งานได้ 14 ขาดว้ ยกนั โดยเริ่มจากขา D0, D1, …D13 (ขา D0, D1 สงวนไวด้ งั ท่ีไดก้ ล่าวมาแลว้ ในใบงานที่ 4.3) และมีพอร์ตแอนาลอกอีก 6 ขาคือ A0, A1, …A5 ที่สามารถ นามาใชง้ านในโหมดดิจิทลั ได้ ส่วน A6, A7 ที่มีอยใู่ นบอร์ด Arduino รุ่น Mini และ Nano จะใชง้ านได้ เฉพาะการรับสัญญาณเขา้ ท่ีเป็นแอนาลอกเท่าน้นั โหมดการทางานของพอร์ตที่ให้ทางานแบบดิจิทลั สามารถสั่งให้ทางานได้ 2 โหมดคือโหมด เอาทพ์ ุทและโหมดอินพุท ไมโครคอนโทรลเลอร์ท่ีใชใ้ น Arduino ส่วนใหญ่เป็ นตระกูล AVR มีขอ้ โดด เด่นอีกหน่ึงประการคือ มีตวั ตา้ นทานพูลอพั ที่มีค่า 20k อยภู่ ายในซ่ึงผูใ้ ชง้ านสามารถท่ีจะเลือกใชห้ รือไม่ ใชก้ ็ได้ เนื่องจากไมโครคอนโทรลเลอร์ AVR ท่ีนามาทาเป็ น Arduino สามารถขบั กระแสออกจากขา พอร์ตในโหมดดิจิทลั ไดม้ ากพอสมควรที่จะขบั LED ใหต้ ิดสวา่ งได้ ดงั น้นั การใชง้ านเพ่ือท่ีจะขบั โหลดท่ี เป็ น LED จึงสามารถต่อโดยตรงไดโ้ ดยไม่ตอ้ งใชไ้ อซีช่วยขบั กระแส ดว้ ยสาเหตุน้ีหากนามาขาพอร์ตมา ใชง้ านเป็ นอินพุทพอร์ตจึงตอ้ งเปลี่ยนโหมดไม่ให้ไอซีจ่ายกระแสออกมา ในทางปฏิบตั ิเพื่อป้องกนั การ ผดิ พลาดจากการต่อใชง้ านหรือจากการเลือกโหมดเม่ือนาขาพอร์ตไปต่อกบั สวิตช์ ผอู้ อกแบบวงจรควร ใชต้ วั ตา้ นทานค่าประมาณ 200 ohm อนุกรมกบั สวติ ชเ์ พื่อป้องกนั พอร์ตเสียหาย 6. ฟังก์ช่ัน Arduino ทใ่ี ช้งานในใบงาน 1. ฟังก์ช่ันกาหนดโหมดการทางานให้กับขาพอร์ต โดยสามารถกาหนดไดท้ ้งั ขาดิจิทลั โดยใส่ เพียงตวั เลขของขา (0, 1, 2,…13) และขาแอนาลอกที่ตอ้ งการให้ทางานในโหมดดิจิทลั แต่ การใส่ขาตอ้ งใส่ A นาหนา้ ซ่ึงใชไ้ ดเ้ ฉพาะ A0, A1,…A5 ส่วนขา A6 และ A7 ไมส่ ามารถใช้ งานในโหมดดิจิทลั ได้ รูปแบบของฟังกช์ นั่ เป็นดงั น้ี pinMode(pin, mode); pin: หมายเลขขาท่ีตอ้ งการเซตโหมด mode: INPUT, OUTPUT, INPUT_PULLUP 2. ฟังก์ช่ันส่งค่าลอจิกดิจิทลั ไปยงั ขาพอร์ต คา่ HIGH เป็นการส่งลอจิก 1 และค่า LOW เป็นการ ส่งลอจิก 0 ออกไปยงั ขาพอร์ต ฟังกช์ นั่ น้ีจะทางานไดต้ อ้ งมีการใชฟ้ ังกช์ นั่ pinMode ก่อน digitalWrite(pin, value); pin: หมายเลขขาท่ีตอ้ งการเขียนลอจิกออกพอร์ต

ใบงานท่ี 4.4 การเขียนโปรแกรมรับคา่ จากพอร์ตดิจิทลั  85 3. ฟังก์ช่ันอ่านค่าลอจิกดิจิทลั ท่ีขาพอร์ต เป็นการอ่านค่าเขา้ มาซ่ึงอาจนามาเก็บไวใ้ นตวั แปรไว้ ตรวจสอบลอจิกทีหลงั หรือจะตรวจสอบลอจิกแบบทนั ทีก็ได้ ฟังก์ชนั่ น้ีจะทางานไดต้ อ้ งมี การใชฟ้ ังกช์ น่ั pinMode ก่อน digitalRead(pin); pin: หมายเลขขาพอร์ตที่ตอ้ งการอา่ นลอจิก ตัวอย่างเช่น value=digitalRead(10); หมายถงึ อ่านคา่ ลอจิกที่ขา D10 มาเก็บไวใ้ นตวั แปร value if(digitalRead(10)= =LOW) หมายถงึ ตรวจสอบขา D10 วา่ เป็นลอจิก 0 หรือไม่ 4. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ชั่นหยุดค้าง การใช้งานสามารถกาหนดตวั เลขของเวลาท่ี ตอ้ งการหยดุ คา้ ง ตวั เลขท่ีใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาท่ีใส่ ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขท่ีหยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) 5. ฟังก์ชั่นกาหนดความเร็วในการส่ือสารทางพอร์ตอนุกรม Serial.begin(speed); speed: ตวั เลขของอตั ราเร็วในการสื่อสารผา่ นพอร์ตอนุกรม 6. ฟังก์ชั่นส่งข้อมูลออกพอร์ต เป็ นฟังก์ชน่ั ท่ีใชใ้ นการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรือ พมิ พข์ อ้ มูลออกทางพอร์ตเพ่ือแสดงผลที่จอคอมพิวเตอร์เมื่อพมิ พเ์ สร็จตวั เคอร์เซอร์จะรออยู่ ท่ีทา้ ยส่ิงที่พมิ พน์ ้นั ๆ Serial.print(val) Serial.print(val, format) 7. ฟังก์ช่ันส่งข้อมูลออกพอร์ต คลา้ ยกบั ฟังก์ชั่น Serial.print ต่างกนั ตรงที่เมื่อพิมพ์เสร็จตวั เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้นั เมื่อสั่งพิมพ์คร้ังถดั ไปขอ้ มูลที่ปรากฏจะอยูท่ ี่ บรรทดั ใหม่ แทนท่ีจะต่อทา้ ยเหมือนกบั ฟังกช์ นั่ Serial.print Serial.println(val) Serial.println(val, format)

86  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 7. วงจรทใ่ี ช้ทดลอง วงจรเพ่อื ใชท้ ดลองในใบงานสามารถทาได้ 3 แนวทางคือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีสร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูป 3. ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus กรณีที่ใชว้ งจรที่สร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป D1 VCC Peripheral circuit 1N5819 CPU circuit 1R01k 7,20 ATMEGA328 VCC SW1 R1-R3 LED1-LED3 1 RST AVCC D2 4 220 C1 D3 5 0.1uF D4 6 USB to UART (TTL Level) R2,R3 3 D5 11 1k 2 DTR VCC RXD D1(TXD) TXD D0(RXD) Internal pull up +5V GND R4-R7 SW1 3V3 220 x4 D9 15 D10 16 SW2 D11 17 SW3 X1 9 XTAL1 D12 18 SW4 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปท่ี 4.4-1 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป R12-2R04 LED1-LED4 ARDUINO VCC D2 D3 Internal pull up D4 D5 R5-R8 SW1 220 x4 D9 D10 SW2 D11 D12 SW3 GND SW4 รูปท่ี 4.4-2 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

F GH I J ใบงานท่ี 4.4 การเขียนโปรแกรมรับคา่ จากพอร์ตดิจิทลั  8720 2025 2530 3035 3540 4045 45 50 50 55 55 60 60 F GH I J D12 1 D11การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง D10 D9 รูปที่ 4.4-3 การต่อลงบอร์ดทดลอง D8 5การตอ่ วงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE ABCDE D13 3V3 REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปท่ี 4.4-4 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน 8. การเขยี นโค้ดโปรแกรมควบคุม การทดลองที่ 1 เขียนโปรแกรมการติดดบั ของ LED จานวน 2 ตวั ใชส้ วิตช์ 4 ตวั ควบคุม โดยให้ SW1 ส่งั LED1 ติด SW2 สั่ง LED1 ดบั และให้ SW3 สั่ง LED2 ติด SW4 ส่งั LED2 ดบั ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดค่าเริม่ ต้นต่าง SW1 ถูกกด จริง LED1 ตดิ เทจ็ จริง LED1 ดบั จริง LED2 ตดิ SW2 ถูกกด จริง LED2 ดบั เท็จ SW3 ถกู กด เทจ็ SW4 ถูกกด เท็จ

88  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #define LED1 2 2 #define LED2 3 3 #define SW1 9 4 #define SW2 10 5 #define SW3 11 6 #define SW4 12 7 void setup() 8{ 9 pinMode(LED1,OUTPUT);pinMode(LED2,OUTPUT); 10 pinMode(SW1,INPUT_PULLUP);pinMode(SW2,INPUT_PULLUP); 11 pinMode(SW3,INPUT_PULLUP);pinMode(SW4,INPUT_PULLUP); 12 } 13 void loop() 14 { 15 if(digitalRead(SW1)==LOW) 16 digitalWrite(LED1,HIGH); 17 else if(digitalRead(SW2)==LOW) 18 digitalWrite(LED1,LOW); 19 else if(digitalRead(SW3)==LOW) 20 digitalWrite(LED2,HIGH); 21 else if(digitalRead(SW4)==LOW) 22 digitalWrite(LED2,LOW); 23 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1-2 กาหนดช่ือ LED1, 2 ใหแ้ ทน 2, 3 (เป็นขาที่ LED ตอ่ อยกู่ บั Arduino) - บรรทดั ท่ี 3-6 กาหนดชื่อ SW1, 2, 3, 4 ใหแ้ ทน 9, 10, 11, 12 (เป็นขาท่ีสวติ ชต์ ่ออยกู่ บั Arduino) - บรรทดั ที่ 9 กาหนดโหมดใหก้ บั ขาพอร์ตที่ตอ่ กบั LED ทางานเป็นเอาตพ์ ทุ พอร์ต - บรรทดั ท่ี 10,11 กาหนดโหมดใหข้ าพอร์ตท่ีตอ่ กบั สวติ ช์ทางานเป็นอินพทุ พอร์ตที่ใชต้ วั ตา้ นทาน พลู อพั ภายในตวั ไอซีซ่ึงมีค่าประมาณ 20 กิโลโอห์ม - บรรทดั ที่ 15 ตราจสอบวา่ สวติ ชท์ ี่ต่อกบั ขาพอร์ตท่ีช่ือวา่ SW1 ถูกกดหรือไม่ (เมื่อถูกกดขาพอร์ต จะเป็นลอจิก 0) - บรรทัดท่ี 16 หากสวิตช์ SW1 ถูกกดให้ส่งลอจิก 1 ออกทางขาพอร์ตท่ีใช้ช่ือว่า LED1 เพื่อให้ LED ติดสวา่ ง - บรรทดั ท่ี 17 หากการตรวจสอบเง่ือนไขในบรรทดั ท่ี 15 ผดิ เง่ือนไขใหท้ าการตราจสอบวา่ สวิตช์ ท่ีต่อกบั ขาพอร์ตที่ช่ือวา่ SW2 ถูกกดหรือไม่ - บรรทัดท่ี 18 หากสวิตช์ SW2 ถูกกดให้ส่งลอจิก 1 ออกทางขาพอร์ตที่ใช้ช่ือว่า LED1 เพื่อให้ LED ดบั ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองแกโ้ ปรแกรมให้ LED ติดในรูปแบบอ่ืน ๆ แลว้ สังเกตผล

ใบงานท่ี 4.4 การเขียนโปรแกรมรับค่าจากพอร์ตดิจิทลั  89 การทดลองที่ 2 เขียนโปรแกรมควบคุมการติดดบั ของ LED โดยเม่ือ SW1 ถูกกดให้ LED1 ติด SW2 ถูก กดให้ LED2 ติด SW3 ถูกกดให้ LED3 ติด SW4 ถูกกดให้ LED ดบั ทุกตวั และในขณะที่กดสวิตช์ตอ้ งมี การแสดงขอ้ ความแสดงว่าสวิตช์น้ัน ๆ ถูกกดและสถานะของการติดดบั ของ LED และให้เขียนโค้ด ตรวจจบั การปล่อยคียก์ ่อนท่ีจะออกนอกลูป ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดค่าเริ่มต้นต่าง SW1 ถกู กด จริง LED1 ตดิ แสดงข้อความ SW1 ปล่อยการกด เท็จ จริง LED2 ติด แสดงข้อความ SW1 ปล่อยการกด จริง LED3 ตดิ แสดงข้อความ SW1 ปล่อยการกด SW2 ถกู กด จริง LED ดับทัง้ หมด แสดงข้อความ SW1 ปล่อยการกด เทจ็ SW3 ถูกกด เท็จ SW4 ถกู กด เทจ็ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #define LED1 2 2 #define LED2 3 3 #define LED3 4 4 #define SW1 9 5 #define SW2 10 6 #define SW3 11 7 #define SW4 12 8 void setup(){ 9 pinMode(LED1,OUTPUT);pinMode(LED2,OUTPUT); 10 pinMode(LED3,OUTPUT); 11 pinMode(SW1,INPUT_PULLUP);pinMode(SW2,INPUT_PULLUP); 12 pinMode(SW3,INPUT_PULLUP);pinMode(SW4,INPUT_PULLUP); 13 Serial.begin(9600); 14 } 15 void loop(){ 16 if(digitalRead(SW1)==LOW){ 17 digitalWrite(LED1,HIGH); 18 Serial.println(\"SW1 is pressed & LED1 ON\"); 19 while(digitalRead(SW1)==LOW); 20 } 21 else if(digitalRead(SW2)==LOW){ 22 digitalWrite(LED2,HIGH); 23 Serial.println(\"SW2 is pressed & LED2 ON\"); 24 while(digitalRead(SW2)==LOW); 25 } 26 else if(digitalRead(SW3)==LOW){ 27 digitalWrite(LED3,HIGH); 28 Serial.println(\"SW3 is pressed & LED3 ON\"); 29 while(digitalRead(SW3)==LOW); 30 } 31 else if(digitalRead(SW4)==LOW){ 32 digitalWrite(LED1,LOW); 33 digitalWrite(LED2,LOW);

90  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 34 digitalWrite(LED3,LOW); 35 Serial.println(\"SW4 is pressed & All LED is OFF\"); 36 while(digitalRead(SW4)==LOW); 37 } 38 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1-3 กาหนดชื่อ LED1, 2, 3 ใหแ้ ทน 2, 3, 4 (เป็นขาท่ี LED ตอ่ อยกู่ บั Arduino) - บรรทดั ท่ี 4-7 กาหนดช่ือ SW1, 2, 3, 4 ใหแ้ ทน 9, 10, 11, 12 (เป็นขาท่ีสวติ ชต์ อ่ อยกู่ บั Arduino) - บรรทดั ที่ 9,10 กาหนดโหมดใหก้ บั ขาพอร์ตที่ต่อกบั LED ทางานเป็นเอาตพ์ ุทพอร์ต - บรรทัดท่ี 11,12 กาหนดโหมดให้กบั ขาพอร์ตท่ีต่อกบั สวิตช์ทางานเป็ นอินพุทพอร์ตท่ีใช้ตวั ตา้ นทานพลู อพั ภายในตวั ไอซีซ่ึงมีค่าประมาณ 20k - บรรทดั ท่ี 13 กาหนดอตั ราเร็วในการส่ือสารขอ้ มูลของพอร์ตอนุกรม - บรรทดั ท่ี 16 ตราจสอบวา่ สวติ ชท์ ี่ต่อกบั ขาพอร์ตท่ีชื่อวา่ SW1 ถูกกดหรือไม่ (เม่ือถูกกดขาพอร์ต จะเป็นลอจิก 0) - บรรทัดท่ี 17 หากสวิตช์ SW1 ถูกกดให้ส่งลอจิก 1 ออกทางขาพอร์ตที่ใช้ชื่อว่า LED1 เพ่ือให้ LED ติดสวา่ ง - บรรทดั ท่ี 18 ส่งขอ้ ความไปแสดงผลที่จอคอมพวิ เตอร์ผา่ นพอร์ตอนุกรมโดยแสดงคาวา่ “SW1 is pressed & LED1 ON” - บรรทดั ที่ 19 วนตรวจสอบวา่ ยงั ถูกกดอยหู่ รือไม่หากยงั ถูกกดอยใู่ หว้ นตรวจสอบจนกวา่ จะมีการ ปล่อยสวติ ช์ - บรรทดั ท่ี 21 หากการตรวจสอบเงื่อนไขในบรรทดั ที่ 16 ผดิ เงื่อนไขใหท้ าการตราจสอบวา่ สวิตช์ ที่ต่อกับขาพอร์ตที่ชื่อว่า SW2 ถูกกดหรือไม่ ต่อจากน้ันกระบวนการเป็ นเช่นเดียวกับการ ตรวจสอบสวติ ช์ SW1 ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองแกโ้ ปรแกรมให้ LED ติดในรูปแบบอื่น ๆ แลว้ สงั เกตผล 9. สรุปผลการปฏบิ ัตงิ าน

ใบงานที่ 4.4 การเขียนโปรแกรมรับคา่ จากพอร์ตดิจิทลั  91 10. งานทม่ี อบหมาย 1. ดดั แปลงการทดลองที่ 2 ใหใ้ ชว้ ธิ ีการตรวจการปล่อยสวติ ชค์ ร้ังเดียวดงั โฟลวช์ าร์ต START กาหนดคา่ เริ่มต้นต่าง SW1 ถูกกด จริง LED1 ติด แสดงข้อความ เท็จ จริง LED2 ติด แสดงข้อความ SW2 ถกู กด เท็จ LED3 ติด แสดงข้อความ SW3 ถกู กด จริง เทจ็ จริง LED ดบั ทงั้ หมด แสดงข้อความ SW4 ถกู กด เทจ็ เทจ็ ปล่อย SW แล้ว จริง 2. เขียนโปรแกรมควบคุมการติดดบั ของ LED พร้อมแสดงขอ้ ความสถานะของสวิตช์และ LED โดยเง่ือนไขใหส้ วติ ช์หน่ึงตวั ควบคุมการติดดบั ของ LED 1 ตวั ตวั อยา่ งเช่นสวติ ช์ SW1 กดคร้ังท่ี 1 ให้ LED1 ติดเม่ือกดคร้ังที่ 2 ให้ LED1 ดบั สลบั กนั ไปต่อเน่ืองสวิตช์ตวั อ่ืน ๆ ก็ ทางานเช่นกนั โดยใชส้ วติ ช์ 4 ตวั ควบคุมการติดดบั ของ LED จานวน 4 ตวั ใชว้ งจรดงั รูป ARDUINO R12-2R04 LED1-LED4 D2 D3 D4 D5 VCC Internal pull up R5-R8 SW1 220 x4 D9 SW2 D10 SW3 D11 SW4 D12 GND รูปที่ 4.4-5 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง

92  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 3. เขียนโปรแกรมไฟวง่ิ จาก LED จานวน 4 ตวั โดยกาหนดรูปแบบของไฟวงิ่ จากสวติ ช์จานวน 4 ใชว้ งจรในการทดลองเช่นเดียวกบั ขอ้ 2 สาหรับรูปแบบของไฟว่ิงสามารถกาหนดข้ึนมา เองได้ ตวั อยา่ งของรูปแบบไฟวง่ิ LED 4 ตวั ดงั น้ี รูปแบบ ลกั ษณะการวงิ่ 1 2 3 4

ใบงานที่ 4.5 การเขียนโปรแกรมอา่ นคา่ จากพอร์ตแอนาลอกและการใช้ PWM  93 ใบงานที่ 4.5 การเขยี นโปรแกรมอ่านค่าจากพอร์ตแอนาลอกและการใช้ PWM 1. จุดประสงค์ทวั่ ไป เพ่อื ใหส้ ามารถเขียนโปรแกรมอ่านคา่ จากพอร์ตแอนาลอกและการใช้ PWMได้ 2. จุดประสงค์เชิงพฤติกรรม 1. บอกวธิ ีเขียนโปรแกรมอา่ นคา่ จากพอร์ตแอนาลอกและการใช้ PWM ได้ 2. บอกข้นั ตอนการต่อวงจรเพือ่ ทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาที่กาหนด 3. เครื่องมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 4 ตวั 2.1 Potentiometer 10k 1 ตวั 2.3 LED 3mm 1 ตวั 1 เส้น 2.2 ตวั ตา้ นทาน 220 ohm 4 ตวั 1 ชุด 1 เคร่ือง 3. บอร์ด Arduino Nano 3.0 4. สายเชื่อมต่อ USB (Mini USB) 5. สายเช่ือมต่อวงจร 6. คอมพวิ เตอร์ 4. ลาดับข้นั การปฏบิ ตั ิงาน 1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานท่ีเกี่ยวขอ้ ง 2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรท่ีกาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน

94  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน บอร์ด Arduino รุ่นท่ีใชไ้ อซีไมโครคอนโทรลเลอร์ ATMEGA328, ATMEGA168, ATMEGA8 มีพอร์ตท่ีสามารถรับสัญญาณเขา้ ที่เป็ นสัญญาณแอนาลอกได้ 6 ช่อง ( 6 ขา) A0, A1, …A5 สาหรับบอร์ด ที่ใชไ้ อซีท่ีมีตวั ถงั DIP (ตวั ถงั ตีนตะขาบ) เช่นบอร์ดรุ่น UNO และสามารถรับสัญญาณได้ 8 ช่องสาหรับ บอร์ดที่ใช้ชิพไอซีท่ีมีตวั ถงั แบบ SMD (อุปกรณ์ผิวหนา้ ) เช่น บอร์ดรุ่น Mini และ Nano ส่วนบอร์ดรุ่น Mega มีช่องสญั ญาณที่สามารถสัญญาณแอนาลอกได้ 16 ช่อง ภายในตวั ซีพียมู ีโมดูลแปลงสัญญาณแอนา ลอกเป็ นดิจิทลั ขนาด 10 บิต ดงั น้นั เม่ืออ่านค่าเขา้ มาซีพียูจะแปลงค่าได้เป็ นค่าต้งั แต่ 0 จนถึง 1023 ท่ี ค่าแรงดนั ของสัญญาณแอนาลอกท่ีรับเขา้ มาอยใู่ นช่วง 0 ถึง 5 โวลต์ รูปที่ 4.5-1 ตาแหน่งขาและหนา้ ท่ีของซีพยี ู Arduino ชนิดตวั ถงั แบบ DIP รูปท่ี 4.5-2 ตาแหน่งขาและหนา้ ที่ของซีพียู Arduino ชนิดตวั ถงั แบบ SMD

ใบงานที่ 4.5 การเขียนโปรแกรมอ่านคา่ จากพอร์ตแอนาลอกและการใช้ PWM  95 ขาพอร์ตแอนาลอกจะมีบางส่วนที่สามารถนาไปใช้งานแบบดิจิทลั ได้ นั่นก็หมายความว่า สามารถใชค้ าสั่ง digitalWrite( ), digitalRead( ) ไดเ้ หมือนกบั ขาดิจิทลั ปกติ ขาพอร์ตแอนาลอกที่นามาใช้ งานในโหมดดิจิทลั ไดม้ ีเพียง 6 ขาคือ A0, A1, …A5 ส่วน A6 และ A7 ของบอร์ดรุ่น Mini และ Nano ใช้ รับสญั ญาณเขา้ ที่เป็ นสัญญาณแอนาลอกเพยี งอยา่ งเดียว ดงั น้นั เม่ือใชง้ านในโหมดดิจิทลั การใชง้ านจะใช้ คาส่งั เดียวกนั กบั คาส่งั ท่ีควบคุมขาดิจิทลั เพียงแตก่ ารระบุขาใชง้ านจะตอ้ งใส่ช่องขาสัญญาณวา่ A นาหนา้ เช่น pinMode(A0,OUTPUT); หมายถึงใหข้ า A0 ทางานในโหมดดิจิทลั ที่เป็นเอาทพ์ ตุ พอร์ต digitalWrite(A0,HIGH); หมายถึงใหเ้ ขียนลอจิก 1 ไปที่ขาพอร์ต A0 Arduino มีขาพอร์ตท่ีสามารถส่งสัญญาณออกแบบผสมสัญญาณทางความกวา้ งของพลั ซ์ได้ หรือ ท่ีเรียกวา่ PWM โดยบอร์ดที่ใชซ้ ีพียูเบอร์ Atmega168, Atmega328 (บอร์ดรุ่น UNO, Mini, Nano) มีขาท่ี สามารถส่งสัญญาณออกได้ 6 ขาคือ D3, D5, D6, D9, D10, และ D11 ความถี่ของสัญญาณ PWM จะมีค่า โดยประมาณที่ 490 Hz ส่วนค่าดิวติ้ไซเคิลสามารถใส่ค่าไดต้ ้งั แต่ 0-255 ใชส้ าหรับกาหนดค่าดิวต้ีไซเคิล ระหวา่ ง 0-100% ดงั รูป Pulse Width Modulation 0% duty cycle -> analogWrite(0); 50% duty cycle -> analogWrite(127); 5V 5V 0V 0V 20% duty cycle -> analogWrite(51); 75% duty cycle -> analogWrite(191); 5V 5V 0V 0V 30% duty cycle -> analogWrite(77); 100% duty cycle -> analogWrite(255); 5V 5V 0V 0V รูปที่ 4.5-3 รูปคล่ืน PWM จากฟังกช์ นั่ analogWrite ฟังกช์ น่ั ที่ส่งสญั ญาณออกยงั ขาเหล่าน้ีใชค้ าสง่ั analogWrite(3, 100); หมายถึงส่งสัญญาณ PWM ออกทางขา D3 โดยให้สัญญาณที่ ส่งออกน้นั ขนาดดิวต้ีไซเคิลท่ี 100 6. ฟังก์ช่ัน Arduino ทใี่ ช้งานในใบงาน 1. ฟังก์ช่ันกาหนดโหมดการทางานให้กบั ขาพอร์ต สามารถกาหนดไดท้ ้งั ขาดิจิทลั โดยใส่เพียง ตวั เลขของขา (0, 1, 2,…13) และขาแอนาลอกท่ีตอ้ งการใหท้ างานในโหมดดิจิทลั แต่การใส่ ขาตอ้ งใส่ A นาหนา้ ซ่ึงใชไ้ ดเ้ ฉพาะ A0, A1,…A5 ส่วนขา A6 และ A7 ไม่สามารถใชง้ านใน โหมดดิจิทลั ได้ รูปแบบของฟังกช์ นั่ เป็นดงั น้ี

96  เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] pinMode(pin, mode) pin: หมายเลขขาที่ตอ้ งการเซตโหมด mode: INPUT, OUTPUT, INPUT_PULLUP 2. ฟังก์ชั่นส่งค่าลอจิกดิจิทัลไปยังขาพอร์ต โดยค่า HIGH เป็ นการส่งลอจิก 1 และค่า LOW เป็ นการส่งลอจิก 0 ออกไปยงั ขาพอร์ต ซ่ึงฟังก์ชัน่ น้ีจะทางานไดจ้ ะตอ้ งมีการใช้ฟังก์ช่ัน pinMode ก่อน digitalWrite(pin, value) pin: หมายเลขขาที่ตอ้ งการเขียนลอจิกออกพอร์ต 3. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตวั เลขของเวลาท่ี ตอ้ งการหยุดคา้ งโดยตวั เลขท่ีใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวินาที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms) ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) 4. ฟังก์ช่ันกาหนดความเร็วในการส่ือสารทางพอร์ตอนุกรม Serial.begin(speed) speed: ตวั เลขของอตั ราเร็วในการสื่อสารผา่ นพอร์ตอนุกรม 5. ฟังก์ชั่นส่งข้อมูลออกพอร์ต เป็ นฟังก์ช่นั ที่ใชใ้ นการส่งขอ้ มูลออกทางพอร์ตอนุกรมหรือ พมิ พข์ อ้ มูลออกทางพอร์ตเพือ่ แสดงผลท่ีจอคอมพิวเตอร์เม่ือพมิ พเ์ สร็จตวั เคอร์เซอร์จะรออยู่ ท่ีทา้ ยส่ิงที่พิมพน์ ้นั ๆ Serial.print(val) Serial.print(val, format) 6. ฟังก์ช่ันส่งข้อมูลออกพอร์ต คลา้ ยกบั ฟังก์ชนั่ Serial.print ต่างกนั ตรงที่เม่ือพิมพ์เสร็จตวั เคอร์เซอร์จะข้ึนมารอยงั บรรทดั ใหม่ ดงั น้นั เมื่อสั่งพิมพ์คร้ังถดั ไปขอ้ มูลที่ปรากฏจะอยู่ที่ บรรทดั ใหม่ แทนท่ีจะตอ่ ทา้ ยเหมือนกบั ฟังกช์ นั่ Serial.print Serial.println(val) Serial.println(val, format)


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook