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  (ขึ้นอยู่กับการออกแบบ และการใช้งานโปรแกรม)

Labview Interface for Arduino tool kit Arduino Board

ทางฝั่งของ Arduino
- Firmware (โค๊ด) ซึ่งเขียนด้วยภาษา wiring ของทางฝั่งของ arduino ในที่นี้ผมจะเรียกตามโปรเจคของมัน ซึ่งก็คือ LVIFA_Base
  ซึ่งเราจะต้องทำการ burn ลงบนบอร์ด Arduino (ซึ่งจะทำการ burn ลงแค่ครั้งเดียวเท่านั้น)

LVIFA_Base

เมื่อเราติดตั้งโปรแกรมทั้งสอง ลงบน 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  และเปิดหน้าต่างของโปรแกรมนี้เลยทันที

Palette Examples

จากรูป ( ผมกด Ctrl+T เพื่อให้แสดงผล Tile left and Right )  ซ้ายมือ เป็นการออกแบบหน้าต่าง GUI คือเป็นส่วนที่ให้ผู้ใช้งานไว้สำหรับทำงาน ส่วนขวามือ เป็นหน้าที่ของโปรแกรมเมอร์ที่จะต้องทำการเขียนโปรแกรมแนว Graphic Programming เพื่อให้โปรแกรมที่ออกแบบไว้ทำหน้าที่ได้อย่างที่ต้องการ ซึ่งส่วนใหญ่แล้ว โปรแกรมเมอร์ก็จะทำหน้าที่ผู้ใช้งานไปด้วยในตัว

Analog Read Pin Example.vi

ในทางด้านซ้ายมือ เราเรียนรู้ได้ไม่ยาก หากมีพื้นฐานเรื่องการเขียนโปรแกรมบน Labview มาก่อนแล้ว แต่ที่เป็นปัญหาตอนนี้ คือ การนำ Labview Interface for Arduino tool kit มาใช้  ซึ่งมันมีลำดับการทำงาน พอจะอธิบายคร่าวๆ ได้ดังนี้

ถ้าเราต่อวงจรในโลกแห่งความจริง หมายถึงต่อวงจรจริงๆ ตามวงจรนี้ โดยเราให้ แรงดันที่ถูกแบ่งจาก R ปรับค่าได้ ต่อเข้ากับขา Analog In ช่อง AN0 ของ Arduino 

Analog Read Pin Example circuit

แล้วทำการเขียนโปรแกรมบน Labview ด้าน Block Diagram ตามรูปภาพ

Analog Read Pin 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 เพียงเท่านั้น เราก็จะได้โปรแกรมง่ายๆ ที่สามารถนำค่าจากโลกภายนอก เข้ามาแสดงผลในโลกของคอมพิวเตอร์ได้แล้ว 

Analog Read Pin setting and display

หมายเหตุ เอาเมาส์ชี้ที่ tool block แล้วกด Ctrl +H จะปรากฏหน้าต่างแสดงคำอธิบาย tool block นั้นๆ

analog read pin help

ถ้าจะมีคำถามว่า แล้วถ้าต้องการเอา arduino ไปวัดค่าจากเซ็นเซอร์ที่เป็นตัวอ่านค่าอุณหภูมิ หรือ ค่ากระแสไฟฟ้าได้ไหม ก็ต้องถามกลับไปว่า ตัวอ่านค่าอุณหภูมิกับตัวอ่านค่ากระแสไฟฟ้า ให้เอาท์พุตออกมาเป็น Analog ไหมหล่ะ ถ้าใช่ ตัวอย่างที่ได้นำเสนอไป ก็เกือบจะเอาไปใช้ได้เลย เพราะเรากำลังรับค่าที่เป็นแรงดันไฟฟ้า ที่แปรผันตามค่าตามที่มันกำลังวัดค่าอยู่นั่นเอง เพียงแต่ค่าที่เราต้องการให้มันแสดง มันไม่ใช่ค่าแรงดันไฟฟ้า เราต้องการอ่านค่าอุณหภูมิหรือค่ากระแสไฟฟ้า ฉะนั้นค่าที่รับมาได้จะเป็นค่าแรงดันไฟฟ้า เราก็ต้องนำค่าเหล่านั้นมาทำทางคณิตศาสตร์โดยใช้เครืองมือ + - x / ทาง labview ในการแปลงค่าแรงดันให้กลายเป็นค่าที่เราต้องการ โดยสมการในการแปลงมันก็อยู่ในดาต้าชีทของเซ็นเซอร์เบอร์นั้นๆ นั่นแหละ

ยังมีตัวอย่างที่อยู๋ในโฟวเดอร์ดังกล่าวอีกเยอะแยะ หากเราเข้าใจตัวอย่างนี้แล้ว เราก็สามารถที่จะเข้าใจตัวอย่างอื่นๆ ได้อย่างไม่ยากเย็นนะ ขอให้เรามีพื้นฐานของ Labview Programming + Circuit + หน้าที่การทำงานของแต่ละ pin ของ arduino เราก็น่าจะพอแก้ไข ปรับปรุง พัฒนาจากตัวอย่างที่เค้าให้มาได้อยู่แล้ว

หวังว่าพอจะได้แนวทางการนำไปประยุกต์นะครับ

อ่านเพิ่มเติม...

Monday, October 15, 2012

Robotic wheelchair

Robotic wheelchair

    หุ่นยนต์เก้าอี้ผู้พิการทางขา สร้างโดยคุณ Shuro Nakajima ซึ่งเป็นหัวหน้าทีม Chiba Institute of Technology ได้ถูกสร้างให้มีความแตกต่างจากหุ่นยนต์เก้าอี้ผู้การทางขาจากตัวอื่นๆ ตรงที่มันมีความสามารถในการข้ามสิ่งกีดขวางได้ ซึ่งโดยปกติแล้ว รถเข็นเก้าอี้ผู้พิการทางขานั้น ตัวล้อจะไม่สามารถยกตัวขึ้นเองได้ จะเดินทางไปได้ในที่ราบเรียบ ไม่มีสิ่งกีดขวาง แต่เจ้าหุ่นตัวนี้ มีความสามารถทำได้ ซึ่งนับว่าเป็นการพัฒนารถเข็นสำหรับผู้พิการทางขา ก้าวไปอีกขั้น

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

 

ที่มาของข่าว คลิก

อ่านเพิ่มเติม...

Wednesday, October 10, 2012

Legged Robotics

Legged Robotics ห้องทดลองเคลื่อนที่อัตโนมัติ (Autonomous System Lab) ได้พยายามที่จะค้นคว้าหารูปแบบการออกแบบกลไก ที่สามารถเคลือนไหวได้อย่างพลวัต ไม่ว่าสถานะการณ์จะเป็นอย่างไร เจ้าหุ่นยนต์ที่เค้าคิดจะออกแบบนั้น ก็ยังที่จะสามารถเคลื่อนที่ผ่านไปได้ และสามารถที่จะคิดและปรับตัวเองให้เข้ากับสภาพของเส้นทางที่พวกมันเคลื่อนที่ไปด้วย

เห็นหน้าตาหุ่นยนต์ตัวนี้ แล้ว รู้ได้เลยทันทีว่า “ขา” ของมันคือส่วนที่สำคัญที่สุด และเป็นพระเอกของการเคลือนไหวแบบพลวัต หลบหลีกสิ่งกีดขวาง ปรับสมดุลของจุดศูนย์ถ่วงของตัวมันเอง รับแรงกระแทก และส่งแรงกระแทกนั้นกลับไปประมวลผล เพื่อปรับระยะการยืดและหดตัวของสปริงได้อย่างพอเหมาะ นับว่า เป็นอัฉริยะภาพทางวิศวกรรมจริงๆ

เห็นสมการแล้ว ทึ่งเลยครับ มันคงไม่ใช่เรื่องง่าย ที่ใครที่คิดอยากทำ แล้วก็ลงมือทำไปเลย แล้วก็มานั่งปรับแต่งไปเรื่อยๆ หากเป็นอย่างนั้นจริงๆ ก็ไม่รู้เราจะเรียนวิศวะกันไปทำไม ให้มันยุ่งยาก 

control system model

ในส่วนของซอร์ฟแวร์ ทางทีมได้ใช้โปรแกรมทางวิศวกรรมที่ดังๆ เช่น MATLAB , LABVIEW และ C/C++ ซึ่งเจ้าตัว C/C++ นี้ ถูกนำไปเขียนกับ SL - The Simulation Laboratory ซึ่งก็ไม่น่าแปลกใจเลย ซอร์ฟแวร์พวกนี้ โดยเฉพาะ MATLAB และ LABVIEW ทำไมจึงเป็นที่นิยมในงานวิจัยพวกหุ่นยนต์นัก และยังมีราคาแพงอีกด้วย

ขอให้เพื่อนๆ ดูวีดีโอสาธิต แล้วกันครับ เห็นแล้วจะเกิดไฟแห่งความอยากรู้ อยากเห็นขึ้นมาอีกเยอะเลย ผมสาบานได้

ศึกษาข้อมูลเพิ่มเติม คลิก

อ่านเพิ่มเติม...
 

แจกฟรี พื้นที่ฝากไฟล์ 15 GB

ติดตามข่าวสารผ่าน Twitter

Blog อื่นๆของฉัน

ผู้ติดตาม Blog นี้

เว็บเพื่อนบ้าน