2016年7月16日 星期六

OpenSCAD 基礎參數建模

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 連結

參數調整短片






OpenSCAD公式整理
< http://steward-fu.github.io/website/openscad_cheatsheet.htm >