OpenSCAD是一款參數建模軟體,其寫出的程式.scad上傳到Thingiverse之後可簡易客製化出不同尺寸的模型。
這是我第一次學習使用 OpenSCAD建模,因為自學的緣故,習慣上會先從Youtube或其他教學網站尋找相關教學影片,畢竟看影片比看文字來的快,也更能快速知道程式寫出的效果,但也因為看影片而鬧出一個笑話,有一個指令是『 $fn 』調整模型解析度,被我誤看成Sfn,還納悶為什麼Google找不到這個指令,我觀看時影片雖然調整成720P,文字還是過於小,所以這個教訓告訴我們,要從Youtube上學習影片,最好調整成1080P以及全螢幕觀看,不然會犯跟我一樣的錯誤噢。
這次做了簡單的溜滑梯存錢筒,想做個實用的東西惠己惠他人,因此想到溜滑梯存錢筒,可以讓小孩在存錢過程中感到趣味,其實也是私心想自己使用啦,勉勵自己好好存零錢,建模時並沒有使用到非常多指令,但使用到的都會簡略介紹,文章末會附上一張OpenSCAD指令圖,有一次搜尋時意外從一個看起來是程式達人的網站上存下的,水管上的教學影片內容很多但都很雜亂,每個人寫法都不同,因此那時看到指令整理圖真是異常感動。
預設尺寸是台幣的1元、5元、10元和50元,當錢幣投進第一層的洞到了第二層,會順著滑梯溜下,最後自動分類到第三層的洞中,抽出第二層主體便可自由拿取零錢,圓的直徑由小到大,NT1 → NT5 → NT10 → NT50,半徑分別是10mm → 11mm → 13mm → 14mm ,因要讓錢幣順利掉進洞裡設定時多加了1mm。
在開始程式前先大略介紹幾個Openscad 的符號,在建模時加進一段程式碼最前方會改變模型的顯示,不會影響程式碼。
符號 " ! " // 只顯示一排程式的模型
符號 " * " // 不顯示模型
符號 " # " // 模型透明化
零件分三部分 : 上蓋、中間主體、集幣筒。
$fn=200; // $fn的指令,調整模型解析度
translate ([0,0,70])
difference () {
translate ([0,0,150])
cylinder(r=75,h=2);
translate ([37.5,37.5,0])
cylinder(r=16,h=153);
} // 第一部分上蓋
// Boolean指令有三個,union(), difference(), intersection(),difference()是扣除
// translate 是 移動位置
// cylinder 是 圓柱,設定半徑和高度
difference () {
cylinder(r=75,h=150);
translate ([0,0,-1])
cylinder(r=70,h=152);
} // 第二部分,把大圓柱減掉小圓柱呈現空心狀
module sliding () {
translate([0,0,105])
linear_extrude (height = 40, twist = 360)
translate ([48,0,0])
circle(27);
} // 溜滑梯部分
// module sliding() 為程式設定一個值sliding,之後使用同一段程式碼就不須打長串字
// linear_extrude 指令設定高度和旋轉角度,做出溜滑梯
// circle 以圓形旋轉
// small ---> big or reverse
coin1 = 10; // coin1 radius
coin2 = 11; // coin2 radius
coin3 = 13; // coin3 radius
coin4 = 14; // coin4 radius
module coin() {
translate ([37.5,37.5,0])
cylinder(r=coin1+1,h=150);
translate ([-37.5,37.5,0])
cylinder(r=coin2+1,h=150);
translate ([-37.5,-37.5,0])
cylinder(r=coin3+1,h=150);
translate ([37.5,-37.5,0])
cylinder(r=coin4+1,h=150);
} // 依半徑大小次序設定四個錢幣圓柱,設定module coin()
// coin1 - coin4 可自由設定參數,程式碼中+1的目的是讓洞比錢幣大一些
difference () {
sliding ();
coin();
} // 溜滑梯減掉四個圓柱
translate([54,0,105])
cylinder(r=21,h=40);
cylinder(r=35,h=150); // 滑梯中間圓柱
translate ([-170,0,-150]) {
translate ([170,0,0])
cylinder(r=75,h=4);
difference () {
translate ([170,0,0])
cylinder(r=69,h=100);
translate ([170+37+12,37+9,4])
cylinder(r=8,h=100);
translate ([170-48,47,4])
cylinder(r=9,h=100);
translate ([170-50.5,-50,4])
cylinder(r=12,h=100);
translate ([170+50,-50,4])
cylinder(r=12,h=100);
translate ([170,0,0]) {
translate ([37.5,37.5,0])
cylinder(r=coin1+1,h=150);
translate ([-37.5,37.5,0])
cylinder(r=coin2+1,h=150);
translate ([-37.5,-37.5,0])
cylinder(r=coin3+1,h=150);
translate ([37.5,-37.5,0])
cylinder(r=coin4+1,h=150);
cylinder(r=33,h=150);
}
} // 第三部份透過difference() 保留需要的部分
}
完成 !
雖然只是簡單的模型,但是一點一點學習更多指令最後做出完整的樣子,上傳到Thingiverse以及進行Customized參數調整,完整的流程讓我學到很多,有時間會慢慢學習鑽研其他指令,也希望這篇教學可以讓初學者看懂。
Thingiverse 連結
參數調整短片




沒有留言:
張貼留言