IMG 2206

 

Debido a la creciente industria de la impresión 3d nos hemos dado cuenta que un escáner 3D puede ser muy útil para complementar las diferentes utilidades que hacen de esta industria una de las protagonista de este tiempo, debido al alto costo que representan actualmente estos dispositivos, hemos decidido desarrollar nuestro propio escaner de bajo costo y queremos compartirlo con ustedes.

 

 Lista de componentes principales:

1 Arduino ( Arduino Uno hacia arriba)
1 Motor de pasos ( ojala bipolar)
1 LM 298N
1 Protoboard
1 Camara web
1 Laser (puede ser de bajo costo como los que venden en las papelerias)
1 Mesa rotaria para ajustar al motor.
9 diodos 1n4007 puede ser
1 LM 317
1 LM7805
Resistencias de muchos valores.
Soportes para la camara y laser ( ya depende de ustedes)
1 Barra de acrilico
1 caja de carton
Cartulina Negra
1 fuente de voltaje o bateria de 12 V (para el motor)
1 adaptador 9V(para el laser,)
 
Se puede utilizar una fuente de voltaje para el laser y el motor, en nuestro caso no contabamos con una de suficiente capacidad.
 

En nuestro caso compramos un laser de papeleria , le hicimos un puente para deshabilitar el boton y lo unimos con la barra de acrilico, ahora si pueden comprar un laser como estos que ya tiene la linea incluida pueden conseguirlo online.

 

laser

 

Aqui les dejamos el montaje que hicimos Para que se hagan una idea

 

IMG 2206 1

 

Montaje del motor
 
Para el montaje del motor deben seguir el siguiente esquema
 
Esquema1
 

Les recomendamos que la tension TTL la saquen del LM7805 y no del Arduino( Si tienen dudas acerca del montaje para la tension TTL pueden dejar un comentario).

Montaje del láser

lm317

para hacer funcionar el laser es conveniente revisar el voltaje de operación, en nuestro caso el laser indicaba un voltaje entre 3 y 5 V por lo tanto realizamos una configuracion con un LM317 para pasar de (12V o 9V) a 3.3V dependiendo del rango de su laser.( si tienen dudas acerca de este montaje pueden dejar un comentario)

EL laser lo ubicamos con las pinzas de un ayudante soldador como el de la figura

ayudante

Esta herramienta es de gran ayuda ya que permite diferentes ángulos del láser.

La barra de acrílico se usa para generar una línea láser.

Triangular warning sign

Tener mucho cuidado con los ojos a la hora de experimentar con laseres, de preferencia usar laser color rojo, de potencia moderada.

Montaje General

Para el montaje general se deben tener en cuenta las siguientes variables:

1.Angulo de la Camara (Theta)

2.Distancia de la Camara a la mesa (x)

3.Distancia entre la Camara y el laser.(y)

montaje gen

La distancia x se fija de acuerdo al tamaño que ustedes quieran para el objeto que se vaya escanear.

El Angulo Theta debe ser normalmente de 20 a 25 grados para nuestras pruebas, hay sitios que lo sugieren como 15 grados.

Finalmente deducimos la distancia y con una expresion trigonométrica:

y=x*Tan(Theta)

Concepto principal

Para escribir nuestro software tuvimos que tener en cuenta la transformación de coordenadas cilindricas a cartesianas por medio de las siguientes expresiones.
em3

X=r*cos(fi)

Y=r*sin(fi)

Z=z

esto nos indica que debemos expresar cada pixel del laser detectado en funcion de coordenadas (r,fi,z) para poderlas ubicar en el plano XYZ cartesiano.

Procesamiento de Imagen

Para el procesamiento de la imagen del escaner debemos tener en cuenta el color del laser que vamos a usar, en este caso rojo, al ser laser rojo debemos descomponer nuestra imagen en sus respectivos canales (R,G,B) y posteriormente seleccionar la componente R ya que esta realzara mas el laser.

Posteriormente binarizaremos la imagen por medio del algoritmo de otsu para convertirla en una imagen compuesta de blancos y negros, donde lo blanco debe ser el laser, el resto de pixeles deben ser negros (imagen inferior)

frame

Les recordamos que este scanner funciona solo en un zona oscura, por eso usamos una caja y cartulina oscura para el montaje

detectlaser

En la imagen superior vemos como dispusimos el objeto de tal manera que que laser estuviera a la derecha  de la mitad de la imagen , esta distancia b esta definida por el angulo que hay entre la camara y el laser (Theta), ahora por cada frame de nuestro video debemos obtener 480 variables b para así lograr la transformación adecuada de coordenadas obtenenido el respectivo  r (nuestra camara es de 640x480).

 

El angulo fi de nuestras coordenadas va a depender de el número de frames que tenemos en nuestro video de la siguiente manera:

Si tenemos un video de 200 frames el frame 1 debe corresponder a 0 radianes y el frame 200 debe corresponder a 2pi radianes.

Arduino

Para el movimiento de nuestro motor utilizamos la libreria stepper de Arduino, y nos basamos en el ejemplo de la figura siguiente:

Arduino

El único cambio que hicimos fue modificar el delay a 200 ms para que el objeto diera una vuelta en 40s (es decir un paso cada 200ms)

Recordamos que nuestro motor es de 200 pasos con 1.8 grados por paso.

Nota: No olviden quitar la compensación por poca luz en el software de la cámara que tengan, esto ayudará bastante en la detección del láser

Software

Diseñamos un sencillo programa en matlab que permite la carga del video una vez este haya sido tomado, una vez cargado podemos variar el umbral de binarizacion para eliminar cierto ruido no deseado y finalmente procesamos el video para obtener nuestra imagen en 3D, cabe destacar que el software genera un archivo .mat con las coordenadas del objeto para que puedan ser procesadas por la funcion surf2stl y así tener un archivo de extension STL que posteriormente repararemos con meshlab o cualquier otro software de ese tipo.

Aquí les dejamos el enlace para descargar la funcion surf2stl http://www.mathworks.com/matlabcentral/fileexchange/4512-surf2stl

ide
oveja1
IMG 2207

Meshlab

Meshlab es un excelente software decódigo  abierto para editar y reparar modelos en 3d 
mlab

Una vez procesado el modelo por medio de nuestro software y la funcion surf2stl lo cargamos en meshlab y procesdemos a repararlo, meshlab es un programa muy extenso y con gran variedad de funciones, en la red hay gran variedad de tutoriales acerca de el, en nuestro caso usamos las siguientes opciones en la pestaña FILTERS. ( tomado de http://www.instructables.com/id/Lets-cook-3D-scanner-based-on-Arduino-and-Proces/?ALLSTEPS)

  1. Filters => Remeshing... => Surface reconstruction: Poisson; attributes 10, 8, 1, 1 
  2. Filters => Normals... => Invert face orientation
  3. Filters => Smoothing... => Taubin Smooth

Ustedes pueden probar con mas opciones si lo desean 

Nuestro resultado final fue el siguiente:

meshlab

Si quieren descargar nuestro software pueden hacer click Aqui

Bueno esperamos que les haya servido,  no duden en preguntarnos cualquier duda, si necesitan videos de ejemplo para el software solo escribanos por medio de los comentarios, Saludos