เรียนให้รู้ เล่นให้เป็น และใช้ให้เกิดประโยชน์ ตอน เตาะแตะสู่โลก อาร์ดูอิโน่  (Arduino)

เขียนโดย ประพนธ์ อัศวภาณุวัฒน์

สวัสดีครับ  เราจะคุยกันเรื่องใหม่ คือ โครงการโอเพ่นซอสทางด้านอิเลคโทรนิคส์ต้นแบบ ( Open Source Electronic Prototyping Platform ) ซึ่งเป็นลักษณะโอเพนฮาร์ดแวร์ (Open Hardware) และโอเพนซอร์ส (Open Source) กล่าวคือเป็นโครงงานต้นแบบที่เปิดให้ผู้สนใจสามารถดาวน์โหลดข้อมูลการจัดทำทั้งส่วนฮาร์ดแวร์ และซอฟท์แวร์นำไปใช้งาน หรือพัฒนาต่อได้ทันที

Arduino Project

ผู้เขียนกำลังกล่าวถึงโปรเจ็คต์ Arduino จากประเทศอิตาลี (หลังจากที่พยายามฟังคำอ่านอยู่หลายรอบจากโฮมเพจของโปรเจ็กต์

[1] ผู้เขียนขออนุญาติอ่านว่า อาร์ดูอิโน่ [2])  ซึ่งเป็นโปรเจ็คต์ที่กำลังมีนักเล่นไมโคร ฯ สนใจอย่างกว้างขวางทั่วโลก เนื่องจากเป็นโปรเจ็กต์ขนาดเล็ก ราคาถูก และมีประสิทธิภาพสูง โปรเจ็กต์อาร์ดูอิโน่ ใช้โปรแกรมภาษามาตรฐาน ที่พัฒนามาจากโปรเจ็กต์โพรเสจซิ่ง (Processing) โดยมีรูปแบบภาษาเป็นภาษาซี และซีพลัสพลัส (C/C++) ประกอบกับไลบรารีเปิดที่สนับสนุนการใช้งานกับอุปกรณ์ต่อพ่วงชนิดอื่น ๆ จำนวนมาก ทำให้สะดวกต่อการศึกษา และใช้พัฒนาโปรเจ็กต์ที่ไม่ซับซ้อนโดยง่าย จึงสามารถเสริมประสิทธิภาพระบบไมโครคอมพิวเตอร์ให้ทำงานได้มากกว่าเครื่องตั้งโต๊ะทำงานทั่วไป  ซึ่งผู้สนใจทั่วโลกต่างก็นำวงจรต้นแบบไปพัฒนาเพื่อใช้งานในด้านต่าง ๆ มากมาย ดังรูปที่ 1)

รูปที่ 1) หลากหลายโครงการที่นักเล่นไมโคร ฯ นำโปรเจ็กต์อาร์ดูอิโน่ไปพัฒนาเป็นอุปกรณ์ต้นแบบชนิดต่าง ๆ

What is Arduino ?

อาร์ดูอิโน่คืออะไร ? ผู้เขียนเชื่อว่าท่านผู้อ่านหลายท่านคงมีความสงสัย และอยากรู้จักกับอาร์ดูอิโน่มากกว่านี้  ผู้เขียนขออนุญาติกล่าวพอสังเขปดังนี้

อาร์ดูอิโน่ คือเครื่องมือที่ใช้สร้างระบบสมองกลที่สามารถควบคุม และตอบสนองกับสภาพแวดล้อมได้มากกว่าเครื่องคอมพิวเตอร์ตั้งโต๊ะ หรืออีกนัยหนึ่ง หมายถึง การผสมผสานกันระหว่าง ระบบสมองกลซึ่งเป็นอุปกรณ์อิเลคโทรนิคส์ฮาร์ดแวร์ (Physical electronic hardware) เข้ากับการโปรแกรมมิ่ง (Programming Environment) และกลุ่มผู้สนใจร่วมกัน (Community & Philosophy) โดยนำมาสร้างสรรอุปกรณ์เสริม หรือนวตกรรมใหม่ ๆ ที่สามารถควบคุม และตอบสนองกับสภาพแวดล้อมในชีวิตประจำวัน

อาร์ดูอิโน่จึงสามารถนำไปใช้เป็นสมองกลเพื่อควบคุมอุปกรณ์ต่อพ่วง หรืออุปกรณ์อิเลคโทรนิคส์อื่น ๆ ให้ดำเนินการตามกระบวนการโปรแกรมที่กำหนดไว้ด้วยบอร์ดอาร์ดูอิโน่เอง หรือรับคำสั่งจากระบบไมโครคอมพิวเตอร์ ไม่ว่าจะนำไปใช้ในงานด้านการศึกษา เช่นศึกษาระบบหุ่นยนต์ หรือใช้ในชีวิตประจำวัน เช่น อุปกรณ์ตรวจวัดปริมาณน้ำสำหรับต้นไม้แจ้งเตือนผ่าน Twitter หรือควบคุมอุปกรณ์ไฟฟ้าด้วยเซ็นเซอร์ชนิดต่าง ๆ เป็นต้น

รูปที่ 2) แสดงการนำอาร์ดูอิโน่พัฒนางานด้านการศึกษา และประยุกต์ใช้ในชีวิตประจำวัน

อาร์ดูอิโน่ เป็นแพล็ตฟอร์มที่พัฒนามาจากโปรเจ็กต์ Wiring [3] ที่ใช้ไมโครคอนโทรลเลอร์ AVR รุ่น ATMega128 โดยย่อส่วนให้เล็กลงด้วยการเปลี่ยนหน่วยประมวลผลเป็น AVR รุ่นเล็กกว่า คือ ATMega 8/168/328 ที่มีประสิทธิภาพสูง ด้วยการประมวลผลที่ความเร็ว 1 คำสั่งต่อหนึ่งสัญญาณนาฬิกา หรือประมาณ 20 ล้านคำสั่งต่อวินาที สำหรับรุ่นที่ใช้สัญญาณนาฬิกา 20 MHz ซึ่งเพียงพอต่อการใช้งานในโปรเจ็กต์ที่ไม่ซับซ้อนมากนัก รวมทั้งทำให้มีราคาถูกลงมาก ประกอบกับใช้วงจรที่สามารถสร้างเองได้ที่บ้าน ทำให้อาร์ดูอิโน่เป็นแพล็ตฟอร์มที่มีผู้สนใจใช้งานทั่วโลก

อาร์ดูอิโน่ถูกสร้างขึ้นมาในรูปแบบบอร์ดทดลองหลากชนิดเพื่อจุดประสงค์ที่แตกต่างกัน ดังรูปที่ 3) เช่นบอร์ดทดลอง Paperduino ออกแบบให้นักเรียนนักศึกษาสามารถสร้างเองในห้องแล็ป ArduPilot ออกแบบให้ใช้ควบคุมระบบออโต้ไพล็อท (Autopilot) สำหรับเครื่องบินเล็กบังคับวิทยุ และ LilyPad ออกแบบให้สวมใส่ได้ โดยเย็บติดกับเสื้อผ้า เป็นต้นครับ สำหรับท่านผู้อ่านที่สนใจรายละเอียดสามารถค้นหาข้อมูลเพิ่มเติมได้จากเว็ปในอ้างอิงท้ายบทความครับ

รูปที่ 3) บอร์ดทดลองอาร์ดูอิโน่ในต่างประเทศ

บอร์ดทดลอง อาร์ดูอิโน่สัญชาติไทย

สำหรับในประเทศไทย ก็มีกลุ่มผู้สนใจอาร์ดูอิโน่ไม่น้อย และปัจจุบันเราสามารถหาซื้อบอร์ดทดลองชนิดต่าง ๆ ได้จากตัวแทนจำหน่ายหลายบริษัท[4][5]ในไทย อย่างไรก็ตามเนื่องจากบอร์ดนำเข้ามีราคาค่าตัวค่อนข้างสูง อาร์ดูอิโน่สัญชาติไทย จึงเป็นตัวเลือกที่น่าสนใจ เพราะประสิทธิภาพไม่ได้ด้อยกว่าบอร์ดต้นฉบับครับ

ปัจจุบันในประเทศไทยมีผู้ผลิตบอร์ดทดลองหลายราย ผู้เขียนขออนุญาติแนะนำบางส่วนดังรูปที่ 4) ดังนี้ครับ

  • บอร์ด Freeduino จากเว็ปไซต์ Ayarafun Factory[6] โดยหนุ่มไทยไฟแรง เป็นบอร์ดทดลองที่สร้างตามแพล็ตฟอร์มอาร์ดูอิโน่รุ่น Arduino Diecimila จึงเป็นบอร์ดไทยเพียงบอร์ดเดียวที่มีความเข้ากันได้กับอร์ดเสริมมาตรฐาน “อาร์ดูอิโน่ชิลด์” (Arduino Shield) ทุกประการ
  • บอร์ดทดลอง ET-BASE AVR EASY168 จากบริษัท อีทีที[7] เป็นบอร์ดทดลองที่ออกแบบตามแนวคิดเบสบอร์ด (Based-Board) เป็นบอร์ดทดลองเดียวที่ติดตั้งขั้วอินเตอร์เฟสกับโมดูล ENC28J60 Ethernet สำหรับสื่อสารผ่านระบบเน็ตเวิร์ค และวงจรขยายเอ๊าพุตท์มาพร้อม โดยสนับสนุนการใช้งานอุปกรณ์อินเตอร์เฟสอื่น ๆ ที่ผลิตและออกแบบโดยบริษัทเอง
  • บอร์ดทดลอง POP-168 with Interface Board เป็นบอร์ดทดลองของบริษัทบริษัท อินโนเวตีฟ เอ็กเพอริเมนต์ จำกัด [8] ที่เพิ่มเติมขาสัญญาณเป็นขั้วต่อ JST ให้สามารถนำไปใช้งานง่ายขึ้น โดยบอร์ดสนับสนุนอุปกรณ์และอินเตอร์เฟสของตนเองเช่นกัน

รูปที่ 4) บอร์ดทดลองสัญชาติไทย

อนึ่งสำหรับบอร์ดทดลองข้างต้นเป็นบอร์ดทดลองที่ใช้ไมโครคอนโทรลเลอร์ AVR ATMega168 มีหน่วยความจำแฟลชรอมไว้บันทึกโปรแกรมขนาด 16 KB และหน่วยความจำแรมขนาด 1 KB ในกรณีที่ต้องการอินเตอร์เฟสกับอุปกรณ์ชนิดอื่น ๆ พร้อม ๆ กันหลายชนิด อาจจะต้องทำการอัพเกรดชิพเป็นรุ่นที่มีหน่วยความจำมากกว่าคือ AVR ATMega328 ซึ่งมีหน่วยความจำแฟลชรอมเพิ่มเป็น 32 KB และแรมขนาด 2KB นั้นสามารถทำได้เฉพาะบอร์ดทดลอง Freeduino และบอร์ด ET-BASE AVR EASY168 เท่านั้นเนื่องจากใช้ซ็อกเก็ตแบบ DIP 28 ขาสัญญาณ ซึ่งในปัจจุบัน ผู้อ่านสามารถเลือกซื้อบอร์ดทดลองดังกล่าวที่ติดตั้งชิพ AVR ATMega328 ได้โดยไม่ต้องอัปเกรด อย่างไรก็ตามกรณีที่ต้องการใช้หน่วยความจำมากกว่านี้อีกสามารถขยับไปใช้รุ่นใหญ่ Arduino MEGA เช่นกันครับ

แหล่งข้อมูลและคู่มือ

แหล่งข้อมูลแรกที่ผู้เขียนใคร่ขอแนะนำ คือสังคมออนไลน์ที่มีผู้รักและสนใจในโปรเจ็กต์อาร์ดูอิโน่ สามารถให้ความช่วยเหลือ เป็นที่ปรึกษา ให้คำแนะนำได้เป็นอย่างดี ก็มีมากมายทั้งบล็อก และเว็ปไซต์ เช่น ไอรยาฟันส์ [6] และเว็ปไซต์อิเลคทูเดย์ 3.0 [9] แหล่งประชาคมยอดฝีมือ ที่พบปะของนักประดิษฐ์ชาวไทย มากมายหลายท่าน

หนังสือคู่มือฉบับอิเลคโทรนิคส์ ผู้เขียนใคร่ขอแนะนำ หนังสือ Arduino Programming NoteBook [10] แต่งโดยคุณ Brian W. Evans และแหล่งข้อมูลสำคัญไม่ว่าจะเป็นคำแนะนำสำหรับผู้เริ่มต้น ไลบรารี ซอฟท์แวร์ หรือโปรเจ็คต์โชว์ คือที่เว็ปไซต์ของโปรเจ็กต์ อาร์ดูอิโน่ [1] เอง อย่างไรก็ตามสำหรับหนังสือภาษาไทยสามารถสอบถามได้จากบริษัท ฯ ผู้ผลิตโดยตรงครับ

โปรแกรมพัฒนาระบบ

การพัฒนาโปรแกรมสำหรับบอร์ดทดลองอาร์ดูอิโน่ จะต้องทำการดาวน์โหลดซอฟท์แวร์สำหรับพัฒนาโปรแกรมจากโฮมเพจ [1] โดยสามารถเลือกตามชนิดของระบบปฏิบัติการที่ใช้ ประกอบไปด้วย ระบบปฏิบัติการวินโดว์ (Windows) ระบบปฏิบิตการแม็ค โอเอส เอ็กซ์ (Mac OS X) และระบบปฏิบัติการลินุกซ์ (Linux 32 Bit)

สำหรับระบบปฏิบัติการวินโดว์ หลังจากดาวน์โหลดซอฟท์แวร์ สามารถติดตั้งโดยเปิด ZIP ไฟล์ และนำออกไปติดตั้งที่ไดร์ฟ C: ตามโครงสร้างโฟรเดอร์ที่บันทึกในแฟ้มซอฟท์แวร์ได้ทันที สำหรับท่านที่ดาวน์โหลดโปรแกรมพัฒนาระบบเวอร์ชั่นใหม่ ๆ จากเว็ปไซต์อาร์ดูอิโน่ จะต้องทำการคัดลอดไฟล์ board.txt จากโฟรเดอร์ ..arduino-00XXhardware ของโปรแกรมพัฒนาระบบที่ท่านได้รับมาพร้อมกับบอร์ดทดลองไปไว้ในโฟร์เดอร์เดียวกันของโปรแกรมพัฒนาระบบเวอร์ชั่นใหม่ หรือเปิดไฟล์ ..arduino-00XXhardwareboard.txt แล้วเพิ่มพารามิเตอร์สำหรับบอร์ดแต่ละชนิด ดังตารางที่ 1 ครับ

ตารางที่ 1) พารามิเตอร์สำหรับบอร์ดทดลองต่าง ๆ ที่ควรระบุในไฟล์ ..arduino-00XXhardwareboard.txt

บอร์ดทดลอง ET-EASY168 BASE บอร์ดทดลอง ET-EASY328p BASE หรือที่อัปเกรดเป็น Atmega328p บอร์ดทดลอง Freeduino ATMega168 บอร์ดทดลอง Freeduino ATMega328p หรือที่อัปเกรดเป็น Atmega328p บอร์ดทดลอง INEX POP-168
et_easy168.name = ET-EASY168 BASEet_easy168.upload.protocol=stk500

et_easy168.upload.maximum_size=14336

et_easy168.upload.speed=19200

et_easy168.build.mcu=atmega168

et_easy168.build.f_cpu=19660800L

et_easy168.build.core=arduino

et_easy328.name = ET-EASY328 BASEet_easy328.upload.protocol=stk500

et_easy328.upload.maximum_size=30720

et_easy328.upload.speed=19200

et_easy328.build.mcu=atmega328p

et_easy328.build.f_cpu=19660800L

et_easy328.build.core=arduino

changdiecimila.name=Chang (TH) Freeduino ATmega168

changdiecimila.upload.protocol=stk500

changdiecimila.upload.maximum_size=14336

changdiecimila.upload.speed=19200

changdiecimila.build.mcu=atmega168

changdiecimila.build.f_cpu=16000000L

changdiecimila.build.core=arduino

changdiecimila.bootloader.low_fuses=0xFF

changdiecimila.bootloader.high_fuses=0xDA

changdiecimila.bootloader.extended_fuses=0x05

changdiecimila.bootloader.unlock_bits=0x3F

changdiecimila.bootloader.lock_bits=0x0F

changdiecimila.name=Chang (TH) Freeduino ATmega328

changdiecimila.upload.protocol=stk500

changdiecimila.upload.maximum_size=30720

changdiecimila.upload.speed=57600

changdiecimila.build.mcu=atmega328p

changdiecimila.build.f_cpu=16000000L

changdiecimila.build.core=arduino

changdiecimila.bootloader.low_fuses=0xFF

changdiecimila.bootloader.high_fuses=0xDA

changdiecimila.bootloader.extended_fuses=0x05

changdiecimila.bootloader.unlock_bits=0x3F

changdiecimila.bootloader.lock_bits=0x0F

inexpop.name=INEX-Pop168inexpop.upload.protocol=stk500

inexpop.upload.maximum_size=14336

inexpop.upload.speed=19200

inexpop.build.mcu=atmega168

inexpop.build.f_cpu=16000000L

inexpop.build.core=arduino

รู้จักโปรแกรมพัฒนาระบบอาร์ดูอิโน่ (Arduino Environment)

เมื่อติดตั้งโปรแกรมเรียบร้อยให้ดับเบิ้ลคลิ๊กที่ไฟล์ Arduino.exe เพื่อรันโปรแกรมอาร์ดูอิโน่ อิดิเตอร์ โปรแกรมจะแสดงหน้าต่างดังรูปที่ 5)  ซึ่งมีเมนูควบคุมการใช้งานที่สำคัญ ดังนี้

รูปที่ 5) โปรแกรมอิดิเตอร์ Arduino

  • เมนู Verify ใช้สำหรับคอมพลาย์(Compile) โปรแกรม โดยปกติใช้เพื่อตรวจสอบความถูกต้องของโปรแกรมที่เขียน
  • เมนู Stop สำหรับปิดการทำงานส่วนโปรแกรมมอนิเตอร์พอร์ตอนุกรม(Serial Monitor)
  • เมนู New Sketch สำหรับสร้างแฟ้มข้อมูลที่บรรจุส่วนของโปรแกรม(Source Code) แฟ้มใหม่ โดยอาร์ดูอิโน่เรียกแฟ้มข้อมูลเหล่านี้ว่าสเก็ต (Sketch) โดยบรรจุส่วนของโปรแกรมอย่างย่อ ซึ่งกรณีสร้างสก็ตหลายแฟ้มข้อมูลไว้ในโฟรเดอร์เดียวกัน โปรแกรมจะถือว่าทุกแฟ้มข้อมูลเป็นส่วนหนึ่งของโปรแกรมที่มีชื่อเดียวกับโฟรเดอร์ โดยจะรวมเป็นโปรแกรมเดียวกันในขั้นตอนคอมพลาย์
  • เมนู File Open สำหรับเปิดแฟ้มข้อมูลสเก็ตที่เคยบันทึกเก็บไว้
  • เมนู File Save สำหรับบันทึกแฟ้มข้อมูลสเก็ตที่เปิดทั้งหมดลงดิสค์
  • เมนู Upload สำหรับอัปโหลดโปรแกรมที่พัฒนาที่บันทึกในโฟรเดอร์ปัจจุบันเข้าสู่บอร์ดทดลอง โดยจะดำเนินการคอมพลาย์โปรแกรมใหม่ทุกครั้ง
  • เมนู Serial Monitor สำหรับเปิดหน้าต่างมอนิเตอร์ สำหรับรับข้อมูลด้วยพอร์ตสื่อสารอนุกรม
  • ชื่อแฟ้มข้อมูลสเก็ตสำหรับส่วนของโปรแกรมที่แสดงในหน้าต่าง โดยสามารถใช้งานแบบหลายแฟ้มข้อมูลสเก็ตได้ โดยจะต้องดำเนินการบันทึกแฟ้มข้อมูลสเก็ตทั้งหมดไว้ในโฟรเดอร์เดียวกัน
  • ส่วนของโปรแกรมย่อย setup เป็นส่วนที่บรรจุส่วนของโปรแกรมที่ใช้กำหนดค่าเบื้องต้นให้กับโปรแกรม โดยเมื่ออัปโหลดขึ้นบอร์ดทดลองแล้ว โปรแกรมย่อยนี้จะทำงานเพียงครั้งเดียว และแฟ้มข้อมูลสเก็ตหลักเท่านั้นที่มีส่วนของโปรแกรมย่อย setup เท่านั้น (แฟ้มข้อมูลสเก็ตหลักจะเป็นแฟ้มข้อมูลที่มีชื่อเดียวกับโฟรเดอร์ที่บรรจุแฟ้มข้อมูลสเก็ตทั้งหมด)
  • ส่วนของโปรแกรมย่อย loop เป็นส่วนที่บรรจุส่วนการทำงานของโปรแกรมหลัก โดยโปรแกรมย่อย loop ที่ถูกโปรแกรมเรียกทำงานในลักษณะวนรอบไม่รู้จบ
  • ส่วนหน้าจอแสดงผลการทำงานของโปรแกรมอิดิเตอร์

การพัฒนาโปรแกรมอาร์ดูอิโน่

การพัฒนาโปรแกรมอาร์ดูอิโน่ ทำได้โดยการสร้างแฟ้มข้อมูลสเก็ต(Sketch) ใหม่ และสร้างส่วนโปรแกรมหลัก คือส่วนของโปรแกรมย่อย setup สำหรับบรรจุส่วนของโปรแกรมที่ใช้กำหนดค่าเริ่มต้น และส่วนของโปรแกรมทำงานหลัก คือโปรแกรมย่อย loop เพื่อบันทึกส่วนการทำงานของโปรแกรมตามต้องการ โดยเมื่อทำการบันทึกแฟ้มข้อมูลสเก็ตนี้ โปรแกรมจะทำการสร้างโฟรเดอร์เป็นชื่อเดียวกันกับแฟ้มข้อมูลที่บันทึก และบันทึกไฟล์ไว้ในนั้น

โปรแกรมจะถือว่าแฟ้มข้อมูลเสก็ตใด ๆ ที่บรรจุในโฟรเดอร์นี้เป็นส่วนหนึ่งของโปรแกรมที่มีชื่อเดียวกับโฟรเดอร์ ดังนั้นเราสามารถสร้างแฟ้มข้อมูลสเก็ตขึ้นใหม่เพื่อจัดเก็บโปรแกรมย่อยแยกเป็นหมวดหมู่ตามจุดประสงค์ที่ต้องการแล้วบันทึกเป็นชื่อแฟ้มข้อมูลสเก็ตให้มีชื่อสื่อความหมายตามจุดประสงค์ที่กำหนดขึ้น ดังรูปที่ 6)

ผู้เขียนขอแสดงตัวอย่างประกอบคำอธิบาย ด้วยการสร้างแฟ้มข้อมูลสเก็ตจำนวน 4 แฟ้มข้อมูล คือแฟ้มข้อมูล My1stProgram ซึ่งเป็นโปรแกรมหลัก, แฟ้มข้อมูล Initialize บรรจุส่วนของโปรแกรมสำหรับกำหนดค่าเบื้องต้น รวมทั้งแฟ้มข้อมูล Routine1 และแฟ้มข้อมูล Routine2 ใช้บันทึกส่วนของโปรแกรมแยกย่อยตามชนิดงาน

เมื่อเราทำการอัปโหลดโปรแกรมเข้าสู่บอร์ดทดลอง โปรแกรมจะทำการรวมแฟ้มข้อมูลทั้งหมดเข้าด้วยกัน และสร้างเป็นแฟ้มข้อมูล My1stProgram.cpp ในโฟรเดอร์ ..applet ซึ่งมีส่วนของโปรแกรมแสดงดังตารางที่ 2) ดังนี้

ตารางที่ 2) แสดงส่วนของโปรแกรม My1stProgram.cpp ที่สร้างจากแฟ้มข้อมูลสเก็ตในโฟรเดอร์ My1stProgram
#include “WProgram.h”

void setup();
void loop();
void InitProgram();
void Routine1_DoSomething();
void Routine1Process();
void Routine2_DoSomething();
void Routine2Process();
void setup()

{
InitProgram();
}

void loop()

{
Routine1Process();
Routine2Process();
}

void InitProgram()

{
// Do all initialize program
}

void Routine1_DoSomething()
{

}

void Routine1Process()

{
Routine1_DoSomething();
}

void Routine2_DoSomething()

{

}

void Routine2Process()

{
Routine2_DoSomething();
}

int main(void)

{
init();
setup();
for (;;)
loop();
return 0;
}

ผู้เขียนได้กล่าวแนะนำบอร์ดทดลองอาร์ดูอิโน่ และการพัฒนาโปรแกรมสำหรับบอร์ดทดลองนี้พอสังเขปแล้ว ลำดับถัดไป เราจะทดลองพัฒนาโปรแกรมเพื่อสั่งให้บอร์ดทดลองอาร์ดูอิโน่ทำงานดูครับ

ผู้เขียนขอเริ่มต้นด้วยการแสดงการพัฒนาโปรแกรมสื่อสารแบบอนุกรมกับบอร์ดทดลองอาร์ดูอิโน่ โดยกำหนดให้บอร์ดทดลองรับข้อมูลจากการกดปุ่มคีย์บอร์ดของคอมพิวเตอร์ เพื่อนำไปประมวลผลปิดเปิดหลอดแอลอีดี (LED) ให้ดับหรือติดสว่าง โดยแสดงข้อความเมนูโต้ตอบกับยูสเซอร์ให้เลือกผ่านพอร์ตสื่อสารอนุกรมที่หน้าต่างมอนิเตอร์ พร้อมทั้งแสดงข้อมูลของปุ่มคีย์บอร์ดที่กดผ่านหน้าจอแอลซีดี (LCD)

สำหรับการทดลองนี้ ผู้เขียนตั้งใจแสดงให้เห็นถึงการควบคุมบอร์ดทดลองสื่อสารกับอุปกรณ์อินเตอร์เฟสหลากชนิด เช่น พอร์ตสื่อสารอนุกรม หลอดแอลอีดี และหน้าจอแอลซีดี ด้วยชุดคำสั่ง และไลบรารีภาษาซี ที่สามารถทำความเข้าใจโดยง่ายครับ

เตรียมการ

การทดลองนี้ต้องการใช้บอร์ดทดลองอาร์ดูอิโน่ โดยผู้อ่านสามารถจัดหาได้ตามรุ่นและรูปแบบที่ชอบครับ เนื่องจากการเรียกขาสัญญาณของบอร์ดทดลองในตระกูลอาร์ดูอิโน่ จะใช้ชื่อเรียกขาสัญญาณแต่ละขาแบบเดียวกันหมด แม้ว่าการต่อขาสัญญาณต่าง ๆ จึงเป็นไปตามรูปแบบของบอร์ดทดลองก็ตาม พร้อมทั้งจัดหาหลอดแอลอีดี 2 หลอดสำหรับแสดงการทำงานจากคำสั่งที่รับจากคีย์บอร์ด และจอแอลซีดีขนาดแสดงผล 16 ตัวอักษร 2 บรรทัด โดยผู้เขียนเลือกใช้รุ่น MTC-16205D LED BACKLIGHT ของบริษัท อีทีที เนื่องจากมีราคาถูก และตัวอักษรสวยงามครับ สำหรับอุปกรณ์ประกอบพื้นฐานอื่น ๆ เช่น สายไฟสั้น คละสีสำหรับเชื่อมวงจร แผ่นโปรเจ็กต์บอร์ด สำหรับติดตั้งอุปกรณ์ ผู้อ่านสามารถจัดหาได้ตามสะดวกครับ

การประกอบวงจร

การประกอบวงจรของบอร์ดทดลองอาร์ดูอิโน่กับอุปกรณ์ต่อพ่วงอื่น ๆ สามารถดำเนินการได้ตามรูปที่ 7) ครับ เพื่อความสะดวกผู้เขียนใช้แผ่นโปรเจ็กต์บอร์ดเชื่อมโยงระหว่างบอร์ดทดลองกับอุปกรณ์ต่อพ่วงอื่น ๆ โดยกำหนดให้ขาสัญญาณดิจิตัล ของบอร์ดทดลองอาร์ดูอิโน่ต่ออุปกรณ์ ดังต่อไปนี้

ขาสัญญาณดิจิตัลของบอร์ทดลองอาร์ดูอิโน่ อุปกรณ์ต่อพ่วง
2 ต่อกับขาสัญญาณแอโนด (ขาที่ยาวกว่า) ของหลอดแอลอีดีหลอดที่ #1
3 ต่อกับขาสัญญาณแอโนด (Anode) ของหลอดแอลอีดีหลอดที่ #2
6 ต่อกับขาสัญญาณ RS (Register Select) ของจอภาพแอลซีดี สำหรับเลือกโหมดข้อมูล (Data) หรือคำสั่ง (Command)
7 ต่อกับขาสัญญาณ RW (Read/Write) ของจอภาพแอลซีดี สำหรับอ่าน หรือเขียนข้อมูลเข้าสู่จอแอลซีดี
8 ต่อกับขาสัญญาณ EN (Enable) ของจอภาพแอลซีดี เพื่อเปิดปิดการทำงานจอ
9 ต่อกับขาสัญญาณ Data Bit #4 ของจอภาพแอลซีดี สำหรับส่งข้อมูลตัวอักษร
10 ต่อกับขาสัญญาณ Data Bit #5 ของจอภาพแอลซีดี สำหรับส่งข้อมูลตัวอักษร
11 ต่อกับขาสัญญาณ Data Bit #6 ของจอภาพแอลซีดี สำหรับส่งข้อมูลตัวอักษร
12 ต่อกับขาสัญญาณ Data Bit #7 ของจอภาพแอลซีดี สำหรับส่งข้อมูลตัวอักษร

โปรเจกต์ MyFirstProgram

โปรเจ็กต MyFirstProgram (myFirstProgram.pde) เป็นโปรแกรมที่มีการทำงานไม่ซับซ้อนมากนัก พัฒนาขึ้นเพื่อทดลองควบคุมบอร์ดอาร์ดูอิโน่ให้ทำงานตามต้องการ โดยโปรเจกต์จะประกอบไปด้วยแฟ้มข้อมูล 2 ไฟล์ คือ

  • แฟ้มข้อมูลpde เป็นแฟ้มข้อมูลชื่อเดียวกับโปรเจ็กต์ ที่ใช้เป็นส่วนของโปรแกรมควบคุมหลัก โดยบรรจุส่วนของโปรแกรม setup และส่วนของโปรแกรมloop ไว้ในแฟ้มข้อมูลนี้
  • แฟ้มข้อมูล pde เป็นแฟ้มข้อมูลเสริมสำหรับบรรจุส่วนของโปรแกรมควบคุมจอภาพแอลซีดี ผู้เขียนเจตนาแยกเป็นแฟ้มข้อมูลใหม่เพื่อให้ท่านผู้อ่านคุ้นเคยกับการแยกพัฒนาโปรแกรมเป็นส่วน ๆ ซึ่งคอมพลายเลอร์จะนำส่วนของโปรแกรมนี้ไปรวมกับส่วนของแฟ้มข้อมูลหลักเมื่อมีการเรียกใช้งานคอมพลายโปรแกรมครับ

แฟ้มข้อมูล MyFirstProgram.pde

แฟ้มข้อมูล MyFirstProgram.dpe มีส่วนของโปรแกรมแสดงดังตารางที่ 3) เป็นแฟ้มหลักของโปรเจ็กต์ MyFirstProgram ซึ่งสามารถบรรจุส่วนของการเรียกใช้ไลบรารีอื่น (Include) การกำหนดค่าเบื้องต้น (Define, Variable declaration) และส่วนของโปรแกรมหลัก ไว้ในแฟ้มข้อมูลนี้

แฟ้มข้อมูล MyFirstProgram มีส่วนของโปรแกรม และฟังก์ชั่นที่สำคัญ คือ

ส่วนการเรียกใช้คลาสจากไลบรารี LiquidCrystal

โปรเจ็กต์ MyFirstProgram เรียกใช้ไลบรารี LiquidCrystal โดยทำการ include ไว้ในตอนต้นของแฟ้มข้อมูล และกำหนดอินแสตนด์ (Instant) ชื่อ lcd เพื่อใช้เป็นออปเจ็กต์อ้างถึงคลาส LiquidCrystal โดยกำหนดขาสัญญาณที่ใช้ควบคุมจอภาพแอลซีดีคือขาสัญญาณหมายเลข 6 จนถึงขาสัญญาณหมายเลข 12 เพื่อสื่อสารกับขาสัญญาณ RS, RW, EN, D4, D5 D6 และD7 ตามลำดับ เพื่อควบคุมการทำงานจอภาพแอลซีดี ดังนี้

LiquidCrystal    lcd( 6, 7, 8, 9, 10, 11, 12 ); // assign ‘lcd’ object as LiquidCrystal class

และทำการเรียกใช้ โดยกำหนดค่าเริ่มต้นเป็นจำนวนคอลัมน์ (Column) และแถว (Row) อีกครั้งในโปรแกรมย่อย Setup ดังนี้

lcd.begin( 16, 2 ); // Initialing LCD with 16 chars. x 2 rows.

พร้อมทั้งกำหนดขาสัญญาณหมายเลข 2 และขาสัญญาณหมายเลข 3 ควบคุมการทำงานหลอดแอลอีดี  โดยมีขาสัญญาณหมายเลข 13 ควบคุมหลอดแอลอีดีทดสอบที่ติดตั้งอยู่บนบอร์ดทดลองอยู่แล้วอีกหนึ่งดวง

โปรแกรมย่อย setup() เป็นโปรแกรมย่อยสำหรับเริ่มต้นการทำงานของบอร์ดทดลองอาร์ดูอิโน่ โดยจะทำงานเพียงครั้งเดียว ใช้เพื่อกำหนดค่าเบื้องต้นให้กับบอร์ดทดลอง ดังนี้

 Serial.begin( 19200 );    //  กำหนดค่าเบื้องต้นให้พอร์ตสื่อสารด้วยโกลบอลออปเจ็กต์ Serial ด้วยความเร็ว 19200 bps

 lcd.begin( 16, 2 );    //  กำหนดค่าเบื้องต้นให้ออปเจ็กต์แอลซีดี แสดงผลขนาด 16 คอลัมน์ 2 แถว

//  กำหนดให้ขาสัญญาณ LED1 (2), LED2 (3) และ LED13 (13) ใช้งานแบบเอ๊าพุตท์

  pinMode( LED1, OUTPUT ); // setup Pin#1 as OUTPUT

  pinMode( LED2, OUTPUT ); // setup Pin#2 as OUTPUT

  pinMode( LED13, OUTPUT ); // setup Pin#13 as OUTPUT

//  แสดงข้อความออกพอร์ตสื่อสารอนุกรมที่ต่อพ่วงอยู่

  Serial.println( “SYSTEM Ready.” );       //  แสดงออกพอร์ตอนุกรม

  lcd.print( “SYSTEM Ready.” );     // แสดงออกหน้าจอแอลซีดี

  MainMenu();     // แสดงเมนูเพื่อให้ยูสเซอร์ใช้งาน

โปรแกรมย่อย loop() เป็นโปรแกรมย่อยที่ใช้ควบคุมการทำงานหลักของบอร์ดทดลองนี้ โดยโปรแกรมย่อยloop จะทำงานเป็นวนรอบไม่รู้จบจนกว่าจะปิดระบบหรือเปลี่ยนโปรแกรมใหม่ บรรจุส่วนของโปรแกรมควบคุมการทำงาน ที่ได้จัดเตรียมส่วนของโปรแกรมไว้ในแฟ้มข้อมูล MFP_MainCode.pde ดังนี้

  ReceiveInputData();     // อ่านข้อมูลจากพอร์ตสื่อสาร

  ActivateLED();     // ตีความข้อมูลที่ได้รับจากพอร์ตสื่อสาร และแสดงผล

  ShowLED13();     // แสดงผลการควบคุมการทำงานหลอดแอลอีดีหมายเลข 13

ตารางที่ 3) แฟ้มข้อมูล MyFirstProgram.pde
// *************************
// Project : MyFirstProgram
// *************************
// include library to this project —————————————-#include <LiquidCrystal.h> // Hitachi HD44780 LCD Controller library// predefine constancy —————————————————-#define LED1         2  // assign PIN#2 as LED#1 output
#define LED2         3  // assign PIN#3 as LED#2 output
#define LED13        13 // assign PIN#13 as LED#13 output (Build-in LED)// Global variables declaration section ———————————–
// Using LiquidCrystal Display (LCD) with HD44780 Controller as display monitor
// lcd pin assignments : ( Using 4 bit x data, 3 bit control
// arduino pin# <-> lcd pin#//    6               rs
//    7               rw
//    8               en
//    9               d4
//    10             d5
//    11             d6
//    12             d7//LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)  // parameter format
LiquidCrystal lcd( 6, 7, 8, 9, 10, 11, 12 ); // assign ‘lcd’ object as LiquidCrystal classint inputData = 0;    // buffer to receive incomming data from serial port
int led13State = LOW; // LED#13 display state variable// Initializing section —————————————————void setup()

{
Serial.begin( 19200 ); // Initializing serial object at baud rate 19200 bps
lcd.begin( 16, 2 ); // Initialing LCD with 16 chars. x 2 rows.

// Configuration hardware pin

pinMode( LED1, OUTPUT ); // setup Pin#1 as OUTPUT
pinMode( LED2, OUTPUT ); // setup Pin#2 as OUTPUT
pinMode( LED13, OUTPUT ); // setup Pin#13 as OUTPUT
Serial.println( “SYSTEM Ready.” );   // Show welcome message on serial port
lcd.print( “SYSTEM Ready.” ); // Show welcome message on lcd module
MainMenu(); // Display main menu
}

// Main program section —————————————————

void loop()

{
ReceiveInputData(); // If any data on serial port, get it.
ActivateLED(); // active LED based on input data
ShowLED13(); // toggle LED#13
}

แฟ้มข้อมูล MFP_MainCode.pde

แฟ้มข้อมูล MFP_MainCode.pde แสดงดังตารางที่ 4) เป็นแฟ้มข้อมูลเสริม สำหรับบรรจุส่วนการควบคุมการทำงานของฟังก์ชั่นต่าง ๆ และแสดงผลตามที่กำหนด ดังนี้

โปรแกรมยอ่ย MainMenu() เป็นโปรแกรมย่อยสำหรับแสดงข้อมูลเมนูให้ผู้ใช้เลือกผ่านหน้าจอเทอร์มินัลด้วยพอร์ตสื่อสารอนุกรม ดังนี้

  Serial.println( “rnMain menu:rn” );      //   แสดงข้อความออกพอร์ตสื่อสารอนุกรม

  Serial.println( “[1] Set LED#1 is ON” );

  Serial.println( “[2] Set LED#2 is ON” );

  Serial.println( “[3] Set LED#1 is OFF” );

  Serial.println( “[4] Set LED#2 is OFF” );

  Serial.println( “[5] Toggle LED#13” );

  Serial.println( “rnPress [1],[2],[3],[4] or [5] to activate LEDrn” );

  lcd.setCursor( 0, 1 ); // set cursor on LCD Module

  lcd.print( “Press any key..” );   //   แสดงข้อความบนจอแสดงผลแอลซีดี

โปรแกรมย่อย ReceiveInputData() เป็นโปรแกรมย่อยสำหรับอ่านค่าจากพอร์ตสื่อสารอนุกรม โดยจะทำการตรวจสอบว่ามีข้อมูลเข้าหรือไม่ แล้วทำการอ่านข้อมูล ดังนี้

{

  if ( Serial.available() > 0 )     //   ตรวจสอบว่ามีข้อมูลรออยู่ในพอร์ตสื่อสารหรือไม่

  {    //  ถ้ามี

    inputData = Serial.read();      //  อ่านแล้วบันทึกไว้ในตัวแปร inputData

    lcd.clear();                    //  แสดงข้อมูลที่อ่านได้บนจอภาพแอลซีดี

    lcd.print( “Input = ” );    

    lcd.print( inputData, DEC );

  } else

  {

    inputData = 0;                  //   ถ้าไม่มีให้กำหนด inputData เท่ากับ 0

  }

โปรแกรมย่อย ActivateLED() เป็นโปรแกรมย่อยสำหรับควบคุมหลอดแอลอีดี ให้แสดงผลตามข้อมูลที่บรรจุใน inputData ดังนี้

  if ( inputData == 0 ) return;     //   ตรวจสอบว่ามีข้อมูลใหม่ใน inputData

  lcd.setCursor( 0, 1 );            //   เลื่อนเคอร์เซอร์บนจอแอลซีดีไปตำแหน่งคอลัมน์ 0 แถวที่ 1

  switch ( inputData )              //   เปรียบเทียบข้อมูลที่ได้รับ

  {

    case 49 :   //   ถ้ามีการกดปุ่ม ‘1’ บนคีย์บอร์ดแล้วกดปุ่ม [Send]

      digitalWrite( LED1, HIGH );   //   กำหนดให้หลอดแอลอีดี #1 เปล่งแสง โดยเขียนค่า HIGH ที่ขาสัญญาณ LED1

      lcd.print( “LED#1 = ON” ); 

      break;

    case 50 :   //   ถ้ามีการกดปุ่ม ‘2’ บนคีย์บอร์ด

      digitalWrite( LED2, HIGH );   //   กำหนดให้หลอดแอลซีดี #2 เปล่งแสง โดยเขียนค่า HIGH ที่ขาสัญญาณ LED2

      lcd.print( “LED#2 = ON” );

      break;

    case 51 :   //  กดปุ่ม ‘3’ บนคีย์บอร์ด

      digitalWrite( LED1, LOW );   //  ปิดหลอดแอลอีดี #1 โดยกำหนดค่าเป็น LOW

      lcd.print( “LED#1 = OFF” );

      break;

    case 52 :   //   กดปุ่ม’4’ บนคีย์บอร์ด

      digitalWrite( LED2, LOW );   //  ปิดหลอดแอลอีดี #2 โดยกำหนดค่าเป็น LOW

      lcd.print( “LED#2 = OFF” );

      break;

    case 53 :   //   กดปุ่ม ‘5’ บนคีย์บอร์ด

      led13State = !led13State;     //  สลับสถานะของตัวแปล led13State ระหว่าง HIGH และ LOW

      Serial.print( “:LED#13 Toggle = ” );   //   แสดงข้อมูลออกพอร์ตสื่อสารอนุกรม

      Serial.println( led13State, BIN );

      break;

  }

โปรแกรมย่อย ShowLED13() เป็นโปรแกรมย่อยสำหรับแสดงสถานะของหลอดแอลอีดีหมายเลข 13 ตามที่เลือกโดยการปุ่มหมายเลข 5 เพื่อสลับสถานนะของขาสัญญาณ ดังนี้

 digitalWrite( LED13, led13State );     //  แสดงผลหลอดแอลอีดีด้วยค่าของ led13State (HIGH/LOW)

ตารางที่ 4) แฟ้มข้อมูล MyFirstProgram.pde
void MainMenu()
{ // main menu, display on serial port and lcd module
Serial.println( “rnMain menu:rn” );
Serial.println( “[1] Set LED#1 is ON” );
Serial.println( “[2] Set LED#2 is ON” );
Serial.println( “[3] Set LED#1 is OFF” );
Serial.println( “[4] Set LED#2 is OFF” );
Serial.println( “[5] Toggle LED#13” );
Serial.println( “rnPress [1],[2],[3],[4] or [5] to activate LEDrn” );
lcd.setCursor( 0, 1 ); // set cursor on LCD Module
lcd.print( “Press any key..” );
}void ReceiveInputData()
{
if ( Serial.available() > 0 )  // if data available on serial port
{
inputData = Serial.read();   // read and save in ‘inputData’
lcd.clear();                 // clear lcd module
lcd.print( “Input = ” );     // print string
lcd.print( inputData, DEC ); // print ‘inputData’ in decimal value
}
else
{
inputData = 0;               // if no input data, reset ‘inputData’ to zero
}
}void ActivateLED()
{
if ( inputData == 0 ) return;  // if no new data
lcd.setCursor( 0, 1 );         // set lcd cursor to x=0, y=1
switch ( inputData )           // check ‘inputData’ value
{
case 49 : // press ‘1’ on keyboard
digitalWrite( LED1, HIGH ); // set pin ‘LED1’ to HIGH value (ON State)
lcd.print( “LED#1 = ON” );
break;
case 50 : // press ‘2’
digitalWrite( LED2, HIGH ); // set pin ‘LED2’ to HIGH value (ON State)
lcd.print( “LED#2 = ON” );
break;
case 51 :
digitalWrite( LED1, LOW ); // set pin ‘LED1’ to LOW value (OFF State)
lcd.print( “LED#1 = OFF” );
break;
case 52 :
digitalWrite( LED2, LOW ); // set pin ‘LED2’ to LOW value (OFF State)
lcd.print( “LED#2 = OFF” );
break;
case 53 :
led13State = !led13State;  // toggle state of ‘led13State’ ; HIGH or LOW
Serial.print( “:LED#13 Toggle = ” );
Serial.println( led13State, BIN );
break;
}
}void ShowLED13()
{ // set pin LED13 to led13State value
digitalWrite( LED13, led13State );
}

การทดสอบโปรแกรม

การทดสอบโปรแกรม MyFirstProgram.pde กับบอร์ดทดลองอาร์ดูอิโน่ สามารถดำเนินการได้โดยคอมพลาย์ส่วนของโปรแกรมด้วยโปรแกรมอาร์ดูอิโน่อิดิเตอร์ เวอร์ชั่น 0016 ขึ้นไป โดยปฏิบัติตามขั้นตอนดังต่อไปนี้

  • ประกอบวงจรโดยต่อบอร์ดทดลองอาร์ดูอิโน่เข้ากับหลอดแอลอีดี และจอภาพแอลซีดีให้เรียบร้อย ดังรูปที่ 7)
  • สร้าง และคอมพลายโปรแกรมpde พร้อมอัพโหลดเข้าสู่บอร์ดทดลอง
  • เมื่ออัพโหลดโปรแกรมเข้าสู่บอร์ดทดลองเรียบร้อย ให้เปิดหน้าต่าง Serial Monitor เพื่อใช้รับส่งข้อมูลกับบอร์ดทดลอง
  • กดปุ่ม [Reset] ที่บอร์ดทดลองเพื่อให้เริ่มทำงาน
  • บอร์ดทดลองจะส่งข้อมูลเมนูเข้าสู่หน้าต่าง Serial Monitor ดังรูปที่ 8)
  • ให้พิมพ์ ‘1’ ในกรอบเท็กซ์บ๊อกซ์ของหน้าต่าง Serial Monitor แล้วกดปุ่ม [Send] เพื่อส่งข้อมูลเข้าบอร์ดทดลอง
  • สังเกตุการเปลี่ยนแปลงที่หลอดแอลอีดี #1 และหน้าจอแอลซีดี โดยจะได้ผลดังรูปที่ 9)
  • กลับไปดำเนินการในข้อ 6) แล้วทดลองเปลี่ยนข้อมูลเป็น ‘2’, ‘3’, ‘4’ และ ‘5’ ตามลำดับ แล้วกดปุ่ม [Send] อีกครั้ง สังเกตุการเปลี่ยนแปลง
  • จบการทดลอง

รูปที่ 9) ผลการทดลองโปรแกรมบนบอร์ดทดลองอาร์ดูอิโน่

จากการทดลองพัฒนาโปรแกรม MyFirstProgram จะพบว่าเราได้เรียนรู้การใช้งานขาสัญญาณสื่อสารดิจิตัลของบอร์ดทดลองควบคุมการเปิดปิดหลอดแอลอีดีด้วยการส่งสัญญาณ HIGH (5v) และ LOW (0v) ให้กับหลอดแอลอีดี โดยสามารถใช้ขาสัญญาณสื่อสารดิจิตัลส่งสัญญาณควบคุมอุปกรณ์ต่อพ่วงอื่น ๆ ที่ใช้ระดับแรงดัน 5 V (ไม่เกิน 40mA) รวมทั้งเรียนรู้เรื่องการควบคุมจอภาพแอลอีดี ซึ่งเราสามารถนำไปประยุกต์ใช้ในงานต่าง ๆ มากมาย เช่นเป็นจอภาพแสดงผลระดับอณุหภูมิภายในเครื่องคอมพิวเตอร์ เป็นต้น

 

ส่งท้าย..

เป็นอย่างไรบ้างครับกับการเริ่มต้นพัฒนาโปรแกรมกับบอร์ดทดลองอาร์ดูอิโน่ จะพบว่า โปรแกรมอาร์ดูอิโน่ได้ลดขั้นตอนการทำความเข้าใจในส่วนการควบคุมรีจิสเตอร์ต่าง ๆ ของไมโครคอนโทรลเลอร์ ด้วยการสร้างเป็นไลบรารีสำเร็จให้เรียกใช้งาน เพื่อให้นักพัฒนาโปรแกรมสามารถทำความเข้าใจโดยง่าย  ซึ่งเป็นจุดเริ่มต้นให้นักพัฒนาซอฟท์แวร์บนไมโครคอมพิวเตอร์สามารถเรียนรู้ และเข้าใจการทำงานของเทคโนโลยีสมองกลฝังตัว (Embeded System) ของไมโครคอนโทรลเลอร์ได้เป็นอย่างดี

สำหรับฉบับหน้าเราจะลองนำบอร์ดทดลองอาร์ดูอิโน่มาประดิษฐ์สิ่งที่ใกล้ตัว และจำเป็นต้องใช้งานทุกวัน  โดยจะเพิ่มเติมฟังก์ชั่นอรรถประโยชน์ให้มากที่สุด มีจุดประสงค์เพื่อศึกษาการใช้งานโปรแกรมอาร์ดูอิโน่ร่วมกับบอร์ทดลองให้สามารถสื่อสารกับอุปกรณ์อิเลคโทรนิคชนิดอื่น ๆ ได้มากยิ่งขึ้น และสามารถนำความรู้ดังกล่าวมาสร้างสรรสิ่งประดิษฐ์หรือนวตกรรมแปลก ๆ ตามจินตนาการของเราให้สมกับสโลแกน เรียนให้รู้ เล่นให้เป็น และใช้ให้เกิดประโยชน์ครับ

ตอนนี้คงต้องจากกันเพียงเท่านี้