Publicar piezas paramétricas con OpenSCAD en Thingiverse

Muchas veces nos habremos encontrado con una pieza que ya se encuentra publicada en Internet y que nos puede ser de utilidad para nuestros diseños. Pero por alguna razón, una ligera modificación la haría más útil y tenemos dos opciones…

O rediseñamos la misma pieza completamente con las especificicaciones que nosotros requerimos, o buscamos un programa que nos permita importar la pieza, añadir otros elementos y ajustar el resultado hasta obtener nuestro diseño modificado para exportarlo de nuevo.

Muchas veces este proceso conlleva una serie de impresiones de prueba y error que si la pieza es pequeña no perderemos mucho tiempo… pero si es muy grande…

Así que si en lugar de crear una pieza fija… creamos una pieza en la que se puedan alterar unos pocos parámetros de interés…

Una de las grandes soluciones de diseño es la definición de piezas mediante el diseño paramétrico, en el cual nosotros definiremos cuales son aquellas variables que permitimos modificar para obtener una nueva pieza que se construye en el momento de definición para descargar con nuestras especificaciones.

 

En el caso de este ejemplo, vamos a crear un soporte LCD, para imprimir una pieza que nos permita definir algunas distancias para establecer la posición de los agujeros para los tornillos.

Este modelo nos servirá para crear un marco de LCD, adaptable para que en caso de tener dos pantallas de 2 o de 4 filas, podamos descargar un mismo modelo pero con estas dos opciones sin necesidad de generar todo un proceso nuevo. Puesto que al tener cuatro filas, la distancia de altura se extiende, y las columnas al parecer tambien son más que el formato de 2 filas.

  • 16×2
  • 20×4

Recordemos que estos modelos suelen venir con una posición definida para los tornillos. Una cosa es la dimensión de la pantalla visible de la LCD y otra la posición de en las que crearemos los agujeros para los tornillos.

Diseño en OpenSCAD

Hemos elegido un diseño alámbrico para ahorrar material en la impresión que consiste en un marco que solamente hará de sujeción, en lugar de crear toda una placa sólida.

Para realizarlo, vamos a usar OpenSCAD, que es un compilador 3D basado en un lenguaje de descripción textual. Hemos elegido este lenguaje para poder publicar nuestras piezas en Thingiverse con una extensión llamada Customizer.

 

Lo primero que vamos a hacer es definir nuestras variables y crear un marco soporte. Para realizar el marco soporte, vamos a usar un contorno redondeado. Es recomendable leerse la documentación de OpenSCAD para saber un poco qué es lo que estamos haciendo.


//LCD Dimensions
$lcd_w = 75;
$lcd_h = 33;
$lcd_s = 4;
$lcd_section = 4;
$radiuscorner = 3;

//Holes for screws distances
$width_holes = $lcd_w;
$height_holes = $lcd_h;
$w_holes = $width_holes/2;
$h_holes = $height_holes/2;

//Holes Dimensions
$hole_h = 20;
$hole_d = 5;
$hole_s = 3;

$fn=60;

module frame(){
   minkowski(){
      difference() {
         cube([$lcd_w, $lcd_h, $lcd_s],center=true);
         cube([$lcd_w-$lcd_section, $lcd_h-$lcd_section, $lcd_s],center=true);
      }
    sphere(r=$radiuscorner,$fn=50);
   }
}

frame();


Lo que hemos hecho ha sido utilizar la funcion de Minkowski para crear ese contorno como redondeado de la pieza sobre una pieza rectangular hueca aplicando la diferencia de dos cubos con las dimensiones determinadas por las dimensiones de las variables.

Ahora vamos a situar 4 encajes que serán 4 cilindros en cada una de sus esquinas. Para ello reutilizamos la pieza anterior y un bucle de vectores de posición para situar los cilindros.
Es muy importante fijarse en que la gran mayoría de las coordenadas dependen exclusivamente de las variables definidas al inicio.

//LCD Dimensions
$lcd_w = 75;
$lcd_h = 33;
$lcd_s = 4;
$lcd_section = 4;
$radiuscorner = 3;

//Holes for screws distances
$width_holes = $lcd_w;
$height_holes = $lcd_h;
$w_holes = $width_holes/2;
$h_holes = $height_holes/2;

//Holes Dimensions
$hole_h = 20;
$hole_d = 5;
$hole_s = 3;

module framePoints(){
   $zero_holes = $hole_h/2-$lcd_s;
   union(){
       for(i = [ [ $w_holes, $h_holes, $zero_holes],
          [ -$w_holes, $h_holes, $zero_holes],
          [$w_holes, -$h_holes, $zero_holes],
          [ -$w_holes, -$h_holes, $zero_holes] ]){
          translate(i)
          cylinder(h = $hole_h, r = $hole_d , center = true);
          frame();
       }
   }
}

module frame(){
   minkowski(){
      difference() {
         cube([$lcd_w, $lcd_h, $lcd_s],center=true);
         cube([$lcd_w-$lcd_section, $lcd_h-$lcd_section, $lcd_s],center=true);
      }
      sphere(r=$radiuscorner,$fn=50);
   }
}
framePoints();

 

Por último, solamente nos quedaría hacer unos agujeros pasantes con las medidas de los tornillos que vamos a utilizar. Pero más importante es hacer una revisión de cuáles serían las medidas de nuestra pantalla si cambiamos una pantalla LCD de 2 filas por una de 4 filas.

 

Las variables en OpenSCAD no se guardan como variables, sino que se construyen en el momento de compilación. Es por ello, que para definir cuales son las distancias para nuestro marco, hemos de incluir una instrucción condicional en la misma asignación de la siguiente forma.

$lcd_rows = 4;

$lcd_w = (($lcd_rows == 2)? 75: 93);   //Si el parametro anterior es 2 asignara el primer valor despues del interrogante, si no, el segundo.

*Cualquier instruccion condicional – if($lcd_rows == 2 ) { $lcd_w = 75 ;  }else{$lcd_w = 93;} no funcionará

//LCD Dimensions
$lcd_rows = 4;

$lcd_w = (($lcd_rows == 2)? 75: 93);
$lcd_h = (($lcd_rows == 2)? 33: 55);
$lcd_s = 4;
$lcd_section = 4;
$radiuscorner = 3;
    
//Holes for screws distances
$width_holes = $lcd_w;
$height_holes = $lcd_h;
$w_holes = $width_holes/2;
$h_holes = $height_holes/2;
$hole_h = 20;

//Holes Dimensions
$hole_d = 5;
$hole_s = 3;

$fn=60;

module frameholes(){
difference(){

    framePoints();

    for(i = [ [  $w_holes, $h_holes, $lcd_section*2],
           [ -$w_holes, $h_holes, $lcd_section*2],
           [$w_holes, -$h_holes, $lcd_section*2],
           [ -$w_holes, -$h_holes, $lcd_section*2] ]){
   translate(i)
   cylinder(h = $hole_h+20, r = $hole_d - $hole_s , center = true );
}
}
}
    
    
module framePoints(){
    $zero_holes = $hole_h/2-$lcd_s;
union(){
    for(i = [ [  $w_holes, $h_holes, $zero_holes],
           [ -$w_holes, $h_holes, $zero_holes],
           [$w_holes, -$h_holes, $zero_holes],
           [ -$w_holes, -$h_holes, $zero_holes] ]){
   translate(i)
   cylinder(h = $hole_h, r = $hole_d , center = true);
    frame();
    }
    }
}


module frame(){
    minkowski(){
        difference() {
            cube([$lcd_w, $lcd_h, $lcd_s],center=true);
            cube([$lcd_w-$lcd_section, $lcd_h-$lcd_section, $lcd_s],center=true);
        }
           sphere(r=$radiuscorner,$fn=20);
    }
}


frameholes();

 

Publicar en Thingiverse

Para publicar en Thingiverse, evidentemente tendremos que crearnos una cuenta y subir nuestro archivo.

Puesto que no es un modelo .stl cualquiera u otro con parámetros fijos, el programa lo reconocerá como un modelo compilado que se puede adaptar en la aplicación Customizer y solo tendremos que habilitar esa extensión.

También conviene leerse las instrucciones de uso de Customizer.

Para que funcione correctamente en Customizer deberemos de especificar las dimensiones que hemos dejado definidas.
En este apartado, se nos permiten variar algunos de los parámetros definidos al inicio para poder extender la pieza en todas sus características.

En este apartado es muy fácil llegar a un error, ya que hay que establecer los comportamientos del menú con la opción separadas por dos rayas diagonales y los corchetes que definen su modo de definición. instrucciones de uso de Customizer.

 

//LCD Rows
$lcd_rows =2; //[2,4]
//LCD Height
$lcd_s = 4; // [2:10]
//LCD Section
$lcd_section = 6; //[2:0.5:10]
//Hole Height
$hole_h = 15; //[10:0.5:50]
//Hole Screw
$hole_s = 3; //[2:0.5:6]

$lcd_w = (($lcd_rows == 2)? 75: 93);
$lcd_h = (($lcd_rows == 2)? 33: 55);

//Holes for screws distances
$width_holes = $lcd_w;
$height_holes = $lcd_h;
$w_holes = $width_holes/2;
$h_holes = $height_holes/2;

//Holes Dimensions
$hole_d = $hole_s+5;

/* [Hidden] */
$fn=60;
$radiuscorner = 3;

En este caso, la variable de las filas, solamente requieren de dos modos, de 2 o de 4 filas. Mientras que el resto se define como un slider de posición o simplemente escribiendo un número.

Y finalmente se puede consultar en la pagina web de Thingiverse. y apretando el botón de Open in Customizer podemos ver nuestro modelo paramétrico en esta plataforma.

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

1 × tres =

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.