Autor Tema: TUTORIAL PARA LA CREACIÓN DE COMPONENTES ELÉCTRICOS Y ELECTRÓNICOS EN 3D  (Leído 5481 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
 :-/

Este tutorial está basado en una página web que habla de lo mismo
http://felixchenier.homelinux.com/doku.php?id=pcb:eagle3dnewpart

La idea es crear un tutorial en castellano, pero explicando mejor cada línea de código que se requiere para realizar un paquete sencillo en 3D, soy un principiante con el software PovRay, pero inicio este tema para que entre todos lleguemos a crear un buen tutorial y así ampliar la gama de paquetes para el gran software EAGLE3D

A: INTRODUCCIÓN

Yo llamo al software gratuito EAGLE3D un plugin para EAGLE, utilizando un software tercero (PovRay también gratuito) nos sirve para crear un modelo aproximado en 3D de nuestra PCB  y tratar de hacer algunas correcciones de la ubicación de los paquetes, pero hay otros software de pago $  con la ventaja de renderizar en tiempo real  una PCB en 3D como:
  
Altium Designer  http://www.altium.com/products/altium-designer/en/altium-designer_home.cfm
 https://wiki.altium.com/display/ADOH/PCB+3D+Orthographic+Projection
TINA http://www.tina.com/English/tina/
Yenka PCBs  http://www.yenka.com/en/Yenka_PCBs
KIKAD http://www.lis.inpg.fr/realise_au_lis/kicad/
NI Ultiboard http://zone.ni.com/devzone/cda/tut/p/id/4147
http://www.zuken.com/products/cadstar.aspx
Si conocen de otro me escriben

B: CREANDO UNA PCB3D

Se requiere de dos software, EAGLE y
PovRay (trazador de rayos más popular del mundo),
mas el plugin EAGLE3D, un editor de texto, puede ser NOTEPAD++ y otro que utilizo es VISU3D

C: CREANDO UN PAQUETE 3D

Un paquete virtual o en 3D, requiere de dos códigos principales

C.1: Código o macros en PovRay,  este es un archivo con extensión .inc  que se coloca dentro de la carpeta /POVRAY de EAGLE3D el cual contiene un código escrito en lenguaje C. Se hablara con más detalle posteriormente.

C.2: Código para identificar el nombre del paquete, nombre del macro y además para pasar parámetros a los macros, por ejemplo altura de un cristal, altura sobre la pcb, colores del resistor, etc (ver mas información en  6. File Formats http://www.matwei.de/doku.php?id=en:eagle3d:documentation)

Este código es una línea de texto sin espacios excepto los comentarios, los parámetros se separan por dos puntos. esta línea de texto es única para cada nuevo paquete creado y se debe anexar al archivo 3dusrpac.dat de la carpeta ULP de EAGLE3D
Para realizar un paquete 3D, tomando como ejemplo el dispositivo “display de 7 segmentos “ (Device “HD-H103”)  que está en la library “display-hp” de  EAGLE, se debe tener en cuenta primero el nombre del paquete, es este caso  “HDSP-M”

EL código de parámetros vacio es de la siguiente forma:


Código: [Seleccionar]
PackageName:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:MacroPackageName:DEinfo: SPN/ENG/FRinfo

PackageName es  el nombre del paquete de la bibiloteca de EAGLE, para el ejemplo a desarrollar es HDSP-M

MacroPackageName es el nombre del macro del paquete escrito en PovRay

DEinfo es un comentario en alemán del macro o paquete

SPN/ENG/FRinfo  es un comentario en otro idioma, yo escribo acá el nombre de la biblioteca del paquete, de esta manera me sirve para identificar más fácilmente a que biblioteca pertenece el paquete.

Ahora, nuestro primer código es

Código: [Seleccionar]
HDSP-M:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:MacroPackageName:DEinfo:display-hp.lbr
Todos los parámetros están en cero, es decir cuando se está creando el archivo para renderizar EAGLE3D no genera ninguna ventana de petición de datos, o EAGLE3D no incorporará nada automáticamente en el código final

Por ejemplo si se cambia HDSP-R:0:… por HDSP-R:1:... entonces EAGLE3D incorporara el nombre del paquete (segun EAGLE es >NAME) como parámetro inicial del macro.
Si HDSP-R:0:0:... fuera HDSP-R:0:1:... incluiría el valor del paquete (segun EAGLE es >VALUE) como segundo parámetro,  igualmente si el tercer parámetro fuera un 1 HDSP-R:0:0:1:... definiría la banda de colores, para un paquete por ejemplo resistor o condensador de colores.

Como no se desea incluir ningún parámetro , todos estaran en 0

Un  display de 7 segmentos simplememente es una caja rectangular (largo*ancho*alto) con unos pines y una imagen inclinada de un 8 en la parte de arriba

Una caja rectangular se dibuja a partir de dos coordenadas, una en la esquina de la base y otra la esquina opuesta de la tapa, como el centro del paquete tiene coordenadas tridimensionales <x,y,z> en  <0,0,0> entonces la esquina de la base debe desplazarse negativamente y la esquina opuesta de la tapa debe desplazarse positivamente con respecto al centro

PovRay define a Y como la altura del los ejes tridimensionles, y el plano bidimensional X-Z con X igual a las absisas y Z a las ordenadas
ver imagen
http://felixchenier.homelinux.com/lib/exe/detail.php?id=pcb%3Aeagle3dnewpart&media=pcb:eagle_povray.png

Si L es el Largo (base del display), W el Ancho y H Es la altura desde la base y los valores para el display de 7seg. Son  L=12.7 mm, W=19 milimetros, H=8mm

Entonces la coordenada de la base estaría ubicada en <-L/2, 0, -W/2>

-L/2  significa la mitad de la longitud y al lado izquierdo del centro <0,0,0> x=-L/2=-6.35  
-W/2 significa la mitad del ancho y hacia abajo del centro <0,0,0>   z=-W/2=-8.5  
Y=0, por estar en la base, finalmente la coordenada de la base  es <-6.35, 0, -8.5 > que se puede comprobar al editar la librería y mirar las coordenadas de esa esquina con una grilla de 0.3175 mm

La coordenada de la esquina opuesta de la tapa es <+L/2, H, +W/2> o  <+6.35, 0, +8.5 > note el desplazamiento en Y de 8mm
Las sentencias para generar la caja y su color blanco son las siguientes (Nota doble eslas // a la derecha significa comentario)

Código: C
  1.                 box {  // caja1 del componente
  2.                         <  -L/2, 0, -W/2 >,  <  +L/2, H, +W/2 >  
  3.                         pigment { White }
  4.                 } // Fin de la caja1

para no tener que crear un código del 8 inclinado para el display, hay una forma de llamar un grafico ya sea en bmp o png en donde este la imagen del 8 inclinado, el código simplemente es hacer otra caja rectangular sobre la tapa de la anterior y si la definimos con una altura muy pequeña para que se mire como una película delgada (H+0.1)

Las sentencias para generar la piel (skin) de la caja son:

Código: C
  1.                 box { // Piel del componente
  2.                         <  -L/2, H, -W/2 >,  <  +L/2, H+0.1, +W/2 >  
  3.                         pigment {
  4.                                 image_map{"skin_simple_7seg_red_on.png" once}
  5.                                 rotate<90,0,0> scale<12.5,0,17> translate<  -L/2, 0, -W/2 >
  6.                         }
  7.                 } // Fin de la caja2

La imagen también hay que trasladarla para que calce con la tapa de la caja, Todo el código anterior se lo mete dentro de una unión

   union { // Inicio de la union
        ...
   } // Fin de la union


Por favor pegar el siguiente código en un archivo llamado DIODE_LED_SIMPLE_7SEG.INC y colocarlo dentro del directorio de PovRay de EAGLE3D


Código: C
  1. #macro DIODE_LED_7SEG_19x13x8MM() // Inicio del macro con su respectivo nombre
  2.         // Definición de las dimensiones de la caja en milímetros como variables locales
  3.         #local L=12.7;  //Length Largo
  4.         #local W=19;  //width  Ancho
  5.         #local H=8;   //hight  Alto
  6.         union { // Inicio de la union
  7.                 box {  // caja1 del componente
  8.                         <  -L/2, 0, -W/2 >,  <  +L/2, H, +W/2 >  
  9.                         pigment { White }
  10.                 } // Fin de la caja1
  11.                 box { // Piel del componente
  12.                         <  -L/2, H, -W/2 >,  <  +L/2, H+0.1, +W/2 >  
  13.                         pigment {
  14.                                 image_map{"DIODE_LED_7SEG.bmp" once}
  15.                                 rotate<90,0,0> scale<12.5, 0,1 7> translate<  -L/2, 0, -W/2 >
  16.                         }
  17.                 } // Fin de la caja2
  18.         } // Fin de la union
  19. #end  // Fin del macro

//////////////////////////////////////////////////
link para descargar la imagen
http://www.startronics.nl/images/DIODE_LED_7SEG.bmp
esta imagen debe colocarce en la carpeta PovRay de EAGLE3D

Como el nombre del macro anterior es DIODE_LED_7SEG_19x13x8MM entonces lo pegamos en el campo Macro-PovrayName de
HDSP-M:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:Macro-PovrayName:DEinfo:display-hp.lbr

Por favor anexar el siguiente código en el archivo llamado 3dusrpac.dat del directorio de ULP de EAGLE3D
HDSP-M:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0: DIODE_LED_7SEG_19x13x8MM:DEinfo:display-hp.lbr

Y por ultimo anexar en user.inc la línea
#include " DIODE_LED_SIMPLE_7SEG.INC "

Me cuentan como les va con este ejemplo, haciendo un sch con el paquete “HDSP-M”, dispositivo
(Device “HD-H103”)  library “display-hp” de  EAGLE

Próxima entrega, puesta de los pines al display de 7 segmentos

Links importates
Exporting Sketchup Objects to PovRay
http://blog.everythingrobotics.com/tutorials/eagle3d-tutorials/using-google-sketchup-to-create-components/

Imágenes 3D de componentes
http://sketchup.google.com/3dwarehouse/search?tags=Electronics

POV-Ray en castellano
http://www.ignorancia.org/es/index.php?page=Traduccion


« Última modificación: 13 de Agosto de 2009, 09:26:23 por cdrpo »

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
Re: TUTORIAL para la creación de nuevos paquetes en PovRay para EAGLE3D
« Respuesta #1 en: 28 de Marzo de 2009, 20:48:16 »
Ahora colocando pines al paquete

Defino la posición de un pin (editando la biblioteca) y a partir de esta desplazo los demás pines

Código: C
  1.         #local pin= object{ // codigo para crear el pin plata
  2.                                         cylinder {<0,-3,0>,<0,1,0>,0.25 texture{col_silver}}
  3.                                 }
  4.         #local pin1x = -5.08; // Posición x del primer pin
  5.         #local pin1y = 7.62; // Posición y del primer pin

Dentro de unión

Código: C
  1.         // Pines parte de arriba
  2.         object{ pin translate < pin1x,0, pin1y> } // Coloca el primer pin parte superior izquierda     
  3.         object{ pin translate < pin1x+2.54,  0, pin1y> } // Coloca el segundo pin desplazandolo 2.54 milímetros
  4.         object{ pin translate < pin1x+2.54*2, 0, pin1y> } // Coloca el tercer pin desplazandolo 5.08 milímetros       
  5.         object{ pin translate < pin1x+2.54*3, 0, pin1y> } // Coloca el cuarto pin desplazandolo 7.62 milímetros       
  6.         object{ pin translate < pin1x+2.54*4, 0, pin1y> } // Coloca el quinto pin desplazandolo 10.16 milímetros
  7.        
  8.         // Pines parte de abajo
  9.        
  10.         object{ pin translate < pin1x,0, -pin1y> } // Coloca el sexto pin parte inferior izquierda     
  11.         object{ pin translate < pin1x+2.54,  0, -pin1y> } // Coloca el séptimo pin desplazandolo 2.54 milímetros
  12.         object{ pin translate < pin1x+2.54*2, 0, -pin1y> } // Coloca el octavo pin desplazandolo 5.08 milímetros      
  13.         object{ pin translate < pin1x+2.54*3, 0, -pin1y> } // Coloca el noveno pin desplazandolo 7.62 milímetros      
  14.         object{ pin translate < pin1x+2.54*4, 0, -pin1y> } // Coloca el decimo pin desplazandolo 10.16 milímetros


Se puede ver que calzan exactamente rotando la PCB Z=180 GRADOS

Codigo final

Código: C
  1. // This file should be placed in povray directory
  2. #macro DIODE_LED_7SEG_19x13x8MM() // Inicio del macro con su respectivo nombre
  3.         // Definición de las dimensiones de la caja en milímetros como variables locales
  4.         #local L=12.7;  //Length Largo
  5.         #local W=19;  //width  Ancho
  6.         #local H=8;   //hight  Alto
  7.        
  8.         #local pin= object{ // codigo para crear el pin plata
  9.                                         cylinder {<0,-3,0>,<0,1,0>,0.25 texture{col_silver}}
  10.                                 }
  11.         #local pin1x = -5.08; // Posición x del primer pin
  12.         #local pin1y = 7.62; // Posición y del primer pin
  13.        
  14.         union { // Inicio de la union
  15.                 box {  // caja1 del componente
  16.                         <  -L/2, 0, -W/2 >,  <  +L/2, H, +W/2 >  
  17.                         pigment { White }
  18.                 } // Fin de la caja1
  19.                 box { // Piel del componente
  20.                         <  -L/2, H, -W/2 >,  <  +L/2, H+0.1, +W/2 >  
  21.                         pigment {
  22.                                 image_map{"skin_simple_7seg_red_on.png" once}
  23.                                 rotate<90,0,0> scale<12.5,0,17> translate<  -L/2, 0, -W/2 >
  24.                         }
  25.                 } // Fin de la caja2
  26.        
  27.         // Pines parte de arriba
  28.         object{ pin translate < pin1x,0, pin1y> } // Coloca el primer pin parte superior izquierda     
  29.         object{ pin translate < pin1x+2.54,  0, pin1y> } // Coloca el segundo pin desplazandolo 2.54 milímetros
  30.         object{ pin translate < pin1x+2.54*2, 0, pin1y> } // Coloca el tercer pin desplazandolo 5.08 milímetros       
  31.         object{ pin translate < pin1x+2.54*3, 0, pin1y> } // Coloca el cuarto pin desplazandolo 7.62 milímetros       
  32.         object{ pin translate < pin1x+2.54*4, 0, pin1y> } // Coloca el quinto pin desplazandolo 10.16 milímetros
  33.        
  34.         // Pines parte de abajo
  35.        
  36.         object{ pin translate < pin1x,0, -pin1y> } // Coloca el sexto pin parte inferior izquierda     
  37.         object{ pin translate < pin1x+2.54,  0, -pin1y> } // Coloca el séptimo pin desplazandolo 2.54 milímetros
  38.         object{ pin translate < pin1x+2.54*2, 0, -pin1y> } // Coloca el octavo pin desplazandolo 5.08 milímetros      
  39.         object{ pin translate < pin1x+2.54*3, 0, -pin1y> } // Coloca el noveno pin desplazandolo 7.62 milímetros      
  40.         object{ pin translate < pin1x+2.54*4, 0, -pin1y> } // Coloca el decimo pin desplazandolo 10.16 milímetros
  41.        
  42.        
  43.         } // Fin de la union
  44. #end  // Fin del macro

Si se cambia el color de la primer caja que es blanco por uno transparente podemos apreciar interamente los pines sin rotar la PCB

Código: C
  1. pigment{ White }

por

Código: C
  1. pigment { color rgbf<0.90, 0.90, 0.50, 0.999> }

« Última modificación: 13 de Agosto de 2009, 09:30:53 por cdrpo »

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
Re: TUTORIAL para la creación de nuevos paquetes en PovRay para EAGLE3D
« Respuesta #2 en: 29 de Marzo de 2009, 00:38:09 »
Ahora si tienen a la mano un display real, notaran que tiene cuatro patillas de soporte, es decir la caja rectangular no toca la PCB, solo los cuatro patillas

Se define una pequeña cajita rectangular de 2.5 mm de largo por2.5mm de ancho por 1 mm de alto, su código es

Código: C
  1.         #local soporte= object{
  2.                                                 box {
  3.                                                         <0, 0, 0>, <2.5, 1, 2.5>
  4.                                                         pigment{ White }
  5.                                                 }
  6.                                         }

Igualmente que la puesta de los pines, las cajitas de soporte tienen un código similar
Código: C
  1.         object{ soporte rotate<0,90,0> translate<  -L/2, 0, +W/2 > } // esquina arriba izquierda
  2.         object{ soporte rotate<0,180,0> translate<  +L/2, 0, +W/2 > } // esquina arriba derecha
  3.         object{ soporte rotate<0,270,0> translate<  +L/2, 0, -W/2 > } // esquina abajo derecha
  4.         object{ soporte rotate<0,0,0> translate<  -L/2, 0, -W/2 > } // esquina abajo izquierda

pero deben rotarse dependiendo de la esquina, de lo contrario quedan por fuera de los vértices
y para que la caja caja grande no quede pegada a la PCB, la elevamos 1mm en el eje Y, asi:

Código: C
  1.    union { // Inicio de la union
  2.                 box {  // caja1 del componente
  3.                         <  -L/2, 1, -W/2 >,  <  +L/2, H, +W/2 >

Codigo definitivo

Código: C
  1. // This file should be placed in povray directory
  2. #macro DIODE_LED_7SEG_19x13x8MM() // Inicio del macro con su respectivo nombre
  3.         // Definición de las dimensiones de la caja en milímetros como variables locales
  4.         #local L=12.7;  //Length Largo
  5.         #local W=19;  //width  Ancho
  6.         #local H=8;   //hight  Alto
  7.    
  8.         #local pin= object{ // codigo para crear el pin plata
  9.                cylinder {<0,-3,0>,<0,1,0>,0.25 texture{col_silver}}
  10.             }
  11.         #local pin1x = -5.08; // Posición x del primer pin
  12.         #local pin1y = 7.62; // Posición y del primer pin
  13.  
  14.         #local soporte= object{
  15.                                                 box {
  16.                                                         <0, 0, 0>, <2.5, 1, 2.5>
  17.                                                         pigment{ White }
  18.                                                 }
  19.                                         }
  20.  
  21.    union { // Inicio de la union
  22.                 box {  // caja1 del componente
  23.                         <  -L/2, 1, -W/2 >,  <  +L/2, H, +W/2 >
  24.                         pigment { color rgbf<0.90, 0.90, 0.50, 0.999> }
  25.                 } // Fin de la caja1
  26.                 box { // Piel del componente
  27.                         <  -L/2, H, -W/2 >,  <  +L/2, H+0.1, +W/2 >
  28.                         pigment {
  29.                                 image_map{"DIODE_LED_7SEG.bmp" once}
  30.                                 rotate<90,0,0> scale<12.5,0,17> translate<  -L/2, 0, -W/2 >
  31.                         }
  32.                 } // Fin de la caja2
  33.  
  34.    // Pines parte de arriba
  35.    object{ pin translate < pin1x,0, pin1y> } // Coloca el primer pin parte superior izquierda  
  36.    object{ pin translate < pin1x+2.54,  0, pin1y> } // Coloca el segundo pin desplazandolo 2.54 milímetros
  37.    object{ pin translate < pin1x+2.54*2, 0, pin1y> } // Coloca el tercer pin desplazandolo 5.08 milímetros  
  38.    object{ pin translate < pin1x+2.54*3, 0, pin1y> } // Coloca el cuarto pin desplazandolo 7.62 milímetros  
  39.    object{ pin translate < pin1x+2.54*4, 0, pin1y> } // Coloca el quinto pin desplazandolo 10.16 milímetros
  40.    
  41.    // Pines parte de abajo  
  42.    
  43.    object{ pin translate < pin1x,0, -pin1y> } // Coloca el sexto pin parte inferior izquierda  
  44.    object{ pin translate < pin1x+2.54,  0, -pin1y> } // Coloca el séptimo pin desplazandolo 2.54 milímetros
  45.    object{ pin translate < pin1x+2.54*2, 0, -pin1y> } // Coloca el octavo pin desplazandolo 5.08 milímetros  
  46.    object{ pin translate < pin1x+2.54*3, 0, -pin1y> } // Coloca el noveno pin desplazandolo 7.62 milímetros  
  47.    object{ pin translate < pin1x+2.54*4, 0, -pin1y> } // Coloca el decimo pin desplazandolo 10.16 milímetros
  48.    
  49. // Patillas de soporte
  50.  
  51.         object{ soporte rotate<0,90,0> translate<  -L/2, 0, +W/2 > } // esquina arriba izquierda
  52.         object{ soporte rotate<0,180,0> translate<  +L/2, 0, +W/2 > } // esquina arriba derecha
  53.         object{ soporte rotate<0,270,0> translate<  +L/2, 0, -W/2 > } // esquina abajo derecha
  54.         object{ soporte rotate<0,0,0> translate<  -L/2, 0, -W/2 > } // esquina abajo izquierda
  55.  
  56.    
  57.    } // Fin de la union
  58. #end  // Fin del macro
  59.  
mas info

http://perso.numericable.fr/pboucheny/eagle3d/povobjets.htm

Buscador en 3d
http://www.ifree3d.com/
« Última modificación: 13 de Agosto de 2009, 09:32:55 por cdrpo »

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
« Última modificación: 13 de Agosto de 2009, 09:31:34 por cdrpo »

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: TUTORIAL PARA LA CREACIÓN DE COMPONENTES ELÉCTRICOS Y ELECTRÓNICOS EN 3D
« Respuesta #4 en: 31 de Mayo de 2009, 12:03:12 »
una pregunta algo truncada, no puedo simplemente exportar las placas de eagle para que me genere el 3d??