//Copyright (C) 2017 Christoffer Kauppinen //This work is licensed under a Creative Commons Attribution 2.0 International License. // //The license can be found here: //https://creativecommons.org/licenses/by/2.0/legalcode // //Original code by Christoffer Kauppinen http://orcid.org/0000-0002-2850-2702 //This 2 inch wafer dipper is designed to fit into a 250 ml Schott Duran beaker. Number of wafers that can be fitted are automatically calculated and taken into account. The user needs to think only the size of his or her beaker and ofcourse the wafer dimensions. //Motivation for this project is that outside industruial semiconductor production the processed wafer quantities are small. In academia it is common to process 1-3 wafers at a time. Therefore wet etching and other dipping is often done in a beaker. It is quite difficult to find small dippers for 2 inch wafers that fit into a standard 250 ml beaker. //Beaker dimensions and volume see http://www.duran-group.com/en/products-solutions/laboratory-glassware/products/boiling-flasks-and-general-laboratory-glassware/beaker.html //Capacity // ml d mm h mm // //21 106 36 250 70 95 beaker_d=70; beaker_h=95; %cylinder(h=beaker_h,d=beaker_d,center=false, $fn=100);// This line draws the outline of the beaker handle_extra_length=1*50; //------------ //Wafer size, can be changed but bear in mind that then you will need a bigger beaker wafer_d=1*50.8; wafer_h=1*0.430;// This is one of the standards for 2 inch singke side polished (SSP) sapphire wafers module wafer()//This is the CAD representation of the wafer { cylinder(h=wafer_h,d=wafer_d,center=true, $fn=100); } module up_wafer()// The same wafer but vertically { rotate([90,0,0]) wafer(); } module hole() { //Circular hole translate([0,0,wafer_d/2]) rotate([90,0,0]) cylinder(h=wafer_h*1000,d=wafer_d*0.9,center=true, $fn=200); //The below lines can be used instead to make a square cut, remember to comment the lines for the circular hole //Rectangular hole //translate([0,0,wafer_d/2]) //rotate([90,0,0]) //cube([wafer_d/sqrt(2),wafer_d/sqrt(2),wafer_d/sqrt(2)],center=true); } //------------- //Box made here, the final box is made from modules where each module is progressively more cut. This way it is easier to see the changes. //Box outer wiggle bow=17.24; //Central cube width W=beaker_d/sqrt(2)-bow*1; H=wafer_d*1; Lx=wafer_d*1.1; //Central box module box() { translate([0,0,H/2]) cube([Lx,W,H],center=true); } //Box with the main hole for letting chemicals in module funky_box() { difference(){ box(); hole(); } } //Here we will cut also holes to the sides for added circulation of chemicals module very_funky_box() { difference() { difference() { funky_box(); translate([0,0,H/4]) cube([Lx,W*0.85,H*0.25],center=true); } translate([0,0,3*H/4]) cube([Lx,W*0.85,H*0.25],center=true); } } slot_w=wafer_h*3.0;// This gives a nice margin of error when putting the wafers in, w means width slot_separation=4; base_thickness=2; // So this slot will be cut from top to almost bottom and this slot will hold the wafer in module slot() { translate([0,0,10000/2+base_thickness]) cube([wafer_d*1.05,slot_w,10000],center=true) ; } mini_slot_x=wafer_d*0.9; mini_slot_y=slot_w*1.8; mini_slot_z=10000; //This mini slot lets the chemical flow nicer to the edge of the wafer that is in the holding slot. This is not absolutely necessary. module mini_slot() { translate([0,0,10000/2+base_thickness]) cube([mini_slot_x,mini_slot_y,mini_slot_z],center=true) ; } //Number of wafers that will fit into the dipper N=floor(W/(slot_w+slot_separation)); echo(N); //---------------------- //These lines of code can be used to study how the wafer fits into the dippers slots //translate([0,slot_separation,wafer_d/abs(-2)]) //up_wafer(); // The armada of slots that will be cut out module armada() { for (i=[1:N/2]) translate([0,i*slot_separation,0]) slot(); ; for (i=[1:N/2]) translate([0,-i*slot_separation,0]) slot(); ; } // The armada of mini slots that will be cut out module second_armada() { for (i=[1:N/2]) translate([0,i*slot_separation,0]) mini_slot(); ; for (i=[1:N/2]) translate([0,-i*slot_separation,0]) mini_slot(); ; } module super_funky_box() { difference() { very_funky_box(); armada(); } } module super_mega_funky_box() { difference() { super_funky_box(); second_armada(); } } module extra_super_mega_funky_box()//here we open the top and make spillage hole to bottom { difference() { difference() { difference() { super_mega_funky_box(); translate([0,0,0*H/4]) cube([(slot_separation*N/2)/2,(slot_separation)*(N)+(1*slot_w),H*0.25],center=true); } translate([0,-(N/2-1)*slot_separation,H]) cube([mini_slot_x,(mini_slot_y)+(N/2-1)*slot_separation,H*0.25],center=true); } translate([0,(N/2-1)*slot_separation,H]) cube([mini_slot_x,(mini_slot_y)+(N/2-1)*slot_separation,H*0.25],center=true); } } module handle() { translate([Lx/2-slot_separation,0,0])//Handle is moved to the the side as the chemical drain is on the bottom cylinder(h=beaker_h+handle_extra_length,d=slot_separation,center=false, $fn=200); } extra_super_mega_funky_box(); handle();