All of these jaw plates were generated using OpenSCAD If you have access to a 3D printer and want to create custom jaws for your Stickvise, you are in the right place. The Stickvise jaw model, designed using a free program called OpenSCAD, is built up from a list of parameters for things like width, height, and length. This makes it easy to modify the model without knowing anything about OpenSCAD, just follow my instructions below. If you want to delve deeper you can learn the basics of the OpenSCAD language and make even more changes.

  1. First step, visit OpenSCAD.org to download the latest version of the program
  2. After downloading and installing OpenSCAD, download the Stickvise jaw file:

    Download "Stickvise_Jaws.scad"
  3. After opening OpenSCAD, then opening "Stickvise_Jaws.scad", you should see the screen below.

    OpenSCAD screen 1
  4. Next step, go to the top menu and select Design -> Automatic Reload and Compile. This updates the 3D view of your design each time you save. Unless your model gets extremely complex, you should do this. The Stickvise jaw model should compile almost instantly after saving.

    OpenSCAD screen 2
  5. At any time you can export the model to STL for 3D printing by going to File -> Export -> Export as STL. OpenSCAD STL export

  6. Final tip before we go over code. The 3D view is navigated using your mouse. To rotate the model drag left mouse over the view, to pan drag right mouse, to zoom roll the mouse wheel forward and backward.

OpenSCAD is a 3D compiler. This means it reads a text file full of commands and generates a 3D model based on those commands. Don't worry, You don't need to know any commands to use the Stickvise jaw model, all you will have to do is change some key values and save. In this section I will walk you through how to generate a variety of Stickvise jaw designs this way.

The basics -- here is the first block of code.

 // external dimensions of jaws
jaw_length = in_to_mm(3);
jaw_width = in_to_mm(.5);
jaw_height = in_to_mm(.25);
                      
3 inch length The default model

One thing to note, OpenSCAD is a millimeter language, to convert from inches I created a function called in_to_mm() that does the conversion. That's all you need to know. For starters lets change the jaw_length to 4 inches, your new code should be:

 // external dimensions of jaws
jaw_length = in_to_mm(4); // changed to 4
jaw_width = in_to_mm(.5);
jaw_height = in_to_mm(.25);
                      

Save your file to view the changes. Your model should look like the image below.

4 inch length The new model with length set to 4 inches

Let's try another mod, change the jaw_height from .25 to 1 inch.

 // external dimensions of jaws
jaw_length = in_to_mm(4); // changed to 4
jaw_width = in_to_mm(.5);
jaw_height = in_to_mm(1); // changed to 1
                      

Save your file to view the changes. Your model should look like the image below.

1 inch height The new model with height set to 1 inch

This jaw plate can now hold a wider PCB with taller components on the bottom side. Hopefully this demonstrates the power of OpenSCAD. In the next section I will walk through some other easy changes you can make to your custom jaws.

In this section I will explain how easy it is to modify or even remove the rectangular step shown below in red.

Rectangular step shown in red Rectangular step shown in red

Scroll down to this block of code, which controls the rectangular step

   // set to true to add rectangular step to one side
    add_jaw_step = true;
    jaw_step_height = in_to_mm(.1);
    jaw_step_depth = in_to_mm(.03);
                      

The first variable, add_jaw_step, enables the rectangular step. If you want to remove it, simply change this variable from true to false and then save.

    add_jaw_step = false; // changed to false
    jaw_step_height = in_to_mm(.1);
    jaw_step_depth = in_to_mm(.03);
                      
Rectangular step removed Rectangular step removed

Ok now that you see how to remove it, set add_jaw_step back to true and save the code. This will add the rectangular step back so we can play with the height and depth.

The next two variables, jaw_step_height, and jaw_step_depth do exactly what you would expect. Use the drawing below as a reference.

Rectangular step drawing Rectangular step drawing

Try playing with the depth and height. It is easy to create any size step you want. Just remember that you can cut all the way through the jaws if you make the height or depth too large. If you need more room, just increase the overall size of the jaws first. Experiment and try different things to get the shape you want.

Rectangular step varieties Rectangular step varieties

Now that you see how to this works, I am going speed things up. The horizontal v-groove below holds a PCB more securely than the rectangular step.

Horizontal v-groove drawing Horizontal v-groove drawing

Code:

    // set to true to add a HORIZONTAL v-groove to one side
    add_v_groove = true; 
    v_groove_height = in_to_mm(.1);
    v_groove_top_offset = in_to_mm(.025);
                      

The vertical v-groove is great for holding cylindrical objects like circular connectors.

Vertical v-groove drawing Vertical v-groove drawing

Code:

  // set to true to add a VERTICAL v to the jaw
    add_vertical_v = false; 
    vertical_v_width = in_to_mm(.5);
  // error if v_depth set equal to jaw height
    vertical_v_depth = in_to_mm(.3); 
                      

A vertical slot pattern gives you a way to run wires past the edge of your PCB. This feature is best combined with the rectangular step and horizontal v-groove, but I have hidden those in the drawing below for clarity.

Vertical v-groove drawing Vertical slot pattern drawing

Code:

  // set to true to add a vertical slot pattern to side1
    add_vertical_slots = true;  
  // set to true to add a vertical slot pattern to side2
    mirror_vertical_slots = false; 
    vertical_slot_pattern_width = in_to_mm(1);
    vertical_slot_pattern_qty = 5;
    vertical_slot_width = in_to_mm(.08);
    vertical_slot_length = in_to_mm(.15);
  // error if slot_depth set equal to jaw height
    vertical_slot_depth = in_to_mm(.2); 
    slot_spacing = vertical_slot_pattern_width/(vertical_slot_pattern_qty-1);
    slot_offset = (jaw_length-vertical_slot_pattern_width-vertical_slot_width)/2;
                      

Notice I have a variable called mirror_vertical_slots. If you set this to true, you will add the same slot pattern to the other side of the jaws.

Download "Stickvise_Jaws.scad"

                      // ***** PARAMETERS / INPUTS *****

  // external dimensions of jaws
    jaw_length = in_to_mm(3);
    jaw_width = in_to_mm(.5);
    jaw_height = in_to_mm(.25);

  // M3 screw clearance = 3.2mm = .13"
    counterbore_thru_dia = 3.2; 
  // M3 pan head clearance = 7mm = .28"
    counterbore_bore_dia = 7;
  // sets bore depth to 3.4mm or .13" from bottom of jaw
    counterbore_bore_depth = jaw_height - 3.4;

  // set to true to add rectangular step to one side
    add_jaw_step = false;
    jaw_step_height = in_to_mm(.1);
    jaw_step_depth = in_to_mm(.03);

  // set to true to add a HORIZONTAL v-groove to one side
    add_v_groove = false; 
    v_groove_height = in_to_mm(.1);
    v_groove_top_offset = in_to_mm(.025);

  // set to true to add a VERTICAL v to the jaw
    add_vertical_v = false; 
    vertical_v_width = in_to_mm(.3);
  // error if v_depth set equal to jaw height
    vertical_v_depth = in_to_mm(.3); 

  // set to true to add a vertical slot pattern to side1
    add_vertical_slots = false;  
  // set to true to add a vertical slot pattern to side2
    mirror_vertical_slots = false; 
    vertical_slot_pattern_width = in_to_mm(1);
    vertical_slot_pattern_qty = 5;
    vertical_slot_width = in_to_mm(.08);
    vertical_slot_length = in_to_mm(.15);
  // error if slot_depth set equal to jaw height
    vertical_slot_depth = in_to_mm(.2); 
    slot_spacing = vertical_slot_pattern_width/(vertical_slot_pattern_qty-1);
    slot_offset = (jaw_length-vertical_slot_pattern_width-vertical_slot_width)/2;


// ***** SET STL RESOLUTION *****

  // default minimum facet angle degrees
    $fa=0.5;
  // default minimum facet size mm
    $fs=0.2; 


// ***** CREATE GEOMETRY *****

difference()
{
	// main body of the jaw plate
    cube([jaw_length,jaw_width,jaw_height]);

	// counterbores
    translate([jaw_length/2-in_to_mm(1.25), jaw_width/2,0])
      counterbore(counterbore_thru_dia, counterbore_bore_dia, counterbore_bore_depth);
      
    translate([jaw_length/2+in_to_mm(1.25), jaw_width/2,0]) 
      counterbore(counterbore_thru_dia, counterbore_bore_dia, counterbore_bore_depth);
	
	// jaw step
    if(add_jaw_step) 
    {
      jaw_step(jaw_step_height,jaw_step_depth);
    }
	
	// horizontal v-groove
    if(add_v_groove)
    {
      v_groove(v_groove_height, v_groove_top_offset);
    }
    
    if(add_vertical_v)
    {
      color("red") vertical_v(vertical_v_width, vertical_v_depth);
    }
	
	// vertical slots
    if(add_vertical_slots)
    {
      for(i = [0 : vertical_slot_pattern_qty-1])
      {
        vertical_slot(slot_offset+i*slot_spacing,vertical_slot_width,vertical_slot_length,vertical_slot_depth);
      }
    }	
    if(mirror_vertical_slots)
    {
      for(i = [0 : vertical_slot_pattern_qty-1])
      {
        translate([0,-jaw_width-1+vertical_slot_length]) 
          vertical_slot(slot_offset+i*slot_spacing,vertical_slot_width,vertical_slot_length,vertical_slot_depth);
      }
    }
}	


// ***** MODULES AND FUNCTIONS *****

  // creates a counterbore body (must be subtracted from main body)
    module counterbore(thru_dia, bore_dia, bore_depth) 
    {
      union() 
      {
        // thru hole cylinder
        translate([0,0,-1]) 
          cylinder(h=jaw_height+2,d=thru_dia);
        // counterbore cylinder
        translate([0,0,jaw_height-bore_depth]) 
          cylinder(h=bore_depth+1, d=bore_dia);
      }
    }

  // creates a step body (must be subtracted from main body)
    module jaw_step(s_height, s_depth) 
    {
      translate([-1,-1,jaw_height-s_height]) 
        cube([jaw_length+2, s_depth+1, s_height+1]);
    }

  // creates a 90 degree v-groove body (must be subtracted from main body)
    module v_groove(v_height, v_top_offset)
    {
      v_leg = sqrt(pow(v_height,2)/2);
      translate([-1,jaw_width+sqrt(1/2),jaw_height-v_height-v_top_offset-sqrt(1/2)]) 
        rotate([45,0,0]) 
          cube([jaw_length+2, v_leg+1, v_leg+1]);
    }

    module vertical_v(vv_width, vv_depth)
    {
      vv_leg = sqrt((1/2)*pow(vv_width,2));
      translate([jaw_length/2, (-1/2)*vv_width, jaw_height-vv_depth])
        rotate([0,0,45])
          cube([vv_leg, vv_leg, vv_depth+1]);
    }

    module vertical_slot(slot_side_offset, slot_width, slot_length, slot_depth)
    {
      translate([slot_side_offset, jaw_width-slot_length, jaw_height-slot_depth]) 
        cube([slot_width, slot_length+1, slot_depth+1]);
    }

  // inch to millimeter conversion function
    function in_to_mm(inches) = inches * 25.4;                      

Stickvise Logo

Copyright © 2017 Rich Product Design, LLC

How it works | Specs | Hack your vise | About | Blog