ดิว.นินจา

ดิว.นินจา

Thursday, May 25, 2017

แนะนำหนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266”

ปัจจุบันเมื่อกล่าวถึงอุปกรณ์ IoT (Internet of Things) คงมีน้อยคนที่จะไม่รู้จัก ในยุคที่การเข้าถึงอินเทอร์เน็ตเป็นกิจวัตรประจำวันของมนุษย์เพื่อการเรียนรู้และสื่อสารข้อมูลระหว่างกัน ดังนั้นหากอุปกรณ์หรือ เครื่องจักรสามารถสื่อสารผ่านอินเทอร์เน็ตได้ก็จะช่วยทำให้การใช้งานมีประสิทธิภาพและความชาญฉลาดมากขึ้น หากย้อนเวลากลับไปจะพบว่าความพยายามที่จะทำให้อุปกรณ์เครื่องใช้ต่างๆ เข้าถึงอินเทอร์เน็ตนั้นมีมานานมากตั้งแต่ ค.ศ. 1982 คือตู้บรรจุน้ำอัดลมที่ Carnigie Mellon University ที่สามารถรายงานว่ามีจำนวนคงคลังในตู้เหลือเท่าไร และน้ำอัดลมในตู้เย็นพอหรือยัง ซึ่งในสมัยนั้นคงเป็นเครื่องใช้ที่เกินความจำเป็นสำหรับคนส่วนใหญ่ แต่ในสมัยนี้แทบทุกคนอยากจะสั่งงานเครื่องใช้ไฟฟ้าในบ้านตนเองผ่านโทรศัพท์มือถือ เหตุผลสำคัญก็คือฮาร์ดแวร์ที่ใช้พัฒนามีราคาต่ำลงมาก และเครือข่ายอินเทอร์เน็ตก็ครอบคลุมแทบทุกพื้นที่ โดยเฉพาะในเขตชุมชน การปรับปรุงโปรโตคอลจาก ipv4 เป็น ipv6 ช่วยให้อุปกรณ์ทั่วโลกสามารถเชื่อมต่ออินเทอร์เน็ตได้โดยไม่ต้องกังวลกับปัญหา IP address ไม่เพียงพอ

แนวคิดในการออกแบบสร้างอุปกรณ์ IoT นั้นสามารถมีได้หลากหลาย จากการสำรวจพบว่าในบรรดาเอกสารและข้อมูลบนเว็บไซต์ส่วนใหญ่จะกล่าวถึงการแสดงผลข้อมูล (monitoring) หรืองานควบคุมพื้นฐานในลักษณะ ON/OFF ตัวอย่างเช่นการแสดงค่าอุณหภูมิและความชื้นบนเว็บเพจ การสั่งเปิดเครื่องปรับอากาศที่บ้าน แต่ในงานอุตสาหกรรมหลายประเภทต้องการการควบคุมที่ซับซ้อนกว่า โดยมีการวัดค่าและป้อนกลับสัญญาณเพื่อสมรรถนะที่ถูกต้องแม่นยำ เช่นระบบควบคุมตำแหน่ง ความเร็ว ความเร่ง ในเครื่องจักรกลอัตโนมัติ งานควบคุมระดับของเหลว หรือกระบวนการทางเคมี นี้เป็นแรงจูงใจหลักที่ผู้เขียนจัดทำหนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266” ขึ้นมา โดยอาจจะเรียกว่าเป็น “คู่มือ” แทนหนังสือก็ได้ เพราะมีเนื้อหาเพียง 75 หน้า แต่ได้เลือกเอาสาระสำคัญที่จะช่วยให้ท่านสามารถพัฒนาตัวควบคุมป้อนกลับบนอินเทอร์เน็ต ซึ่งในหนังสือจะอ้างถึงโดยตัวย่อ IoFC (Internet of Feedback Controller) โดยอาศัยชิพ ESP8266 จากบริษัท Espressif

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

ประเด็นสำคัญที่ทำให้หนังสือนี้แตกต่างจากข้อมูล IoT จากแหล่งความรู้ทั่วไปพอจะสรุปได้ดังนี้

  1. เนื้อหาจะเน้นการพัฒนาระบบควบคุมป้อนกลับ ซึ่งแตกต่างจากการควบคุม ON/OFF หรือแบบลูปเปิดตรงที่ระบบป้อนกลับอาจจะเสียเสถียรภาพและก่อให้เกิดอันตรายได้ นอกจากนั้นทุกขั้นตอนการออกแบบและอิมพลิเมนต์ตัวควบคุมป้อนกลับมีความสำคัญ เพื่อให้ได้คุณสมบัติตามข้อกำหนดที่ต้องการ หรือแม้แต่ตัวควบคุมพื้นฐาน เช่น PID จากประสบการณ์การสอนของผู้เขียนเองมักพบว่านิสิตที่ทำโครงงานไม่เข้าใจว่าจะอิมพลิเมนต์อย่างไรจึงจะให้ผลตอบสนองเหมือนกับที่จำลองบนคอมพิวเตอร์ บางทีใช้วิธีลองผิดลองถูกจนได้ผลที่ดูไม่น่าเกลียดจนเกินไปแล้วนำมาใส่ในรายงาน จุดสำคัญที่ต้องเน้นคือ ถ้าหากใช้ค่าพารามิเตอร์ชุดเดียวกัน ข้อมูลจากการจำลองกับข้อมูลที่เก็บจากฮาร์ดแวร์จะต้องมีลักษณะเด่นที่สอดคล้องกันดังเช่นผลตอบสนองขั้นบันไดในรูปด้านล่างนี้ มิฉะนั้นโครงงานหรืองานวิจัยก็จะขาดความน่าเชื่อถือ เพราะไม่สามารถเชื่อมโยงทฤษฎีกับผลที่ได้จากการปฏิบัติ

    ในการวิเคราะห์และออกแบบระบบควบคุมจะใช้ซอฟต์แวร์ Scilab ที่เป็นโอเพนซอร์สดาวน์โหลดได้ฟรี การเชื่อมต่อกับบอร์ดจะกระทำผ่าน serial port เป็นหลัก (ยกเว้นในบทที่ 4 ที่นำเสนอการรับส่งข้อมูลในรูป html) เนื่องจาก ณ ปัจจุบันเวอร์ชันล่าสุดของ Scilab คือ 6.0 ยังไม่มี Serial Toolbox ดังนั้นตัวอย่างในหนังสือจึงต้องใช้กับ Scilab 5.5.2 ไปก่อน (ผู้อ่านสามารถลงทั้งสองเวอร์ชันในเครื่องคอมพิวเตอร์เดียวกันได้)

    การอิมพลิเมนต์ตัวควบคุมทั้งแบบ PID และตัวควบคุมเชิงเส้นทั่วไปในรูปฟังก์ชันถ่ายโอนได้อธิบายโดยละเอียดในหนังสือ “ระบบควบคุมฝังตัว” ในหนังสือเล่มใหม่นี้จะนำเสนอตัวอย่างสำหรับ ESP8266 กล่าวโดยสรุปคือนอกจากการแปลงเป็นระบบดีสครีต (discretization) จะต้องถูกต้องแล้ว ยังต้องกำหนดค่าคาบเวลาการสุ่มให้ตรงกับที่ใช้บนบอร์ดด้วย ผู้เริ่มต้นพัฒนาระบบป้อนกลับอาจละเลยข้อนี้โดยเขียนอัลกอริทึมควบคุมลงบนฟังก์ชัน loop() และปล่อยให้วนรอบตามยถากรรม ในทางปฏิบัติเราสามารถอิมพลิเมนต์ตัวควบคุมใน loop() ได้ แต่จะต้องวัดค่าคาบเวลาการทำงานแต่ละลูปและนำค่านั้นไปใช้ในการแปลงตัวควบคุมเป็นระบบดีสครีต วิธีการวัดอย่างง่ายคือกำหนดขาเอาต์พุตแบบดิจิทัลขาหนึ่งและให้สลับลอจิกทุกครั้งที่เริ่มต้นลูปใหม่ เมื่อใช้สโคปวัดจะได้ว่าคาบเวลาเท่ากับครึ่งไซเคิลของสัญญาณรูปสี่เหลี่ยม

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

    ในบทที่ 3 ของหนังสือจะแสดงตัวอย่างทั้งการอิมพลิเมนต์ตัวควบคุมบน loop() และไทเมอร์ หลังจากนั้นในบทที่ 4 -5 เราจะใช้การอิมพลิเมนต์บนไทเมอร์เป็นหลักเนื่องจากมีข้อดีคือ ตัวควบคุมจะทำงานด้วยคาบเวลาที่เป็นอิสระจากคาบเวลาการสื่อสารข้อมูลผ่านอินเทอร์เน็ตที่มีช่วงเวลานานกว่า โดยตั้งคาบเวลาตัวควบคุมที่ 80 มิลลิวินาที ส่วนการส่งข้อมูลจะอยู่ที่ประมาณ 1 วินาที

  2. การสื่อสารข้อมูลระหว่างอุปกรณ์โดยตรงผ่าน WiFi ในบางกรณีที่เราต้องการรับส่งข้อมูลระหว่างอุปกรณ์ 2 ตัวโดยไม่ต้องมี WiFi router และไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ต ตัวอย่างเช่นเราติดบอร์ดตัวควบคุมไว้กับถังเคมีที่อยู่สูงพอประมาณ แล้วต้องการแสดงค่าและควบคุมโดยคอมพิวเตอร์ที่อยู่ระดับพื้น ลักษณะงานเช่นนี้ตรงกับนิยามของ WiFi Direct คือการสื่อสารระหว่างอุปกรณ์โดยตรงผ่านสัญญาณ WiFi ถึงแม้ตัว ESP8266 ไม่ได้สนับสนุน WiFi Direct แต่สามารถตั้งค่าการทำงานในโหมด Soft AP ซึ่งจะช่วยให้การใช้งานในลักษณะดังกล่าวสามารถทำได้ จากการตรวจสอบเบื้องต้นของผู้เขียนพบว่าบทความในอินเทอร์เน็ตที่กล่าวถึงการใช้งานลักษณะนี้ยังมีไม่มาก จึงได้นำเสนอตัวอย่างไว้ในส่วนท้ายของบทที่ 4 ตัว ESP8266 จะทำหน้าที่เป็น server โดยสร้าง Access Point ให้อุปกรณ์ client อื่นมาต่อเชื่อม

    การใช้งานในโหมดนี้จะมีประโยชน์สำหรับการควบคุมจากระยะไกลในพื้นที่ที่ไม่มี WiFi Access Point ซึ่งเราสามารถสร้าง GUI บน Scilab บนคอมพิวเตอร์ที่เป็น client เพื่อสั่งงานและรับข้อมูลจากบอร์ดได้

  3. การแสดงผลและควบคุมผ่านบริการ NETPIE ที่พัฒนาโดยทีมจาก NECTEC อ่านเพิ่มเติมได้จาก https://netpie.io ในบทที่ 5 จะแนะนำการทำให้ IoFC รับส่งข้อมูลผ่านเว็บของ NETPIE ได้ โดยใช้ไลบรารี Microgear ในส่วนของ ESP8266 และการสร้าง application บน NETPIE และใช้ Freeboard เพื่อการแสดงผลและควบคุม อย่างไรก็ตามผู้เขียนยอมรับว่าการนำเสนอในส่วนนี้ยังไม่ละเอียดมาก เนื่องจากเป็นบริการที่เกิดขึ้นไม่นานและบางส่วนยังมีการเปลี่ยนแปลงอย่างต่อเนื่อง ตัวอย่างเช่น slider widget เพิ่งจะถูกเพิ่มเข้ามาไม่นานและยังไม่มีข้อมูลในคู่มือ (มีเพียงบทความแนะนำ 1 บทความ) ผู้เขียนใช้เวลาประมาณ 2 วันกว่าจะเข้าใจการทำงานของเจ้า slider และสามารถส่งคำสั่งอ้างอิงมาที่บอร์ดได้ แต่โดยรวมแล้วเป็นเครื่องมือพัฒนาที่น่าสนใจหากมีเวลาในการศึกษาและเรียนรู้เพิ่มเติม ซึ่งหวังว่าจะถูกปรับปรุงให้ใช้งานง่ายขึ้นในอนาคตโดยเฉพาะส่วนของคู่มือ

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

หนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266” เวลานี้มีจำหน่ายในรูปอิเล็กทรอนิกส์ที่ Ookbee เท่านั้น สำหรับตัวเล่มจริงจะแจกให้กับผู้เข้าคอร์สฝึกอบรมซึ่งจะเริ่มประมาณกลางปี 2560 นี้สามารถติดตามข่าวสารได้จากเพจ facebook ของเราครับ www.facebook.com/dewninjathai


ลิงก์หนังสือ "ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266" ที่ Ookbee

No comments:

Post a Comment

แนะนำหนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266”

ปัจจุบันเมื่อกล่าวถึงอุปกรณ์ IoT (Internet of Things) คงมีน้อยคนที่จะไม่รู้จัก ในยุคที่การเข้าถึงอินเทอร์เน็ตเป็นกิจวัตรประจำวันของมนุษย์เ...