วันพฤหัสบดีที่ 27 พฤษภาคม พ.ศ. 2553

การเขียนสมการในเว๊บและในบล๊อก

การเขียนสมการในบล๊อกหรือในเว๊บโดยทั่วไป (HTML) นั้น ทำไม่ได้เลย (หรือได้?) เมื่อมหาวิทยาลัยมีนโยบายให้ผู้สอนจัดสร้างสื่อ e-Learning สำหรับนักศึกษา เราก็อยากจะจัดทำเว๊บหรือเขียนบล๊อกที่บรรยายเนื้อหาที่สอน

แต่เนื้อหาที่สอนไม่มีทางหลีกเลี่ยงสมการได้ เราจะเขียนสมการลงในเว๊บหรือบล๊อกของเราอย่างไร? โชคดีที่มีคนคิดแก้ปัญหานี้ไว้แล้วครับ นั่นก็คือจาวาสคริปต์เพื่อการสร้างสมการโดยแปลงรหัสสมการให้เป็นภาพแบบ svg สคริปต์ดังกล่าวก็คือ ASCIIMathML.js สคริปต์ดังกล่าวนี้เขียนขึ้นและดูแลโดยนาย Peter Jibsen จากมหาวิทยาลัย Chapman University ครับ

วิธีใช้ก็ง่ายมาก (สำหรับเว๊บที่คุณมีอำนาจเต็ม) นั่นก็คือ
    • ดาวน์โหลดสคริปต์ดังกล่าวจาก ASCIIMathML 
    • อัพโหลดสคริปต์นันไปที่โฮสต์ของเว๊บไซต์ของคุณ เลือกไดเร็คตอรีได้ตามใจตราบใดที่ยังเป็นไดเร็คตอรีที่เข้าถึงได้ทาง www สมมติว่าเป็น webroot/ASCIIMathML.js ก็ได้ (เมื่อ webroot หมายถึงตำแหน่งรากของเว๊บของคุณ ไม่ใช่ตำแหน่ง root ของระบบ)
    • เติมแท็กสคริปต์ลงในส่วนหัวของไฟล์ HTML ของหน้าเว๊บที่ต้องการแสดงสมการดังต่อไปนี้
    <script> type="text/javascript" src="ASCIIMathML.js" </script>
    ลงในระหว่างแท็ก <head> ... </head> ในแฟ้ม HTML นั้น ๆ ซึ่งส่วนนี้อาจอยู่ในแม่แบบของเว๊บ หรือจะเป็น HTML โดยตรงก็ได้ แล้วแต่เว๊บของท่าน
    •  ในส่วนเนื้อความ ท่านก็สามารถเขียนสมการโดยใช้รหัสที่มีความคล้ายคลึงกันกับ LaTeX (เป็นส่วนใหญ่) ได้ โดยให้ครอบรหัสของสมการด้วย a``math ... enda``math
      เช่น a``math x^{2}=\frac{1}{y} enda``math จะให้ผลเป็น amath x^{2}=\frac{1}{y} endamath
    สำหรับกรณีการการเขียนสมการลงบล๊อก (เฉพาะที่รู้จักคือ blogger.com เท่านั้น) จะยุ่งนิดหน่อยเนื่องจาก
    1. หาทางแทรกแท็ก <script>...</script> เข้าไปใน Blog และ
    2. ต้องหาที่สำหรับเป็นโฮสของจาวาสคริปต์อันนี้ 
    ปัญหาแรกนั้นมีทางทำได้ไม่ยาก ให้ไปที่เมนูรูปแบบ (Template) ของบล๊อกของคุณ และแก้ไขแม่แบบแบบ HTML ดังรูป การแทรกโค้ดให้แทรกในแท็กส่วนหัว (Head) ซึ่งในนั้นจะมีโค้ดอื่น ๆ อีกเยอะ ก็เลือกแทรกตรงใกล้ ๆ กับท้าย ๆ แท็กก็ได้ครับ


    ส่วนปัญหาที่สอง เนื่องจากผมไม่สามารถอัพโหลดสคริปต์ตัวนี้ เข้าไปไว้ใน Blogger ได้ ทางออกก็คือหาเว๊บอื่นสำหรับใช้เป็นโฮสของสคริปต์ตัวนี้ และให้เรียกสคริปต์ตัวนี้จากโฮสดังกล่าวในแท็ก
    <script> type="text/javascript" src="http://www.yourhost.com/ASCIIMathML.js" </script>
     ในส่วนหัว (<head>...</head>) ของแฟ้ม HTML ของคุณ สังเกตว่า src ของสคริปต์กลายเป็น URL ของเว๊บที่ใช้โฮสแล้ว ปัญหาคือผมไม่มีโฮสแบบนั้นเป็นของตัวเองนี่สิ ผมมีแต่ Google Site จะทำยังไงดี?

    ทางออกง่ายอย่างคิดไม่ถึงครับ คำแนะนำอันนี้ผมพบที่ SOSwitch Blog ซึ่งขั้นตอนมีดังนี้ครับ (อนุมานว่ามีบัญชี Google Site และเปิดไซต์แล้วนะครับ)
    • ดาวน์โหลดสคริปต์มาไว้ที่เครื่องตนเองก่อน
    • เปลี่ยนนามสกุลแฟ้มเป็น txt เสีย
    • ไปที่ไซต์ของตนเองใน Google Site 
    • สร้างหน้าเว๊บใหม่ขึ้นมาโดยใช้แม่แบบตู้เอกสาร (File Cabinet) หรือถ้ามีอยู่แล้วและใช้รวมกันได้ก็ไม่ต้องสร้างใหม่ ข้ามขั้นตอนนี้ไปเลย
    • อัพโหลดแฟ้มสคริปต์ที่เปลี่ยนนามสกุลแล้วขึ้นไป
    • คัดลอกลิงก์ที่ชี้มาที่แฟ้มนี้ในตู้เอกสาร เอาเฉพาะ URL ส่วนขยายอื่น ๆ เช่น ?attredirects=0&d=1 ก็ตัดทิ้งไป ลิงก์ที่คัดลอกมานี้แหละครับ นำไปใช้ที่ scr ในแท็ก <script> ข้างบน
    เมื่อเสร็จแล้ว ก็สามารถสนุกสนานกับการเขียนสมการเพื่อประกอบการสอนได้ดังนี้
    amath P_{3}^{0}=A_{0}(x-x_{0})^{3}+B_{0}(x-x_{0})^{2}+C_{0}(x-x_{0})+D_{0} endamath
    อยากเขียนเท่าไรก็เขียนไป เขียนกันให้สะใจไปเลย!

    วันอาทิตย์ที่ 9 พฤษภาคม พ.ศ. 2553

    การออกแบบวงจรโดยใช้โปรแกรม Opensource ตอนที่ 2/3

    หลังจากที่ได้ทดลอง KiCad ทำงานง่าย ๆ แล้ว ก็ถึงเวลาทดลองใช้ KiCad แบบจริงจัง คือมีชิ้นงานเป็นผลลัพธ์สุดท้ายได้ ความตั้งใจก็คือใช้ Opensouce โปรแกรม ในการออกแบบตั้งแต่ ลายวงจร (Schematic) จำลองวงจร (Simulation) ออกแบบแผ่นวงจรพิมพ์ และประกอบวงจรจริง ๆ โดยตั้งใจว่าจะแบ่งทำเป็น 3 ตอนคือ
    ตอนที่ 2 ออกแบบแผ่นวงจรพิมพ์โดยใช้ KiCad
    จากลายวงจรและการจำลองวงจรในตอนที่ 1 ในการทำงานจริงเราควรต่อวงจรลงบนโปรโตบอร์ดเพื่อให้มั่นใจเสียก่อนว่าวงจรทำงานได้จริง แต่เนื่องจากวงจรที่กำลังออกแบบอยู่นี้เป็นวงจรแบบง่าย จึงละไว้

    เมื่อจะออกแบบแผ่นวงจรพิมพ์ ก็มี 2 - 3 ประเด็นที่ทำให้ต้องไปปรับปรุงแก้ไขวงจรในตอนที่ 1 เสียใหม่ คือ
    • แม้ว่าในอุดมคติ วงจรนี้จะมีศักยภาพที่จะขับกำลังได้ถึง 1.5 วัตต์ ที่โหลด 8 โอห์ม แต่เมื่อทดสอบโดยการจำลองวงจรแล้ว พบว่ากำลังสูงสุดที่จ่ายได้คือ 0.25 วัตต์ ไม่ใช่ 0.5 วัตต์ ซึ่งถือว่าน้อย ปัญหาอาจเกิดจากการตั้งจุดไบแอสของทรานซิสเตอร์แต่ละตัว หรืออาจเกิดจากข้อจำกัดของตัวทรานซิสเตอร์ที่เลือกใช้ อาจปรับปรุงได้ในอนาคต
    • วงจรในตอนที่ 1 ไม่มีแหล่งจ่ายไฟ ก็เติมส่วนของแหล่งจ่ายไฟตรงแบบง่าย ๆ โดยใช้ไอซีเรกกูเลเตอร์เบอร์ยอดนิยม 7812 เนื่องจากกำลังสูงสุดที่จะขับได้ที่โหลด 8 โอหม์ คือ 0.25 วัตต์ หมายความว่ากระแสสูงสุดคือ 0.25 แอมแปร์ ไอซีขนาด 1 แอมแปร์ก็เกินพอ
    • วงจรในตอนที่ 1 มีช่องสัญญาณเดียว หากตั้งใจจะใช้กับเครื่องเล่น MP3 ก็ควรทำให้พร้อมสำหรับสเตอริโอ จึงได้เพิ่มวงจรลงไปอีกหนึ่งช่องสัญญาณซึ่งเหมือนกันทุกประการ
    • เมื่อไปซื้อวัสดุ พบว่าบางรายการไม่มีขาย จึงปรับแก้รายการวัสดุเล็กน้อย ทดสอบจำลองวงจรแล้วไม่มีปัญหา
    แก้ไขแล้วได้ลายวงจรดังรูป
    ก่อนจะสร้าง Netlist เพื่อนำไปทำแผ่นวงจรพิมพ์ จะต้องทำการ "เรียงเบอร์" (Annotate Schematic) เสียก่อน โปรแกรมจะทำการใส่เลขประจำตัวเช่น C1 C2 ให้กับอุปกรณ์แต่ละตัวโดยอัตโนมัติ เมื่อเรียงเบอร์เสร็จแล้ว ก็สามารถสร้าง Netlist ได้

    Netlist ที่สร้างขึ้นจะเป็นแฟ้มข้อความ ระบุการเชื่อมต่อระหว่างโนดต่าง ๆ ในวงจร ขั้นตอนต่อไปคือการระบุ Footprint ของวัสดุแต่ละตัว ตรงนี้ KiCad ระบุว่าเป็นจุดที่แตกต่างจากโปรแกรม EDA อื่น ๆ ตรงที่ วัสดุหนึ่งรายการในลายวงจร เช่น C1 เราสามารถเลือก Footprint ให้ C1 ได้อย่างอิสระ (ข้อดีคือเราไม่ต้องสร้าง Symbol ใหม่ เมื่อมี Footprint ใหม่ ข้อเสียคือเราอาจเลือกผิด) การผูกวัสดุเข้ากับ Footprint ให้ใช้โปรแกรม Cvpcb ซึ่งเรียกใช้ได้จากแถบเครื่องมือของ EESchema หรือจาก Project Manager ของ KiCad ก็ได้
    จากรูปหลักแรกคือลำดับที่ หลักที่ 2 คือชื่ออุปกรณ์ หลักที่ 3 คือค่าของอุปกรณ์ และหลักที่ 4 คือ Footprint ของอุปกรณ์ ซึ่งเราจะต้องเลือกเองให้ถูกต้องตรงกับวัสดุที่เรามี

    เมื่อผูกวัสดุเข้ากับ Footprint ได้แล้ว จึงเรียก pcbnew ขึ้นมา โดยจะเรียกจากแถบเครื่องมือของ EESchema หรือจาก Project Manager ของ KiCad ก็ได้เช่นเดียวกัน น่าเสียดายว่าตอนที่ดำเนินการออกแบบแผ่นวงจรพิมพ์นั้นไม่ได้เก็บรูปต่าง ๆ ไว้ จึงจะไม่เขียนละเอียด

    ข้อสังเกตสำคัญที่พบตอนที่ออกแบบก็คือ ค่าพารามิเตอร์ของลายเส้นของลายวงจรหรือแทร็ค (Track) จะไม่อยู่ในส่วนของ Preferences แต่จะอยู่ในส่วนของ Design Rule กว่าจะหาเจอก็งงไปนานเหมือนกัน การตั้งค่าความกว้างของแทร็ค และ Design Rule อื่น ๆ สามารถตั้งได้เองทั้งหมด ซึ่งน่าจะเป็นปัญหาสำหรับมือใหม่ หรือมือสมัครเล่น (เช่นผมเอง) เนื่องจากไม่ทราบเกณฑ์ต่าง ๆ ในการสร้างแผ่นวงจรพิมพ์ แต่ถ้าเราจะจ้างบริษัทให้กัดแผ่นวงจรพิมพ์ให้เรา ผมว่าบริษัทอาจมีเกณฑ์ Design Rule ที่เราขอทราบข้อมูลได้

    วงจรเล็กนิดเดียว พอรู้วิธีทำก็สามารถทำเสร็จได้ภายในเวลา 2 คืน หน้าตาเป็นดังรูป
    น่าเสียดายว่าไม่สามารถแสดงรูป 3 มิติของแผ่นวงจรพิมพ์นี้ได้ เข้าใจว่าเป็น Bug ของ KiCad เอง แต่ว่าไม่รู้ว่าจะรายงาน Bug อย่างไร เนื่องจากหน้าจอมันจะมืดไปเฉย ๆ ไม่มีข้อมูล เลยไม่แน่ใจว่าเป็น Bug ของ KiCad หรือของ Mesa หรือว่าของ X ไม่งั้นคงมีภาพ 3 มิติสวย ๆ มาอวดกัน


    หลังจากอัพเกรดและอัพเดต sid ล่าสุดพบว่ามีการอัพเกรด X หลายโมดูล เลยทดลองสร้างภาพสามมิติของ KiCad ดูอีกครั้งปรากฏว่าไม่มืดแล้วครับ แล้วก็ได้ภาพมาด้วย เลยขอเอามาอวดกันสักหน่อย
    ตอนนี้กัดปริ้นได้แล้วครับ แต่ยังเจาะไม่ครบเลยยังไม่ได้ลองประกอบดู หากประกอบเสร็จก็จะเอามาลง Blog เหมือนเคย อันที่จริง วงจรแค่นี้มันก็ถือว่าจิ๊บจ๊อยมากเมื่อเทียบกับงานของอีกหลาย ๆ ท่าน แต่ก็อยากเอามาลงไว้ในฐานะที่เป็นวงจรที่ (ตั้งใจจะ) ใช้ KiCad ในการสร้างจนใช้งานได้จริงเป็นชิ้นแรก หากผลงานออกมาดีจะเอาไว้ใช้ช่วยสอนในวิชาอิเล็กทรอนิกส์ด้วยเสียเลย