- กรณีศึกษาการสำรวจแนวคิดพื้นฐานของ CAD แบบเขียนโค้ด โดยใช้ OpenSCAD ออกแบบ ที่ใส่แบตเตอรี่ แบบง่าย ๆ
- ก่อนหน้านี้ผู้เขียนเคยสร้างกล่องแบบพารามิเตอร์สำหรับแบตเตอรี่ AA·AAA ด้วย Autodesk Fusion และนำมา ทำใหม่ด้วย OpenSCAD เพื่อใช้เรียนรู้
- ในโค้ดสามารถเปลี่ยนตัวแปรอย่าง
numRows, numColumns, batteryType เพื่อสร้าง ที่ใส่แบบปรับแต่งได้ และ ได้ผลลัพธ์แบบเดียวกันโดยไม่ต้องใช้ซอฟต์แวร์ CAD ราคาแพง
- ใช้
difference() และ translate() ในโครงสร้างที่ สร้างและลบกล่องกับช่องซ้ำ ๆ ซึ่งเป็นแนวทางการออกแบบที่เรียบง่ายแต่มีประสิทธิภาพ
- แม้จะมีข้อจำกัดกับโมเดลที่ซับซ้อน แต่ก็ถูกมองว่าเป็นเครื่องมือที่ มีประโยชน์สำหรับการทำชิ้นงานเรขาคณิตแบบง่าย เช่น spacer และ bearing drift
ออกแบบที่ใส่แบตเตอรี่ด้วย OpenSCAD
- หลังจากออกแบบ ตัวจัดเก็บแบบกล่องพื้นฐาน สำหรับแบตเตอรี่ AA และ AAA ใน Autodesk Fusion แล้ว ผู้เขียนก็นำมาสร้างใหม่ใน OpenSCAD
- โมเดล Fusion เดิมเป็น โครงสร้างแบบพารามิเตอร์ ที่ปรับขนาดแบตเตอรี่ จำนวนแถว และจำนวนคอลัมน์ได้ผ่านการเปลี่ยนตัวแปร
- โมเดลที่เสร็จแล้วถูกอัปโหลดไปยัง Printables
- OpenSCAD เป็น เครื่องมือ CAD ที่สร้างวัตถุ 3 มิติด้วยการเขียนโค้ด เหมาะกับการเรียนรู้โมเดลที่มีโครงสร้างไม่ซับซ้อน
- ผู้เขียนอ้างอิงบางส่วนจากบทสอน OpenSCAD และลองทำอยู่ประมาณหนึ่งชั่วโมง
- ผลลัพธ์ถูกเผยแพร่เป็นไฟล์
battery_holder_generator.scad
โครงสร้างโค้ดและวิธีการทำงาน
- มีการกำหนดตัวแปรหลัก เช่น
AA, AAA, heightCompartment, thicknessWall, numRows, numColumns, batteryType
widthBox, lengthBox, depthBox ถูกคำนวณจากการผสมกันของตัวแปรเหล่านี้
- ใช้ฟังก์ชัน
difference() เพื่อสร้าง กล่องพื้นฐาน (cube) ก่อน แล้วค่อย ลบช่องใส่แบตเตอรี่ออกซ้ำ ๆ ภายใน
- ใช้ลูป
for และ translate() ในการคำนวณตำแหน่งของช่อง และใช้ cube() สร้างแต่ละช่อง
- ผู้เขียนบอกว่าส่วนที่ต้องใช้
let() เพื่อกำหนด startColumn, startRow ภายในลูปนั้นค่อนข้างชวนสับสน
เปรียบเทียบ OpenSCAD กับ Fusion
- สร้างโมเดลเดียวกันใน Fusion และ OpenSCAD แล้วนำไปเปรียบเทียบใน slicer
- สุดท้ายแล้วชิ้นงานที่ได้แทบไม่ต่างกัน และ OpenSCAD ทำให้แก้ไขได้รวดเร็วด้วย แนวทางแบบเบา ๆ ที่ใช้โค้ดเป็นหลัก
- สามารถได้ผลลัพธ์ระดับเดียวกันโดยไม่ต้องใช้ซอฟต์แวร์ CAD ราคาแพง
ศักยภาพการใช้งานและข้อจำกัด
- แม้จะไม่เหมาะกับงานออกแบบที่ซับซ้อน แต่ มีประโยชน์มากสำหรับการสร้างชิ้นงานเรขาคณิตแบบง่าย เช่น spacer และ bearing drift
- เด่นในเรื่อง การทำงานอัตโนมัติสำหรับการสร้างชิ้นส่วนง่าย ๆ ที่จำเป็นในชีวิตประจำวัน
- แนวทางการออกแบบแบบ ยึดโค้ดเป็นศูนย์กลาง ของ OpenSCAD มีประสิทธิภาพกับการสร้างโครงสร้างที่ซ้ำกันและมีรูปแบบสม่ำเสมอ
บทสรุป
- OpenSCAD ถูกประเมินว่าเป็น เครื่องมือ CAD แบบเขียนโค้ดที่สามารถสร้างโมเดล 3 มิติแบบง่ายได้อย่างรวดเร็ว
- ผู้เขียนอธิบายว่า “มันก็แค่วาดกล่องแล้วเจาะรู แต่ก็ค่อนข้างเจ๋งทีเดียว”
- สำหรับงานออกแบบง่าย ๆ ในอนาคต OpenSCAD อาจใช้งานได้จริงมากกว่า Fusion
2 ความคิดเห็น
ผมขอแนะนำ FreeCAD อย่างมาก
ความเห็นจาก Hacker News
OpenSCAD เป็นเครื่องมือ CAD ที่เข้ากับ แนวคิดแบบโปรแกรมเมอร์ มาก
องค์ประกอบทุกอย่างสามารถ ทำให้เป็นพารามิเตอร์ได้ จึงเอาโปรเจ็กต์ enclosure ที่ทำไว้ครั้งหนึ่งมาปรับตัวแปรไม่กี่ตัวแล้วสร้างได้หลายเวอร์ชัน
ถ้าตั้งค่า backend Manifold ใน nightly build รุ่นล่าสุด ความเร็วในการเรนเดอร์จะลดจากระดับเป็นนาทีเหลือเพียงไม่กี่วินาที
รุ่นทางการปี 2021 เก่าเกินไปจนใช้งานลำบาก
ไลบรารี BOSL2 เพิ่มความสามารถอย่าง fillet, rounding และ attachment ทำให้ OpenSCAD จากที่ดูเหมือนของเล่นกลายเป็นเครื่องมือออกแบบที่ใช้งานจริงได้
มันยังเป็นมิตรกับ Git มาก โดยเปรียบเทียบการเปลี่ยนแปลงในไฟล์ .scad ได้ง่ายกว่าไฟล์ไบนารีของ Fusion 360 มาก
เพราะรู้สึกถึงข้อจำกัดของ OpenSCAD จึงลงมือสร้างไลบรารีสร้าง 3D mesh แบบอิง SDF (signed distance function) ด้วย Python ชื่อ sdf เอง
สามารถใช้ตรรกะที่ยืดหยุ่นของ Python ในการประกอบโมเดล และนำ 3D mesh ที่มีอยู่แล้วเข้ามาทำงานอย่าง กร่อน, ขยาย, ตัด, ทำให้กลวง ได้
โปรเจ็กต์นี้ยังมีสิ่งที่ต้องทำอีกมาก แต่คิดว่าสนใจด้านนี้มาก
STL เก็บพิกัดสามเหลี่ยมเหมือน bitmap แต่ STEP เก็บคำสั่งสร้างโมเดลเหมือน vector art
GUI CAD ส่วนใหญ่ใช้ STEP เป็นพื้นฐาน จึงเข้ากันได้ดี
ถ้า SDF สร้างได้แค่ STL พอมองเรื่องความเข้ากันได้กับ GUI CAD แล้ว อาจจะเรียน Build123d หรือ CadQuery จะดีกว่าหรือไม่
Build123d ใช้แนวคิดแบบสเก็ตช์ 2D แล้วแปลงเป็น 3D เหมือน Fusion360 หรือ FreeCAD จึงสะดวกเวลาสลับไปมาระหว่าง GUI กับ CAD แบบเขียนโค้ด
เครื่องมืออย่าง Meshlab ให้ข้อความผิดพลาดที่เข้าใจยากจนทำไม่สำเร็จ แต่วิธีนี้ดูจะใช้งานได้ตรงไปตรงมามากกว่า
เพิ่งเริ่มใช้ OpenSCAD ไม่นานนี้ แต่ในขณะที่ CAD ส่วนใหญ่บังคับให้ต้องเรียนฟีเจอร์มากมาย OpenSCAD อธิบายได้ด้วย ชีตสรุป A4 แผ่นเดียว
ถ้าใช้เวอร์ชัน git master แทนรุ่นปี 2021 จะได้ทั้งความเร็วที่ดีกว่าและฟีเจอร์ใหม่กว่า
เมื่อใช้ไลบรารี BOSL2 ก็ไม่ต้องลงมือทำฟีเจอร์ซับซ้อนแบบ CAD ดั้งเดิมเอง และยังสนุกกับการเปิดดู implementation ภายในเพื่อเรียนรู้ได้
ใน GUI CAD แค่แก้ 0.25mm ก็ต้องกลับไปปรับรูและ cutout ทั้งหมดใหม่จนน่าหงุดหงิด แต่แนวทางแบบเขียนโค้ดช่วยเลี่ยงปัญหานั้นได้
ค่าเริ่มต้นแบบ center origin ของ BOSL2 ทำให้การ transform ง่ายขึ้นมาก
น่าเสียดายที่ OpenSCAD ไม่มี แนวคิดเรื่องอ็อบเจ็กต์ ทำให้เข้าถึงแบบ box1.width ไม่ได้
เคยลองใช้ Build123d แต่มีบั๊กเยอะและเอกสารยังไม่ดีนัก หวังว่าสักวันจะดีขึ้น
ข้อดีของ OpenSCAD คือทำโมเดลได้ง่ายด้วยการ ประกอบกันทางคณิตศาสตร์ ของทรงกลม ทรงกระบอก และลูกบาศก์
ข้อเสียคือขีดจำกัดในการโมเดลก็มาจากความสามารถในการประกอบเชิงคณิตศาสตร์นั้นเอง
ฟอร์ก PythonSCAD ที่รองรับ Python มีกำหนดจะถูกรวมเข้าไปในรีลีสหลักในไม่ช้า
ถ้าจะสร้างโมเดลอย่างน็อตหรือโบลต์ ต้องสร้างแต่ละส่วนแยกกันแล้วเอามาซ้อนทับ
ถ้าต้องจัดแนวกับชิ้นส่วนจริงก็ต้องคำนวณด้วยมือเยอะ และมิติที่ hard-code ไว้ก็แก้ไขยาก
renderer ในเวอร์ชันเบต้าล่าสุดเร็วขึ้นมาก จึงควรลองใช้จริง
ดู GitHub repository ได้
ฉันชอบความเรียบง่ายของ OpenSCAD ในฐานะ 3D modeler แบบเบา ๆ
แทนที่จะใช้ GUI CAD ขนาดใหญ่ ก็สามารถสร้างโมเดลด้วยแค่รูปทรงพื้นฐานและการ transform แบบเดียวกับ กราฟิกโปรแกรมมิง
ต่อให้กลับมาเปิดโค้ดอีกครั้งหลังเวลาผ่านไปนาน แค่อ่านไม่กี่บรรทัดก็เข้าใจได้ทันที
constraint ที่ต้องคำนวณทางคณิตศาสตร์นั้น ใช้ฟีเจอร์สเก็ตช์ของ GUI CAD ง่ายกว่ามาก
CAD สามารถย้อนดูโครงสร้างทีละขั้นได้ จึงไม่จำเป็นต้องมานั่งตีความสคริปต์
OpenSCAD สามารถใช้ editor ภายนอกแทน editor ของตัวเองได้
เมื่อบันทึกจาก editor ภายนอก preview จะรีเฟรชอัตโนมัติ
คู่มือตั้งค่า external editor
เคยเขียนบทสอน “10 แนวคิดสำคัญ” สำหรับเริ่มต้น OpenSCAD ไว้ก่อนหน้านี้
ลิงก์บทสอน
เคล็ดลับ: สามารถตั้งตัวแปร
$fnเพื่อ ปรับความละเอียด ได้$fn = $preview ? 32 : 64;เพราะความแม่นยำของการวิเคราะห์สำคัญกว่าความลื่นตาทางภาพ ค่าประมาณ 32~64 จึงเหมาะสม
ในทางปฏิบัติ ถ้าจะสร้างโมเดลที่ใช้งานได้จริงต้องลงแรงพอสมควร แต่เสน่ห์ของมันอยู่ที่สามารถแทนโมเดลแบบพาราเมตริกที่สมบูรณ์ได้ด้วย ไฟล์ข้อความขนาด 2KB
Git diff ก็ใช้งานได้อย่างมีความหมาย และยังปรับโมเดลผ่านแผง customizer ได้เหมือนแอป
มีประสิทธิภาพกว่าไฟล์ XML ขนาดใหญ่ของ FreeCAD มาก
แต่การที่ไม่มีฟีเจอร์อย่าง chamfer หรือ rounding มาให้ในตัว จนต้องไปทำด้วยการคำนวณ minkowski โดยใช้ cone หรือ sphere นั้นก็ค่อนข้างยุ่งยาก