Browse Source

Initial commit.

master
Maximilian Stiefel 7 years ago
commit
6591c88e42
  1. 91
      dimensions.scad
  2. 17
      pcb_holder_crossbar.scad
  3. 86
      pcb_holder_crossbar.stl
  4. 1749
      pcb_holder_crossbar.svg
  5. 41
      pcb_holder_floor_prot.scad
  6. 136236
      pcb_holder_floor_prot.stl
  7. 1726
      pcb_holder_floor_prot.svg
  8. 1863
      pcb_holder_holder.svg
  9. 88
      pcb_holder_holder_l.scad
  10. 28016
      pcb_holder_holder_l.stl
  11. 88
      pcb_holder_holder_r.scad
  12. 69
      pcb_holder_lid.scad
  13. 243518
      pcb_holder_lid.stl
  14. 1883
      pcb_holder_lid.svg
  15. 37
      roundy.scad
  16. 37
      test.step
  17. 46356
      uppsla_university.dxf
  18. BIN
      uppsla_university.png

91
dimensions.scad

@ -0,0 +1,91 @@
/////////////////////////////////////////////////////////////////////////////////
// File for all dimensions, so they can be changed globally.
//
// Author: Maximilian Stiefel
// Last modification: 17.06.2017
/////////////////////////////////////////////////////////////////////////////////
// Allowance
allowance05 = 0.5;
allowance1 = 1;
allowance2 = 2;
// Dimesions holder
holder_height = 172;
holder_width = 18;
holder_depth = 8;
// Dimensions notch
notch_height = 161;
// Calculations to construct a triangle which can take a PCB
biggest_pcb = 2;
c = biggest_pcb + allowance05;
x = c;
y = sqrt( pow(x,2) - pow(c/2,2) );
// Dimensions cuvette
glass_thickness = 6;
cuvette_width = 180 + 2*glass_thickness + allowance2;
cuvette_depth = 50 + 2*glass_thickness + allowance2;
// Dimensions lid
lid_thickness = 4;
lid_width = 180 + 2*glass_thickness + 2*lid_thickness + allowance2;
lid_depth = 50 + 2*glass_thickness + 2*lid_thickness + allowance2;
lid_height = 20;
// Dimensions holder heater
heater_diameter = 25 + allowance1;
heater_offset = 55;
heater_pos = -lid_width/2 + heater_diameter/2 + 2*lid_thickness + 3;
// Dimensions slot for the PCB holder arms
slot_width = lid_width - heater_diameter - 2*lid_thickness - 20;
slot_depth = holder_depth + allowance05;
slot_height = 1.5 * lid_height;
slot_pos = heater_pos + heater_diameter/2 + lid_thickness + 3;
// Dimensions service holes for temp. sensor and air tube
service_hole_width = 10;
service_hole_depth = 10;
service_hole_height = lid_height;
// Dimensions crossbar
crossbar_height = 2.5 + allowance05;
crossbar_width = 8 + allowance05;
crossbar_depth = slot_width;
// Dimensions lid
lid_thickness = 4;
lid_slot_width = 8;
// Dimensions neck
neck_diameter = holder_depth;
neck_height = lid_thickness + allowance05;
// Dimensions head
head_width = holder_width;
head_depth = holder_depth;
head_height = 5;
// Suitable for M3 screw thread
hole_diameter = 2.5;
// Air system diameter
air_system = 10;
// Height difference between notch for PCB and the actual holder
height_diff_1 = holder_height - notch_height;
// Width difference between crossbar and holder
width_diff_1 = holder_width - crossbar_width;
// Dimensions bar that PCB does not fall down
bar_width = holder_width/2;
bar_depth = 6;
// The height of this thing should exactely use the space which is available
// between the notch for the PBC and the crossbar slot
bar_height = height_diff_1/4 - crossbar_height/2;
// My color for everything
myColor = "FireBrick";

17
pcb_holder_crossbar.scad

@ -0,0 +1,17 @@
/////////////////////////////////////////////////////////////////////////////////
// Adapter for drilling machine in the embedded lab.
//
// Author: Maximilian Stiefel
// Last modification: 17.06.2017
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// Includes
/////////////////////////////////////////////////////////////////////////////////
include <dimensions.scad>
use <dimensions.scad>
/////////////////////////////////////////////////////////////////////////////////
// Action
/////////////////////////////////////////////////////////////////////////////////
cube([crossbar_width - allowance05, crossbar_depth, crossbar_height - allowance05], center = true);

86
pcb_holder_crossbar.stl

@ -0,0 +1,86 @@
solid OpenSCAD_Model
facet normal -0 0 1
outer loop
vertex -4 74 1.25
vertex 4 -74 1.25
vertex 4 74 1.25
endloop
endfacet
facet normal 0 0 1
outer loop
vertex 4 -74 1.25
vertex -4 74 1.25
vertex -4 -74 1.25
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -4 -74 -1.25
vertex 4 74 -1.25
vertex 4 -74 -1.25
endloop
endfacet
facet normal -0 0 -1
outer loop
vertex 4 74 -1.25
vertex -4 -74 -1.25
vertex -4 74 -1.25
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex -4 -74 -1.25
vertex 4 -74 1.25
vertex -4 -74 1.25
endloop
endfacet
facet normal 0 -1 -0
outer loop
vertex 4 -74 1.25
vertex -4 -74 -1.25
vertex 4 -74 -1.25
endloop
endfacet
facet normal 1 -0 0
outer loop
vertex 4 -74 1.25
vertex 4 74 -1.25
vertex 4 74 1.25
endloop
endfacet
facet normal 1 0 0
outer loop
vertex 4 74 -1.25
vertex 4 -74 1.25
vertex 4 -74 -1.25
endloop
endfacet
facet normal 0 1 -0
outer loop
vertex 4 74 -1.25
vertex -4 74 1.25
vertex 4 74 1.25
endloop
endfacet
facet normal 0 1 0
outer loop
vertex -4 74 1.25
vertex 4 74 -1.25
vertex -4 74 -1.25
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -4 -74 -1.25
vertex -4 74 1.25
vertex -4 74 -1.25
endloop
endfacet
facet normal -1 -0 0
outer loop
vertex -4 74 1.25
vertex -4 -74 -1.25
vertex -4 -74 1.25
endloop
endfacet
endsolid OpenSCAD_Model

1749
pcb_holder_crossbar.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 79 KiB

41
pcb_holder_floor_prot.scad

@ -0,0 +1,41 @@
/////////////////////////////////////////////////////////////////////////////////
// Floor protection for cuvette.
//
// Author: Maximilian Stiefel
// Last modification: 12.06.2017
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// Includes
/////////////////////////////////////////////////////////////////////////////////
include <roundy.scad>
use <roundy.scad>
include <dimensions.scad>
use <dimensions.scad>
/////////////////////////////////////////////////////////////////////////////////
// Action
/////////////////////////////////////////////////////////////////////////////////
color(myColor)
difference()
{
union()
{
// Basic lid
translate([0, 0, lid_height/2])
roundy(lid_width, lid_depth, lid_height, true);
translate([-lid_width/2 + 5, -lid_depth/2 + 2, lid_height/2])
rotate([90, 0, 0])
linear_extrude(height = 6, center = true, convexity = 10, twist = 0)
union()
{
translate([0, 4, 0])
text("Etching Machine of the Embedded Systems Master", size = 6, valign = "center");
translate([0, -4, 0])
text("Designed by Maximilian Stiefel 2017", size = 6, valign = "center");
}
}
// Depening to put it over the cuvette
translate([0, 0, lid_height - lid_thickness])
cube([cuvette_width, cuvette_depth, lid_height], center = true);
}

136236
pcb_holder_floor_prot.stl

File diff suppressed because it is too large

1726
pcb_holder_floor_prot.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 131 KiB

1863
pcb_holder_holder.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 89 KiB

88
pcb_holder_holder_l.scad

@ -0,0 +1,88 @@
/////////////////////////////////////////////////////////////////////////////////
// Left holder part to anchor PCB with in the etching bath.
//
// Author: Maximilian Stiefel
// Last modification: 17.06.2017
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// Includes
/////////////////////////////////////////////////////////////////////////////////
include <dimensions.scad>
use <dimensions.scad>
/////////////////////////////////////////////////////////////////////////////////
// Vars
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// Action
/////////////////////////////////////////////////////////////////////////////////
color(myColor)
difference()
{
union()
{
// Cube for the base holder
cube([holder_width, holder_depth, holder_height], center = false);
// Head
translate([0, 0, holder_height + neck_height])
cube([head_width, head_depth, head_height]);
// Neck
translate([holder_width/2, holder_depth/2, holder_height])
cylinder(h = neck_height, r = neck_diameter/2);
// Bar, that PCB does not fall
translate([holder_width/2 - bar_width/2, -bar_depth, height_diff_1/2 - bar_height])
cube([bar_width, bar_depth, bar_height]);
// Text
translate([holder_width/2 + 4, holder_depth, 0.2*holder_height])
rotate([90,0,180])
linear_extrude(height = 3, center = true, convexity = 10, twist = 0)
text("L", size = 10, valign = "center");
translate([0, holder_depth -1, (1/4)*height_diff_1 + 6])
rotate([90, 0, 270])
linear_extrude(height = 2, center = true, convexity = 10, twist = 0)
text("M3", size = 3, valign = "center");
translate([0, holder_depth/2, holder_height/2])
rotate([90, -90, 270])
linear_extrude(height = 2, center = true, convexity = 10, twist = 0)
text("Maximilian Stiefel 2017", size = 3, valign = "center");
}
union()
{
// Cube for notch
//translate([holder_width/2 - notch_width/2, -notch_depth +2, height_diff_1/2])
//cube([notch_width, notch_depth, notch_height], center = false);
// Triangular notch
translate([-c/2 + holder_width/2, -0.01, height_diff_1/2])
linear_extrude(height = notch_height, center = false)
polygon(points=[[0,0],[c/2,y], [c,0]], paths = [[0,1,2]]);
// Slots for crossbars
translate([width_diff_1/2, -1, (1/4)*height_diff_1 - crossbar_height/2])
cube([crossbar_width, holder_depth + 2, crossbar_height], center = false);
translate([width_diff_1/2, -1, (3/4)*height_diff_1 + notch_height - crossbar_height/2])
cube([crossbar_width, holder_depth + 2, crossbar_height], center = false);
// Drill holes for screws
translate([-1, holder_depth/2, (1/4)*height_diff_1])
rotate([0, 90, 0])
cylinder(h = 9, r = hole_diameter/2);
translate([0, holder_depth/2,(3/4)*height_diff_1 + notch_height])
rotate([0, 90, 0])
cylinder(h = 9, r = hole_diameter/2);
// Holes for the air system
// translate([holder_width/2, holder_depth + 1, 0])
// rotate([90, 0, 0])
// cylinder(h = holder_depth + 2, r = air_system/2);
}
}

28016
pcb_holder_holder_l.stl

File diff suppressed because it is too large

88
pcb_holder_holder_r.scad

@ -0,0 +1,88 @@
/////////////////////////////////////////////////////////////////////////////////
// Left holder part to anchor PCB with in the etching bath.
//
// Author: Maximilian Stiefel
// Last modification: 17.06.2017
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// Includes
/////////////////////////////////////////////////////////////////////////////////
include <dimensions.scad>
use <dimensions.scad>
/////////////////////////////////////////////////////////////////////////////////
// Vars
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// Action
/////////////////////////////////////////////////////////////////////////////////
color(myColor)
difference()
{
union()
{
// Cube for the base holder
cube([holder_width, holder_depth, holder_height], center = false);
// Head
translate([0, 0, holder_height + neck_height])
cube([head_width, head_depth, head_height]);
// Neck
translate([holder_width/2, holder_depth/2, holder_height])
cylinder(h = neck_height, r = neck_diameter/2);
// Bar, that PCB does not fall
translate([holder_width/2 - bar_width/2, -bar_depth, height_diff_1/2 - bar_height])
cube([bar_width, bar_depth, bar_height]);
// Text
translate([holder_width/2 +5, holder_depth, 0.2*holder_height])
rotate([90,0,180])
linear_extrude(height = 3, center = true, convexity = 10, twist = 0)
text("R", size = 10, valign = "center");
translate([holder_width, 1, (1/4)*height_diff_1 + 6])
rotate([90, 0,90])
linear_extrude(height = 2, center = true, convexity = 10, twist = 0)
text("M3", size = 3, valign = "center");
translate([holder_width, holder_depth/2, holder_height/2])
rotate([90, -90, 90])
linear_extrude(height = 2, center = true, convexity = 10, twist = 0)
text("Maximilian Stiefel 2017", size = 3, valign = "center");
}
union()
{
// Cube for notch
//translate([holder_width/2 - notch_width/2, -notch_depth +2, height_diff_1/2])
//cube([notch_width, notch_depth, notch_height], center = false);
// Triangular notch
translate([-c/2 + holder_width/2, -0.01, height_diff_1/2])
linear_extrude(height = notch_height, center = false)
polygon(points=[[0,0],[c/2,y], [c,0]], paths = [[0,1,2]]);
// Slots for crossbars
translate([width_diff_1/2, -1, (1/4)*height_diff_1 - crossbar_height/2])
cube([crossbar_width, holder_depth + 2, crossbar_height], center = false);
translate([width_diff_1/2, -1, (3/4)*height_diff_1 + notch_height - crossbar_height/2])
cube([crossbar_width, holder_depth + 2, crossbar_height], center = false);
// Drill holes for screws
translate([holder_width/2 + 1, holder_depth/2, (1/4)*height_diff_1])
rotate([0, 90, 0])
cylinder(h = 9, r = hole_diameter/2);
translate([holder_width/2 + 1, holder_depth/2,(3/4)*height_diff_1 + notch_height])
rotate([0, 90, 0])
cylinder(h = 9, r = hole_diameter/2);
// Holes for the air system
// translate([holder_width/2, holder_depth + 1, 0])
// rotate([90, 0, 0])
// cylinder(h = holder_depth + 2, r = air_system/2);
}
}

69
pcb_holder_lid.scad

@ -0,0 +1,69 @@
/////////////////////////////////////////////////////////////////////////////////
// Lid for cuvette with pcb holder slots and a possibility to put a heater.
//
// Author: Maximilian Stiefel
// Last modification: 17.06.2017
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// Includes
/////////////////////////////////////////////////////////////////////////////////
include <roundy.scad>
use <roundy.scad>
include <dimensions.scad>
use <dimensions.scad>
/////////////////////////////////////////////////////////////////////////////////
// Action
/////////////////////////////////////////////////////////////////////////////////
color(myColor)
difference()
{
union()
{
// Basic lid
translate([0, 0, lid_height/2])
roundy(lid_width, lid_depth, lid_height, true);
//cube([lid_width, lid_depth, lid_height], center = true);
translate([heater_pos, 0, lid_height - 1])
cylinder(h = heater_offset + 1, r = heater_diameter/2 + lid_thickness);
// Uppsala University Logo
translate([0, 5, lid_height])
linear_extrude(height = 1)
scale(0.08)
import("uppsla_university.dxf");
// Text
translate([-lid_width/2 + 5, -lid_depth/2 + 2, lid_height/2])
rotate([90, 0, 0])
linear_extrude(height = 6, center = true, convexity = 10, twist = 0)
union()
{
translate([0, 4, 0])
text("Embedded Etcher", size = 6, valign = "center");
translate([0, -4, 0])
text("Revision 1.0", size = 6, valign = "center");
}
}
union()
{
// Depening to put it over the cuvette
translate([0, 0, lid_height/2 - lid_thickness])
cube([cuvette_width, cuvette_depth, lid_height], center = true);
// Hole for heater
translate([heater_pos, 0, -1])
cylinder(h = heater_offset + lid_height + 2, r = heater_diameter/2);
// Slot for the PCB holder arms
translate([slot_pos, -slot_depth/2, 0])
cube([slot_width, slot_depth, slot_height], center = false);
// Service holes
translate([-lid_width/2 + lid_thickness + 5, -lid_depth/2 + lid_thickness + 3, (1/2)*lid_height])
cube([service_hole_width, service_hole_depth, service_hole_height]);
translate([lid_width/2 - lid_thickness - service_hole_width -5, -lid_depth/2 + lid_thickness + 3, (1/2)*lid_height])
cube([service_hole_width, service_hole_depth, service_hole_height]);
}
}

243518
pcb_holder_lid.stl

File diff suppressed because it is too large

1883
pcb_holder_lid.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 88 KiB

37
roundy.scad

@ -0,0 +1,37 @@
/////////////////////////////////////////////////////////////////////////////////
// Module for a open box with rounded edges.
//
// Author: Maximilian Stiefel
// Last modification: 26.04.2017
/////////////////////////////////////////////////////////////////////////////////
module roundy(width, depth, height, center)
{
/////////////////////////////////////////////////////////////////////////
// Vars
/////////////////////////////////////////////////////////////////////////
edge_rounding = 8;
transx = -width/2;
transy = -depth/2;
transz = -height/2;
/////////////////////////////////////////////////////////////////////////
// Action
/////////////////////////////////////////////////////////////////////////
// Hull 4 cylinders
translate([transx, transy, transz])
hull(){
// x=0, y=0
translate([edge_rounding, edge_rounding, 0])
cylinder(r = edge_rounding, h = height);
// x=width, y=0
translate([width - edge_rounding, edge_rounding, 0])
cylinder(r = edge_rounding, h = height);
// x=0, y=depth
translate([edge_rounding, depth - edge_rounding,0])
cylinder(r = edge_rounding, h = height);
//x=width, y=length
translate([width - edge_rounding, depth - edge_rounding,0])
cylinder(r = edge_rounding, h = height);
}
}

37
test.step

@ -0,0 +1,37 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
FILE_NAME('/home/maximilian/UppSense/cad/etching_machine/v2.0/test.step'
,'2017-06-17T18:55:45',('Author'),(''),
'Open CASCADE STEP processor 6.8','FreeCAD','Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN_CC2 { 1 2 10303 214 -1 1 5 4 }'));
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('committee draft',
'automotive_design',1997,#2);
#2 = APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
#5 = PRODUCT_DEFINITION('design','',#6,#9);
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
#7 = PRODUCT('ASSEMBLY','ASSEMBLY','',(#8));
#8 = MECHANICAL_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = SHAPE_REPRESENTATION('',(#11),#15);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#19)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
(#16,#17,#18)) REPRESENTATION_CONTEXT('Context #1',
'3D Context with UNIT and UNCERTAINTY') );
#16 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#17 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#18 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#19 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#16,
'distance_accuracy_value','confusion accuracy');
#20 = PRODUCT_TYPE('part',$,(#7));
ENDSEC;
END-ISO-10303-21;

46356
uppsla_university.dxf

File diff suppressed because it is too large

BIN
uppsla_university.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Loading…
Cancel
Save