Sunday, August 29, 2021
Gearset matching 2021 program
Friday, August 27, 2021
CP1E Modbus-RTU simple master
ลูกค้าอยากให้ช่วยในส่วนเขียนโปรแกรมดึงค่าจาก modbus slave เข้ามาเก็บไว้ใน D memory ของ PLC CP1E โดยใช้ CP1W-CIF11 RS-422A/485 Option Boards ก็ใช้เทคนิค shift register เปิดหน้าคอนเทคเข้าไปเขียน-อ่าน ค่าแต่ละตัว
Tuesday, August 24, 2021
Wednesday, July 21, 2021
DVP-14SS2 Modbus ASCII On LABVIEW
Friday, July 31, 2015
Solved: error: 'TKD2' was not declared in this scope, LIFA_Base compile error
วันนี้ จะมาเล่าถึงปัญหาที่เจอในการเบิร์นโค๊ด LIFA_Base ที่เราใช้ในการทำให้ Arduino ของเราสามารถรับคำสั่งจาก LabVIEW ได้
ปัญหานี้ เริ่มเกิดขึ้นตอนที่ Arduino IDE เวอร์ชั่นใหม่ๆ ได้เพิ่ม Libraries ที่เกี่ยวกับ RobotIRremote แล้วไปประจวบเหมาะกับ LabVIEW interface for Arduino tool kit เข้าใจว่า น่าจะตั้งแต่เวอร์ชั่น 2.xx เป็นต้นไป จะมี libraries ที่เกี่ยวกับ IR ติดมาด้วย
ทีนี้ พอเราทำการ Compile LIFA_BASE ซึ่งมันได้ทำการเรียกหา IR libraries ที่อยู่ใน folder เดียวกับมันมา compile มันจะฟ้อง Error
“C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremoteTools.cpp:5:16: error: 'TKD2' was not declared in this scope
int RECV_PIN = TKD2; // the pin the IR receiver is connected to
^
Error compiling.”
ซึ่งเจ้า Arduino IDE นั้นไปเอา IR libraries ของมันมา compile แทน ซึ่งไม่น่าจะเป็นแบบนั้น มันก็เลย Error ขึ้นมา
วิธีทางแก้ไข ก็ไม่ยากครับ เราก็ทำการย้าย RobotIRremote libraries ของ Arduino ออกไปก่อน ไปไว้ที่ไหนก็ได้ อย่าให้ Arduino IDE มองเห็น จากนั้น ก็ทำการ compile LIFA_Base ใหม่ อีกครั้ง
คนที่เจอปัญหานี้ น่าจะเข้าใจ ผมขอไม่อธิบายละเอียด เอาเป็นว่า แก้ไขตามนี้ ก็คิดว่าจะโอเคหล่ะ
เอวังก็มีด้วยประการะฉะนี้
Saturday, January 4, 2014
Omron PLC Model CP1H-X40DT-D
วันนี้ ตั้งใจว่าจะเปิดหัวข้อที่เกี่ยวกับ PLC ไว้สักหน่อย เพราะว่ามีโอกาสได้จับงาน PLC ของ Omron รุ่น CJ2M-CPU33 มา ซึ่งต้องขอบอกว่า ตอนนั้น ความรู้ที่ร่ำเรียนมา มันมีเพื่อเอาไว้สอบเท่านั้น พอมาเจองานจริง งง จริงๆ ไม่รู้จะเขียนลอจิก อย่างไร เพราะเงื่อนไข (สำหรับผมในตอนนั้น) มันซับซ้อนมากๆ มีหลายเงื่อนไข ต้องเขียนดักกันไป ดักกันมา จนทำให้ไม่สามารถที่จะเอาหน้า contact มา lock กันเองได้ เพราะไม่งั้น ไล่กันหูตั้ง แน่ๆ
แต่งานนั้น ก็จบมาได้ ชนิดแบบว่า ไม่ได้หลับได้นอนกันเลยทีเดียว สู็กันจนวินาทีสุดท้ายที่ลูกค้ามาตรวจเครื่องเลยก็ว่าได้ มีแอบไปนอนหลับบนรถกันเลย เพราะคิดไม่ออกจริงๆ ตอนนั้น
ซึ่งเจ้า PLC CJ2M-CPU33 ตัวนั้นก็ได้ส่งลูกค้าไปแล้ว ครั้นจะซื้อมาเก็บไว้ศึกษา พอเห็นราคาแล้ว ก็ต้องหงายเงิบ แพงจริงๆ ไม่รู้ว่า มันแพงเพราะคุณสมบัติระดับเทพของมันหรือเปล่านะ
แต่ อย่างไรก็ดี ถ้ายังได้จับ PLC ของ Omron อีก ก็คงยังต้องใช้ CX-One Programmer ในการเขียน LADDER / Boolean อย่างแน่นอน อย่ากระนั้นเลย มาเขียนบันทึกสิ่งที่ได้ศึกษามาเก็บไว้บน Blog ดีกว่า จะได้เอาไว้เตือนความจำด้วย
ต้องขอย้อนกลับไป ตอนที่ทำโปรเจคกับเจ้า CJ2M-CPU33 ตอนนั้นสักหน่อย ต้องขอขอบคุณ thaiplc.com ที่มีเวบบอร์ด ไว้คอยตอบคำถามช่วยเหลือซึ่งกันและกัน เกี่ยวกับปัญหา และเกร็ดความรู้เกี่ยวกับ PLC ของไทย ซึ่งนับว่าเป็นแหล่งที่ใหญ่เชียวแหละ ที่มีคนเข้ามาอ่าน เพราะเท่าที่ดูแล้ว งานพวกนี้ คนที่ทำงานด้านนี้ คงไม่ค่อยได้เข้ามาตอบเท่าไหร่ เพราะ ดูแล้วแต่ละท่านคงจะยุ่งๆ แต่ ก็จะมีบางท่านที่แวะเวียนมาตอบคำถาม และคอยให้ความรู้อยู่อย่างสม่ำเสมอ ก็ต้องขอขอบคุณแหล่งความรู้ดีทีนี่ และแอดมิน ที่ดูแลระบบด้วยครับ
และก็เพราะ thaiplc.com นั่นแหละครับ ที่ทำให้ผมจะได้เริ่มต้นเปิดประเด็นหัวข้อ PLC ก็เพราะว่า มีพี่ท่านหนึ่งในเว็บบอร์ด thaiplc.com ได้ให้ผมยืม PLC Omron CP1H-X40DT-D มา 1 ตัว พร้อมด้วย RS232 และ Ethernet extension ที่ติดมากับ PLC ด้วย ผมก็ไม่นึกว่าจะมีคนใจดี ให้ผมยืม PLC ซึ่งราคาแต่ละตัว ก็ไม่ใช่ของที่จะให้ยืมกันได้ง่ายๆ ต้องขอขอบพระคุณความใจดีของพี่เขาจริงๆ ไว้ ณ ทีนี้ด้วย
ผมก็จะพยายามเขียนบันทึกไว้เรื่อยๆ ไว้ที่ blog นี่หล่ะกันครับ เดี๋ยวขอไปอ่าน manual มันก่อนหล่ะกันตอนนี้
Monday, March 25, 2013
รีวิวโปรแกรม In-sight กับ Smart Camera ของ Cognex
เมื่อวันที่ 22 มีนาคม 2556 ผมมีโอกาสได้ไปอบรมการใช้งานโปรแกรม In-Sight ซึ่งเป็นโปรแกรมประเภท Machine Vision คือสามารถเขียนโปรแกรมตรวจสอบงานในสายพานการผลิต (จริงๆ ก็แล้วแต่จะไปประยุกต์ใช้ แต่ ถ้านำมาใช้ในสายพานการผลิตจะเหมาะกว่า) เช่น การตรวจสอลสลาก การตรวจสอบหาจุดบกพร่องของงานที่ผลิตออกมา การนับจำนวนชิ้นงาน ซึ่งในอุตสาหกรรมการผลิตชิ้นส่วนต่างๆ แม้กระทั่งการผลิตยา และอาหาร ก็มีงานที่เกี่ยวกับ Machine Vision รวมอยู่ด้วย
ซึ่งเจ้าโปรแกรมนี้ หากใครเคยได้ใช้โปรแกรม VisionBuilder ของทางค่าย NI แล้วหล่ะก็ คงทำความคุ้นเคยกับมันได้ ไม่ยากนัก เพราะเค้าออกแบบมาแทบจะคล้ายกัน คือ เน้นให้สามารถเขียนโปรกรมผ่าน Graphic เลือกค่าต่างๆ ผ่านบล๊อกการทำงาน แต่ละขั้นตอน สุดท้ายก็ได้โปรแกรมตรวจสอบชิ้นงานอย่างที่ต้่องการ ในเวลาอันรวดเร็ว เพราะงานพวกนี้ จะว่าไปแล้ว ก็มีลักษณะที่ซ้ำกันไป ซ้ำกันมา ต่างกันตรง สภาพชิ้นงานและภาพที่ได้จากชิ้นงาน และตำแหน่งที่จะตรวจวัดชิ้น ซึ่งขึ้นอยู่กับว่า เรากำลังตรวจวัดอะไร เช่น ตรวจวัดระดับของเหลว การวัดว่ามี หรือไม่มีชิ้นส่วนชิ้นใดชิ้นหนึ่ง หรือวัดความถูกต้องของชิ้นงานเมื่อเทียบกับต้นแบบ
ดูภาพเปรียบเทียบหน้าตาของโปรแกรม
หน้าตาโปรแกรม In-Sight
หน้าตาโปรแกรม Vision Builder
แต่ วันนี้ผมไม่ได้มาพูดถึงโปรแกรม VisionBuilder ครับ ผมจะมาพูดถึงการทำงานคร่าวๆ ของโปรแกรม In-sight เจ้าโปรแกรม In-sight โดยหน้าที่แล้ว เป็นโปรแกรมที่ช่วยให้งาน Machine vision ง่าย และเสร็จในเวลาอันรวดเร็ว หน้าที่ของโปรแกรมเมอร์ ก็คือ ทำการนำภาพที่ได้จากกล้องมาทำการประมวลผล โดยผ่านขั้นตอน ที่ทางโปรแกรมได้วางเอาไว้ แต่ละขั้นตอน และทำการกำหนดค่าต่างๆ ตามที่ต้องการ ซึ่งในโปรแกรม จะมี อัลกอริธึมในการประมวลผลภาพ ไม่ว่าจะเป็นการทำ Threshold การหาขอบภาพ การนำภาพมาเปรียบเทียบกับภาพต้นแบบ ซึ่งอัลกอริธึมเหล่านี้ มีพร้อมอยู๋แล้วในโปรแกรม In-Sight หน้าที่ของเรา คือใช้มันให้เป็น จัดลำดับเงื่อนไขอย่างถูกต้อง เราก็จะได้โปรแกรม Machine Vision ที่สามารถนำไปใช้ได้อย่างรวดเร็ว
ความแตกต่างของโปรแกรมนี้ กับโปรแกรมอื่นๆ ทั่วไป คือ โปรแกรม In-sight นี้ ให้ดาวน์โหลดไปใช้ฟรีๆ แค่ นำ key ที่ได้จากโปรแกรม ไปลงทะเบียนผ่านหน้าเว็บ เราก็จะได้ key ที่ถูก gen ออกมา แล้วนำกลับมาลงทะเบียนที่โปรแกรม เพียงเท่านี้้ เราก็สามารถนำโปรแกรมไปใช้ได้เลย อะไร มันจะดีขนาดนี้ แต่ เดี๋ยวก่อน เจ้าโปรแกรม In-sight นี้ ใช้ได้แต่เฉพาะกับกล้อง Smart Camera ของ Cognex เท่านั้น ไม่สามารถนำไปใช้กับกล้อง Smart Camera ของบริษัทอื่นๆ ได้
ขอย้อนกลับไปเรื่องกล้องสักเล็กน้อย ในตลาดของงาน Machine Vision เราแบ่งกล้องได้เป็นสองประเภทใหญ่ๆ (ณ ตอนนี้) คือ
1. กล้อง Industrial ทั่วๆ ไป ซึ่งต้องมีคอมพิวเตอร์ 1 เครื่องในการรันโปรแกรม และรับภาพที่ได้จากกล้องพวกนี้มาประมวลผล
2. กล้อง Smart Camera ซึ่งกล้องพวกนี้ต่างจากล้องแบบแรก คือ มันสามารถทำงานได้ด้วยตัวของมันเอง พูดง่ายๆ ก็คือ ตัวมันเองมีคอมพิวเตอร์ขนาดเล็ก อยู่ภายใน จะบอกว่าเล็กมากๆ แต่ ก็สามารถทำงานได้ด้วยตัวของมันเอง
พวกกล้อง Smart Camera เกี่ยวข้องอย่างไรกับโปรแกรม In-sight ?
คือมันเป็นอย่างนี้ครับ คือหลังจากเราได้ดาวน์โหลดโปรแกรม In-Sight และได้ทำการติดตั้งเสร็จแล้ว จากนั้น เรานำภาพที่ได้จากกล้อง Smart Camera มาทำการประมวลผลตามลำดับขั้นตอนจนเป็นที่น่าพอใจแล้ว เราก็จะทำการอัพโหลดโค๊ดที่เราเขียนทั้งหมดนี้ กลับเข้าไปที่กล้อง Smart Camera ครับ เจ้าตัวกล้องนี้ ก็จะเข้าใจโค๊ดที่ถูกอัพโหลดมาใส่ที่ตัวมัน และทำงานตามลำดับที่ถูกกำหดนดไว้แล้วในโค๊ด จากนั้น ที่ตัวกล้องจะมีช่องสัญญาณเอาท์พุต เอาไว้ให้เรา ส่งค่ากลับออกมาจากโปรแกรม เช่น หากกล้องตรวจพบเจอสิ่งผิดปกติ ให้ส่งสัญญาณ มาหยุดที่สายพานลำเลียงชิ้นงาน หรือส่งออกมาแสดงค่าที่ไฟสถานะของเครื่องจักร นอกจากนี้ มันยังมีช่องอินพุต เพื่อรับสถานะ เช่น จากเซนเซอร์ต่างๆ ได้อีกด้วย ยิ่งถ้ากล้องมีราคาแพง จะยิ่งมีลูกเล่นพวกนี้เยอะตามไปด้วย ซึ่งในการทำงาน เราสามารถปล่อยให้กล้องทำงานได้ตามลำพัง โดยไม่ต้องต่อคอมพิวเตอร์กับกลัองอีกต่อไป ซึ่งเจ้าตัวกล้อง Smart Camera พวกนี้จะประมวลผลบนตัวของมันเองเลย หากจะถามเรื่องความเร็วในการประมวลผล เท่าที่ผมถามจากผู้รู้ เค้าก็บอกว่า ถ้างานที่ต้องการวัด หรือตรวจจับนั้น วิ่งผ่านกล้องด้วยความเร็วไม่เกิน 600 ชิ้น ต่อ นาที ก็สามารถใช้กล้อง Smart Camera พวกนี้ ได้ ที่ต้องบอกว่า ไม่เกิน 600 ชิ้น ต่อ นาที นั้น ก็เพราะว่า ด้วยความที่มันมีคอมพิวเตอร์ขนาดเล็กอยู่ภายในนั้น มันก็ย่อมมีข้อจำกัดในการประมวลผล ซึ่งแน่นอน ย่อมสู้คอมพิวเตอร์ตั้งโต๊ะ ไม่ได้อย่างแน่นอน
แล้วถ้าถามว่า ข้อเสียของกล้อง Smart Camera นอกจากเรื่องความเร็วในการประมวลผลหล่ะ อีกประเด็นหนึ่งก็คือ เอาหล่ะ โปรแกรม In-Sight หน่ะมันฟรี ก็จริงอยู่ แต่ ราคาโปรเจคทั้งหมด มันจะไปตกอยู่ที่กล้องครับ ซึ่งแพงมากๆ คือหลังจากผม ได้ยินเรื่องราคาแล้ว ผมเข้าใจเลยว่า งาน Machine Vision ทำไมราคา มันถึงได้มากขนาดนั้น
แต่ ถึงราคาจะแพงขนาดนั้น แต่ในแง่ การนำไปใช้งาน ก็ สะดวกสบายและคล่องตัวมากเลย นอกจากเรื่องโปรแกรมที่ง่าย และสร้างงานได้อย่างรวดเร็ว ผมขอยกตัวอย่างให้ฟัง สมมติว่า คุณไปติดตั้งระบบไว้ ณ ที่โรงงานแห่งหนึ่ง ซึ่งอยู่คนละจังหวัด เกิด วันดีคืนดี งานมีปัญหา คือ อาจจะด้วยสาเหตุอะไรก็แล้วแต่ ทำให้คุณจะต้องไปทำการแก้ไขโปรแกรมที่อยู่ในกล้อง คุณจะทำอย่างไร หากไม่ต้องเดินทางไปที่โรงงานแห่งนั้น ง่ายๆ ก็คือ คุณก็ให้คนหน้างานนั้น ทำการ capture ภาพที่ได้จากกล้อง Smart Camera ตัวนั้น ส่งกลับมาให้คุณ โดยที่คุณสามารถที่จะทำการปรับแต่งโปรแกรมที่คุณได้ Backup ไว้แล้ว กับภาพที่ได้ขณะนั้น คุณก็สามารถแก้ไขปัญหาได้ และสามารถทำการส่งไฟล์โค๊ดที่ได้รับการแก้ไขแล้วกลับไปที่หน้างาน และอัพโหลดใส่กลับไปที่ตัวกล้อง โดยที่คุณไม่ต้องเดินทางไปที่หน้างานเลย เห็นไหมหล่ะครับ ว่ามันสะดวกขนาดไหน เพราะเจ้ากล้อง Smart Camera พวกนี้ มันทำได้สบาย อยู่แล้ว บวกกับโปรแกรม In-Sight ที่โหลดมาได้ฟรีๆ มองการไกล ผมก็ว่ามันก็คุ้มอยู่นะ
ก็เป็นเรื่องที่จะมาเล่าสู่กันฟัง หลังจากที่ได้รับการอบรมมา จริงๆ ผมต้องการทราบว่าเจ้าโปรแกรม In-Sight มันต่างจากโปรแกรม VisionBuilder ที่ผมเคยใช้อยู่อย่างไร ซึ่งหลังจากที่ได้รับการอบรมแล้ว ก็มีความเข้าใจกับกล้อง Smart Camera และเจ้าตัวโปรแกรม In-Sight มากขึ้น ต้องขอขอบคุณทีมงาน Cognex Training Thailand เป็นอย่างยิ่งครับ ที่ให้ผมได้เข้ารับการอบรมในครั้งนี้
Tuesday, October 16, 2012
LabVIEW Interface for Arduino ( Part II)
จากตอนที่แล้ว (คลิกกลับไปอ่าน) เป็นการติดตั้งโปรแกรมเสริมทางฝั่ง Labview เพื่อทำให้ Labview ติดต่อกับ Arudino อย่างมีรูปแบบ เพื่อให้ง่ายต่อการพัฒนาโปรแกรมต่อไป และทำการโปรแกรมส่วนเฟิร์มแวร์ให้ Arudino เพื่อให้ Arduino ติดต่อกับ Labview ผ่านทาง Serial comm
หากเรามองที่ซอร์ฟแวร์ที่เป็นหัวใจหลัก ที่ทำให้ทั้งสองอย่างเข้าใจกัน เราสามารถพิจารณาได้ดังนี้
ทางฝั่งของ Labview
- Labview Interface for Arduino tool kit ซึ่งเป็นโปรแกรมเสริมให้กับ Labview เราจะต้องเลือก tool block ให้เหมาะสมกับหน้าที่การทำงานของ pin ของ arduino UNO (ขึ้นอยู่กับการออกแบบ และการใช้งานโปรแกรม)
ทางฝั่งของ Arduino
- Firmware (โค๊ด) ซึ่งเขียนด้วยภาษา wiring ของทางฝั่งของ arduino ในที่นี้ผมจะเรียกตามโปรเจคของมัน ซึ่งก็คือ LVIFA_Base
ซึ่งเราจะต้องทำการ burn ลงบนบอร์ด Arduino (ซึ่งจะทำการ burn ลงแค่ครั้งเดียวเท่านั้น)
เมื่อเราติดตั้งโปรแกรมทั้งสอง ลงบน PC และบน Arduino board เรียบร้อยแล้ว ทีเหลือก็เหลือเพียงทำให้ทั้งสองรู้จัก และเข้าใจคำสั่งที่ต่างฝ่าย ต่างส่งมาให้กันและกัน ก็แค่นั้นเอง
คำถามก็คือ
Labview Interface for Arduino tool kit และ LVIFA_Base มันเข้าใจกันได้อย่างไร ?
คำตอบก็คือ ทั้งสองโปรแกรมนี้ รับส่ง ข้อมูล ซึ่งเป็น คำสั่ง และ ผลลัพธ์ผ่านทางการสื่อสาร Serial Communication ซึ่ง PC จะมองเห็นบอร์ด Arduino เป็นเหมือน Comport อนุกรม(เสมือน) ซึ่งข้อมูลจะวิ่งเข้า ออก ณ จุดนี้ จาก PC ไป Arduino และจาก Arduino ไป PC
แล้วมันคุยกันอย่างไรหล่ะ?
คำถามนี้ ดูเหมือนจะไม่ต้องไปสาวลงไปลึกมากนัก เพราะผู้พัฒนาต้องการให้มองเจ้า Labview Interface for Arduino tool kit และ LVIFA_Base เป็นเสมืองกล่องดำ (Black box) ที่เราไม่จำเป็นต้องไปรู้การทำงานภายในของมัน ขอแค่เพียงเรารู้แค่ว่า จะเอามันมาใช้งานได้อย่างไรก็พอ
แล้วเราจะเริ่มต้นใช้งานมันได้อย่างไร?
อันนี้สิ เป็นเรื่องสำคัญ หากไม่มีตัวอย่างโปรแกรม และ Help มาให้แล้วไซร้ เจ้า Black box ที่ว่า ก็ไม่มีความหมายเลย ก็เพราะ เราก็ยังนำมันมาใช้ไม่เป็นอยู่ดี ต่อให้โค๊ดที่เขียนอยู่ภายใน เลิศหรูอลังการเพียงใด มันก็คงเป็นการลำบากที่เราจะนำของที่ควรจะนำมาใช้ได้เลย แต่กลับต้องมานั่งไล่โค๊ดเพื่อให้เข้าใจการทำงานของมัน จึงจะเอามาใช้งานได้ ถ้าเป็นแบบนั้นจริง ก็คงไม่ดีแน่ๆ
เมื่อเรารู้แล้วว่า ตัวอย่าง และ help ที่ให้มานั้น เป็นจุดเริ่มต้นการนำมาใช้งาน เราก็เริ่มจากตัวอย่างของมันกันเลย ให้ไปที่
C:\Program Files\National Instruments\LabVIEW 2011\vi.lib\LabVIEW Interface for Arduino\Palette Examples
(อาจจะไม่เหมือนกัน ขึ้นอยู่กับเวอร์ชั่นของ Labivew)
ซึ่งจะปรากฏตัวอย่างมากมาย ให้เราเริ่มต้น ในที่นี้ เราจะมาเริ่มต้นจาก Analog Read Pin Example.vi ถ้าเราดับเบิลคลิกที่ไฟล์นี้ ก็(ควร)ที่จะเข้าสู่โปรแกรม Labview และเปิดหน้าต่างของโปรแกรมนี้เลยทันที
จากรูป ( ผมกด Ctrl+T เพื่อให้แสดงผล Tile left and Right ) ซ้ายมือ เป็นการออกแบบหน้าต่าง GUI คือเป็นส่วนที่ให้ผู้ใช้งานไว้สำหรับทำงาน ส่วนขวามือ เป็นหน้าที่ของโปรแกรมเมอร์ที่จะต้องทำการเขียนโปรแกรมแนว Graphic Programming เพื่อให้โปรแกรมที่ออกแบบไว้ทำหน้าที่ได้อย่างที่ต้องการ ซึ่งส่วนใหญ่แล้ว โปรแกรมเมอร์ก็จะทำหน้าที่ผู้ใช้งานไปด้วยในตัว
ในทางด้านซ้ายมือ เราเรียนรู้ได้ไม่ยาก หากมีพื้นฐานเรื่องการเขียนโปรแกรมบน Labview มาก่อนแล้ว แต่ที่เป็นปัญหาตอนนี้ คือ การนำ Labview Interface for Arduino tool kit มาใช้ ซึ่งมันมีลำดับการทำงาน พอจะอธิบายคร่าวๆ ได้ดังนี้
ถ้าเราต่อวงจรในโลกแห่งความจริง หมายถึงต่อวงจรจริงๆ ตามวงจรนี้ โดยเราให้ แรงดันที่ถูกแบ่งจาก R ปรับค่าได้ ต่อเข้ากับขา Analog In ช่อง AN0 ของ Arduino
แล้วทำการเขียนโปรแกรมบน Labview ด้าน Block Diagram ตามรูปภาพ
ความหมายของมันก็คือ โปรแกรมจะเริ่มจากหมายเลข 1 tool block ส่วนนี้ จะทำหน้าที่เตรียมการสื่อสารทาง Serial Communication ซึ่งมีพารามิเตอร์ที่ถูกกำหนดเป็นค่าเริ่มต้นไว้เรียบร้อยแล้ว หากเราสนใจให้ดับเบิลคลิกที่ Init จะปรากฏหน้าต่างของโปรแกรมย่อยของ Labview ขึ้นมาอีกที
จากนั้นเมื่อโปรแกรมได้ถูกกำหนดค่าเริ่มต้นในการสื่อสารกับ arduino เรียบร้อยแล้ว ข้อมูลต่างๆ จะวิ่งไปตามสายสีชมพู ซึ่งจะเป็นข้อมูลที่ถูกผสมรวมกัน ทั้งข้อมูลที่เป็นตัวเลข ตัวอักษร ค่าอ้างอิง ข้อมูลอะเรย์ ตรงนี้ เราจะยังไม่ต้องรู้ว่ามันประกอบไปด้วยอะไรบ้าง ประเด็นของเราก็คือ ข้อมูลต้องเป็นชนิดเดียวกัน จึงจะนำมาต่อกันได้ ถ้าเป็นคนละชนิด คนละประเภท ต้องทำการแปลง ถอดออก หรือ รวมกันใหม่ เพื่อให้เป็นข้อมูลประเภทที่ตรงกับช่องที่จะต่อเข้า block ต่อไปเสียก่อน จึงจะต่อกันได้
จากเส้นสีชมพูที่เราเห็น ข้อมูลเหล่านี้ นี่แหละ ที่จะวิ่งเข้าสู่ Comport อนุกรม(เสมือน) ฉะนั้นไม่ว่า arduino board จะส่งอะไรเข้ามา หรือ รับข้อมูลอะไรออกไป มันจะใช้ข้อมูลในเส้นสีชมพูในการอ้างอิง
แต่เมื่อเข้ามาอยู่ใน loop while ของโปรแกรม (ส่วนที่ 2 ) โปรแกรมจะวนอยู่ในนี้จนกว่าจะมีกดปุ่ม stop หรือไม่ก็เกิดเหตุการณ์ Error จากเส้นสีเหลือง จึงจะหลุดออกจาก loop while แล้วคืนค่าอ้างอิงที่เคยจองไว้ กลับสู่ระบบต่อไป (ส่วนที่ 3)
กลับมาที่ส่วนที่ 2 อีกครั้ง เป็นส่วนที่โปรแกรมเราจะทำงานเป็นหลัก (หลังจากผ่านส่วนที่ 1 ในตอนเริ่มต้นมาแล้ว) ในส่วนนี้ เราเลือกใช้ tool block ที่เป็น Analog Read นั่นก็เพราะว่า ในวงจรจริงที่เราได้ต่อไว้นั้น มีการนำเข้าสัญญาณ Analog นั่นก็คือแรงดันไฟฟ้าไฟกระแสตรงที่ถูกแบ่งมาจาก ตัวต้านทานปรับค่าได้ เข้ามาที่ขา AN0 ของ Arduino ที่ทำหน้าที่เป็นขาอินพุต (เท่านั้น) จะเห็นได้ว่า tool block ที่ถูกเลือกไว้ จะต้องสัมพันธ์กันกับวงจรที่ต่อจริง โดยเลือกใช้ Analog Read ที่ถูกกำหนดค่า Analog Input Pin = 0 จะเห็นได้ว่าสัมพันธ์กันจริง ทั้งวงจรที่ต่อจริง กับ วงจรที่ต่อบน Labview
จากนั้น เราต้องการให้มันแสดงผลที่หน้าจอคอมพิวเตอร์ เราก็แค่หา Guage แสดงค่า มารับที่ช่อง Voltage ของ Analog Read Pin เพียงเท่านั้น เราก็จะได้โปรแกรมง่ายๆ ที่สามารถนำค่าจากโลกภายนอก เข้ามาแสดงผลในโลกของคอมพิวเตอร์ได้แล้ว
หมายเหตุ เอาเมาส์ชี้ที่ tool block แล้วกด Ctrl +H จะปรากฏหน้าต่างแสดงคำอธิบาย tool block นั้นๆ
ถ้าจะมีคำถามว่า แล้วถ้าต้องการเอา arduino ไปวัดค่าจากเซ็นเซอร์ที่เป็นตัวอ่านค่าอุณหภูมิ หรือ ค่ากระแสไฟฟ้าได้ไหม ก็ต้องถามกลับไปว่า ตัวอ่านค่าอุณหภูมิกับตัวอ่านค่ากระแสไฟฟ้า ให้เอาท์พุตออกมาเป็น Analog ไหมหล่ะ ถ้าใช่ ตัวอย่างที่ได้นำเสนอไป ก็เกือบจะเอาไปใช้ได้เลย เพราะเรากำลังรับค่าที่เป็นแรงดันไฟฟ้า ที่แปรผันตามค่าตามที่มันกำลังวัดค่าอยู่นั่นเอง เพียงแต่ค่าที่เราต้องการให้มันแสดง มันไม่ใช่ค่าแรงดันไฟฟ้า เราต้องการอ่านค่าอุณหภูมิหรือค่ากระแสไฟฟ้า ฉะนั้นค่าที่รับมาได้จะเป็นค่าแรงดันไฟฟ้า เราก็ต้องนำค่าเหล่านั้นมาทำทางคณิตศาสตร์โดยใช้เครืองมือ + - x / ทาง labview ในการแปลงค่าแรงดันให้กลายเป็นค่าที่เราต้องการ โดยสมการในการแปลงมันก็อยู่ในดาต้าชีทของเซ็นเซอร์เบอร์นั้นๆ นั่นแหละ
ยังมีตัวอย่างที่อยู๋ในโฟวเดอร์ดังกล่าวอีกเยอะแยะ หากเราเข้าใจตัวอย่างนี้แล้ว เราก็สามารถที่จะเข้าใจตัวอย่างอื่นๆ ได้อย่างไม่ยากเย็นนะ ขอให้เรามีพื้นฐานของ Labview Programming + Circuit + หน้าที่การทำงานของแต่ละ pin ของ arduino เราก็น่าจะพอแก้ไข ปรับปรุง พัฒนาจากตัวอย่างที่เค้าให้มาได้อยู่แล้ว
หวังว่าพอจะได้แนวทางการนำไปประยุกต์นะครับ
Monday, October 15, 2012
Robotic wheelchair
หุ่นยนต์เก้าอี้ผู้พิการทางขา สร้างโดยคุณ Shuro Nakajima ซึ่งเป็นหัวหน้าทีม Chiba Institute of Technology ได้ถูกสร้างให้มีความแตกต่างจากหุ่นยนต์เก้าอี้ผู้การทางขาจากตัวอื่นๆ ตรงที่มันมีความสามารถในการข้ามสิ่งกีดขวางได้ ซึ่งโดยปกติแล้ว รถเข็นเก้าอี้ผู้พิการทางขานั้น ตัวล้อจะไม่สามารถยกตัวขึ้นเองได้ จะเดินทางไปได้ในที่ราบเรียบ ไม่มีสิ่งกีดขวาง แต่เจ้าหุ่นตัวนี้ มีความสามารถทำได้ ซึ่งนับว่าเป็นการพัฒนารถเข็นสำหรับผู้พิการทางขา ก้าวไปอีกขั้น
หุ่นยนต์ตัวนี้ มีความสามารถหลากหลายในการเคลื่อนไหว ด้วยการขับเคลื่อนทั้งสี่ล้อ และมีห้าแกน มีความสามารถในการยกล้อตัวเองข้ามสิ่งกีดขวาง โดยผู้ขับจะต้องเป็นคนกำหนดทิศทางที่จะไปโดยใช้ Joystick ที่ติดอยู่กับตัวรถ และเจ้าหุ่นยนต์จะทำการประเมินสิ่งรอบตัวของมัน แล้วทำการปรับตำแหน่งของล้อ จนกระทั่งตำแหน่งจุดศูนย์ถ่วงทั้งหมด เพื่อให้เกิดความสมดุล และเหมาะสมกับการแก้ไขในแต่ละสถานการณ์
ที่มาของข่าว คลิก
Wednesday, October 10, 2012
Legged Robotics
ห้องทดลองเคลื่อนที่อัตโนมัติ (Autonomous System Lab) ได้พยายามที่จะค้นคว้าหารูปแบบการออกแบบกลไก ที่สามารถเคลือนไหวได้อย่างพลวัต ไม่ว่าสถานะการณ์จะเป็นอย่างไร เจ้าหุ่นยนต์ที่เค้าคิดจะออกแบบนั้น ก็ยังที่จะสามารถเคลื่อนที่ผ่านไปได้ และสามารถที่จะคิดและปรับตัวเองให้เข้ากับสภาพของเส้นทางที่พวกมันเคลื่อนที่ไปด้วย
เห็นหน้าตาหุ่นยนต์ตัวนี้ แล้ว รู้ได้เลยทันทีว่า “ขา” ของมันคือส่วนที่สำคัญที่สุด และเป็นพระเอกของการเคลือนไหวแบบพลวัต หลบหลีกสิ่งกีดขวาง ปรับสมดุลของจุดศูนย์ถ่วงของตัวมันเอง รับแรงกระแทก และส่งแรงกระแทกนั้นกลับไปประมวลผล เพื่อปรับระยะการยืดและหดตัวของสปริงได้อย่างพอเหมาะ นับว่า เป็นอัฉริยะภาพทางวิศวกรรมจริงๆ
เห็นสมการแล้ว ทึ่งเลยครับ มันคงไม่ใช่เรื่องง่าย ที่ใครที่คิดอยากทำ แล้วก็ลงมือทำไปเลย แล้วก็มานั่งปรับแต่งไปเรื่อยๆ หากเป็นอย่างนั้นจริงๆ ก็ไม่รู้เราจะเรียนวิศวะกันไปทำไม ให้มันยุ่งยาก
ในส่วนของซอร์ฟแวร์ ทางทีมได้ใช้โปรแกรมทางวิศวกรรมที่ดังๆ เช่น MATLAB , LABVIEW และ C/C++ ซึ่งเจ้าตัว C/C++ นี้ ถูกนำไปเขียนกับ SL - The Simulation Laboratory ซึ่งก็ไม่น่าแปลกใจเลย ซอร์ฟแวร์พวกนี้ โดยเฉพาะ MATLAB และ LABVIEW ทำไมจึงเป็นที่นิยมในงานวิจัยพวกหุ่นยนต์นัก และยังมีราคาแพงอีกด้วย
ขอให้เพื่อนๆ ดูวีดีโอสาธิต แล้วกันครับ เห็นแล้วจะเกิดไฟแห่งความอยากรู้ อยากเห็นขึ้นมาอีกเยอะเลย ผมสาบานได้
ศึกษาข้อมูลเพิ่มเติม คลิก
Saturday, December 24, 2011
LabVIEW Interface for Arduino
ช่วงนี้ ก็เป็นช่วงเด็กทำโปรเจคกัน เราก็มีโปรเจคที่ต้องทำเหมือนกัน ก็เพิ่งจะผ่านการพรีเซ้นต์ หัวข้อโปรเจคผ่านไป ก็สบายใจได้หน่อยนึง ที่เหลือก็ทำโปรเจคให้มันสำเร็จก็แล้วกัน
วันนี พอดีเพื่อนมาหาที่บ้าน มาปรึกษากันเรื่องโปรเจคของมัน ประมาณว่า ต้องการทำให้บอร์ด Arduino Freeduino ติดต่อกับ Labview เพื่อที่เราจะได้เอา NI Labview สร้างเป็นหน้ากาก GUI เพราะเห็นว่า เคยเรียนการใช้ NI LABVIEW มาแล้ว ก็ไม่น่าจะยากมาก ลองๆค้นหาข้อมูลในอินเตอร์เนต ก็เจอ ที่น่าสนใจดู ลิ้งค์ อืมน่าสนแหะ ลองติดตั้งดูสักหน่อยสิ บอร์ด Arduino เราก็มีแล้ว
- อันดับแรก ก็ต้องมี NI LABVIEW เวอร์ชั่น 2009 ขึ้นไป เค้าแนะนำว่า งั้นนะ แต่ที่ผมทดลองใช้อยู่เป็น เวอร์ชั่น NI LABVIEW 2011
- บอร์ด Arduino สักบอร์หนึ่ง ตระกูลไหนก็ได้ แล้วก็พวกอุปกรณ์อิเล็กทรอนิกส์ สักหน่อย
- Arduino IDE แน่นอนหล่ะ มีบอร์ดแล้วไม่มีโปรแกรม ก็ชักจะยังงัยๆ อยู่
หวังว่า เพื่อนๆ มีทั้งสามอย่าง และติดตั้งเรียบร้อยแล้วนะ ต่อจากนี้ไป ก็เป็นการทำให้ Labview สามารถมองเห็น Serial Comport แล้วก็ทำให้ทั้งสองอย่าง Interface กันได้ ก็ทำตามขั้นตอนกันเลยครับ
- ติดตั้ง NI-VISA Drivers เพื่อทำให้ NI LABVIEW มองเห็น Serial Port กันก่อน
- ติดตั้ง VI Package Manager ตัวนี้ จะเป็นตัวสร้าง แชร์ และค้นหา LabVIEW add-ons และ toolkits จาก LabVIEW Tools Network ในที่นี้ เราจะเอามาไว้สำหรับค้นหา และติดตั้ง
- เมื่อติดตั้ง VI Package Manager เสร็จแล้ว ที่หน้าต่างโปรแกรม ให้เราค้นหา Tool kit ที่ชื่อ Labview Interface for Arduino ตามรูป เลยครับ
- รีสตาร์ทเครื่องสักครั้ง เพื่อความเป็นสิริมงคล
- เปิดไฟล์โปรเจคของ Arduino (ในที่นี้ บอร์ด Arduino ของเราควรจะเชื่อมต่อ กับคอมพิวเตอร์เรียบร้อยแล้ว) ซึ่งจะอยู่ใน Folder C:\Program Files\National Instruments\LabVIEW 2011\vi.lib\LabVIEW Interface for Arduino\Firmware\LVIFA_Base ชือไฟล์ LVIFA_Base.pde
- ทำการ Complie ซึ่งน่าจะผ่าน แล้วก็ให้อัพโหลดเข้าไปที่ตัวบอร์ด Arduino ถ้าจำไม่ได้ ให้ดูวิธีการจากโพสเก่าๆ ของผมครับ คลิก
- เปิดโปรแกรม Labview แล้วเปิดไฟล์ทดสอบ โหลดจาก ที่นี่ จากนั้นก็รีนโปรแกรม เลยครับ
- ลองปรับค่า แล้วดูผล
ถ้าอยากทราบว่า สองอันนี้ มันทำงานได้งัย ลองเข้าไปแกะโค๊ดของ Arduino แล้วก็ลองใช้ โปรแกรม Serial Port Monitor นั้งจับข้อมูลที่วิ่งบน Serial Port ดูครับ
Saturday, November 5, 2011
แยกให้ดูกลไกการทำงาน
ห่างไปนาน สำหรับบล๊อกนี้ พอดี ติดภาระกิจ ใกล้จะสอบอีกแหละ ทำไร ไม่ได้มาก ต้องตัดเรื่องอื่นๆ ออกไปก่อน เอาเรื่องสอบให้มันจบๆ พ้นๆ ไปจากชีวิตก่อน เรื่องน้ำท่วม ถึงบ้านผมจะไม่ท่วมในตอนนี้ แต่ก็ขอให้คนกรุงเทพ อดทน และฟันฝ่าไปให้ได้นะครับ
วันนี้ ผมเจอเว็บที่เค้ามาแสดงว่า ชองใช้ที่เราเห็นๆ อยู่ ในชีวิตประจำวัน (ของฝรั่งซะส่วนใหญ่) มันทำงานได้อย่างไร ประกอบไปด้วยชิ้นส่วนกลไก อะไรบ้าง ของบางอย่าง เราใช้มัน แต่เราอาจจะไม่เคยสังเกต หรือ ค้นคว้าว่ามันทำงานได้อย่างไร วันนี้ ผมนำเอง คลิปวีดีโอ ที่มืออาชีพ เค้ามาแยกชิ้นส่วนให้ดู น่าตื่นเต้นมากครับ สำหรับคนที่ใคร่รู้ ใคร่ศึกษา โดยเฉพาะ วิศวกรอย่างเราๆ ท่านๆ นี่แหละครับ
เครดิต และ ดูวีดีโอเพิ่มเติม http://science.discovery.com/videos/deconstructed/
Tuesday, September 27, 2011
พื้นที่นี้ เพื่อแก (เพื่อนฉัน)
เดิมที ผมตั้งใจจะเขียนเรื่องงาน Image Processing ที่ทำส่ง อจ. กำลังเริ่มลงมือเขียนแล้วหล่ะ แต่ พอดีทางบ้านโทรมาบอกว่า ไอ้อิ๋ง หมาที่ป่วยไข้หัดอยู่ที่บ้าน ตายเสียแล้ว ก็เลยเอาเป็นว่า พื้นที่นี้ยกให้แก (เพื่อนฉัน) แล้วกัน
ไม่ว่า เราหรือเค้าก็ต้องจากกันสักวัน อยู่ที่ใครจะไปก่อนกัน เท่านั้นเอง ผมได้สนุขตัวนี้ มาจากผู้ชายคนหนึ่ง เค้าเห็นว่า ที่บ้านยังไม่มีสุนัขเฝ้าบ้าน ก็เลยเอาลูกสุนัขสีดำ มาให้ เมื่อ 9 ปีที่แล้ว นับเป็นเวลาที่ผมเริ่มเข้าทำงานที่บริษัทนี้ด้วย วันแรกที่ได้มา ผมซื้อนมกล่องมาป้อนมัน แล้วก็หาข้าวหาน้ำให้มันกิน คงเป็นเพราะอย่างนี้ นี่เอง ทำให้สุนัขตัวนี้ คุ้นเคยกับผมมากที่สุดกว่าทุกคนในบ้าน
แน่นอนว่า ทุกอย่างๆ ย่อมเป็นสิ่งสมมติ แม้กระทั่งชื่อ ด้วยความที่เราจำเป็นต้องมีชื่อเรียกให้มัน เพื่อให้ง่ายต่อการอ้างถึง และใช้เพื่อเป็นสัญญาความจำ เมื่อยามที่เราเรียกขาน สุนัขตัวนี้ เราตกลงตั้งชื่อให้มันล้อเลียนเสียงให้เหมือนกับชื่อของผู้ชายที่เอาสุนัขมาให้ เราตั้งชื่อมันว่า “อิ๋ง อิ๋ง” ชื่อเหมือนสุนัขตัวเมีย แต่แท้จริงแล้วมันเป็นตัวผู้
ผมคงไม่ต้องบรรยายมาก ถ้าใครเคยเลี้ยงสุนัข จะเข้าใจดี ว่าความผูกพัน มันเป็นยังงัย ผมคิดว่าทุกคนคงรู้สึกไม่ต่างกัน เมื่อเวลาต้องสูญเสียเพื่อนที่ดีที่สุดของเราไป บางคนอาจจะมองว่ามันเว่อร์ แต่ถ้าคุณได้เลี้ยงมันมา จะเข้าใจได้ดี คงต้องทำใจอีกหลายวัน กว่าจะหายคิดถึงมัน
ลาก่อนเพื่อนรัก เกิดมาชาติหน้าขอให้ได้เป็นมนุษย์ เจอกัน ก็ทักทายกันบ้างนะ
Sunday, May 1, 2011
ไปอบรม VHDL มาได้ไรมาเยอะเลย
พอดี วันลาพักร้อนเยอะเกิ๊น ก็เลยต้อง plan ลาพักร้อนสักสองวัน เพื่อเป็นไปตามนโยบายเบื้องบน ไม่ได้คิดจะไปเที่ยวไหนหรอก อยากอยู่บ้านเล่นไมโครคอนโทรลเลอร์มากกว่า พอดีไปเห็นเค้าประกาศไว้ในเว็บ ว่า มีคอร์สอบรม VHDL สำหรับผู้สอน 28-29 มีค., 28-29 เมย.และ 23-24 พค พอดีเลย สองวัน ว่าแต่ มันเป็นคอร์สสำหรับผู้สอนนี่หว่า เราจะไปได้ไหม อย่ารอช้าเมล์ไปถามเค้าดีกว่า
หลายวันต่อมาได้รับเมล์ว่า สามารถไปได้พอดี มีที่ว่างพอดี โดยปกติแล้วเค้าจะไม่ให้บุคคลทั่วไปเข้าอบรม รอบนี้ มีเฉพาะคนที่เป็นครู อาจารย์เท่านั้น แต่เราก็โชคดี ที่ได้เข้าอบรมด้วย ว่าแต่ไอ้ VHDL มันคือภาษาไรเหรอ แล้วทำไรได้บ้าง อย่ารอช้า หนังสือที่ซื้อมาดองไว้นานแล้ว เอามาเปิดดูสักหน่อยสิ พอดีกับมีบอร์ด XC9572 อยู่แล้ว หลังจากจดๆ จ้องๆ อยู่นาน ไม่รู้จะเริ่มต้นยังงัย U_U
จริงๆ ในหนังสือ “ออกแบบไอซีดิจิตอลด้วย FPGA และ CPLD ภาคปฏิบัติ โดยใช้ภาษา VHDL ” ผู้แต่งทั้งสองท่าน คือ ท่าน ณรงค์ ทองฉิม และ ท่านเจริญ วงษ์ชุ่มเย็น ท่านแต่งไว้ดีมากๆ อธิบายได้ค่อนข้างละเอียดแล้ว แต่ถ้าไม่ได้ฟัง หรือเข้าอบรมก่อน ก็อาจจะเป็นการลำบากในการเริ่มศึกษาด้วยตนเองเป็นอย่างมาก
บรรยากาศการอบรมครั้งนี้ ไม่เหมือนที่อื่น ไม่มีพิธีรีตองใดๆ จัดโต๊ะเสร็จ ก็นั่งอบรมกันเลย ทุกคนหันหน้าเข้าหากัน แต่ระหว่างที่ท่านอาจารย์ ณรงค์ ท่านบรรยายทุกคนต้องหันหน้าไปที่กำแพง เพื่อดูสไลด์ ที่ท่านอาจารย์กำลังแสดงให้ดู (ท่านอาจารย์เป็นคนค่อนข้างจริงจังมาก) ในระหว่างนั้น ต้องตั้งใจฟัง ห้ามทำการใดๆ โดยที่ท่านอาจารย์ยังไม่ได้สั่งให้ทำ ทุกคนต้องทำตามอย่างเคร่งครัด เพราะท่านอาจารย์ท่านมีความมุ่งมั่นที่จะถ่ายทอดความรู้ และท่านก็หวังให้เราทุกคนตั้งใจรับฟังกันด้วย
มีกาแฟเสิร์ฟตลอด ไม่ต้องห่วงว่าจะง่วงนอน (ความจริง ผมก็ทานมาแล้วหล่ะ) สรุปว่าวันนั้น ล่อไปสามแก้ว ไม่ต้องนอนกันหล่ะ ช่วงเช้าก็ปูพื้นฐานภาษา VHDL แล้วก็ทำความรู้จักกับ FPGA/CPLD กันก่อน พอหลังจากทานมื้อกลางวัน (ไก่ย่าง ที่ท่านอาจารย์บอกว่า อร่อยกว่า ไก่ห้าดาว) เราก็เริ่มทำการลง Lab โดยท่านอาจารย์พาทำตาม Lab ในหนังสือ แล้วใช้โปรแกรม Xilinx ISE 8.1i ในการเขียนภาษา VHDL โดยท่านอาจารย์ได้ยกตัวอย่างให้เห็นในหลายๆ รูปแบบ แต่ให้ผลลัพธ์เหมือนๆกัน เพื่อให้เกิดความรู้ ความเข้าใจ เวลาที่เราไปอ่านโค๊ดของคนอื่น เราจะได้เข้าใจ ว่ามันมีสไตล์การเขียนหลายแบบ แล้วแต่ใครถนัด
น่าเสียดายที่ความจริงเราน่าจะได้เทรนกันสองวัน แต่เนื่องด้วยในวันพรุ่งนี้ ท่านอาจารย์ต้องเดินทางไปสงขลาเพื่อกลับบ้านไปร่วมงานศพน้า เราก็เลยอัดเนื้อหาที่จำเป็นทั้งหมดภายในวันนั้นวันเดียว กว่าจะเลิกก็ปาไปสามสี่ทุ่ม ผมกลับถึงที่พักประมาณ 5 ทุ่ม เหนื่อยเหมือนกัน แต่คิดว่า เมื่อเทียบกับความรู้ที่ได้รับมา มันคุ้มค่าเกินกว่าความเหน็ดเหนื่อยมากมาย ซึ่งเมื่อเทียบกับความตั้งใจของท่านอาจารย์ ณรงค์ เทียบไม่ได้เลย สังเกตเห็นว่า ท่านอาจารย์ก็เหนื่อยเหมือนกัน แต่ท่านก็ยังพยายามที่จะถ่ายทอดความรู้ให้อย่างเต็มที่
ผมคงไม่ขออธิบายอะไรมาก เกี่ยวกับภาษา VHDL เพราะในหนังสือได้กล่าวไว้อย่างดีแล้ว ขอให้เพื่อนๆที่สนใจลองหาซื้อมาอ่านกัน ได้ข่าวว่าจะมีเล่มสองด้วย ท่านอาจารย์กำลังเรียบเรียงอยู่ รอติดตามกันได้เลยครับ สุดท้าย ผมอยากจะกล่าวว่า ขอบพระคุณท่านอาจารย์ ณรงค์ ทองฉิม อย่างสูง ที่ท่านมีความเมตตา อนุเคราะห์ให้ผมและเพื่อนได้เข้ารับการอบรมในครั้งนี้ ถึงแม้ผมทั้งสองคนจะไม่ได้เป็นผู้สอน ก็ตาม จึงอยากจะกราบขอบพระคุณท่านอาจารย์เป็นอย่างสูง ณ ที่นี้ด้วย
ถ้าผมมีเวลาผมก็อยากจะนำความรู้ที่ได้รับมาไปถ่ายทอดต่อไป อาจจะเป็นในรูปแบบการนำ CPLD ไปใช้งานมากกว่า (อาจจะเป็นที่เว็บ 123Microcontroller)
เช่นเคย เมื่อเราได้เรียนรู้มาแล้วว่า VHDL เขียนอย่างไร เราก็ต้องมาทดลองกับบอร์ด CPLD ที่เรามีอยู่ เพื่อพิสูจน์ว่าเราสามารถที่จะเขียนโปรแกรมสั่งงานมันได้จริง
Sunday, March 27, 2011
Labview : wire tutorial สายข้อมูล
ในโหมดของ text base programming เราสามารถส่งข้อมูลเข้าไปประมวลผลในฟังก์ชัน ผ่านตัวแปร แต่ใน Labview Graphical programming แล้ว wire หรือสัญลักษณ์สายไฟ ทำหน้าที่ในการนำข้อมูลจาก block diagram หนึ่งไปอีก block diagram หนึ่ง
จากรูปข้างล่าง สายไฟทำหน้าที่เชื่อมต่อระหว่าง control (ตัวควบคุม) และ indicator (ตัวแสดงผล) นอกจากนี้เรายังสามารถแยกข้อมูลที่ไหลผ่านสายไฟ ไปประมวลผลคู่ขนานกันก็ได้ เหมือนๆกับที่เราทำการ tab สายไฟออกไป เพื่อแบ่งกระแสไฟฟ้าไปใช้งาน คล้ายๆกันในแบบนั้น
ในขณะที่ชนิดข้อมูลของโปรแกรมมีหลายประเภท (integer , charector , float, double , boolean ,….) การเรียกใช้และการประกาศตัวแปร เป็นสิ่งที่แยกแยะความแตกต่างของข้อมูลในการเขียนโปรแกรมแบบ text base แต่ใน Labview เราใช้ สี และ ขนาดของสายไฟ เป็นตัวบ่งบอกถึงความแตกต่างของข้อมูลนั้นๆ
Labview จะมีการแจ้งให้ทราบว่าข้อมูลไม่ได้ถูกเชื่อมโยงกัน โดยจะแสดงลักษณะที่เรียกว่า broken wire เพื่อให้ผู้เขียนโปรแกรมทราบว่า ยังมีจุดที่สายไฟ ไม่ได้เชื่อมโยงกัน และจะไม่ยอมให้เราทำการ excute หรือ run โปรแกรม
การเกิด broken wire มีได้หลายสาเหตุ ตัวอย่างเช่น ระหว่าง object ที่มีความแตกต่างกันทางชนิดของข้อมูล ตัวอย่างเช่น เราไม่สามารถที่จะเอา out put ที่เป็น array จากบล๊อกไดอะแกรมหนึ่ง ไปต่อเข้ากับ input ที่เป็น numerical ของบล๊อกไดอะแกรมหนึ่ง ซึ่งแบบนี้จะทำให้เกิด broken wire ได้ ความแตกต่างของข้อมูลสามามารถแสดงได้ทั้งสี และขนาดของ wire ดังรูปต่อไปนี้
สายไฟทุกๆเส้น มีความแตกต่างกัน ขึ้นอยู่กับประเภทของข้อมูลที่ทำการส่งไปในสายไฟ เราสามารถที่จะเชือมต่อข้อมูลจากแหล่งข้อมูลจากที่หนึ่งไปอีกที่หนึ่งได้อย่างถูกต้องได้ โดยดูจากสีของ object หรือไม่ก็ตรงที่ขั้วต่อสายไฟ ในกรณที่ object หรือ block นั้นๆ มีมากกว่า 1 อินพุท หรือ 1 เอาท์พุท โดยดูที่สีของขั้วต่อสายไฟ สังเกตจากรูป
แต่ถ้าหากชนิดข้อมูลไม่ตรงชนิดกัน เราก็จะพบปัญหา broken wire ดังเช่นที่ได้กล่าวไว้แล้ว
Tip: คุณสามารถลบสายไฟ broken wire ออกจาก block diagram ได้อย่างรวดเร็วด้วยการกดปุ่ม Ctrrl + B
เราสามารถตั้งค่าให้ทำการ wiring สายไฟเวลาที่เราเคลื่อนเม้าส์เข้าไปใกล้ object จะทำให้เม้าส์เราเปลี่ยนจากลูกศร กลายเป็น ม้วนสายไฟ เพื่อพร้อมที่จะทำการเดินสายไฟ ได้ตลอดเวลา โดยให้เราไปที่เมนู Tools –> Options ---> Block Diagram (ทางซ้ายมือ) แล้วติ๊กที่ช่อง Enable auto wiring
ในกรณที่เราทำการลากสายไฟไปแล้ว ไม่ต้องกลัวที่จะไม่สวยงามครับ ให้เราลากเชื่อมโยงไปก่อน แล้วทำการคลิกขวาบริเวณสายไฟ แล้วเลือก Clean Up Wire โปรแกรมจะทำการจัดสายไฟ ให้อย่างสวยงาม
เรียนรู้การใช้สายไฟ เพิ่มเติมได้จากตัวอย่างต่อไปนี้ เป็นการสร้าง control และ indicator ที่มีความแตกต่างกันทางชนิดของข้อมูล จะเห็นได้ว่า สีของ object และสีของสายไฟ เปลี่ยนแปลงตามชนิดของข้อมูล
วีดีโอสาธิตการทำการ wire ข้อมูลของ Labview
ที่มา http://zone.ni.com/devzone/cda/tut/p/id/7567
Saturday, March 19, 2011
มาเล่น Arduino กันเถอะ
ก่อนหน้านี้ ผมเคยไปเทรน ARM7 ที่ขอนแก่น ตั้งหลายชั่วโมง เป็นเวลาหลายสัปดาห์ในช่วงปิดเทอมฤดูร้อน ประมาณเดือนเมษา พอกลับมาทำงาน ไม่ค่อยได้ใช้ ARM7 เพราะที่ทำงานมีแต่ PIC16F877 , PIC18F458 ไปๆมาๆ ก็ชักจะลืมๆ แล้ว ว่า ARM7 มันเซ็ทค่า Register ยังงัย
แต่เมื่อไม่นานมานี้ เกิดการปฏิวัติไมโครคอนโทรลเลอร์กับตระกูล AVR โดยชาวอิตาลี สองท่าน ด้วยความที่ต้องการให้นักเรียน นักศึกษา มีบอร์ดไมโครคอนโทรลเลอร์ใช้ และทำได้ง่าย ราคาถูก และศึกษาได้อย่างไม่ยากเย็นนัก จึงได้สร้างบอร์ดไมโครคอนโทรลเลอร์ที่ชื่อว่า Arduino ขึ้นมา
โดยที่บอร์ด Arduino ใช้ไมโครคอนโทรลเลอร์หลักเป็น AVR ตระกูล 8 บิต โดยถูกออกแบบให้มีการต่อใช้งานเป็นขา Digital I/O จำนวน 13 ขา และเป็นขารับสัญญาณ Analog จำนวน 6 ขา ซึ่งการกำหนดจำนวนขาแบบนี้ ได้กลายเป็นมาตรฐานของบอร์ด Arduino ไปแล้ว ถึงว่า Arduino เองจะถูกผลิตออกมาหลายแบบ แต่ที่เหมือนกัน ก็ยังคงเป็นขาที่เอาไว้ใช้งาน แต่แตกต่างกันตรงที่แต่ละรุ่น ที่ทำออกมามี memory ที่ไม่เท่ากันนั่นเอง (แต่ปัจจุบัน บอร์ด Arduino มีจำนวนขาให้ใช้ มากกว่าที่ได้กล่าวไว้แล้ว แตกต่างกันออกไปในแต่ละรุ่น)
นอกจากลายวงจรที่เค้าแจกฟรีเป็น Open source ให้เราสามารถนำไปสร้างเองได้แล้ว ตัวโปรแกรมที่เป็น IDE ที่เอาไว้เขียนโค๊ดภาษา C/C++ ก็ยังสามารถให้เราสามารถโหลดเอาไปใช้งานฟรีได้อีกด้วย (โหลด IDE Arduino) ซึ่งในตัว IDE ที่เราติดตั้งไปนี้ ประกอบไปด้วย Example มากมายที่ทำให้เรา เรียนรู้ไมโครคอนโทรลเลอร์ได้อย่างไม่น่าเบื่อหน่าย
ในการใช้งาน ถ้าหากเป็นการเรียนรู้แล้ว เราสามารถที่จะต่อสาย USB จากคอมพิวเตอร์ขของเราเข้ากับบอร์ก Arduino แล้วก็สามารถที่จะใช้งานได้เลย เพราะเค้าออกแบบให้เราใช้ไฟจากสาย USB เป็นไฟเลี้ยงของบอร์ดได้เลย สะดวกมากๆ (ในกรณีที่โหลดไม่กินกระแสมากนัก) นับว่าเป็นการออกแบบที่เหมาะให้นักเรียนนักศึกษา ได้ใช้และเล่นไมโครคอนโทรลเลอร์ อย่างที่ตั้งใจเอาไว้เลยทีเดียว
ที่อยากแนะนำให้เพื่อนๆ ให้มาลองเล่น Arduino นี้ก็เพราะว่า นอกจากความง่ายในการเขียนโปรแกรมแล้ว (เป็นภาษาซี ที่เราเรียกผ่าน Library ของมัน) ยังมีตัวอย่างให้ศึกษาเยอะแยะมากมาย นับไม่ถ้วนกันเลยทีเดียว ทำให้เราสามารถเล่น และทดลองแล้วประสบความสำเร็จได้อย่างง่ายดาย เพื่อให้เกิดกำลังใจในการศึกษาไมโครคอนโทรลเลอร์เบอร์อื่นๆ ต่อไป
ขั้นตอน ง่ายๆ ในการทดลอง Arduino
- หาบอร์ด Arduino สักบอร์ด ในที่นี้ ผมแนะนำของป๋าช้าง Ayarafun.com ราคาถูกมากๆ (ถูกกว่าค่าเหล้า เบียร์ซะอีก)
- โหลด IDE สำหรับเขียนโค๊ด ดาวน์โหลด
- ต่อสาย USB เข้าบอร์ด Arduino
- เปิดโปรแกรม Arduino เลือกบอร์ด และพอร์ตให้ตรงกับบอร์ดของเรา
- เปืด Example Blink ทดลองทำไฟกระพริบกันก่อน (ถือเป็นโปรแกรมไหว้บอร์ด)
- สังเกตไฟ LED ที่พอร์ด Digital 13 ต้องติด ดับ สลับกัน
ศึกษาเพิ่มเติม
- http://en.wikipedia.org/wiki/Arduino
- http://arduino.cc/en/
- และที่ 123 Microcontroller แหล่งศึกษาไมโครคอนโทรลเลอร์ของผม
Thursday, February 17, 2011
Labview : Front Panel หน้ากาก VI
ในตอนนี้ เราจะมาทำความรู้จักกับ Front Panel ว่ามันมีความสัมพันธ์กับ Block Diagram อย่างไร Front Panel Object แต่ละตัวแตกต่างกันอย่างไร แล้วเราจะหาอุปกรณ์ หรือว่า Front Panel Object ได้อย่างไร เราจะได้เรียนรู้กันในตอนนี้
Front Panel เป็นส่วนของหน้าต่างที่ทำหน้าที่เป็นส่วนติดต่อกับ user หรือเป็นส่วนของ VI (Virtual Instrument ) นั่นเอง Front Panel ประกอบไปด้วย Control ทำหน้าที่เป็น input และ Indicator ทำหน้าที่เป็น output ซึ่งทำหน้าที่โต้ตอบก้บผู้ใช้งาน ในขณะที่เราวาง Indicator และ Control ลงบน Front Panel โปรแกรม Labview จะทำการสร้าง Control และ Indicator ลงบน Block Diagram อัตโนมัติ ซึ่งเราจะได้มาศึกษา Block Diagram กันต่อไป
หน้าต่าง Front Panel
หลังจากเราเปิดโปรแกรม Labview ขึ้นมาแล้ว เราสามารถที่จะสร้าง new VI ขึ้นมาได้ หน้าต่าง Front Panel จะปรากฏขึ้นมา โดยเราสามารถที่จะทำการสร้างหน้าต่าง User Interface หรือหน้าต่างโปรแกรมของเรา เพื่อให้ผู้ใช้ สามารถใช้งานได้ตามที่เราได้ออกแบบไว้แล้ว (ตรงนี้ ต้องใช้ประสบการณ์ และความคิดสร้างสรรค์ในการออกแบบสักหน่อย)
ที่หน้าต่าง Front Panel ประกอบไปด้วยส่วนของ Toolbar ที่อยู่ด้านบน และส่วนของ Control Pallete ซึ่งเราสามารถที่จะเปิดตรงไหนก็ได้ที่หน้าต่าง Front Panel โดยทำการคลิกขวาที่หน้าต่าง Front Panel หลังจากเราเปิดหน้าต่าง Control Pallete แล้วเราก็จะพบกับ Control และ Indicator แล้วสามารถที่จะลากพวกมันลงบนหน้าต่าง Front Panel ได้เลย
Contrrol ได้แก่ Knobs , Push button , dial , และอุปกรณ์ที่ทำหน้าที่เป็น input อื่นๆ ทำหน้าที่เป็นตัวโต้ตอบ ทำหน้าที่เป็นตัวรับ ในขณะที่ Indicator ซึ่งได้แก่ graphic , LED ,หรืออุปกรณ์ที่ทำหน้าที่เป็นตัวแสดงผล ทำหน้าที่เป็นผลลัพธ์ ของหน้าต่าง VI
จากรูปด้านบน เรามีตัว Control 2 ตัว ได้แก่ Number of Measurements และ Delay (sec) และ 1 ตัวสำหรับ indicator ในที่นี้คือตัว waveform graph ที่เราตั้งชี่อว่า Temperature Graph
ทุกๆ Control และ indicator จะมีชนิดของข้อมูลเป็นความสัมพันธ์ของตัวมัน ตัวอย่างเช่น Delay (sec) ทีเป็นตัวปุ่ม slide ในแนวนอน เป็นค่าตัวเลข เมื่อเรา Double Click ที่ตัว Control ในหน้า Front Panel โปรแกรมจะทำการเปิด Block Diagram ขึ้นมาให้ แล้วจะแสดงสัญลักษณ์ หรือไอคอน ของตัว Delay (sec) ที่หน้า Block Diagram โดยที่ตัวมันเองจะมีสีส้ม ซึ่งบ่งบอกว่า มันมีข้อมูลเป็นชนิดตัวเลขที่เป็น Double (DBL)
Numeric Control and Indicators
เราจะลองมาสร้าง Numeric control แล้วทดลองเปลี่ยนค่าของมัน
1. ทำการคลิกขวาที่ Front Panel แล้วทำการเปิด Control pallete จาก Pallete ย่อยให้เราไปที่ Numeric แล้วลาก Numeric control ลงบนที่ว่าง Front Panel
2. เปลี่ยน ป้ายกำกับ Label ด้วยการดับเบิลคลิก ที่ป้าย label แล้วทำการพิมพ์คำว่า “input”
3. เราสามารถเปลี่ยนแปลงค่าของ control ได้ด้วยการกดปุ่ม เพิ่มหรือลดค่า หรือ ทำการดับเบิลคลิกไปที่บริเวณที่แสดงค่า แล้วทำการพิมพ์ค่าใหม่ ลงไปโดยตรง แล้วทำการกดปุ่ม ENTER ที่คีย์บอร์ด เพื่อทำการเปลี่ยนแปลงค่าใหม่ได้โดยครง
Boolean Controls and Indicators
Control และ Indicator ที่เป็นชนิด Boolean จะรับและส่งข้อมูลได้เพียงสองสถานะเท่านั้น คือ TRUE และ FALSE เท่านั้น จากรูปข้างล่างจะเห็นว่า สวิทช์ในแนวตั้ง และ หลอด LED เป็น Control และ Indicator แบบ Boolean
String Controls and Indicators
ข้อมูลชนิด ตัวอักษร เป็นข้อมูลแบบเรียงลำดับของ รหัส ASCII เรามักใช้ String Control และ String Indicator ทำหน้าที่รับข้อความจากผู้ใช้ ตัวอย่างเช่น password และ username ในขณะที่ String indicator จะทำหน้าที่แสดงผลที่เป็นข้อความ เราสามารถหา String Control และ String Indicator ได้จาก String and Path ใน pallete ย่อย
Front Panel Window Toolbar
เรามาดูสัญลักษณ์และการทำใช้งาน Toolbar กัน
ทำหน้าที่สั่งให้ VI ที่เราเขียนทำงาน ; Labview จะทำหน้าที่ complie โค๊ดที่เราเขียนอัตโนมัติ
เป็นตัวบอกว่า ณ ขณะนี้ เกิดความผิดพลาดขึ้น เนื่องไม่สามารถที่จะ conplie โปรแกรมได้ หากเราไม่แก้ไข เสียก่อน เราสามารถดูตำแหน่งที่ error ได้ ด้วยการคลิกที่ลูกศร นี้ แล้วจะเกิดหน้าต่างแสดงข้อความที่ error ให้เราคลิกที่ข้อความนั้น โปรแกรมก็จะพาเราไปยังตำแหน่งที่ error นั้น อย่างรวดเร็ว
เป็นการรันโปรแกรมแบบต่อเนื่อง วนลูปไม่รู้จบ จนกว่าเราจะกดปุ่ม abort หรือ ปุ่มหยุดโปรแกรม
ขณะหน้าต่าง VI กำลัง run อยู่ ปุ่มนี้ จะโชว์ขึ้นมา ถ้าเราคลิกที่ปุ่มนี้ โปรแกรม VI ของเราก็จะหยุดทำงานอย่างทันที
คำเตือน : โดยปกติแล้ว เรามักที่จะไม่นิยม หยุดโปรแกรมของเราด้วยปุ่มนี้ เพราะอาจจะทำให้เกิดอาการค้างของข้อมูล เรามักจะทำปุ่ม stop ขึ้นมาเอง
กดปุ่มหยุดชั่วคราว หากเราต้องการหยุดโปรแกรม VI ของเราชั่วคราว แล้วกดปุ่มนี้อีกครั้ง หากต้องการให้โปรแกรมของเราทำงานต่อ
คลิกเลือกที่ปุ่มนี้ หากต้องการปรับแต่งข้อความบนหน้าต่าง Front panel
เป็นการจัดเรียง control และ indicator ให้เรียงตรงกัน ทั้งในแนวตั้ง และแนวนอน นอกจากนี้ ยังมีปุ่มสำหรับเรียงลำดับการซ้อนทับของหน้าต่าง และปุ่มปรับขนาดให้เท่าๆกันด้วย
ปุ่มขอความช่วยเหลือ หากต้องการคำอธิบาย ของ control หรือ indicator
ในการแก้ไขข้อความ หรือพิมพ์ตัวหนังสือ บนหน้า Front Panel เมื่อเราต้องการจบการทำงานของการพิมพ์หรือแก้ไข ข้อความ เราไม่สามารถที่จะใช้ปุ่ม ENTER บนคีย์บอร์ดได้ เพราะการเคาะ ENTER จะเป็นการขึ้นบรรทัดใหม่ หากเราต้องการจบการพิมพ์ ให้ทำการกดปุ่ม ลูกศรเครื่องหมายถูกแทน
Front Panel เป็นสิ่งแรกที่โปรแกรมเมอร์จะต้องทำการออกแบบ ในบางครั้งเราใช้เวลาในการออกแบบหน้าต่าง VI ของเราไปเกินกว่าครึ่งหนึ่งของโปรเจคของเรา ซึ่งหน้าต่าง VI ที่ดี ย่อมทำให้ผู้ใช้งานเกิดความรู้สึกอยากใช้งานโปรแกรมของเรา ไม่เกิดความสับสน บางครั้งโปรแกรมเมอร์อาจจะเรียนรู้เรื่องการออกแบบบ้าง

