54
Arduino-Based Embedded Data Logger using LabVIEW 2015 Amornthep Phunsin Fb.com/LabviewEmbedded4Arduino 5/22/2015

Arduino-Based Embedded Data Logger using LabVIEW

  • Upload
    others

  • View
    33

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Arduino-Based Embedded Data Logger using LabVIEW

Arduino-Based Embedded Data Logger using LabVIEW

2015

Amornthep Phunsin Fb.com/LabviewEmbedded4Arduino

5/22/2015

Page 2: Arduino-Based Embedded Data Logger using LabVIEW

Arduino-Based Embedded Data Logger using LabVIEWTM

อมรเทพ ผนสน

(Version 1.0.2, May 2015)

บทความนจะน าเสนอการพฒนาอปกรณ Data Logger โดยใชไมโครคอนโทรลเลอร Arduino

รวมกบการเขยนโปรแกรมดวยภาษา LabVIEW สามารถบนทกสญญาณจากเซนเซอรภายนอกไดหลาย

ชนด อาท เซนเซอรอณหภมทางอตสาหกรรม Thermocouple สามารถบนทกเวลา และจดเกบขอมลลง

SD Card เพอน ามาวเคราะหขอมลทางคอมพวเตอร

Page 3: Arduino-Based Embedded Data Logger using LabVIEW

สารบญ

บทน า ................................................................................................................................................ 4

ท าความรจก Arduino Compatible Compiler for LabVIEW ................................................................ 7

ขอดของการเขยนโปรแกรม LabVIEW รวมกบบอรด Arduino ............................................................... 8

ฮารดแวร Arduino ทรองรบการคอมโพลและดาวนโหลดโปรแกรม ......................................................... 9

การตดตง Arduino compatible compiler for LabVIEW .................................................................... 10

การจดการพนทหนวยความจ าบนฮารดแวร Arduino .......................................................................... 13

ใบงานท 1. การใชงานพอรต Digital I/O แสดงผลทาง LED และ Buzzer ............................................. 17

ใบงานท 2. การใชงานพอรต Analog Port อานคาอณหภมจาก LM35 ................................................ 18

ใบงานท 3.การใชงานรวมกบ LCD 16x2 ผานพอรต I2C Interface ..................................................... 20

ใบงานท 4.ขนตอนการ Compile Code และ Download ลงบอรด Arduino ......................................... 23

ใบงานท 5.การใชงานฟงกชน Debug Tool และตรวจสอบทรพยากร (RAM) ........................................ 25

ใบงานท 6. การใชงานรวมกบ Real-Time Clock (RTC) ดวย I2C Interface ........................................ 27

ใบงานท 7. การเขยนขอมล RTC ลง SD Card (SPI Interface) ........................................................... 31

ใบงานท 8. เขยนโปรแกรมอานคาอณหภมจาก Thermocouple จาก MAX6675 ผานพอรต SPI ........... 35

ใบงานท 9. การสราง Thermocouple Data Logger ฉบบสมบรณ ...................................................... 38

บทสรป ............................................................................................................................................ 44

บทสงทาย ........................................................................................................................................ 45

Page 4: Arduino-Based Embedded Data Logger using LabVIEW

บทน า

อนดบแรกตองยอมรบวากระแสนยมในการพฒนาไมโครคอนโทรลเลอร Arduino ทงเมองนอกและ

เมองไทยมาแรงแบบฉดไมอยจรงๆ ไมเฉพาะกบนกพฒนาในวงการอเลกทรอนกสเทานน แตยงแพรหลาย

ในวงกวางไปยงนกเรยน นกศกษา และผ ทมไมมพนฐานการเขยนโปรแกรม ทกคนหนมาสนใจคดประดษฐ

โครงงานเปนของตวเอง แตเดมเรามกไดยนนกพฒนาเรยกกลมของตนเองวา “DIY” แตปจจบนเรมมการใช

ค าวา “Maker” เรยกแทนตวเองกนมากขน ซงเปนแนวทางการพฒนาโครงงานทผสมผสานทงซอรฟแวร

และฮารดแวรเขาดวยกน

เนองดวยฮารดแวรในแพลตฟอรม Arduino มราคาถก และซอรฟแวรทใชพฒนากใชฟร จงท าให

ทกคนเขาถงเครองมอในการพฒนาอยางเทาเทยมกน ทกคนมงเนนพฒนาแอพพลเคชนใหมประสทธภาพ

มากขน โดยมตองกงวลเรองตนทนในการพฒนา จงท าใหตลอดระยะเวลากวา 10 ป ตงแตโปรเจค

Arduino ถอก าเนดขนเมอป 2005 มการพฒนาตอยอดแบบกาวกระโดด โดยมองคกรใหญๆทหนมา

สนบสนนอยางมากมาย จนถอไดวาเปนการเรมตนปฎวตการพฒนาไมโครคอนโทรลเลอรในศตวรรษท 21

เลยทเดยว

ดวยความท Arduino เปนแพลตฟอรมโอเพนซอรสทงระบบ ท าใหมผผลตจ านวนมาก เพมเตม

ฟงกชนตางๆของตนเองลงบนฮารดแวร และผลตบอรด Arduino ของตนเองออกมาจ าหนาย โดยเรยกวา

“Arduino-Compatible” หรอ “Clone” จงยงท าใหการพฒนาตอยอดดานฮารดแวรเตบโตอยางรวดเรว

อกฝากฝงหนงคอซอรฟแวรทใชพฒนา ซงแตเดมจะมเพยง Arduino IDE ทรองรบภาษา C/C++

ซงเปน Text Programming เพยงอยางเดยว กเรมมหลายๆบรษทพฒนา IDE เขยนโปรแกรมดวยภาษา

กราฟฟก Graphical Programming อยางแพรหลาย อาท Ardublock, VISUINO และ LabVIEW ซงขอด

ของภาษาแบบกราฟฟกคอ เรยนรไดรวดเรว ท าความเขาใจโคดไดงาย ท าใหผ เรมตนศกษา Arduino เปน

เรองทงายขนไปอก

Page 5: Arduino-Based Embedded Data Logger using LabVIEW

ภาษาโปรแกรมแบบกราฟฟกส าหรบ Arduino

LabVIEW คอ ภาษาโปรแกรมทเขยนในรปแบบกราฟฟก (Graphical Programming Language)

ซงมความแตกตางจากภาษาโปรแกรมทวไปทเขยนดวยขอความ (Text Programming Language) โดย

จดเรมตนของ LabVIEW ถกสรางขนมาเพอตอบโจทยพฒนาแอพพลเคชนเพอควบคมอปกรณเครองมอวด

และประมวลผลในในงานวศกรรม โดยมไอเดยวาใหโปรแกรม LabVIEW เปรยบไดกบเครองมอวดเสมอน

บนคอมพวเตอร (Virtual Instruments) โดยผใชงานสามารถควบคมการท างานเครองมอวดไดจาก

คอมพวเตอร จากจดเดนทเปนภาษากราฟฟกในยคแรกๆ จงมการพฒนาอยางตอเนอง จนท าใหมการใช

งานแพรหลายในหลายๆอตสาหกรรม จนไปถงการพฒนาในระบบสมองกลฝงตวในฮารดแวรขนาดเลก

อาท Arduino ซงเราจะเจาะลกวธการใชงานพรอมตวอยางแอพพลเคชน Data Logger ในงาน

อตสาหกรรมเพอใชงานจรงในบทความน

ในบทความนผ เขยนใชซอรฟแวร LabVIEW เปนซอรฟแวรหลกรวมกบ Toolkit ของบรษท

Aledyne-TSXperts ชอวา “Arduino™ Compatible Compiler for LabVIEW” (ชอยอคอ ACC4LV) ซง

เปนซอรฟแวรยอยทท าหนาทแปลงโคด LabVIEW ใหเปนภาษาระดบลางทสามารถโปรแกรมลงบน

ฮารดแวร Arduino ไดโดยตรง ซงโปรแกรมเมอรไมตองมความรดานภาษา C/C++ เลยแมแตนอย ถอไดวา

เปนการปฎวตวงการนกพฒนา LabVIEW ในงานระบบสมองกลฝงตวขนาดเลก ทท าใหนกพฒนาเรยนร

LabVIEW เพยงภาษาเดยวกสามารถพฒนาแอพพลเคชนในงานระบบ Embedded-Based และ PC-

Based ไดพรอมๆกน

Page 6: Arduino-Based Embedded Data Logger using LabVIEW

หนาตางโปรแกรม “Arduino™ Compatible Compiler for LabVIEW”

รายการฮารดแวร และอปกรณทใชในบทความน ประกอบไปดวย

บอรด Arduino-Compatible Uno R3 ไมโครคอนโทรลเลอร

บอรด Data Logger Shield ประกอบดวย SD Card และ Real-Time Clock (RTC)

บอร LCD Display 16x2 เชอมตอแบบ I2C

บอรด MAX6675 Thermocouple Type-K Module

รายการซอรฟแวรทใชพฒนาโปรแกรมในบทความน ประกอบไปดวย

LabVIEW เวอรชน 2014

NI-VISA Driver เวอรชน 14.0.1

Arduino™ Compatible Compiler for LabVIEW เวอรชน 1.0.0.15

Arduino IDE เวอรชน 1.6.4

Page 7: Arduino-Based Embedded Data Logger using LabVIEW

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

http://support.qwavesys.com หรอ FB: “LabVIEW Embedded for Arduino” เปนชมชนนกพฒนา

LabVIEW รวมกบฮารดแวรแพลตฟอรม Arduino ททางผ เขยนไดสรางขนมาเพอรองรบนกพฒนา

LabVIEW ในเมองไทยไดแลกเปลยนความรกนครบ

ท าความรจก Arduino Compatible Compiler for LabVIEW

Arduino Compatible Compiler for LabVIEW เปน Toolkit ทตดตงในโปรแกรม LabVIEW โดยมฟงกชนพนฐานของ LabVIEW และฟงกชนพเศษ มากกวา 100+ ฟงกชนทเรยกใชงานได และสามารถคอมไพลโคด LabVIEW และโปรแกรมลงฮารดแวร Arduino รนทซพพอรตไดโดยตรง ขนตอนการเขยนโปรแกรมท าไดโดยงาย และใชงานไดจากหนาตางหลกของ LabVIEW มเพยง 3 ขนตอนดงตอไปน

ขนตอนการเขยนโปรแกรมดวย Arduino Compatible Compiler for LabVIEW

โดยแอพพลเคชนทพฒนาดวย “Arduino compatible compiler for LabVIEW” จะท างานบนฮารดแวร Arduino แบบ Standalone เหมอนกบการพฒนาแบบทวไป ทเขยนโคดดวยภาษา C/C+ ผานทาง Arduino IDE ดงนนการเขยน LabVIEW ในวธนจะเหมาะกบงานในระบบ Embedded System เพราะพฒนาดวยภาษาทเรยนรไดงาย มฟงกชนการประมวลผลมากมายซงเปนจดเดนของ LabVIEW อยแลว จงเหมาะกบนกพฒนามอใหม ทตองการเรยนรการเขยนโปรแกรมดวย LabVIEW รวมกบฮารดแวร

Page 8: Arduino-Based Embedded Data Logger using LabVIEW

ราคาไมแพงนก ส าหรบผ ทมพนฐาน LabVIEW มาบางแลวกจะท าใหพฒนาแอพพลเคชนในงาน Embedded System ไดรวดเรวขน

ถายอนไปหลายปกอน บรษท National Instruments ซงเปนบรษทแมของโปรแกรม LabVIEW ก

เคยพฒนา Toolkit ทชอวา “NI LabVIEW Embedded Module for ARM Microcontrollers” เวอรชนสดทายคอ 2012 ออกมาจ าหนาย แตกไมไดรบความนยมใชงานแพรหลายนก เพราะตดปญหาทนกพฒนาตองจายคา License Software ซ าซอน อาท LabVIEW , RealView MDK Keil uVision และตองมฮารดแวร Keil ULINK2 USB-JTAG adaptor เพอท าการโปรแกรม ประกอบกบมขอจ ากดเรองบอรด Microcontroller ทรองรบมจ านวนนอย และราคาสง จงไมเหมาะกบพฒนามอใหม นกเรยน นกศกษาทตองการศกษาเรยนร

ขอดของการเขยนโปรแกรม LabVIEW รวมกบบอรด Arduino

ภาษา LabVIEW เรยนรไดงาย ท าความเขาใจไดรวดเรว ท าใหลดเวลา และตนทนในการพฒนาได

ดวยความทเปนภาษาแบบกราฟฟก สามารถปรบแตง อพเดจโปรแกรมไดงาย ท าใหลดตนทนการ Maintenance Code ในระยะยาวได

ตนทนฮารดแวรต า เพราะสามารถใชงานรวมกบบอรด Arduino และรองรบ Arduino™ Shields ทกประเภท

สามารถพฒนาฮารดแวร Arduino-Compatible ของตนเองทรองรบ LabVIEW ได

มฟงกชน LabVIEW API และฟงกชนยอย ตางๆ ใหเรยกใชงานไดทนทมากวา 100+ VIs พรอมตวอยางทสามารถน าไปงานไดทนท

ม LabVIEW ไลบารทตดตอกบฮารดแวร Arduino โดยตรง เชน Digital I/O, PWM, Analog I/O, SPI,I2C,SD Card และอนๆ

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

ตนทนราคาซอรฟแวร LabVIEW และ Arduino compatible compiler for LabVIEW มราคาต ามาก ประมาณ 3 พนบาท โดยเฉพาะเวอรชน Home Edition

Page 9: Arduino-Based Embedded Data Logger using LabVIEW

ฮารดแวร Arduino ทรองรบการคอมโพลและดาวนโหลดโปรแกรม

ในเวอรชนแรกๆของคอมไพเลอรรองรบฮารดแวรตางๆ ตามรายการดงตอไปน แตเนองจากวา

บอรดรนตางๆของ Arduino สวนใหญใชชฟ AVR รนเดยวกน จงท าใหนกพฒนาสามารถทดลองคอมไพล

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

ดานลาง ซงในอนาคตจะตองมการรองรบฮารดแวรเพมเตมขนเรอยๆอยางแนนอน

Arduino™ Uno

Arduino™ Mega

Arduino™ Due

Arduino™ Nano

Arduino™ Yun

Arduino™ Leonard

บอรด Arduino เวอรชนตางๆ ทรองรบโดย Arduino compatible compiler for LabVIEW

Page 10: Arduino-Based Embedded Data Logger using LabVIEW

การตดตง Arduino compatible compiler for LabVIEW

รายการซอรฟแวรและไดรเวอรเวอรชนตางๆทจ าเปนตองใชควบคกบ Arduino compatible compiler for LabVIEW มดงตอไปน

1. LabVIEW 2014 หรอสงกวา 2. NI-VISA Driver เวอรชนลาสด 3. Arduino™ IDE version 1.5.7 หรอสงกวา 4. Windows ทใชในการพฒนารองรบ Windows 7 ขนไป ไมรองรบ Windows XP

โดยเมอลงโปรแกรม LabVIEW เรยบรอยแลว ใหเปดโปรแกรมยอยทชอวา “VI Package Manager”

ขนมาเพอคนหา Toolkit ทชอวา “Arduino compatible compiler for LabVIEW” โดยผใชงานสามารถทดลองใชฟร 7 วน โดยม 2 เวอรชนคอ Home Edition ส าหรบการศกษา และ Standard Edition ส าหรบการใชงานเชงพาณชย แสดงดงรปดานลาง

การตดตงโปรแกรม Arduino compatible compiler for LabVIEW

เมอตดตงเปนทเรยบรอย สามารถเรยกใชงานไดจาก “Tools>Arduino compatible compiler for LabVIEW” แสดงดงรป

Page 11: Arduino-Based Embedded Data Logger using LabVIEW

การเรยกใชงาน Arduino compatible compiler for LabVIEW

เมอเปดโปรแกรมขนมาเราสามารถเลอกบอรด Arduino ทตองการใชงานไดจาก “Tools>Board”

จากรปดานลางผ เขยนทดลองเลอก Arduino Uno เชอมตอทพอรต COM1

การเลอกบอรด Arduino ทตองการใชงาน

เมอเปด Block Diagram ใหคลกขวา จากนนเลอก “Addons > Arduino compatible compiler

for LabVIEW” กจะพบฟงกชนตางๆมากมาย ทสามารถเขยนและโปรแกรมลงบอรด Arduino แสดงดงรป

Page 12: Arduino-Based Embedded Data Logger using LabVIEW

ฟงกชนตางๆของ Arduino compatible compiler for LabVIEW

เราลองมาดตวอยางของโปรแกรม LabVIEW กนครบ ในกรณนเปนโปรแกรมไฟกระพรบท Digital

Output Port 13 ทกๆ 100 ms ซงจะเหนไดวา ลกษณะโคดโปรแกรม LabVIEW กสามารถอานเขาใจได

ทนท ถงแมวาผอานจะไมเคยมพนฐาน LabVIEW มากอน แสดงดงรปดานลางครบ

ตวอยางโปรแกรมไฟกระพรบท Digital Out Port 13

Page 13: Arduino-Based Embedded Data Logger using LabVIEW

การจดการพนทหนวยความจ าบนฮารดแวร Arduino

เนองดวยการเขยนโปรแกรม LabVIEW บน PC โดยทวไป นกพฒนาแทบจะไมตองค านงถงการ

จดการ Memory Allocation เลยแมแตนอย เพราะวา LabVIEW มความฉลาดและท าหนาทจดสรร

ต าแหนงพนทในหนวยความจ าบนฮารดแวรใหทงหมด ยงถาใชงาน PC Based ทมประสทธภาพสงอยแลว

ยงไมคอยเจอปญหาเกยวกบ Memory มากนก แตถาเปนภาษา Text Programming ทวไปเชน ภาษา

C/C++ สวนใหญแลวโปรแกรมเมอรตองระบต าแหนงการอางอง Address ของทกตวแปรทกตววาอยใน

ต าแหนงใดของ Memory เรยกวาตอง Memory Allocation เองทงหมด

จงท าใหการพฒนาโปรแกรม LabVIEW แบบ PC Based และ Embedded Based นนแตกตาง

เปนอยางมาก เพราะมขอจ ากดดานประสทธภาพของฮารดแวร ยงถาเปน Embedded Target บน

แพลตฟอรม Arduino แลว ยงท าใหการจดการหนวยความจ าบนฮารดแวร Memory Allocation เปนเรอง

ส าคญทตองค านงถงเปนอนดบตนๆ

ลองนกภาพดสครบ ปกตเขยน LabVIEW บน PC ทม CPU Intel i7 4GHz รนบน Windows

32/64-bit เปรยบเทยบกบการเขยนโปรแกรมบน Arduino Embedded Target ทม CPU AVR 8-bit

16MHz ไมม OS บนฮารดแวร เหนไหมครบวาตางกนราวฟากบเหว ดงนนการพฒนาโดยใชภาษา

LabVIEW ซงเปน Graphical System Design บน Arduino เรอง Memory Management &Memory

Optimization เปนเรองทนกพฒนาจ าเปนตองรและเขาใจครบ

Page 14: Arduino-Based Embedded Data Logger using LabVIEW

การจดการหนวยความจ าบน Arduino แพลตฟอรม

หนวยความจ าบน Microcontroller Arduino แบงออกเปน 4 สวนดงน

1. พนทเกบโคดของโปรแกรม Code Area ซงขนาดของหนวยความจ าทตองใชขนอยกบ ความ

ซบซอนของโปรแกรมทเขยน โดยจะเกบอยในหนวยความจ าถาวรแบบ Flash Memory ซงสามารถ

ลบและโปรแกรมซ าๆได ยกตวอยางบอรด Arduino Uno ม Flash Memory จ านวน 32 KB (*ม

ขนาดใหญกวาหนวยความจ าแบบ RAM หลายเทาตว)

2. พนทหนวยความจ าแบบ Global Area อยใน RAM จะเกบตวแปรทประกาศแบบ Global ซงมการ

เรยกใชงานซ าๆได ประกาศตวแปรครงเดยว สามารถเรยกใชงานไดทกสวนของโปรแกรม โดยทไม

ตองจบจองพนทในหนวยความจ าใหม ท าใหขนาดของพนทใน Global Area นนไมเพมขนขณะ

Rum-time แตจะเพมตามจ านวนของตวแปรทประกาศเทานน โดยเราสามารถรไดอยางแนชดจาก

ผล Compiled Code วาจะตองใชพนทใน Global Area เปนจ านวนเทาใด ดงแสดงในรปทถดไป

Page 15: Arduino-Based Embedded Data Logger using LabVIEW

3. พนทหนวยความจ าแบบ Stack อยใน RAM เปนพนทในหนวยความจ าทซงเกบตวแปรชนด Local

Variable ทประกาศใชงานในโปรแกรมทงหมด และเปนหนวยความจ าทใชตอน Calling Sub-

Function หรอ SubVIs ทงหมดของโปรแกรม โดยในขณะทเรยกใชงานกจะมขนาดเพมขน (*แตไม

เกนกวาพนททจบจองไว) หลงจากใชงานกจะคนคา (Released) หนวยความจ ากลบไป เพอ

ประหยดพนทในหนวยความจ า โดยทเราสามารถขนาดของ Stack ไดหลงจากการ Compiled

Code เพราะตว Complier จะทราบวาในโปรแกรมของเรานนม Local Variable หรอ SubVIs เปน

จ านวนเทาใด จากนนกค านวณพนททใชงานเพอจ าจบจองไวใน RAM แสดงดงรปถดไป

4. พนทหนวยความจ าแบบ Heap อยใน RAM เปนพนทหนวยความจ าทเกบตวแปรแบบ Array และ

Sting ซงตองใชพนทมาก โดย Heap เปนพนททไมสามารถทราบไดแนชดวามขนาดเทาใด

เนองจากเปน Rum-time Memory จดสรรแบบ Dynamic ซงจะสรางพนท และคนคากลบเมอ

สนสดการใชงาน พนท Heap นท าใหโปรแกรมเมอรปวดหวกนมานกตอนก โดยถาเขยนโปรแกรม

ไมดจะท าใหพนทหนวยความจ าใน Heap มจ านวนมากขนเรอยๆ จนกอใหเกดอาการ Crash หรอ

Hang ในระหวางท างานโดยทไมทราบสาเหต ทส าคญ Debug หาตนตอของปญหาไดยากมาก

ตวอยางผลการคอมไฟล VI เพอโปรแกรมลงบน Arduino

ปกตนกพฒนาไมคอยจะมปญหากบหนวยความจ าแบบ Flash มากนก เพราะเปนพนทขนาดใหญ

สามารถเขยนโคดไดมากตามทตองการ เนองดวยขอจ ากดตามสถาปตยกรรม Microcontroller AVR เราจง

Page 16: Arduino-Based Embedded Data Logger using LabVIEW

มกพบปญหาเกยวกบหนวยความจ าแบบ RAM อยบอยครง ซงเปนพนทจ ากด ระดบไมก KB เทานน แตถา

เปนบอรด Arduino Due ซงเปน ARM Cortex-M3 จะมพนท RAM สงมาก เหมาะกบการใชงานในระดบ

แอพพลเคชนสงๆ ไดเลย ทนเราลองมาดตารางเปรยบเทยบ Memory บนบอรด Arduino แตละรนเพอ

เลอกใชงานตามความเหมาะสมกนครบ

ตารางเปรยบเทยบหนวยความจ าของบอรด Arduino แตละรน

จะเหนไดวาการเขยนโปรแกรม LabVIEW ซงเปน Graphic Programming จ าท าใหกนพนทใน

หนวยความจ ามากกวา การพฒนาดวยภาษา C/C++ ทวไปอยนดหนอย แตเนองดวยขอจ ากดเรอง

Memory ของฮารดแวร Arduino โดยเฉพาะ SRAM ท าใหนกพฒนาตองท าความเขาใจการจดการ

หนวยความจ า (Memory Allocation) เพอปรบปรงโปรแกรมใหกนพนทในหนวยความจ านอยทสด วธการ

หนงกคอ ลดการใชตวแปรชนด Array และ String ซงกนพนทหนวยความจ าใน Heap เยอะมาก หรอไมก

ตองเลอกใชงานบอรด Arduino Due ทม SRAM สงถง 96 KB ครบ

Page 17: Arduino-Based Embedded Data Logger using LabVIEW

การเขยนโปรแกรม LabVIEW เพอตดตอกบฮารดแวร Arduino เบองตน

ใบงานท 1. การใชงานพอรต Digital I/O แสดงผลทาง LED และ Buzzer

การเชอมตอ LED และ Buzzer เขาทพอรต Digital Out

ไลบารทใชงานรวมกบ Digital I/O

Page 18: Arduino-Based Embedded Data Logger using LabVIEW

ตวอยางโปรแกรมไฟกระพรบ หรอสงสญญาเสยงออก Buzzer อยางงาย

การท างานของโปรแกรมสามารถอธบายไดดงน ซงวธการอานโคดจะอานจากซายไปขวาครบ

1. ก าหนด Port ทตองการเชอมตอ กรณนคอ Digital Output Port 13 (หรอพอรตอนๆทเชอมตอไว) 2. ก าหนดใหโปรแกรม ท างานตอเนอง รนแบบ Loop Continuously 3. เขยน Logic High “5V” ไปท Digital Out Port 4. Timing VI ก าหนดให Wait หรอ Delay 100ms 5. เขยน Logic Low “0V” ไปท Digital Out Port 6. Timing VI ก าหนดให Wait หรอ Delay 100ms

ใบงานท 2. การใชงานพอรต Analog Port อานคาอณหภมจาก LM35

Page 19: Arduino-Based Embedded Data Logger using LabVIEW

การเชอมตอกบเซนเซอรอณหภม LM35 เขาทพอรต Analog

ไลบารทใชงานรวมกบ Analog I/O

ตวอยางโปรแกรมอานคาอณหภมทางพอรต A0 มฟงกชนเปรยบเทยบ และแสดงผลทาง COM Port

การท างานของโปรแกรมอธบายไดดงน

1. ก าหนด Port ทตองการเชอมตอ กรณนคอ Digital Output Port 13 (หรอพอรตอนๆทเชอมตอไว) 2. เรยกฟงกชน “Analog Read” เพออานคาสญญาณ Analog ทพอรต A0 จากนนท าการแปลงคา

ไปเปนอณหภมตามสตร (Temp C = ((5/1024)*Analog Input*1000)10)) 3. สรางเงอนไขเปรยบเทยบอยางงาย โดยก าหนดวา ถาอณหภมสงกวาคา “Temp Threshold” ท

ก าหนดไว (ในกรณนทดลองก าหนดไวท 30 องศา) ใหสงคาออกท Digital Out

Page 20: Arduino-Based Embedded Data Logger using LabVIEW

4. แปลงคาอณหภมจากตวเลขไปเปนตวอกษรเพอแสดงผลออกทาง COM Port ดวย “Debug Tool.vi”

5. เขยนคา Digital Output ออกท Port 13 ทสรางเงอนไขทเปรยบเทยบ 6. ก าหนดใหโปรแกรม ท างานตอเนอง รนแบบ Loop Continuously ไมมวนสนสด

ใบงานท 3.การใชงานรวมกบ LCD 16x2 ผานพอรต I2C Interface

การเชอมตอ LCD 16x2 (I2C) เขากบบอรด Arduino Uno

ตวอยางนจะแสดงการเขยนโปรแกรม LabVIEW เพอแสดงผลออกทาง LCD โดยจะน าไลบาร

LCD ทตดตงมาใหเรยบรอยแลวมาใชงาน โดยปกตแลว LCD 16x2 จะมพอรตเชอมตอแบบ Parallel ซงจะ

ท าใหการตอสายกบบอรด Arduino เปนเรองยงยาก คณผอานสามารถหาบอรด LCD I2C Adapter มา

แปลงการเชอมตอจาก Parallel เปน I2C ซงจะท าใหสายสญญาณเหลอเพยง 2 เสน SDL และ SCA ซง

การใชงานตองระบ Address ของบอรด I2C ปกตจะใช Address มาตราฐานคอ 0x27 (39)

ไลบาร I2C_LCD พรอมใชงาน

Page 21: Arduino-Based Embedded Data Logger using LabVIEW

การเชอมตอ LCD เขากบบอรด Arduino ท าไดโดย อนดบแรกตอแหลงจายไฟ +5V และ GND

เขากบบอรด จากนนตอสาย SDA เขากบพอรต A4 และตอสาย SCL เขากบพอรต A5

โคดโปรแกรม LabVIEW ทใชตดตอกบ LCD 16x02 ตดตอผาน I2C Interface

การท างานของโปรแกรมอธบายไดดงน

1. เรยก “LiquidCrystal_I2C.vi” ขนมาเพอ Initial LCD ดวยคาเรมตน โดยปกตผใชจะก าหนด

Address ของ I2C บอรดเทานน สวนคาอนๆ ทเปน Pin Configuration ใหคงไวตามคาเรมตน

และก าหนด Characters = 16 และ Lines =2 ซงตรงกบชนดของ LCD คอ 16 ตวอกษร จ านวน 2

แถว

2. เรยก “LiquidCrystal_I2C set backlight pin.vi” เพอก าหนดพอรต backlight ของ LCD

โดยทวไปจะก าหนดไวท Pin=3

3. เรยก “LiquidCrystal_I2C set backlight.vi” ขนมาเพอจากนนก าหนด “True” เพอเปดการใชงาน

backlight บนบอรด LCD

4. เรยก “LiquidCrystal_I2C home.vi” เพอก าหนดการแสดงผลเรมตนทต าแหนง Home ของ LCD

ซงกคอ ทางซายสด แถวแรกบนจอ LCD

5. เรยก “LiquidCrystal_I2C write String.vi” เพอเขยนคาตวอกษรท LCD ตามต าแหนงทก าหนดไว

ในทนทดลองเขยนค าวา “LabVIEW-Arduino” ไปทบรรทดบนสดของจอ LCD

Page 22: Arduino-Based Embedded Data Logger using LabVIEW

6. เรยก “LiquidCrystal_I2C set cursor.vi” เพอก าหนดต าแหนงการแสดงผลใหอยทตวอกษรแรก

แถวทสองของ LCD เพราะในโปรแกรมนจะท าการอพเดจคาการนบของ Loop การท างานไปท

บรรทดลางของ LCD

7. เรยก “LiquidCrystal_I2C write String.vi” ขนมาอกครงหนง เพอเขยนคา “Count:” + “จ านวน

Loop ทโปรแกรมท างาน” โดยจะสงเกตเหนวามฟงกชน “Number To Fractional String” เพอ

แปลงตวเลข (Integer) ไปเปนตวอกษร (String) ในกรณนก าหนดจดทศนยม 3 ต าแหนง เพอให

แสดงผลบน LCD

โดยโคดของโปรแกรมทอยใน “While Loop” จะวน Loop การท างานไปเรอย โดยก าหนดเวลาการ

ท างานแตละ Loop ไวท 100ms และจะท างานแบบตอเนองไมสนสด เพราะก าหนดคา “False” ใหกบ

Loop Condition ทมมลางซายของโปรแกรม

ผลการทดสอบการเขยนโคด LabVIEW แสดงผลท LCD 16x2 (I2C)

Page 23: Arduino-Based Embedded Data Logger using LabVIEW

ใบงานท 4.ขนตอนการ Compile Code และ Download ลงบอรด Arduino

1. เลอกบอรด Arduino ทตองการเชอมตอ ในกรณนผมเลอกเปน Arduino Uno

2. เลอกพอรตทเชอมตอ ในกรณนผมเชอตอไวท COM4 (*ถาผอานไมสามารถเลอกพอรตใชงานได

ในขนตอนนแสดงวา บอรด Arduino ยงไมไดลง USB-Driver หรอยงไมไดลง NI-VIA Driver)

3. เปดโคดโปรแกรม VI ทตองการใชงานกบคอมไพเลอร โดยเลอก “Load a VI”

4. คลกทป ม “Compile (Verify) Only” เพอทดสอบการคอมไพลโคด วาโปรแกรมทเขยนนนกนทรพ

ยาการบน Flash และ RAM เปนจ านวนเทาใด และม Error เกดขนหรอไม

Page 24: Arduino-Based Embedded Data Logger using LabVIEW

5. เมอผลการคอมไฟลผานแลว กใหคลกเลอกท “Compile and Download” รอสกคร คอมไพเลอรก

จะโปรแกรมโคด LabVIEW ลงบนบอรด Arduino Uno ตามพอรตทก าหนดไว

Page 25: Arduino-Based Embedded Data Logger using LabVIEW

โดยผลการคอมไพลแสดงผลดานลาง ในกรณนจะเหนวา โปรแกรมแสดงผลทาง LCD ทเขยน

ขนมานน จะใชพนทบน Flash ประมาณ 7.6kB คดเปน 23% จากทงหมด 32 KB ของบอรด Uno และ

พนทบน RAM ใชงานเพยง 289 bytes คดเปน 14% จากทงหมด 2 KB บนบอรด Arduino Uno

ใบงานท 5.การใชงานฟงกชน Debug Tool และตรวจสอบทรพยากร (RAM)

การ Debug โปรแกรมเปนสงส าคญส าหรบนกพฒนา เพราะวาปญหาสวนใหญมกเกดขนในขณะ

Run-time ซงถอวาเปนการ Debug ทยากทสด ถาเขยนโปรแกรมไมด จะท าใหไมไดผลลพธตามทก าหนด

ดงนนภาษาโปรแกรม หรอ IDE ทด ตองมเครองมอบางอยางทจะชวยใหนกพฒนาสามารถ Debug

โปรแกรมในขณะ Runtime ไดครบ

ในบทนเราจะใชฟงกชนการ Debug Tool ทสามารถสงคาทก าหนด ออกมาท COM พอรตได ซง

ท าใหเราทราบไดวา ขณะ Run-time โปรแกรมท างานอยางไร คลายๆ กนฟงกชน printf() ในภาษา C/C++

ของ Arduino IDE ครบ เราสามารถเลอกฟงกชนนไดจาก “Utilities>Debug Tool” ตามภาพ

ไลบารเกยวกบการ Debug และการจดการทวไป

วธการใชงานเราจะตองแทรก “Debug Tool.vi” ไปทโคดทเราตองการ Debug โดยคาทตองการ

แสดงผลออกทาง COM port จะตองเปนตวแปรชนดตวอกษร (String) เทานน และสามารถเลอกไดดวยวา

ตองการใหแสดงผล หนวยความจ า RAM ทเหลออยในขณะนนหรอไม (หนวยเปน Bytes) ในกรณนผ เขยน

Page 26: Arduino-Based Embedded Data Logger using LabVIEW

แกไข ดเลยภาพใน Loop ใหเปน 1 วนาท เพอใหเราสามารถเหนการเปลยนแปลงไดงายขนครบ แสดงดง

ภาพ

ตวอยางโปรแกรมเขยนขอมลไปแสดงผลทจอ LCD

จากนนกลบมาท IDE เพอเลอก “Serial Monitor” ขนมาใชงาน แสดงดงภาพ

การเปดโปรแกรมยอย Serial Monitor”

เมอเปดโปรแกรม “Serial Monitor” ขนมาจะเหนไดวาบอรด Arduino จะท าการอพเดจคาทเรา

ก าหนดไวทกๆ 1 วนาท เชน “Count: 15.000:1348” หมายความวา ขณะนโปรแกรมก าลงท างานท Loop

ท 15 และหนวยความจ า RAM ทเหลอ (Free Memory) ขณะนคอ 1.348 KB

Page 27: Arduino-Based Embedded Data Logger using LabVIEW

ผลการอานคาแสดงผลออกทาง COM Port

ใบงานท 6. การใชงานรวมกบ Real-Time Clock (RTC) ดวย I2C Interface

บอรด Data Logger Shiled และพอรตทเชอมตอกบ Arduino Uno

ตวอยางนจะแสดงการเขยนโปรแกรมเพอตงคา และอาน Real-Time Clock เบอร DS1307 ซงใน

บทความนผ เขยนใชฮารดแวรบอรด Data Logger Shield เวอรชน 1.0 ซงมราคาไมแพงนก และมาพรอม

กบ SD Card Slot เชอมตอทางพอรต (A4 และ A5 เพอใชงาน I2C Interface) และมพนทวางเพอสราง

วงจรของตวเอง จะเหมาะกบการท าแอพพลเคชนทตองเกบคาเวลาปจจบน และบนทกลง SD Card

Page 28: Arduino-Based Embedded Data Logger using LabVIEW

ไลบารเกยวกบการตดตอผานทาง I2C

การใชเขยนโปรแกรมเพอตดตอกบ RTC นนจะใชไลบาล I2C ทตดตงมาพรอมกบ คอมไพเลอร

Toolkit สามารถใชงานไดทนท โดยการตงคา I2C Address ของ RTC ในบอรด Data Logger Shield จะ

ก าหนดไวท 0x68 โดยโปรแกรมเขยนขนเพอใชงานในใบงานนจะม 2 โปรแกรมคอ

1. SET DS1307 Real Time Clock.vi

2. READ DS1307 Real Time Clock.vi

โดยโปรแกรม “SET DS1307 Real Time Clock.vi” จะดาวนโหลดลงไปใน RTC เพยงครงแรก

ครงเดยวเพอก าหนดเวลาปจจบน หลงจากนนจะตองดาวนโหลดโปรแกรม “READ DS1307 Real

Time Clock.vi” เพอทดสอบการอานคา RTC ท COM Port

4.1 ก าหนดคาเวลาปจจบนให RTC (SET DS1307 Real Time Clock.vi)

การตงคาเวลาทตองการเขยนลงบน RTC ครงแรกครงเดยว

Page 29: Arduino-Based Embedded Data Logger using LabVIEW

ในการใชงานครงแรก เราตองตงคาเวลาปจจบนใหกบ RTC โดยตองแปลงคา Date/Time ไปเปน

ตวเลขไบนาล เพอเขยนลงไปในรจตเตอรของ RTC ใหตงเวลาตามทก าหนด เราสามารถก าหนดเวลา

ปจจบนไดจากการตงคาตวเลขในหนา Front Panel ของโปรแกรม โดยตองรปแบบดงรป

โปรแกรมการตงคาเวลาใหกบ RTC DS1307 บนบอรด Data Logger Shield

การท างานของโปรแกรม “SET DS1307 Real Time Clock” อธบายไดดงน

1. เรยก “I2C Open.vi” เพอตงคาเรมตนการเชอมตอกบ RTC DS1307 ทางพอรต I2C

2. เรยก “I2C Write (Byte).vi” เพอเรมตนเขยนคา Date/Time ไปยงรจตเตอรของ RTC โดยตอง

ก าหนดต าแหนงเรมตนทตองการเขยนในทนคอ ใหเรมทรจตเตอร “0” ซงกคอคาคาวนาท

นนเอง

3. เรยก “I2C Write (Array).vi” เพอเรมตนตงคาเวลาปจจบนใหกบ RTC ในรปแบบ

‘MM/DD/YYYY HH:MM:SS”

4. เรยกฟงกชน “Binary to BCD” เพอแปลงคา Date/Time ไปเปนไบนาลท RTC เขาใจเพอตง

คาเวลา

Page 30: Arduino-Based Embedded Data Logger using LabVIEW

4.2 การอานคาเวลาปจจบนจาก RTC (READ DS1307 Real Time Clock.vi)

ตวอยางโปรแกรมอานคาจาก RTC แสดงผลออกทาง COM Port อยางงาย

การท างานของโปรแกรม “READ DS1307 Real Time Clock” อธบายไดดงน

1. เรยก “I2C Open.vi” เพอตงคาเรมตนการเชอมตอกบ RTC DS1307 ทางพอรต I2C

2. เรยกฟงกชน “Read RTC Time and Format.vi” ซงเปน Sub-VI ทอานคาเวลาจากพอรต I2C

และแปลงคาเปนตวเลขทเราเขาใจใหอตโนมต โดยจะอยในรปแบบ ‘MM/DD/YYYY HH:MM:SS”

3. เรยกฟงกชน Debug Tool เพอท าการสงคาเวลาปจจบนออกทพอรต COM Port

4. ก าหนด Loop เวลาการอานคา ทกๆ 1 วนาท

5. ก าหนดให Loop ท างานแบบไมมสนสด โดยก าหนดคา “False” ใหกบ Conditional Terminal ท

มมลางขวาของ While Loop

Page 31: Arduino-Based Embedded Data Logger using LabVIEW

ผลการแสดงผลทาง COM Port จะเหนวาเราสามารถอานคาไดถกตอง

จากนนเปด Serial Monitor กจะเหนวาคาเวลาปจจบนแสดงผลออกมาท COM Port ทกๆ 1 วนาท

(*ในกรณทเวลาไมตรง ตองกลบไปตงเวลาใหมดวย “SET DS1307 Real Time Clock”)

ใบงานท 7. การเขยนขอมล RTC ลง SD Card (SPI Interface)

บอรด Data Logger Shield ทม Slot SD Card มาใหพรอมใชงาน

ใบงานนจะเปนตวอยางการเขยนขอมลเวลาทอานมาจาก RTC บนทกลง SD Card โดยการ

เชอมตอกบ SD Card จะใช SPI Bus โดยพอรตทเชอมตอถกก าหนดไวแลวโดย Data Logger Shield

แสดงดงน

Page 32: Arduino-Based Embedded Data Logger using LabVIEW

CK = D13

MISO = D12

MOSI =D11

CS = D10

การใชงานจะเรยกฟงกชนจาก SD Card ไลบาร แสดงดงรป *ซงจะรองรบ SD Card ท Format

แบบ FAT16 หรอ FAT32 เทานน

ไลบารเกยวกบ SD Card มฟงกชนใหเรยกใชงานไดทนท

โดย SD Card ไลบาร อางองจากมาตราฐาน “SD Library 8.3 Filename” หมายความวาสามารถ

ตงชอไฟลไดสงสด 8 ตวอกษร และนามสกลของไฟล 3 ตวอกษร เทานน และชอไฟลจะเปนตวอกษรตว

ใหญทงหมด ตวอยางเชน “DATALOG.CSV”

Page 33: Arduino-Based Embedded Data Logger using LabVIEW

ตวอยางโปรแกรมอานคาจาก RTC จากนนบนทกขอมลลง SD Card และแสดงผลทาง COM Port

เราลองมาดตวอยางโปรแกรมแสดงดงรป โดยอธบายการท างานของโปรแกรมดงน

1. เรยก “I2C Open.vi” เพอตงคาเรมตนการเชอมตอกบ RTC DS1307 ทางพอรต I2C

2. เรยก “Read RTC Time and Format.vi” เพออานคาเวลาปจจบนจาก RTC

3. เรยก “SD Data Logger.vi” เพอบนทกขอมลลง SD Card การใชงานงายมาก เพยงก าหนด ชอ

ไฟล = “datalog”,CS Pin = 10 และก าหนดขอมลทตองการบนทกเปน Array ของตวเลข จากนน

ฟงกชนนจะบนทกขอมล เปนไฟล .CSV ใหอตโนมต

4. ทดลองสรางคาตวเลข ตามจ านวน Loop ทท างาน โดยจะเพมครงละ 1 ในแตละ Loop *เนองดวย

เปนคาตวเลขคงท DBL ท าใหตองใชฟงกชน Build Array เพอแปลงตวเลขเปนขอมล Array สง

ใหกบ SD Data Logger.vi

5. เรยกฟงกชน Debug Tool เพอท าการสงคาทบนทกลง SD Card ออกทาง COM Port เพอ

แสดงผล

Page 34: Arduino-Based Embedded Data Logger using LabVIEW

ผลการแสดงผลท COM Port จะเหนวาชอมลจะอยใน CSV format เหมอนกบทเขยนลง SD Card

จากนนเปด Serial Monitor กจะเหนวาขอมลทบนทกแสดงผลออกมาท COM Port ทกๆ 1 วนาท (*

เนองจากวาการบนทกขอมลลง SD Card จะใชเวลาประมาณ 250ms ซงถอวาชาพอสมควร ดงนนตอง

ค านงถงการก าหนดเวลา Timing ในการบนทกขอมลดวย ควรหลกเลยงโคดทหนวงเวลาในการบนทก และ

อาจจะตองก าหนดเวลา Delay ของ Loop ใหนอยลง แตแอพพลเคชนสวนใหญทบนทกขอมลทกๆ 1 วนาท

กใชงานไดปกต)

Page 35: Arduino-Based Embedded Data Logger using LabVIEW

ใบงานท 8. เขยนโปรแกรมอานคาอณหภมจาก Thermocouple จาก MAX6675 ผาน

พอรต SPI

บอรด MAX667 ส าหรบอานคาอณหภมจาก Thermocouple ชนด K-Type

ในใบงานนเราจะเขยนโปรแกรมเพออานคาอณหภมจาก MAX6675 ซงเปน Thermocouple K-Type

ไลบาร SPI ส าหรบตดตอกบอปกรณตางๆ ไดทนท

Page 36: Arduino-Based Embedded Data Logger using LabVIEW

โปรแกรมอานคาอณหภมจาก MAX6675 ผานบส SPI

การท างานของโปรแกรมอธบายไดดงน

1. เรยก “SPI Open Express.vi” เพอเรมตนการตดตอกบ SPI Bus โดยตองก าหนด CS Pin ในกรณ

นผมเชอมตอ CS Pin ไวกบ Digital Pin = “9” และในตวอยางนใช SPI Clock Speed = 2MHz

ดงนนตองก าหนด Clock Divider = 5 หมายถง จะน า Clock บนบอรดหารดวย 8 ในกรณนผมใช

บอรด Arduino Uno ทมสญญาณนาฟกา 16MHz ดงนน Clock ในการใชงาน SPI จงเทากบ 16/8

= 2MHz

2. (การก าหนดคา Clock Divider อางองจาก Help อธบายไดดงตอไปน = 0 หารดวย 4, =1 หาร

ดวย 16, =2 หารดวย 64, =3 หารดวย 128, =4 หารดวย 2, =5หารดวย 8 และ = 6 หารดวย 32,

คาเรมตนจะก าหนดไวท Clock Divider = 0 ซงจะก าหนด Clock ใชงานไวท 4MHz ดงนนใน

บอรด Uno 16MHz/4 = 4MHz)

3. เรยก “SPI Transfer.vi” เพออานขอมลจ านวน 1 ไบต (8 บต) คาเรมตนจะก าหนดใหอานจาก

MSB

4. เรยก “SPI Transfer.vi” อกครงหนง เพออานขอมลจ านวน 1 ไบต (8 บต) ในครงนก าหนดใหอาน

LSB

5. ท าการแปลงคาขอมลใหเปนคาอณหภมตาม Format ใน Datasheet ของ MAX6675 ซงอธบาย

เพมเตมไดดงรป

Page 37: Arduino-Based Embedded Data Logger using LabVIEW

6. ท าการแปลงคาอณหภมทอานมาไดใหอยในรปขอความ เชน 36.75’C จะแสดงผล = “Temp:

36.75C,”

7. เรยกฟงกชน Debug Tool เพอท าการสงแสดงผลออกทาง COM Port

8. ก าหนดเวลาการท างานของ Loop = 250ms เนองจาก MAX6675 จะใชเวลาในการอานขอมล

220ms ตามทก าหนดใน Datasheet

ผลทดสอบการอานคาแสดงผลทาง COM Port จะไดขอมลอณหภมสามารถแสดงไดถกตอง

Page 38: Arduino-Based Embedded Data Logger using LabVIEW

ใบงานท 9. การสราง Thermocouple Data Logger ฉบบสมบรณ

จากใบงานกอนหนาน คณผอานคงไดเรยนรการใชเขยนโปรแกรมรวมกบ Arduino และอปกรณ

ตางๆในเบองตนเรยบรอยแลว ในบทนเราจะมาสราง Data Logger ทสมบรณโดยการน าความรจากการ

เขยนโปรแกรมสวนตางๆมาประกอบกนใหเปนแอพพลเคชน Thermocouple Data Logger โดยมฟงกชน

Alarm เมออณหภมสงกวาคาทก าหนดไว แสดงผลออกทาง LED บนบอรด และสงสญญาณเสยงเตอน

ออกทาง Buzzer รายการฮารดแวรและอปกรณทใชในใบงานนประกอบไปดวย

บอรด Arduino-Compatible Uno R3 ไมโครคอนโทรลเลอร

บอรด Data Logger Shield ประกอบดวย SD Card และ Real-Time Clock (RTC)

บอร LCD Display 16x2 เชอมตอแบบ I2C

บอรด MAX6675 Thermocouple Type-K Module

บอรด Data Logger Shield ทตดตง MAX6675 และ Buzzer บน Prototype Area

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

ใชงาน และสวนทสองคอ โคดทอยใน Loop ซงจะท างานวนซ าๆไปเรอย เพออานคาและแสดงผลทาง LCD

Page 39: Arduino-Based Embedded Data Logger using LabVIEW

หนาตางการตงคา Address และคาคงทตางๆ ของ Front Panel

ผลการคอมไพลโปรแกรมจะกนพนทบน Flash ประมาณ 25KB (78%) และกนพนท RAM ประมาณ 1.11

KB (54%) เมอเทยบกบหนวยความจ าทงหมดบนบอรด Arduino Uno

Page 40: Arduino-Based Embedded Data Logger using LabVIEW

โปรแกรมในสวนของ Initial Haradware ทงหมด

โปรแกรมในสวนหลกทอานคา บนทก แสดงผล และเปรยบเทยบกบ Temp Alarm

Page 41: Arduino-Based Embedded Data Logger using LabVIEW

ตวอยางการแสดงผลออกทาง LCD ซงจะมคาเวลา อณหภม และ Alarm (*ในกรณน 45 คอ อณหภม

Alarm ทก าหนดไว ถาอณหภมปจจบนสงกวานจะมเสยงแจงเตอนทาง Buzzer)

อปกรณ Arduino-Based Embedded Data Logger ฉบบสมบรณ

Page 42: Arduino-Based Embedded Data Logger using LabVIEW
Page 43: Arduino-Based Embedded Data Logger using LabVIEW

เมอน า SD Card ไปเปดในคอมพวเตอรจะแสดงคาขอมลทบนทกไว ซงม 3 ขอมล คอเวลา อณหภม และ

สถานะ Alarm Status

ผลการพลอตกราฟในโปรแกรม Excel จากขอมลใน SD Card

Page 44: Arduino-Based Embedded Data Logger using LabVIEW

บทสรป

ผ เขยนมงหวงใหบทความนน าเสนอการพฒนา Embedded Data Logger ดวยภาษา LabVIEW

ซงเปนภาษาทางเลอกนอกเหนอจากภาษา C/C++ ทนยมใชงานกนในปจจบน ผ เขยนเลงเหนวา

LabVIEW เปนภาษาทพฒนาไดงาย และท าความเขาใจโคดไดรวดเรว ท าใหผพฒนาสามารถมงเนนไปท

การเพมประสทธภาพของแอพพลเคชน มากกวาจะตองกงวลเรองเครองมอ หรอภาษาในการพฒนา

ในสวนของ “Arduino compatible compiler for LabVIEW (ACC4LV)” ถอวาเปนโปรแกรมทท า

ใหความฝนของนกพฒนา LabVIEW เปนความจรง เนองจากสามารถโปรแกรมโคด LabVIEW ลง

ฮารดแวรราคาถกอยาง Arduino ได และไลบารกยดหยนใหเขยนเพอเชอมตอกบบอรดเสรม Shields

ภายนอกได อาท ผานบส UART,I2C หรอ SPI ได โดยในปจจบนแพลตพอรม Arduino มบอรด Shields

จ านวนมากหลายหลายชนด ท าใหการพฒนาแอพพลเคชนดวย LabVIEW สามารถน าไปใชงานได

หลากหลายตงแต Home Application ไปจนถงงานในอตสาหกรรม ประกอบกบผพฒนากอพเดจ

ความสามารถของคอมไพเลอรอยเรอยๆ ถาคณผอานเรมตนศกษา ณ วนน ในอนาคตผ เขยนมองวาจะท า

ใหสามารถพฒนาแอพพลเคชนตางๆไดอยางรวดเรวแนนอน

ในสวนของ Hardware อปกรณทกชนในบทความนจดท าขนเพอประกอบการเรยนรเทานน ผ เขยน

มไดปรบแตงเพอใชงานในสภาพแวดลอมจรง อาท ลดสญญาณรบกวน ปรบความถกตองของอณหภมท

อานได และฟงกชนอนๆ ดงนน ถาผอานตองการน าเอาอปกรณ Data Logger และโคด LabVIEW ทเขยน

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

Page 45: Arduino-Based Embedded Data Logger using LabVIEW

บทสงทาย

ขอควรรกอนเขยนโปรแกรมดวย Arduino Compatible Compiler for LabVIEW

โดยปกตการเขยน LabVIEW มกจะใชพฒนาแอพพลเคชนในลกษณะ PC Based Application ท

รนบน Windows ตดตอกบฮารดแวรผาน Bus ตางๆ อาท RS-232, USB, GPIB หรอ Ethernet ซงมกจะไม

พบปญหาขอจ ากดดาน Hardware เทาใดนก เนองจาก PC เปน Hardware ทมประสทธภาพสง เชน CPU

มความเรว ระดบ GHz และ หนวยความจ า RAM สงถงระดบ GB

แตการเขยน LabVIEW เพอใชงานแบบ Embedded Application นนแตกตางอยางมาก

โดยเฉพาะอยางยงถาใชงานรวมกบ Arduino Platform ซงมขอจ ากดดานฮารดแวรจ านวนมาก เพราะเปน

Microcontroller ขนาดเลก มขอจ ากดดาน CPU และ หนวยความจ า ยกตวอยางเชน บอรด Arduino Uno

ม CPU 8-bit ท างานท 16MHz มหนวยความจ าแบบ Flash 32kB และ มหนวยความจ า RAM เพยง 2kB

เทานน ซงถอวานอยมากๆ (*แต “Arduino Compatible Compiler for LabVIEW”

นนรองรบบอรดราคาถกอยาง Arduino Uno หมายความวา Compile มความฉลาดและจดการ

หนวยความจ าในระดบ Low Level ไดดเยยม)

ดงนนการพฒนา LabVIEW เพอใชงานรวมกบบอรด Arduino จงมขอแตกตางบางประการท

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

1.การเรยกใชงาน “Arduino Compatible Compiler for LabVIEW”

ในหนาตาง “Block Diagram ใหคลกขวา > เลอก Addons > Arduino Compatible Compiler

sub-palette” แสดงดงรป จะเหนไดวาทกฟงกชนทอยใน “Arduino Compatible Compiler” สามารถ

โปรแกรมลงใน Arduino ไดทก VIs (*ซงอาจจะมฟงกชนเพมเตมอกในอนาคต) แตฟงกชนอนๆ

นอกเหนอจากหนาตางน จะใชงานไดเฉพาะการเขยนโปรแกรมส าหรบ Host PC เทานน และการเขยน

โปรแกรมสามารถสรางจาก Main VI ไดเลย ไมตองสรางเปน Project เพราะวาเราไมตอง Build .exe ไฟล

ในหนาตาง Project Explorer

Page 46: Arduino-Based Embedded Data Logger using LabVIEW

Arduino Compatible Compiler for LabVIEW sub-Palette

2.ยงใช Concept การเขยนโปรแกรมแบบ Dataflow Programming

ความแตกตางหลกของ LabVIEW เมอเทยบกบภาษาอนๆกคอ การท างานแบบ “Dataflow” ซงม

ขอดทสามารถอานโคด และ Debug โปรแกรมไดงาย ปกตโปรแกรมจะท างานแบบซาย-ไปขวา โดยม

Error In-Out เปนตวก าหนดล าดบการท างานของโคด จากรป จะเหนวามการใช “Error In” และ “Error

Out” ในทกๆ ฟงกชน

รปแบบการเขยนโปรแกรมแบบ Dataflow Programming

Page 47: Arduino-Based Embedded Data Logger using LabVIEW

ส าหรบฟงกชนทไมม Error In-Out ใหเชอมตอ กตองสรางขนมาเอง อาท ในกรณนเราตองการ

ก าหนด Error In-Outให “Wait 100 ms” ดงนนเราตองสราง “Flat Sequence Structure” เพอใหม Node

เชอมตอ Error In-Out ดงรป

การสราง Error In-Out ใหกบ “Wait 100 ms

3.Error Cluster ใชเพอก าหนดล าดบการท างาน (Dataflow) เทานน (*ไมมการสงคาพารามเตอรใดๆผาน

Error Cluster)

ขอดของการเชอมตอ Error In-Out กคอการท า “Error Handling” หมายความวา ถา Sub-VI ใดๆ

เกด Error ขน คา “Status” ของ “Error Out” กจะสงคาเปน “True” เพอบอก Process ถดไปวา กอนหนาน

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

จดใด จดหนงของโปรแกรม Error ดงนนโปรแกรมทงหมดกควรจะหยดการท างาน เพอแจงใหกบ User

ทราบโดยเรวทสด

ตวอยางคา พารามเตอรใน Error Cluster

ปกตถาเราเขยนโคด LabVIEW บน PC เรามกจะท าการ “Error Handing” โดยสราง “Case

Structure” รวมกบ “Error In-Out” ดงรป (*Case Structure กรอบสเขยว และสแดง) แตโคดลกษณะนจะ

ไมสามารถรนไดในฮารดแวร Arduino โดยในระหวางการ Compile กจะม Error เกดขน

Page 48: Arduino-Based Embedded Data Logger using LabVIEW

กลาวโดยสรปกคอ Error Cluster (In-Out) ใชเพอก าหนด Flow การท างานของโปรแกรมเทานน ไม

สามารถใชงานเพอเปน “Error Handling” ไดในฮารดแวร Arduino ได

เพมเตม “Error Cluster” เปน Cluster ชนดเดยวททางโปรแกรมยอมใหสรางได นอกเหนอจากน

เชน User Define Cluster ทสรางขนมาเอง จะท าให Compile โปรแกรมไมผาน

การเขยน “Error Handling”โดยสราง Case ทชอวา “Error” และ “No Error”

การเขยนเชนนจะท าให Compile ไมผาน

4.ไมซพพอรต Control Typedefs (.ctrl) ทสรางขนมาเองทกชนด (*ยกเวนแต Typedefs ทเปน Input คา

เรมตนของฟงกชนทใหมาใน Arduino API)

Page 49: Arduino-Based Embedded Data Logger using LabVIEW

ตวอยางการสราง Typedefs ซงไมอนญาตใหใชใน Arduino Compatible Compiler for LabVIEW

(*ถาน ามาใชงานในโปรแกรมจะท าให Compile ไมผาน)

การสราง Control Typedefs ทเปนคาเรมตนของ Arduino API ซงใชงานได

เพราะเปนขอยกเวนของ Compiler

5.ไมรองรบการท างานแบบ Parallel Loops และ Multi Threading

จดเดนของ LabVIEW ทมเหนอกวาภาษาอนๆอกหนงอยาง กคอการท างานแบบ Parallel Loops

ถงขนทวา CPU ทเปนแบบ Multi-Core โปรแกรม LabVIEW กยงสามารถก าหนดไดวา Loop ใดท างานบน

Processor Core ใดๆไดอกดวย

แตการพฒนาแอพพลเคชนแบบ Embedded Systems โดยเฉพาะบนฮารดแวร Arduino ซงเปน

Microcontroller ขนาดเลก และไมมระบบปฏบตการรนอยบนฮารดแวร จงท าใหท างานแบบ Parallel

Loops เปนไปแทบจะไมไดเลย (*ไมแนนะครบ ในอนาคตตว Compiler อาจจะฉลาดพอ และ Optimize

Low level โคดใหเราใชงานได)

Page 50: Arduino-Based Embedded Data Logger using LabVIEW

เราลองมาดตวอยางประกอบความเขาใจกนครบ ถาเราเขยนโปรแกรมซงม While Loop จ านวน 2

Loop ดงรปท ซงเหนไดวาการท างานของทงสอง Loop จะท าหนาทเพม/ลด จ านวนนบ (+1 และ -1)ไป

เรอยๆ และ Loop จะรนแบบตอเนองไมสนสด (Infinite Loop)

ตวอยางโปรแกรมแบบ Parallel Loops ซงไมรองรบคอมไพเลอรเวอรชนปจจบน

เนองจากวา “Arduino Compatible Compiler for LabVIEW” ไมซพพอรต Multi Threading แต

การเขยนโปรแกรมเชนนจะสามารถ Compile ผาน แตเมอ Download และรนบนฮารดแวร โปรแกรมจะ

ท างานแบบคาดเดาไมไดครบ เพราะไมรวา Loop ไหนจะท างานกอนหลง จาก Concept การท างานแบบ

Dataflow ดงนน Loop แรกทท างาน จะตองรนจนเสรจสนกอน แลว Loop ทสองถงจะเรมตนท างาน แต

จากโปรแกรมนเราทราบอยแลววา แตละ Loop จะท างานแบบไมมสนสด ดงนน Loop ทสองจะไมมโอกาส

ไดท างานเลยครบ

สรปกคอ ควรหลกเลยงการเขยนโปรแกรมแบบ Parallel Loops เพราะตว Compiler ยงไมรองรบ

การท างานแบบ Multi Threading บน Arduino (*ผมเชอวาในเวอรชนตอๆไปจะไดรบการพฒนาจน

สามารถเขยนโปแกรมแบบ Multiple Loop ได)

Page 51: Arduino-Based Embedded Data Logger using LabVIEW

6. หามใช สญลกษณ "/" และ "\" ในชอของ Controls และ Indicators

เพราะเปนเครองหมายทใชงานเฉพาะของ “Arduino Compatible Compiler for LabVIEW” ใน

ระหวางการ Compile โปรแกรม ถาใชงานในโปรแกรมทสรางขนจะท าใหคอมไพลไมผาน

7. หามใช Case Structure Default Values

ถาใครทเคยใช LabVIEW เวอรชนใหมๆ จะทราบดวาถาเราม “Cases” หลายๆเคส เราไมตองเขา

ไปในทกเคส เพอ Wiring จดเชอมตอ Output เราสามารถคลกขวา ท Node เชอมตอ แลวเลอก “Use

Default if Unwired” แสดงดงรปท ซงการท าลกษณะนจะเปนขอหามของ “Arduino Compiler for

LabVIEW” ซงจะท าให Compile ไมผานนะครบ

การก าหนด “Use Default if Unwired” ใหกบ Case ซงคอมไพเลอรไมรองรบ

วธทถกตองกคอ เราตองก าหนดคาเรมตน อาจจะเปน Constant เชน “Initial value = 0” ใหกบ

Node Output ของเคส แสดงดงรปตอไป

Page 52: Arduino-Based Embedded Data Logger using LabVIEW

วธการทถกตอง ในก าหนดคา “Initial value” ใหกบ Case Output Node

8. ไมซพพอรต การก าหนด Password ใน SubVIs

ถาใครคดจะตง Password ใน SubVIs หรอแมแต Main จะท าให Compile ไมผานครบ

9. หามเชอมตอ Array Type ทไมตรงกน (*ซงจะท าใหเปลอง RAM มากใรระหวางรนโปรแกรม)

ถาใครเคยเขยนโปรแกรม LabVIEW มากอน บางครงนาจะเคยเหนจดแดงๆ (Coersion Dot) ตรง Node Input หรอ Output ซงมความหมายวา การเชอมตอระหวาง Data Type ทงสองตวเปนคนละชนดกนครบ เชน ถาเราเชอมตอตวแปรจ านวนเตม “Integer I32 -> ตวแปรจ านวนเตม DBL” กจะมจดสแดงๆ เกดขน

ซงปกต LabVIEW ยนยอมใหเราเขยนโปรแกรมเชนนครบ เพราะ LabVIEW จะแปลง Datatype ใหตรงกนใน Background ครบ

Page 53: Arduino-Based Embedded Data Logger using LabVIEW

ส าหรบ “Arduino Compiler for LabVIEW” จะไมยนยอมใหเราท าเชนนกบ ตวแปรทเปน Array ครบ ซงจะท าให Compile Error แตส าหรบตวแปรทเปน Scalar หรอ ตวเลข (Integer), ตวอกษร (String) หรอ Boolean ทไมใช Array สามารถใชงานไดครบ เพราะ Compiler จะแปลง Datatype ใหตรงกนตอนทเรา Compile โคดครบ

แสดง จดแดงๆ (Coersion Dot) เนองจากเชอมตอ Array Datatype คนละชนดกน

ถาเปนตวแปร Array ตองแกไข Datatype ใหตรงกนเทานน แสดงดงรปไมเชนนนจะ Compile ไมผาน

10. หลกเลยงการใช Array และ String Data type มากเกนความจ าเปน

เพราะ Data Type สองชนดน จะกนหนวยความจ าเยอะมากครบ ซงจะใชงานหนวยความจ าใน RAM ทมจ ากดอยแลว (*โดยเฉพาะบอรด Arduino Uno ทม RAM เพยง 2 kBytes) อาจจะท าใหโปรแกรม Crash ระหวาง Run-Time ไดครบ

สดทายนหวงวาบทความนจะเปนประโยชนกบผอานไดบาง

แลวพบกนใน FB: “LabVIEW Embedded for Arduino”