2016年7月23日 星期六

OpenSCAD是一種用coding方式的建模軟體,因為之前接觸過滿多coding程式,像是Processing,PureData,Arduino,Xcode...,所以使用起來非常上手,在語法上面和C語言很類似,沒有太多的規矩但,是有時候會因為太簡單所以會翻出所有指令表來參考


這次結合了OpenSCAD和Thingiverse裡的Customizer,讓我們的設計的參數模型能夠開放給其他人做創作.

----------------------------------------

這次我做了一個參數作品,剛開始的想法是設計一款客製化的杯子,能夠讓使用者在Thingivers上做設計,然後輸出成stl檔,再利用陶瓷的3D列印去成型,後來在過程中發現出其他的可能性像是筆筒.戒指.....環形的東西都可以做設計,就看使用者如何去設定參數

下面我會從OpenSCAD的建模到如何上傳至Thingiverse上做教學

----------------------------------------

一開始一定要熟悉的介面
大塊空白的地方是寫coding的欄位,右邊是檔案資訊,包含整個檔案的大小;當程式出錯時也會顯示在這邊,下面有軸向的就是模型render出來的地方摟~
操作說明: 左鍵 - 旋轉
                  右鍵 - 平移
                  滾輪 - 縮放
----------------------------------------
----------------------------------------

介面介紹完了~要開始建模了~

我先將所有程式碼上傳,再一步步講解

CupHeight =100;
TwistDegree=90;
TheSlices=10;
FilletOutside=5;
FilletInside=10;
OutsideSides=4;
InsideSides=10;
OutsideRadius=20;
InsideRadius=5;
ButtomThinkness=0;


module outsideshell(){
    linear_extrude(height=CupHeight,twist=TwistDegree,slices=TheSlices){
      offset(r=FilletOutside){
      translate([0,0]) circle(OutsideRadius,$fn=OutsideSides);
         }
      }
   }
     
module insideshell(){
    linear_extrude(height=CupHeight,twist=TwistDegree,slices=TheSlices){
       offset(r = FilletInside) {
      translate([0,0]) circle(InsideRadius,$fn=InsideSides);
        }
     }
  }
 
 
 difference(){  
     translate([0,0,0]){ outsideshell();}
     translate([0,0,ButtomThinkness]) {insideshell();}
 }



----------------------------------------

建模順序: 草圖1-長出草圖1-草圖2-長出草圖2-用零件2剪裁零件1

首先前面這些參數要先定義好,這樣上傳到Thingivers上才會知道控制的是哪個參數
* 如果要讓字體在Thingiverse上面有間隔,記得要讓空格後的字母變成大寫,不然字都會連在一起(版面也是很重要的)

CupHeight =100;
TwistDegree=90;
TheSlices=10;
FilletOutside=5;
FilletInside=10;
OutsideSides=4;
InsideSides=10;
OutsideRadius=20;
InsideRadius=5;
ButtomThinkness=0;




translate([0,0]) circle(InsideRadius,$fn=InsideSides);

用translate()來定位模型的中心點,再來用circle()做形狀的變化
     translate([0,0,0])
=>translate([x,y,z])

   circle( InsideRadius, $fn=InsideSides);
=>circle( 外接圓半徑 , 正多邊形邊數);

 在圖形外面加上offset() { } 設定多邊形的圓角

     offset(r = FilletInside)
=>offset(r = 圓角半徑)

----------------------------------------

在畫好的2D圖前加上 linear_extrude(){ } 讓2D圖向上長出3D



linear_extrude(height=CupHeight,twist=TwistDegree,slices=TheSlices)
=>linear_extrude(長出高度,旋轉角度,層數)  *層數越高,模型就越細緻

再來將剛剛建好的3D模型帶入到 module outsideshell(){ } 以後需要這個模型就不必再重新輸入一次程式碼,只要輸入 outsideshell(); 就可以把模型叫出來,是不是很方便啊!

----------------------------------------

再重複上面的步驟,做出外面的模型,記得參數要做修改喔~
然後利用 difference(){ } 將兩個模型進行布林運算,



difference(){  
     translate( [0,0,0] ){ outsideshell(); }
     translate( [0,0,ButtomThinkness] ) { insideshell(); }
 }

放在第一個是被修剪的模型,而後面則是要修剪的模型,這樣就大功告成摟~~YA
*我在第二個模型的translate()上加入Z軸的變化,讓使用者自己去設計要不要把底封起來



----------------------------------------
----------------------------------------

再來進入困難的部分了『 將OpenSCAD 的模型上傳到Thingiverse的Customizer 』


一.
▲首先一定要在Tingiverse上面建立帳號,這樣才能使用Customizer


二.
▲帳號建立好後,在上方欄位 Create 選擇 Upload a thing


三.
▲選擇做好的 OpenSCAD 檔案


四.
▲檔案資訊和介紹的部分一定要寫好才能夠上傳給別人看喔!!!


----------------------------------------

五.接著進到 Customizer

▲如果找不到地方進去,剛剛檔案資訊的地方也有連結可以點進去喔!


六.
▲進去後的畫面,然後點擊下方的 Ting setting


七.
▲選擇要放入 Customizer 的檔案


八.


▲找到自己的檔案,如果旁邊有出現 Open in customizer 就代表成功了!


----------------------------------------

自己玩玩看吧~~





▲右邊的 View source 可以看到程式碼



▲選擇 Create thing 就可以輸出成 STL 檔去做列印

----------------------------------------
----------------------------------------

教學就到這邊摟~下次再放新的東西上來



2016年7月16日 星期六

        openSCAD是一個用於建構立體模型的軟體,由於我是自學openSCAD,第一次接觸這個軟體時,真的有點不知所措,還好現在網路強大,在網路上有許多人分享影片教學,藉由這些簡短的影片,真的可以學習到很多!!

        每個openSCAD的使用者都有自己的使用習慣和命名方式,寫出程式後可上傳至Thingiverse,其中有一功能CUSTOMIZER可調整參數,製作一個完全符合自己需求的產品。






    這是我第一個openSCAD的作品,做了一個首飾收納整理的架子,常常把首飾東掛西放,然後自己就忘記放去哪兒,利用openSCAD可以調整參數的特性,依自己的首飾尺寸調整收納架子~


(實體圖片一)

▲上方主要是掛項鍊、手鍊或是吊掛式耳環。

(實體圖片二)

▲下方是放置耳環,依據使用者耳環耳針的粗度及長度可客製化調整,方便尋找拿取,利於展示。


現在就來介紹一下openSCAD的一些基本立體、我是怎麼製作出這個架子、這個架子可調整的參數有哪些~

◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
架子的部分主要分成四個部分:

(一)橫桿的架子  (二)直立的架子  (三)凹洞的圓環  (四)下方的底座
◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎


(一)橫桿的架子
branchlong=200;
branchradius=10;
branch02heigh=100;

橫向桿子是掛首飾的地方,更改參數branchradius可以改變他的粗度,如果需要掛很多東西,更改branchlong可以改變橫桿的長度,最後一個branch02heigh是第一橫桿和第二航稈的距離。

module branch(){
  cylinder(h=branchlong,r=branchradius,center=true);  
}

下方式MODULE原始程式樣子:
//branch01
rotate(a=90,v=[0,1,0]){
translate([-stickheigh,0,0])
branch();
}    
//branch02
rotate(a=90,v=[1,0,0]){
translate([0,stickheigh-branch02heigh,0])
branch();
}

(二)直立的架子
stickheigh=500;
stickradius=10;

這是中間的直立桿子,stickheigh是整個架子的高度,如果使用者項鍊較長就將數字增高,stickradius是直立桿子的粗度。

module stick(){
cylinder(h=stickheigh,r=stickradius);
}

下方式MODULE原始程式樣子:
//middle stick
stick();


 (三)凹洞的圓環 +  (四)下方的底座
thickness=8;
holedeep=10;
bodyheigh=10;
rauiussmall=90;
radius=100;

(這裡是花較多心思希望能帶給使用者完全客製化獨一無二的需求!)

thickness是底盤上圓環型凹槽的部分,holedeep是圓環型凹槽的深度,這裡是放置耳環的地方,依據使用者的耳環後方的耳針粗度及深度調整參數,耳環就不會亂滾而且好拿取,也有展示的功能。
bodyheigh是底盤的高度,rauius是最底下圓形的直徑,而rauiussmal是圓環型凹槽外圍的直徑。

module hole(){
difference(){
circle(r=rauiussmall-6);
circle(r=rauiussmall-6-thickness);
}
}

module bottom(){
cylinder(h=bottomheigh,r=radius);
}

module body(){
cylinder(h=bodyheigh,r1=radius,r2=rauiussmall);   
}

下方式MODULE原始程式樣子:
//body
difference(){
    
translate([0,0,bottomheigh])
body();
    
translate([0,0,bodyheigh])
linear_extrude(heigh=holedeep)
hole();    

}
//bottom
bottom();

★★★★★★★★★★★★★★★★★★★★★★★★★★
這就是ACCESSORIES RACK大致的介紹~謝謝~~
★★★★★★★★★★★★★★★★★★★★★★★★★★

(XD好像比較沒有提到使用介面及程式編碼,下一篇將會細細解說..)






        openSCAD是一個用於建構立體模型的軟體,由於我是自學openSCAD,第一次接觸這個軟體時,真的有點不知所措,還好現在網路強大,在網路上有許多人分享影片教學,藉由這些簡短的影片,真的可以學習到很多!!

        每個openSCAD的使用者都有自己的使用習慣和命名方式,寫出程式後可上傳至Thingiverse,其中有一功能CUSTOMIZER可調整參數,製作一個完全符合自己需求的產品。






    這是我第一個openSCAD的作品,做了一個首飾收納整理的架子,常常把首飾東掛西放,然後自己就忘記放去哪兒,利用openSCAD可以調整參數的特性,依自己的首飾尺寸調整收納架子~


(實體圖片一)

▲上方主要是掛項鍊、手鍊或是吊掛式耳環。

(實體圖片二)

▲下方是放置耳環,依據使用者耳環耳針的粗度及長度可客製化調整,方便尋找拿取,利於展示。


現在就來介紹一下openSCAD的一些基本立體、我是怎麼製作出這個架子、這個架子可調整的參數有哪些~

◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
架子的部分主要分成四個部分:

(一)橫桿的架子  (二)直立的架子  (三)凹洞的圓環  (四)下方的底座
◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎


(一)橫桿的架子
branchlong=200;
branchradius=10;
branch02heigh=100;

橫向桿子是掛首飾的地方,更改參數branchradius可以改變他的粗度,如果需要掛很多東西,更改branchlong可以改變橫桿的長度,最後一個branch02heigh是第一橫桿和第二航稈的距離。

module branch(){
  cylinder(h=branchlong,r=branchradius,center=true);  
}

下方式MODULE原始程式樣子:
//branch01
rotate(a=90,v=[0,1,0]){
translate([-stickheigh,0,0])
branch();
}    
//branch02
rotate(a=90,v=[1,0,0]){
translate([0,stickheigh-branch02heigh,0])
branch();
}

(二)直立的架子
stickheigh=500;
stickradius=10;

這是中間的直立桿子,stickheigh是整個架子的高度,如果使用者項鍊較長就將數字增高,stickradius是直立桿子的粗度。

module stick(){
cylinder(h=stickheigh,r=stickradius);
}

下方式MODULE原始程式樣子:
//middle stick
stick();


 (三)凹洞的圓環 +  (四)下方的底座
thickness=8;
holedeep=10;
bodyheigh=10;
rauiussmall=90;
radius=100;

(這裡是花較多心思希望能帶給使用者完全客製化獨一無二的需求!)

thickness是底盤上圓環型凹槽的部分,holedeep是圓環型凹槽的深度,這裡是放置耳環的地方,依據使用者的耳環後方的耳針粗度及深度調整參數,耳環就不會亂滾而且好拿取,也有展示的功能。
bodyheigh是底盤的高度,rauius是最底下圓形的直徑,而rauiussmal是圓環型凹槽外圍的直徑。

module hole(){
difference(){
circle(r=rauiussmall-6);
circle(r=rauiussmall-6-thickness);
}
}

module bottom(){
cylinder(h=bottomheigh,r=radius);
}

module body(){
cylinder(h=bodyheigh,r1=radius,r2=rauiussmall);   
}

下方式MODULE原始程式樣子:
//body
difference(){
    
translate([0,0,bottomheigh])
body();
    
translate([0,0,bodyheigh])
linear_extrude(heigh=holedeep)
hole();    

}
//bottom
bottom();

★★★★★★★★★★★★★★★★★★★★★★★★★★
這就是ACCESSORIES RACK大致的介紹~謝謝~~
★★★★★★★★★★★★★★★★★★★★★★★★★★

(XD好像比較沒有提到使用介面及程式編碼,下一篇將會細細解說..)






2016年7月5日 星期二

交換期間成果於平台上傳分享

所有參與交換的同學需要把成果定期上傳到這個平台,這些內容會作為未來校內外評估交換計劃之依據以及其他同學參考交流之用。撰寫內容包括文字、圖片、影片連結,請以對不特定對象進行教學、介紹的開放角度來撰寫。

2015屆的三位同學,把整年中包括自己專題、ICDF、ORF、基礎課程學習成果分成5篇內容PO出來,各篇內容要1000字以上,可用工讀報告,但請潤飾文字,至於週五參與專題及涉及研究室方向、技術部分則不用寫出來。第一篇請在7/15上傳自己三月份在 ICDF 發表部分50%及對其他參展海報感想50%。

2016屆的四位同學,請把我目前在群組中交付的熱身作業各自撰寫成具實質教學作用的文章發送到平台上,再把文章連結回傳到FB MCUT Fablab的PO文下回覆。