
จากแบบจำลองดิจิทัลสู่ชิ้นงานจริง ด้วย FreeCAD

การเปลี่ยนแบบจำลอง 3 มิติที่อยู่ในคอมพิวเตอร์ให้กลายเป็นวัตถุที่จับต้องได้จริงคือกระบวนการที่น่าทึ่ง ซึ่งเปรียบเสมือนเวทมนตร์ในโลกยุคใหม่ เอกสารนี้จะพาคุณไปสำรวจภาพรวมของการเดินทางชิ้นนี้ โดยเริ่มต้นจากการออกแบบสเตอร์จักรยานอย่างชาญฉลาดในโปรแกรม FreeCAD ไปจนถึงการสร้างชุดคำสั่งที่พร้อมส่งให้เครื่องจักร CNC สามารถผลิตชิ้นงานออกมาได้จริงทีละขั้นตอน
1. การสร้างแบบจำลอง 3 มิติแบบพาราเมตริก
ก่อนที่เราจะเริ่มการผลิตใดๆ สิ่งแรกที่ต้องมีคือพิมพ์เขียวดิจิทัลที่มีความแม่นยำสูง ในขั้นตอนนี้ เราจะใช้เทคนิคการออกแบบอันทรงพลังที่เรียกว่า “การออกแบบเชิงพาราเมตริก” (Parametric Design) เพื่อสร้างแบบจำลอง 3 มิติที่ยืดหยุ่นและปรับเปลี่ยนได้ง่าย
แนวคิดหลัก: การออกแบบพาราเมตริกคืออะไร?
แนวคิดหลักของการออกแบบเชิงพาราเมตริกคือการสร้างแบบจำลองโดยอ้างอิงกับตัวแปร (Variables) ที่เรากำหนดไว้ล่วงหน้า แทนที่จะกำหนดขนาดเป็นตัวเลขตายตัว เมื่อเราเปลี่ยนค่าของตัวแปร แบบจำลองทั้งหมดที่เชื่อมโยงกับตัวแปรนั้นจะปรับปรุงตัวเองโดยอัตโนมัติ
สำหรับโปรเจกต์สเตอร์จักรยานนี้ มีตัวแปรสำคัญ 2 ตัวคือ:
- number_of_teeth (จำนวนฟัน): นี่คือตัวแปรหลักเพียงตัวเดียวที่เราต้องป้อนค่าด้วยตนเอง มันทำหน้าที่ควบคุมรูปทรงและขนาดโดยรวมทั้งหมดของสเตอร์จักรยาน
- diameter_chain_ring (เส้นผ่านศูนย์กลางสเตอร์): ตัวแปรนี้เป็นค่าที่ถูกคำนวณโดยอัตโนมัติจาก number_of_teethโดยใช้สูตรทางวิศวกรรมที่แม่นยำ ซึ่งอ้างอิงกับระยะพิทช์ (Pitch) มาตรฐานของโซ่จักรยานที่ 12.7 มม.
สรุปขั้นตอนการสร้างแบบจำลอง
- สร้างรูปทรงพื้นฐาน: เริ่มต้นด้วยการสร้างรูปทรงกระบอกง่ายๆ เพื่อกำหนดโครงสร้างหลักและความหนาของสเตอร์
- ออกแบบรูปทรงสำหรับร่องฟันสเตอร์ 1 ช่อง: ออกแบบรูปทรงของ “ช่องว่าง” หรือร่องสำหรับให้ลูกกลิ้งของโซ่จักรยานเข้ามาพอดีอย่างปราณีตเพียง 1 ช่อง
- ทำซ้ำด้วยเครื่องมือ Pattern: ใช้เครื่องมือ “Polar Pattern” เพื่อทำสำเนาร่องฟันสเตอร์ที่ออกแบบไว้รอบสเตอร์ทั้งหมดโดยอัตโนมัติ โดยอ้างอิงจากค่าของตัวแปร number_of_teeth
- เพิ่มรายละเอียด: ออกแบบรูตรงกลาง, รูสำหรับยึดน็อต, และช่องตกแต่งต่างๆ พร้อมเก็บรายละเอียดขั้นสุดท้าย เช่น การลบมุมโค้ง (fillets) และการลบมุมตัด (chamfers)
ประโยชน์สูงสุดของแนวทางนี้คือความยืดหยุ่น ลองนึกภาพว่าหากเราต้องการเปลี่ยนสเตอร์จาก 44 ซี่เป็น 50 ซี่ เราเพียงแค่เปลี่ยนค่าตัวแปร number_of_teeth จาก 44 เป็น 50 เท่านั้น แบบจำลอง 3 มิติทั้งหมดจะคำนวณและปรับปรุงรูปทรงใหม่ทั้งหมดให้เราโดยอัตโนมัติ
2. การเตรียมการสำหรับเครื่อง CNC
การมีแบบจำลอง 3 มิติที่สมบูรณ์นั้นยังไม่เพียงพอ ขั้นตอนต่อไปคือการเปลี่ยนไปสู่ส่วนงาน CAM (Computer-Aided Manufacturing) เพื่อเตรียมชุดคำสั่งสำหรับเครื่อง CNC ที่จะใช้กัดชิ้นงาน
การตั้งค่า: Job, Stock, และ Tools
ในการเตรียมงาน CAM เราต้องกำหนดองค์ประกอบพื้นฐาน 3 อย่างนี้ก่อน:
- Job (จ็อบ): เปรียบเสมือนแฟ้มงานหลักที่รวบรวมการตั้งค่าและคำสั่งการผลิตทั้งหมดของโปรเจกต์นี้ไว้ในที่เดียว
- Stock (สต็อก): คือการจำลอง “วัตถุดิบ” ที่เราจะใช้ ในที่นี้คือแผ่นอลูมิเนียมขนาด 200x200x4 มิลลิเมตร
- Tools (เครื่องมือ): คือคลังเครื่องมือตัดดิจิทัลที่เครื่อง CNC จะใช้ ซึ่งสำหรับโปรเจกต์นี้เราต้องการเพียง 2 ดอกเท่านั้น:
- ดอกกัด Endmill ขนาด 3.175 มม. — สำหรับการกัดงานส่วนใหญ่
- ดอก Chamfer 90° — สำหรับการลบมุมโดยเฉพาะ
 
ความท้าทายของการกัดงานสองด้าน
เนื่องจากสเตอร์จักรยานมีรายละเอียดทั้งด้านหน้าและด้านหลัง เราจึงต้องเผชิญกับความท้าทายในการกัดชิ้นงานทั้งสองด้าน วิธีแก้คือ เราจะกัดงานด้านหนึ่งให้เสร็จก่อน จากนั้นจึงพลิกแผ่นวัตถุดิบกลับด้าน แล้วจึงเริ่มกัดอีกด้านหนึ่ง
สิ่งที่สำคัญที่สุดในขั้นตอนนี้คือการใช้ รูสำหรับกำหนดตำแหน่ง (Positioning Holes) ที่เจาะไว้ล่วงหน้าอย่างแม่นยำ รูเหล่านี้จะถูกใช้เพื่อยึดแผ่นอลูมิเนียมเข้ากับแท่นของเครื่อง CNC อย่างมั่นคง เพื่อให้แน่ใจว่าเมื่อพลิกชิ้นงานแล้ว ทุกอย่างจะยังคงอยู่ในตำแหน่งที่ถูกต้องสมบูรณ์
3. การสร้างเส้นทางเดินของเครื่องมือ
“Toolpath” หรือเส้นทางเดินของเครื่องมือ คือชุดคำสั่งดิจิทัลที่จะบอกเครื่อง CNC ว่าต้องเคลื่อนที่ดอกกัดไปที่ไหน, ด้วยความเร็วเท่าไหร่, และกัดลึกลงไปเท่าไหร่ ซึ่งเป็นหัวใจสำคัญของการผลิต
กล่องเครื่องมือสำหรับสร้าง Operation
| Operation (คำสั่ง) | หน้าที่หลัก | 
|---|---|
| Profile (โพรไฟล์) | ใช้สำหรับตัดตามแนวเส้นหรือขอบที่กำหนด คล้ายกับการใช้ที่ตัดคุกกี้ ใช้ในการเจาะรูและตัดชิ้นงานให้ออกจากแผ่นวัตถุดิบ | 
| Pocket (พ็อกเก็ต) | ใช้สำหรับกัดวัสดุทั้งหมดที่อยู่ “ข้างใน” ขอบเขตที่ปิดล้อม เพื่อสร้างเป็นช่องหรือโพรงที่มีพื้นเรียบ | 
| 3D Pocket (พ็อกเก็ต 3 มิติ) | ใช้สำหรับกัดวัสดุออกจากรูปทรงที่ซับซ้อนและมีระดับความลึกที่แตกต่างกัน จำเป็นอย่างยิ่งสำหรับการสร้างรูยึดน็อตแบบมีบ่ารับ (Counterbore) | 
จำลองก่อนกัดจริง: การทดสอบเสมือนจริง
หนึ่งในเครื่องมือที่สำคัญที่สุดคือ CAM Simulator ซึ่งเปรียบเสมือนการ “ทดสอบเสมือนจริง” ที่จะแสดงภาพเคลื่อนไหวให้เราเห็นทีละขั้นตอนว่าวัสดุจะถูกกัดออกไปอย่างไรในทุกๆ คำสั่งที่เราสร้างขึ้น
ประโยชน์หลักของมันคือ ช่วยให้เราสามารถตรวจจับข้อผิดพลาดที่อาจเกิดขึ้นและตรวจสอบกระบวนการทั้งหมดในรูปแบบดิจิทัลได้ก่อนที่จะเริ่มกัดวัสดุจริง ซึ่งช่วยประหยัดเวลาและป้องกันความเสียหายที่มีค่าใช้จ่ายสูงได้
4. บทสรุป: จากโค้ดสู่ชิ้นงาน
เราได้เห็นการเดินทางทั้งหมด ตั้งแต่การเริ่มต้นด้วยตัวแปรอัจฉริยะเพียงตัวเดียวในการออกแบบเชิงพาราเมตริก, ผ่านการตั้งค่าอย่างรอบคอบในสภาพแวดล้อมของ CAM, ไปจนถึงการสร้างเส้นทางเดินของเครื่องมือที่แม่นยำ และสิ้นสุดที่ชุดคำสั่งที่สมบูรณ์ซึ่งพร้อมจะถูกส่งไปยังเครื่อง CNC
นี่คือตัวอย่างที่ชัดเจนว่าการผลิตเชิงดิจิทัล (Digital Manufacturing) ได้เชื่อมโยงโลกแห่งความคิดสร้างสรรค์ในการออกแบบเข้ากับความเป็นจริงทางกายภาพได้อย่างไร้รอยต่อ
GRBLHAL : เวอร์ชันปรับปรุงของ GRBL
GRBLHAL เป็นเวอร์ชันที่ปรับปรุง และ ขยายความสามารถของ GRBL ซึ่งเป็นเฟิร์มแวร์ โอเพ่นซอร์สสำหรับควบคุมเครื่อง CNC โดย GRBLHAL ได้รับการพัฒนาเพื่อให้มีความยืดหยุ่นมากขึ้นในการรองรับฮาร์ดแวร์ที่หลากหลาย และ เพิ่มฟีเจอร์ใหม่ ๆ เพื่อตอบสนองความต้องการของผู้ใช้งานระดับสูง
คำสั่งพื้นฐานของ GRBLHAL
คำสั่งใน GRBLHAL ส่วนใหญ่จะคล้ายกับ GRBL แต่มีการเพิ่มเติมและปรับปรุงบางคำสั่งเพื่อรองรับฟีเจอร์ใหม่ ๆ ต่อไปนี้คือรายละเอียดของคำสั่งหลัก:
1. คำสั่งควบคุมการทำงาน (Real-time Commands)
- ! : หยุดชั่วคราว (Feed Hold)
 หยุดการเคลื่อนที่ของเครื่องทันที แต่ยังคงเก็บตำแหน่งปัจจุบันไว้ เมื่อกดเริ่มใหม่ เครื่องจะกลับมาทำงานต่อจากตำแหน่งเดิม
- ~ : เริ่มต่อ (Resume)
 ใช้เมื่อเครื่องอยู่ในสถานะ Feed Hold เพื่อเริ่มการทำงานต่อ
- ? : สอบถามสถานะ (Status Report)
 แสดงข้อมูลสถานะปัจจุบัน เช่น ตำแหน่ง, สถานะเครื่อง, และโหมดการทำงาน
- ^X : ยกเลิกงาน (Reset)
 ยกเลิกการทำงานทั้งหมดและรีเซ็ตระบบ
2. คำสั่ง G-code
- G0/G1 : การเคลื่อนที่
 G0: เคลื่อนที่ด้วยความเร็วสูงสุด (Rapid Move)
 G1: เคลื่อนที่ด้วยความเร็วที่กำหนด (Linear Interpolation)
- G2/G3 : การเคลื่อนที่โค้ง
 G2: เคลื่อนที่ตามแนวโค้งแบบตามเข็มนาฬิกา (Clockwise Arc)
 G3: เคลื่อนที่ตามแนวโค้งแบบทวนเข็มนาฬิกา (Counter-Clockwise Arc)
- G4 : หน่วงเวลา (Dwell)
 ตัวอย่าง: G4 P1.5 (หน่วงเวลา 1.5 วินาที)
3. คำสั่ง M-code
- M3/M4/M5 : การควบคุม Spindle
 M3: เปิด Spindle หมุนตามเข็มนาฬิกา
 M4: เปิด Spindle หมุนทวนเข็มนาฬิกา
 M5: ปิด Spindle
- M7/M8/M9 : การควบคุม Coolant
 M7: เปิด Mist Coolant
 M8: เปิด Flood Coolant
 M9: ปิด Coolant
คำสั่งเฉพาะของ GRBLHAL
GRBLHAL เพิ่มคำสั่งใหม่ ๆ เพื่อรองรับฟีเจอร์ที่ขยายออกไป:
- 
$# : แสดงตำแหน่งงานและออฟเซ็ต - แสดงค่าพิกัดปัจจุบันและออฟเซ็ตของ Work Coordinate Systems
 
- 
$$ : แสดงการตั้งค่าปัจจุบัน - แสดงค่าพารามิเตอร์ทั้งหมด เช่น ความเร็วสูงสุด, Acceleration, Step/mm เป็นต้น
 
- 
$x=val : แก้ไขการตั้งค่า - ตัวอย่าง: $110=3000(ตั้งค่าความเร็วสูงสุดของแกน X เป็น 3000 mm/min)
 
- ตัวอย่าง: 
- 
$H : Homing Cycle - เริ่มกระบวนการหา Home Position
 
- 
$I : แสดงข้อมูลระบบ - แสดงข้อมูลเกี่ยวกับเวอร์ชันและคุณสมบัติของ GRBLHAL
 
- 
$N : แสดง/จัดการ Startup Blocks - ใช้สำหรับตั้งค่าคำสั่งที่จะรันทุกครั้งเมื่อเปิดเครื่อง
 
- 
$C : เช็ค Connection - ตรวจสอบการเชื่อมต่อกับเครื่อง
 
- 
$X : ปลดล็อกเครื่อง - ใช้เมื่อเครื่องถูก Lock จาก Alarm State
 
สรุป
GRBLHAL เป็นเวอร์ชันที่ปรับปรุงจาก GRBL โดยเพิ่มความสามารถในการรองรับฮาร์ดแวร์ที่หลากหลาย และเพิ่มคำสั่งใหม่ ๆ เพื่อตอบสนองความต้องการของผู้ใช้งานระดับสูง คำสั่งพื้นฐานยังคงเหมือน GRBL แต่มีการเพิ่มเติมคำสั่งเฉพาะและฟีเจอร์ใหม่ เช่น การจัดการ Startup Blocks, การตั้งค่าพารามิเตอร์ที่ละเอียดขึ้น และการรองรับฟังก์ชันเสริมอื่น ๆ
หากต้องการศึกษาเพิ่มเติม แนะนำให้ดูเอกสารประกอบของ GRBLHAL หรือทดลองใช้งานผ่านซอฟต์แวร์ควบคุม CNC เช่น Universal G-code Sender (UGS) หรือ CNCjs
 หมายเหตุ: การใช้งาน GRBLHAL ควรศึกษาคู่มือและทดสอบการทำงานบนเครื่องจริงอย่างระมัดระวังเพื่อป้องกันความเสียหายต่อเครื่องหรือชิ้นงาน
เครื่อง CNC สำหรับตัดวัสดุเส้นใย
1. ความสำคัญของการพัฒนา CNC สำหรับวัสดุเส้นใย
การตัดวัสดุที่ไม่ใช่วัสดุแข็ง เช่น วัสดุเส้นใย (Fibrous Materials) ต้องอาศัยเทคนิคเฉพาะที่แตกต่างจากการตัดโลหะหรือไม้ เนื่องจากวัสดุเหล่านี้มักมีโครงสร้างที่ยืดหยุ่น และมีคุณสมบัติเชิงกลที่แตกต่างกันไป เช่น ความอ่อนตัว ความยืดหยุ่น และการฉีกขาดง่าย ดังนั้น การออกแบบเครื่อง CNC ที่เหมาะสมกับวัสดุประเภทนี้จึงต้องมีการพัฒนาเทคโนโลยีที่รองรับลักษณะเฉพาะของวัสดุ

2. ความท้าทายในการพัฒนาเครื่อง CNC สำหรับตัดวัสดุเส้นใย
การออกแบบ CNC สำหรับการตัดวัสดุเส้นใยจำเป็นต้องคำนึงถึงปัจจัยหลายอย่าง เช่น :
- แรงกดและแรงเฉือน: ต้องคำนวณให้เหมาะสมเพื่อไม่ให้วัสดุเสียรูปขณะตัด
- ระบบจับยึดวัสดุ: วัสดุเส้นใยอาจมีความยืดหยุ่นสูง จึงต้องออกแบบระบบยึดที่สามารถจับวัสดุได้แน่นโดยไม่ทำให้เสียรูป
- ประเภทของเครื่องมือตัด: ต้องเลือกหัวตัดที่เหมาะสม เช่น มีดโรตารี (Rotary Blade) หรือ ใบมีดพิเศษที่ลดการฉีกขาดของวัสดุ
- การควบคุมด้วยซอฟต์แวร์: ซอฟต์แวร์ต้องรองรับการกำหนดค่าต่างๆ เช่น ความเร็วของหัวตัด แรงกด และ รูปแบบการตัด เพื่อให้การทำงานแม่นยำ
3. การออกแบบที่เป็นเอกลักษณ์ของเครื่อง CNC สำหรับวัสดุเส้นใย
ในฐานะผู้ผลิต CNC ตามความต้องการของลูกค้า เราได้พัฒนาโซลูชันเฉพาะสำหรับวัสดุเส้นใย โดยมีคุณสมบัติหลักดังนี้ :
- โครงสร้างที่แข็งแรงแต่ลดแรงสั่นสะเทือน เพื่อให้ตัดวัสดุได้แม่นยำ
- ระบบใบมีดตัดแบบพิเศษ ที่ลดแรงเสียดทานและการฉีกขาดของวัสดุ
- การควบคุมแรงกดของหัวตัดแบบไดนามิก เพื่อรองรับวัสดุที่มีความหนาแน่นแตกต่างกัน
- ซอฟต์แวร์ที่สามารถปรับแต่งค่าการตัดอัตโนมัติ ช่วยลดข้อผิดพลาดและเพิ่มประสิทธิภาพการผลิต
4. การแก้ปัญหาให้ลูกค้าในอุตสาหกรรมต่างๆ
เราไม่เพียงแต่ผลิตเครื่อง CNC ตามความต้องการ แต่ยังช่วยแก้ปัญหาการผลิตให้กับลูกค้าในหลากหลายอุตสาหกรรม เช่น :
- อุตสาหกรรมบรรจุภัณฑ์: การตัดวัสดุเส้นใยสำหรับบรรจุภัณฑ์ที่เป็นมิตรต่อสิ่งแวดล้อม
- อุตสาหกรรมสิ่งทอ: การตัดผ้าและวัสดุเส้นใยสำหรับการผลิตเสื้อผ้าและอุปกรณ์ตกแต่ง
- อุตสาหกรรมยานยนต์: การตัดวัสดุฉนวนหรือวัสดุซับเสียงที่ใช้ในรถยนต์
- อุตสาหกรรมเฟอร์นิเจอร์: การตัดวัสดุบุรองเพื่อใช้กับเฟอร์นิเจอร์แบบกำหนดเอง
5. ตัวอย่างเครื่อง CNC ที่เราพัฒนา
จากภาพที่แสดงด้านบน เป็นตัวอย่างเครื่อง CNC ที่ได้รับการออกแบบให้สามารถตัดวัสดุเส้นใยได้อย่างแม่นยำ โดยมีฟังก์ชันที่รองรับการผลิตชิ้นงานที่มีความซับซ้อนสูง นอกจากนี้ เราได้พัฒนาให้สามารถรองรับคำสั่งจากซอฟต์แวร์เฉพาะทาง เพื่อให้สามารถทำงานได้ตามข้อกำหนดของลูกค้า
6. บริการของเรา
- ออกแบบและผลิตเครื่อง CNC ตามสเปคที่ลูกค้าต้องการ
- ให้คำปรึกษาด้านการเลือกวัสดุและเทคนิคการตัด
- พัฒนา และ ปรับแต่งซอฟต์แวร์สำหรับกระบวนการผลิตของลูกค้า
- บริการติดตั้งและบำรุงรักษาเครื่องจักร
7. สรุป
การพัฒนาเครื่อง CNC สำหรับวัสดุเส้นใยต้องอาศัยความรู้ด้านวิศวกรรม ฟิสิกส์ และโปรแกรมมิ่ง เพื่อให้ได้โซลูชันที่เหมาะสมที่สุด ทีมงานของเราพร้อมช่วยให้ลูกค้าได้รับเครื่องจักรที่ตอบโจทย์ทุกความต้องการ ทั้งด้านคุณภาพ ความแม่นยำ และประสิทธิภาพการผลิต
การคำนวณค่าความเร็วรอบ (Spindle Speed), Feed Rate และ Step Down สำหรับการกัดด้วยเครื่อง CNC เราจำเป็นต้องพิจารณาปัจจัยหลายอย่าง เช่น ชนิดของวัสดุที่ใช้, ขนาดของดอกกัด, วัสดุของดอกกัด, และค่าพารามิเตอร์อื่นๆ

สูตรพื้นฐานที่ใช้ในการคำนวณ:
- 
Spindle Speed (RPM) โดยที่: - : Cutting Speed (เมตร/นาที) ขึ้นอยู่กับชนิดของวัสดุและดอกกัด
- : เส้นผ่านศูนย์กลางของดอกกัด (มิลลิเมตร)
 
- 
Feed Rate (F) โดยที่: - : Feed per Tooth (มิลลิเมตร/ฟัน)
- : จำนวนฟันของดอกกัด
 
- 
Step Down (Axial Depth of Cut) 
 ค่า Step Down จะขึ้นอยู่กับความแข็งแรงของดอกกัดและชนิดของวัสดุ โดยทั่วไปจะกำหนดเป็น % ของเส้นผ่านศูนย์กลางของดอกกัด เช่น:- สำหรับงานหยาบ: 50-70% ของเส้นผ่านศูนย์กลาง
- สำหรับงานละเอียด: 10-30% ของเส้นผ่านศูนย์กลาง
 
import math
def calculate_spindle_speed(vc, diameter):
    """
    Calculate spindle speed (RPM) based on cutting speed and tool diameter.
    :param vc: Cutting speed in meters per minute (m/min)
    :param diameter: Tool diameter in millimeters (mm)
    :return: Spindle speed in revolutions per minute (RPM)
    """
    return (vc * 1000) / (math.pi * diameter)
def calculate_feed_rate(rpm, fz, num_teeth):
    """
    Calculate feed rate (F) based on RPM, feed per tooth, and number of teeth.
    :param rpm: Spindle speed in revolutions per minute (RPM)
    :param fz: Feed per tooth in millimeters per tooth (mm/tooth)
    :param num_teeth: Number of teeth (Z)
    :return: Feed rate in millimeters per minute (mm/min)
    """
    return rpm * fz * num_teeth
def calculate_step_down(diameter, material_type):
    """
    Calculate step down (axial depth of cut) based on tool diameter and material type.
    :param diameter: Tool diameter in millimeters (mm)
    :param material_type: Type of material ('rough' or 'finish')
    :return: Step down in millimeters (mm)
    """
    if material_type == "rough":
        return diameter * 0.6  # 60% of diameter for roughing
    elif material_type == "finish":
        return diameter * 0.2  # 20% of diameter for finishing
    else:
        raise ValueError("Invalid material type. Use 'rough' or 'finish'.")
# Example usage:
if __name__ == "__main__":
    # Input parameters
    cutting_speed = 150  # Cutting speed in m/min (example for aluminum)
    tool_diameter = 10   # Tool diameter in mm
    feed_per_tooth = 0.1 # Feed per tooth in mm/tooth
    num_teeth = 4        # Number of teeth on the tool
    material_type = "rough"  # Material type ('rough' or 'finish')
    # Calculations
    rpm = calculate_spindle_speed(cutting_speed, tool_diameter)
    feed_rate = calculate_feed_rate(rpm, feed_per_tooth, num_teeth)
    step_down = calculate_step_down(tool_diameter, material_type)
    # Output results
    print(f"Spindle Speed (RPM): {rpm:.2f}")
    print(f"Feed Rate (mm/min): {feed_rate:.2f}")
    print(f"Step Down (mm): {step_down:.2f}")
