Revista 100% Verde

Diseño en 3D de un contenedor para proyectos electrónicos

Por Soloelectronicos @soloelectronico

Para el modelado 3D, Tinkercad debería ayudarnos ante cualquier diseño inicial de una manera más sencilla con el proceso de modelado 3D, tanto es así, que incluso los modeladores experimentados lo hacen explorando las formas de Tinkercad, pues curiosamente, una herramienta "simple" como Tinkercad puede conducir a formas complejas. Lógicamente detrás de Tinkercad y de cualquier otro programa de modelado 3D está el código, de modo que a medida que arrastra y suelta formas, los algoritmos complejos están trabajando para calcular cómo aparecerán los gráficos en la pantalla, asi que también debería ser posible crear figuras geométricas directamente mediante código.

Para aquellos que tienen curiosidad sobre el código, OpenSCAD es una herramienta gratuita de software para explorar el modelado 3d desde esa perspectiva, resultando mucho mas eficiente y concisa en el proceso de diseño que cualquier otra herramienta gráfica como por ejemplo Tinkercad.

A diferencia de Tinkercad, OpenSCAD no es una aplicación basada en la web de modo que si esta interesado en la herramienta tendrá que descargarla ( OpenSCAD se puede descargar gartis en http://www.openscad.org y está disponible para Windows, Mac OS X y Linux) e instalarla en su PC para usarla.

La interfaz OpenSCAD es sencilla en comparación con Tinkercad ,constando de sólo tres ventanas, siendo la ventana de la izquierda un editor de texto utilizado para ingresar el código.

Diseño en 3D de un contenedor para proyectos electrónicos

Con OpenSCAD está diseñando código,pero no se preocupe: escribir código con Open SCAD es similar al uso de HTML en una página web, siendo el código para crear objetos autoexplicativo (por ejemplo, el comando del cubo crea cubos, el comando de esfera crea esferas y el comando del cilindro crea cilindros, etc).

Probablemente haya alrededor de 60 comandos en OpenSCAD, muchos de los cuales permitirán manipular la geometría , como por ejemplo mover, rotar, escalar y usar operaciones booleanas para combinar objetos, pero no se preocupe porque p ara modelar la mayoría de la piezas solo necesitaran unos pocos comandos como son union , difference, translate, cylinder o cube.

Las secuencias de comandos en el lenguaje de OpenSCAD se utilizan para crear modelos en 2D o 3D, veamos a continuacion un ejemplo del diseño de una caja para albergar proyectos electronicos completamente personliazable, para lo cual usaremos el poderoso comando hull () de OpenSCAD y el simple offset () para crear el cuadro de proyecto más fácil de todos.

Es de destacar que conseguiremos esquinas redondeadas fáciles (sin restas complicadas), aunque en términos de concepto, esto puede no ser "fácil", es fácil en el sentido de que es conciso y demuestra algunos conceptos eficientes.

Diseño en 3D de un contenedor para proyectos electrónicos

Conceptos utilizados:

  • Subsistema 2d
    • cuadrado : sqare()
    • compensar: offset()
  • Sistema 3d
    • extrusión_lineal:lineal_extrude ()
    • rotate_extrude: rotate_extrude ()
    • escala: scale()
    • redimensionar : resize()
  • Módulos
  • Comprensión de listas

Empiece con las paredes

Comenzamos haciendo las paredes usando el subsistema 2d. Pero antes de hacer esto, agreguemos algunas variables globales que usaremos a lo largo del tutorial. Añádalos a su ide de OpenSCAD. (Los comentarios son para el personalizador)

BOX_W = 80; // Ancho de caja
BOX_L = 120; // Longitud de la caja
BOX_H = 12; // Altura de la caja
SCREW_SIZE = 3; // Tamaño de tornillo en mm
CORNER_RADIUS = 3; // Radio de las esquinas
WALL_THICKNESS = 2; // Espesor de la pared

Luego agregue un cuadrado () después de las variables usando el Ancho y Largo

sqare ([BOX_W, BOX_L]);

Diseño en 3D de un contenedor para proyectos electrónicos

Redondearemos las esquinas con el comando offset (), colocaremos este offset () antes del cuadrado ().

offset (r = CORNER_RADIUS) sqare ([BOX_W, BOX_L]);

Diseño en 3D de un contenedor para proyectos electrónicos

A continuación, eliminaremos la parte interior, con diferencia () y otro cuadrado (). Restaremos el grosor de la pared para eliminar todo menos la pared.

difference(){
    offset (r = CORNER_RADIUS) sqare ([BOX_W, BOX_L]);
    square ([BOX_W-WALL_THICKNESS, BOX_L-WALL_THICKNESS]);
}

Diseño en 3D de un contenedor para proyectos electrónicos

Hay dos cosas que tendremos que ajustar. Primero, la pared interior no está bien posicionada, así que centremos ambos cuadrados

difference(){
    offset(r=CORNER_RADIUS) square( [BOX_W, BOX_L] );
    square( [BOX_W-WALL_THICKNESS, BOX_L-WALL_THICKNESS] );
}

Diseño en 3D de un contenedor para proyectos electrónicos

Ahora usemos offset () para agregar un radio interno. Para calcular el radio interior restaremos el espesor de la pared del radio de la esquina.

difference(){
    offset(r=CORNER_RADIUS) 
        square( [BOX_W, BOX_L], center=true );
    offset( r= CORNER_RADIUS - WALL_THICKNESS )
        square( [BOX_W-WALL_THICKNESS, BOX_L-WALL_THICKNESS], center=true );
}

Diseño en 3D de un contenedor para proyectos electrónicos

Por último, para la pared, solo necesitamos darle altura. Podemos usar lienar_extrude para dar la altura de la caja. Agregue un linear_extrude () usando BOX_H para el parámetro, en la línea arriba de la diferencia.

linear_extrude( BOX_H )

Diseño en 3D de un contenedor para proyectos electrónicos

Añadiendo la parte inferior.

Queremos un fondo que tenga bordes redondeados. Aquí es donde entra hull () podemos usar hull () con cuatro esferas () para crear un rectángulo con bordes redondeados. Queremos agregar cuatro, usamos la comprensión de listas para no tener interminables traducciones ().

Primero crearemos una lista de coordenadas.

coordinates = [[0,0], [0,120], [80,120], [80,0]];

Luego usaremos la variable de coordenadas en un bucle for para iterar usando un bucle for.

for (i = coordinates)

Cada vez que pasemos por el bucle agregaremos una esfera y la trasladaremos por las coordenadas. Aquí está el código completo para agregar:

coordinates = [ [0,0],[0,BOX_L],[BOX_W,BOX_L],[BOX_W,0] ];
for (i = coordinates)
    translate(i) sphere(CORNER_RADIUS);

Diseño en 3D de un contenedor para proyectos electrónicos

Ahora pongamos todo el objeto en un casco () Observe cómo no necesita agregar corchetes {} ya que el bucle for es el hijo directo del casco (). Como resultado, el casco funciona con los resultados de for ()

coordinates = [ [0,0],[0,BOX_L],[BOX_W,BOX_L],[BOX_W,0] ];
hull()
   for (i = coordinates)
      translate(i) sphere(CORNER_RADIUS);

Diseño en 3D de un contenedor para proyectos electrónicos

Necesitaremos trasladar el casco resultante para que quede debajo de la pared. Agregue una traducción sobre el casco () usando la mitad del ancho de la caja y la mitad de la longitud de la caja. Anotemos también $ fn = 25; en la parte superior de nuestro código para que podamos ver las cosas un poco mejor.

translate ([-BOX_W / 2, -BOX_L / 2])

Diseño en 3D de un contenedor para proyectos electrónicos

Podemos agregar cilindros para tornillos de la misma manera que hicimos las cuatro esferas. Ya tenemos las coordenadas de la parte inferior, así que podemos usarlas. pero necesitamos moverlos en algunos.

for (i = coordinates) translate(i) difference(){ cylinder(h=BOX_H,r=CORNER_RADIUS); cylinder(h=BOX_H,r=CORNER_RADIUS - SCREW_SIZE); }

Usé rend (f6) para que podamos ver los agujeros.

Diseño en 3D de un contenedor para proyectos electrónicos

A continuación, debemos mover las publicaciones para que coincidan con el cuadro. coloque un translate () delante del bucle for (). Esto moverá todo el "conjunto" a su posición.

traslate ([-BOX_W / 2, -BOX_L / 2])

Diseño en 3D de un contenedor para proyectos electrónicos

Eso nos da cilindros, pero están demasiado cerca del borde, podríamos crear un segundo conjunto de coordenadas para el segundo bucle, pero se vuelve bastante complicado. Se vería así:

coordinates = [[0 + 10,0 + 10], [0 + 10, BOX_L = -10], [BOX_W-10, BOX_L-10], [BOX_W-10,0 + 10]];

En su lugar, usemos resize () y scale () para hacer lo mismo.

Primero use un resize () para establecer las cuatro publicaciones en su posición final. Los valores serán el ancho y el largo entre el centro de las publicaciones. Agregue resize () delante del bucle for () para los cilindros. Para empezar, usaremos valores fijos.

resize ([75,110,0])

Diseño en 3D de un contenedor para proyectos electrónicos

Puede notar que las publicaciones se mueven pero se hacen más pequeñas (es un pequeño cambio). Podemos usar la escala para restablecer las publicaciones a su tamaño original. Agregue el comando de escala justo antes de la diferencia para los cilindros.

scale ([BOX_W / 75, BOX_L / 110])

Ahora las publicaciones tienen el tamaño original.

Diseño en 3D de un contenedor para proyectos electrónicos

Aquí hay un antes y un después. Realmente es difícil ver la diferencia, pero está ahí.

Diseño en 3D de un contenedor para proyectos electrónicos
Diseño en 3D de un contenedor para proyectos electrónicos

Creemos una variable y veamos el bloque de código completo. Agregar POST_OFFSET = 10; al principio de su código. Tendremos que restar eso en resize () y scale () del ancho y alto del cuadro, usaremos intermediarios para que sea más fácil de entender. También necesitamos dividir SCREW_SiZE por 2 para que represente un radio, no el diámetro dado. Veamos el código:

POST_OFFSET=10;

... otro código ...

p_w = BOX_W - POST_OFFSET;
p_l = BOX_L - POST_OFFSET;

resize([p_w,p_l,0]) // Mueve las publicaciones desde el borde
    translate([-BOX_W/2,-BOX_L/2,0])
       for (i = coordinates)
           translate(i)
           scale([BOX_W/p_w,BOX_L/p_l])
               difference(){
                 cylinder(h=BOX_H,r=CORNER_RADIUS);
                 cylinder(h=BOX_H,r=SCREW_SIZE/2);
               }POST_OFFSET = 10;



Diseño en 3D de un contenedor para proyectos electrónicos

¡Eso es todo lo que hay! Hay algunas mejoras que podemos hacer, pero esto funcionará bastante bien por ahora. Aquí está el código final completo para jugar. Algunos cambios importantes que necesitaríamos son:

  • Establecer el suelo (inferior) en WALL_THICKNESS
  • Usando un valor o cálculo separado para el cilindro exterior del poste

Pero tendremos que tener una parte dos para eso ya que esta publicación se está alargando.

Super_Project_Box$fn=25; BOX_W = 80; // Box Width BOX_L = 120;// Box Length BOX_H = 12; // Box Height SCREW_SIZE = 1.5; // Screw size radius. CORNER_RADIUS = 3; // Radius of corners WALL_THICKNESS = 2;// Wall Thickness POST_OFFSET=10; linear_extrude( BOX_H ) difference(){ offset(r=CORNER_RADIUS) square( [BOX_W, BOX_L], center=true ); offset( r= CORNER_RADIUS - WALL_THICKNESS ) square( [BOX_W-WALL_THICKNESS, BOX_L-WALL_THICKNESS], center=true ); } coordinates = [ [0,0],[0,BOX_L],[BOX_W,BOX_L],[BOX_W,0] ]; translate ( [-BOX_W/2, -BOX_L/2] ) hull() for (i = coordinates) translate(i) sphere(CORNER_RADIUS); p_w = BOX_W - POST_OFFSET; p_l = BOX_L - POST_OFFSET; resize([p_w,p_l,0]) // Move the posts in from the edge translate([-BOX_W/2,-BOX_L/2,0]) for (i = coordinates) translate(i) scale([BOX_W/p_w,BOX_L/p_l]) difference(){ cylinder(h=BOX_H,r=CORNER_RADIUS); cylinder(h=BOX_H,r=SCREW_SIZE/2); }

Mas información en en http://www.openscad.info


Volver a la Portada de Logo Paperblog